2021-11-06 00:00:19 +0100 | <joel135> | wait, how does Fix take two arguments? |
2021-11-06 00:00:58 +0100 | <ski> | imagine a `Fix :: ((* -> *) -> (* -> *)) -> (* -> *)' |
2021-11-06 00:01:10 +0100 | <joel135> | ok |
2021-11-06 00:01:16 +0100 | son0p | (~ff@181.136.122.143) |
2021-11-06 00:01:26 +0100 | <ski> | (or `forall k. (k -> k) -> k', although that seems harder to define) |
2021-11-06 00:01:35 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds) |
2021-11-06 00:01:39 +0100 | <joel135> | yes |
2021-11-06 00:02:53 +0100 | <joel135> | are you saying that exponentiation requires you to use two precisely two levels of ContT? |
2021-11-06 00:02:58 +0100 | <ski> | idea being that you can take limit of `o',`o -> o',`(o -> o) -> (o -> o)',`((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o))',&c. .. or, in my case, rather allow the user to pick the depth, at run-time |
2021-11-06 00:03:25 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-11-06 00:03:27 +0100 | MoC | (~moc@user/moc) (Quit: Konversation terminated!) |
2021-11-06 00:03:48 +0100 | brainfreeze | (~brainfree@2a03:1b20:4:f011::20d) |
2021-11-06 00:04:35 +0100 | <ski> | no, i was saying that `exp :: Church o -> Church o -> Church o' where `type Church o = (o -> o) -> (o -> o)' doesn't work, you need `exp :: (forall o. Church o) -> (forall o. Church o) -> (forall o. Church o)' |
2021-11-06 00:05:23 +0100 | <ski> | (i guess, allowing the user to pick the depth is like having a stream of progressively deeper nestings) |
2021-11-06 00:06:16 +0100 | <joel135> | this limit of o',`o -> o',`(o -> o) -> (o -> o)',`((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o))',&c reminds me of stuff i recently learned about untyped lambda calculus |
2021-11-06 00:06:40 +0100 | <ski> | anyway, using a third level to represent polynomials sounds interesting. i'd have to investigate that, and how that could align with what i've been pondering here |
2021-11-06 00:06:47 +0100 | dolio | (~dolio@130.44.130.54) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-11-06 00:06:48 +0100 | <ski> | yes ? |
2021-11-06 00:08:04 +0100 | <ski> | `TPoly' is dual numbers over `Poly' ? |
2021-11-06 00:08:18 +0100 | <joel135> | yes |
2021-11-06 00:09:14 +0100 | <joel135> | i believe this T : Type -> Type in general, but not sure how to construct it for other types |
2021-11-06 00:10:11 +0100 | <joel135> | it constructs the tangent bundle of a type, and it is supposed to "know" somehow that Poly is a smooth thing |
2021-11-06 00:10:19 +0100 | <ski> | joel135 : it might be interesting to spell out the type applications in your code, to see where you just pass on the same `s', and where you pass on something different |
2021-11-06 00:10:41 +0100 | <ski> | (if you do) |
2021-11-06 00:11:38 +0100 | dsrt^ | (~dsrt@h50.174.139.63.static.ip.windstream.net) |
2021-11-06 00:13:11 +0100 | <joel135> | i *think* the only lines are 64 and 85 |
2021-11-06 00:13:25 +0100 | <joel135> | but i may be wrong about this after line 85 |
2021-11-06 00:14:02 +0100 | <ski> | well, line 64 is `s = Coeffs', i'd guess, yes ? |
2021-11-06 00:14:12 +0100 | <joel135> | yes |
2021-11-06 00:14:29 +0100 | <joel135> | and later it is s = TPoly |
2021-11-06 00:14:40 +0100 | <ski> | and line 85 is `s = (Poly,Poly)', i think ? |
2021-11-06 00:14:45 +0100 | <joel135> | yes |
2021-11-06 00:14:47 +0100 | <ski> | yea |
2021-11-06 00:14:57 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2021-11-06 00:15:30 +0100 | <ski> | i wonder if you could reduce that to `s1 = ..s0..', if you start by "opening up" the `Poly' that you're attempting to produce, calling its parameter `s0' |
2021-11-06 00:16:16 +0100 | <ski> | (i did such reductions for addition, multiplication, exponentiation, starting with an impredicative thing, and ending up with an equivalent predicative thing) |
2021-11-06 00:17:29 +0100 | <joel135> | ok i will try to rewrite it in terms of a single type variable like s and see if it works out |
2021-11-06 00:17:46 +0100 | <joel135> | by the way, when you did the logic programming stuff, what was the target language? did you compile it to actual machine code? |
2021-11-06 00:18:17 +0100 | alzgh | (~alzgh@user/alzgh) (Remote host closed the connection) |
2021-11-06 00:18:41 +0100 | <joel135> | (assuming my question makes sense) |
2021-11-06 00:19:35 +0100 | <ski> | it was just a Haskell combinator library |
2021-11-06 00:19:45 +0100 | <joel135> | ok |
2021-11-06 00:19:56 +0100 | <ski> | (partially inspired by a paper by Seres and Spivey, and a later one by Koen Claessen) |
2021-11-06 00:20:22 +0100 | <ski> | it would be interesting to ponder how one'd do it, in terms of something WAM-like, say |
2021-11-06 00:20:36 +0100 | alzgh | (~alzgh@user/alzgh) |
2021-11-06 00:20:55 +0100 | <ski> | (iow, consider ways to improve the resource management, rather than just deferring to GC for everything) |
2021-11-06 00:20:57 +0100 | <joel135> | also by the way, this limit of `o',`o -> o',`(o -> o) -> (o -> o)',`((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o))',&c reminds me of the colimit of ΩⁿΣⁿX which is called "stabilization" or something like that |
2021-11-06 00:21:25 +0100 | <joel135> | (https://ncatlab.org/nlab/show/spectrum) |
2021-11-06 00:22:08 +0100 | <joel135> | i looked a bit a barendregt's book on lambda calculus and there are some parallels i think, but i haven't thought it through fully |
2021-11-06 00:22:15 +0100 | <joel135> | at* |
2021-11-06 00:23:08 +0100 | <ski> | you know how you can define an implication `( Antecedent => Consequent )' (commonly spelled `forall(Antecedent,Consquent)' in implementations) in Prolog as `\+ ( Antecedent,\+ Consequent )', yes ? (where (\+)/1 is the usual negation-as-failure (imperfect, sometimes unsound) approximation to a sound logical negation) |
2021-11-06 00:23:51 +0100 | <joel135> | WAM = https://en.wikipedia.org/wiki/Warren_Abstract_Machine ? |
2021-11-06 00:24:00 +0100 | <ski> | operationally, what happens is that you'll enumerate all solutions of `Antecedent', and then check that `Consequent' holds for that solution. the enumeration is aborted if `Consequent' fails |
2021-11-06 00:24:04 +0100 | <ski> | yea |
2021-11-06 00:24:08 +0100 | <joel135> | ok |
2021-11-06 00:24:21 +0100 | qwedfg | (~qwedfg@user/qwedfg) (Remote host closed the connection) |
2021-11-06 00:24:57 +0100 | <joel135> | i don't have much practical experience with prolog so i have to read what you just wrote slowly |
2021-11-06 00:25:11 +0100 | <ski> | if you have variables which occur (only) in `Antecedent' and `Consequent', then they behave as if they were universally quantified over the implication (hence the name forall/2). (because they behave as existentially quantified just inside the outer negation) |
2021-11-06 00:25:38 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2021-11-06 00:26:01 +0100 | <ski> | now, the problem with this is that you can't use this to export information (other than success/failure) (unless you use side-effects, mutation that survives backtracking ..) |
2021-11-06 00:26:06 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2021-11-06 00:26:58 +0100 | <ski> | so, it's great to check that every solution of `Antecedent' actually satisfies `Consequent' .. but if `Antecedent' is e.g. enumerating elements of some kind of collection, you unfortunately can't use this to let `Consequent' instantiate those elements |
2021-11-06 00:27:18 +0100 | qwedfg | (~qwedfg@user/qwedfg) |
2021-11-06 00:27:43 +0100 | <joel135> | i don't know what you mean by instantiate |
2021-11-06 00:27:55 +0100 | dolio | (~dolio@130.44.130.54) |
2021-11-06 00:28:46 +0100 | <ski> | give a definite value |
2021-11-06 00:29:32 +0100 | <ski> | in Haskell, as soon as you introduce a binder for a variable, it will, at run-time, be asssociated with a value (or rather, with a computation that will eventually produce a value) |
2021-11-06 00:29:35 +0100 | <joel135> | do you mean that if the implication fails one would like this to give a definite value to the variables that are universally quantified over? |
2021-11-06 00:30:20 +0100 | <ski> | in logic programming, these two steps are decoupled from each other. you introduce a variable with the existential (or universal) quantifier. then (possibly much) later, you can associate a value with it |
2021-11-06 00:32:01 +0100 | <ski> | not the universally quantified variables (which are local, so private), but other (free/nonlocal) variables which are put in some relation (usually using equality) with those universally quantified variables, inside of `Consequent' |
2021-11-06 00:33:11 +0100 | <joel135> | ok, then i seem to see sort of what you are talking about |
2021-11-06 00:33:47 +0100 | <ski> | take `append(Xs,Ys,Zs)', which expresses what one would state as `zs = xs ++ ys' in Haskell |
2021-11-06 00:34:01 +0100 | <joel135> | ok |
2021-11-06 00:34:26 +0100 | <ski> | predicates/relations in logic programming have no predetermined input vs. output status of parameters. sometimes a parameter is input, sometimes it's output |
2021-11-06 00:34:54 +0100 | <joel135> | right, as = is undirected |
2021-11-06 00:35:22 +0100 | <ski> | if you call `append([0,1,2],[3,4],L)', the system will instantiate `L', having the query/goal succeed, and the answer `L = [0,1,2,3,4]' is reported |
2021-11-06 00:36:02 +0100 | <ski> | each call will either succeed or fail. it can succeed many times (with possibly different solutions/answers). and then it fails at the end, meaning "no (more) solutions" |
2021-11-06 00:37:05 +0100 | <joel135> | sort of like the list monad? |
2021-11-06 00:38:10 +0100 | <ski> | in a conjunction, you start by calling the first conjunct. if it succeeds, you proceed to the next one. if a conjunct fails, backtracking starts, and you "execute backwards", going back to the previous conjunct (undoing any instantiations to variables that were done in the meantime), asking it to produce an alternative solution, if it can. if it does, then that conjuct succeeds, and normal left-to-right |
2021-11-06 00:38:16 +0100 | <ski> | execution proceeds. otherwise, backtracking continues to the left |
2021-11-06 00:38:17 +0100 | <ski> | yes |
2021-11-06 00:38:23 +0100 | <syd> | just going off the last few messages of the exchange, but you may find this paper interesting: https://rkrishnan.org/files/wadler-1985.pdf |
2021-11-06 00:38:52 +0100 | <joel135> | syd: wadler has some good titles :) |
2021-11-06 00:39:06 +0100 | <ski> | so, `generate(X),test(X)' is a common basic paradigm of looping. generate/1 generates candidate solutions, and test/1 checks them. so, it'll go ping-pong until some candidate passes |
2021-11-06 00:39:37 +0100 | <ski> | syd : read it, years ago :) |
2021-11-06 00:40:00 +0100 | <syd> | joel135: makes them easy to find again too, there's always a couple of idiosyncratic word choices that are guaranteed to be the top google result ;p |
2021-11-06 00:41:09 +0100 | <ski> | anyway, `append([0,1,2],[3,4],[0,1,2,3,4])' and `append([0,1,2],[3,4],[0,1,5,3,4])' are calls that will simply either succeed or fail, not binding any variables (since there are none in the calls), so not providing/exporting any information apart from the success/failure status |
2021-11-06 00:42:10 +0100 | <ski> | while `append(Front,Back,[0,1,2])' will enumerate four solutions. first `Front = [],Back = [0,1,2]', then, when you ask for more (by forcing backtracking), you'll get `Front = [1],Back = [1,2]',&c. |
2021-11-06 00:42:26 +0100 | vysn | (~vysn@user/vysn) (Ping timeout: 260 seconds) |
2021-11-06 00:42:31 +0100 | <ski> | similarly, `member(X,[0,1,2])' will enumerate solutions `X = 0',`X = 1',`X = 2' |
2021-11-06 00:43:07 +0100 | <joel135> | i have a strange question |
2021-11-06 00:43:25 +0100 | <ski> | yes ? |
2021-11-06 00:44:23 +0100 | <joel135> | if you ask `member(X,[0,1,2])' for the next solution after it has produced `X = 2', should this cause some sort of "backtracking to outside of the logical programming process"? |
2021-11-06 00:44:58 +0100 | <joel135> | assuming `member(...)' is the first instruction of the program |
2021-11-06 00:45:37 +0100 | <ski> | syd : "How to add laziness to a strict language, without even being odd" by Philip Wadler,Walid Taha,David MacQueen in 1998-09 at <https://homepages.inf.ed.ac.uk/wadler/topics/language-design.html#lazyinstrict> is another nice title :) |
2021-11-06 00:46:07 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 00:46:27 +0100 | <joel135> | i think you would need to have a logic programming language within another logic programming language in order for my question to make sense |
2021-11-06 00:46:35 +0100 | <ski> | joel135 : well, when you're testing / fooling around with Prolog programs, you usually work in the interactor / rppl (read-prove-print-loop), prompt being `?-' |
2021-11-06 00:47:10 +0100 | <ski> | so, `?- member(X,[0,1,2]).', after `X = 2', failure would cause execution to "hit the left margin", and so the whole query fails |
2021-11-06 00:47:19 +0100 | <syd> | again, sorry for butting in, but have you tried miniKanren ski? |
2021-11-06 00:47:32 +0100 | <syd> | untyped (the racket impl. at least) but lots of fun. |
2021-11-06 00:48:06 +0100 | <ski> | (so, in terms of delimited continuation barriers, if you want to think of it like that, each query is delimited from other queries. as soon as a query is finished, you won't later attempt to backtrack it) |
2021-11-06 00:48:17 +0100 | <joel135> | i think i have a very old miniKanren bookmark on youtube that i never followed up |
2021-11-06 00:48:26 +0100 | <ski> | syd : i've heard nice things about it, but i've yet to dive into what it offers |
2021-11-06 00:49:22 +0100 | <ski> | anyway, consider `( member(X,Xs) => between(1,6,X) )' .. `between(1,6,X)' is like `x <- [1 .. 6]'. so, this can be used to check that every element of `Xs' is in the requisite range |
2021-11-06 00:50:11 +0100 | <joel135> | ok |
2021-11-06 00:50:17 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2021-11-06 00:50:28 +0100 | uiltondutra | (~uiltondut@45.183.251.42) |
2021-11-06 00:50:34 +0100 | <ski> | however, i'd like for this query/goal to also work, even if the elements of `Xs' aren't known/initialized/instantiated yet (but they length would have to be known, or else we're in more trouble, having infinite number of solutions .. and traversal order starts to matter, for completeness. Prolog uses depth-first) |
2021-11-06 00:50:55 +0100 | <ski> | iow, then it ought to enumerate all possible selections of the elements from the range (with replacement) |
2021-11-06 00:51:31 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Remote host closed the connection) |
2021-11-06 00:51:55 +0100 | <ski> | the usual encoding (which has some uses, for sure) of implication, in terms of negation(-as-failure) can't do this, because it can't export information from a query, apart from answering yes/no |
2021-11-06 00:52:12 +0100 | <ski> | but, this is exactly what my prototype managed to do :) |
2021-11-06 00:52:23 +0100 | <joel135> | hmm, let me think about that for a moment |
2021-11-06 00:53:19 +0100 | uiltondutra | (~uiltondut@45.183.251.42) () |
2021-11-06 00:53:26 +0100 | <joel135> | is this related to what you wrote above? >>> also an interesting "duality" of sorts between logic variables and skolems/atoms emerged |
2021-11-06 00:53:40 +0100 | <ski> | yes |
2021-11-06 00:54:39 +0100 | faultline | (~christian@nat-eduroam-01.scc.kit.edu) |
2021-11-06 00:54:47 +0100 | <syd> | Can't Constraint Handling Rules help with that kind of thing? miniKanren doesn't have range constraints, but it does have (=/=) and asbent(o). |
2021-11-06 00:55:02 +0100 | <ski> | you can define `false' as `\succeed fail -> fail', and `true' as `\succeed fail -> succeed fail'. the first fails immediately. the second succeeds, but if later code attempts to redo it (asking for another solution), it fails |
2021-11-06 00:55:35 +0100 | faultline | (~christian@nat-eduroam-01.scc.kit.edu) (Remote host closed the connection) |
2021-11-06 00:56:25 +0100 | <ski> | disjunction `g0 \/ g1' is `\succeed fail -> g0 succeed (g1 succeed fail)', and conjunction `g0 /\ g1' is `\succeed fail0 -> g0 (\fail1 -> g1 gail1 succeed) fail0' |
2021-11-06 00:56:42 +0100 | <ski> | here, a goal is construed as having type `(o -> o) -> (o -> o)' |
2021-11-06 00:56:52 +0100 | faultline | (~christian@nat-eduroam-01.scc.kit.edu) |
2021-11-06 00:57:23 +0100 | <ski> | (if you implement this in a strict language, you'll have to sprinkle some `() ->'s in there, to delay stuff appropriately) |
2021-11-06 00:57:48 +0100 | <ski> | syd : CHR helping with what ? |
2021-11-06 00:58:32 +0100 | <syd> | the length of xs elements having to be known, even if it isn't instantiated yet |
2021-11-06 00:58:41 +0100 | <ski> | CHR is a paradigm of forward-chaining (reasoning forwards from assumptions/facts/axioms), embedded in Prolog (which is natively backward-chaining, reasoning backwards from the goal) |
2021-11-06 00:58:55 +0100 | <joel135> | succeed : o -> o ? |
2021-11-06 00:59:00 +0100 | <ski> | yes |
2021-11-06 00:59:49 +0100 | <ski> | (if you like, you could eta-expand my definition of disjunction and conjunction above a bit, specifically eta-expand `succeed' in the body .. but i figured i'd avoid some clutter) |
2021-11-06 00:59:59 +0100 | <syd> | perhaps I'm erroneously assuming CHR is related to miniKanren constraints, but you can have side conditions like the query variable being x succeeding, such that it is not equal to some other value, or it is absent from another query variable which is a list etc. |
2021-11-06 01:00:12 +0100 | <ski> | (oh, and as i said, disjunction is addition, and conjunction is multiplication) |
2021-11-06 01:00:40 +0100 | <syd> | anyway I'll stop chiming in, it's rude to interrupt. |
2021-11-06 01:00:49 +0100 | <ski> | no, no worry ! |
2021-11-06 01:01:13 +0100 | <joel135> | no problem from my side either! |
2021-11-06 01:01:38 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
2021-11-06 01:01:48 +0100 | <syd> | appreciate it :) |
2021-11-06 01:01:53 +0100 | <joel135> | i see that _\/_ is like addition of Church numerals, i am not seeing that _/\_ is multiplication |
2021-11-06 01:02:26 +0100 | <joel135> | oh sorry there was a linewrap that i missed. let me retry reading it |
2021-11-06 01:03:27 +0100 | <ski> | syd : anyway, possibly "the length of xs elements having to be known, even if it isn't instantiated yet" was a misunderstanding (possibly due to me being a bit too vague) .. i meant that i'd prefer it being allowed if the elements themselves were (initially) unknown/uninstantiated (so, to-be output), while the length (the skeleton of the list) would still be known |
2021-11-06 01:03:48 +0100 | <ski> | (so, if the length is know, then it definitely is "instantiated") |
2021-11-06 01:04:21 +0100 | <ski> | joel135 : perhaps i'd help to eta-reduce conjunction ? |
2021-11-06 01:04:23 +0100 | cosimone | (~user@93-44-186-19.ip98.fastwebnet.it) (Ping timeout: 256 seconds) |
2021-11-06 01:04:43 +0100 | <joel135> | does `g1 gail1 succeed` really have the arguments in the right order? |
2021-11-06 01:04:57 +0100 | yushyin | (rzPUwQNnp2@karif.server-speed.net) (Quit: WeeChat 3.3) |
2021-11-06 01:04:57 +0100 | <ski> | oh, sorry. yea, i just noticed that was wrong order |
2021-11-06 01:05:06 +0100 | yushyin | (XNontZhIIh@karif.server-speed.net) |
2021-11-06 01:05:28 +0100 | <ski> | (g0 /\ g1) succeed fail = g0 (g1 succeed) fail |
2021-11-06 01:05:33 +0100 | <ski> | (g0 /\ g1) succeed = g0 (g1 succeed) |
2021-11-06 01:05:41 +0100 | <ski> | g0 /\ g1 = g0 . g1 |
2021-11-06 01:06:07 +0100 | <joel135> | these names "succeed" and "fail" are very intriguing. |
2021-11-06 01:06:21 +0100 | <ski> | it's standard terminology in logic programming |
2021-11-06 01:06:39 +0100 | <joel135> | yes but in the context of Church numerals |
2021-11-06 01:07:09 +0100 | <ski> | although, sometimes, (in "four-port execution model"), "exit" would be used instead of "fail". also "redo" would be used. but `redo' is a failure continuation, "seen from the other side" |
2021-11-06 01:07:38 +0100 | <syd> | (define succeed (== #t #t)) and (define fail (== #t #f)) is how I've seen them, fwiw. |
2021-11-06 01:08:30 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 01:08:32 +0100 | <syd> | oh, no idea about the relation to church numerals, missed that bit sorry. |
2021-11-06 01:08:55 +0100 | <joel135> | i see, this http://www.cs.otago.ac.nz/cosc347/References/LP/LeedsTutorial/node48.html kind of thing |
2021-11-06 01:08:56 +0100 | <ski> | first you Call a predicate. it may then Exit, having instantiated some variables, passing control to later code, which may further down the line backtrack back to this point (undoing said instantiations), Redo-ing the call (asking for alternative solutions). after a sequence of (zero or more) Exit-Redo pairs, the call will eventually Fail |
2021-11-06 01:09:34 +0100 | <joel135> | is it a coincidence that there are four o's in (o -> o) -> (o -> o) just like this box has four ports? |
2021-11-06 01:09:49 +0100 | <ski> | no |
2021-11-06 01:09:54 +0100 | <joel135> | ok |
2021-11-06 01:10:59 +0100 | <ski> | {- call :: -} ({- exit,succeed :: -} ({- redo :: -} o) -> o) -> (({- fail :: -} o) -> o) |
2021-11-06 01:12:30 +0100 | <ski> | or, if you want to associate the ports with the results of the associated underlying invokations : |
2021-11-06 01:13:12 +0100 | <ski> | (({- redo -} o) -> ({- exit -} o)) -> (({- fail -} o) -> ({- call -} o)) |
2021-11-06 01:13:14 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 268 seconds) |
2021-11-06 01:14:41 +0100 | <joel135> | i see |
2021-11-06 01:15:07 +0100 | <joel135> | could you then imagine what ((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o)) would mean in the context of logic programming? |
2021-11-06 01:16:23 +0100 | <ski> | (in a more practical implementation, there'd also be a "Commit" port, asking a predicate call to commit to the current solution, discarding remaining alternative ones, cleaning up resources. and, commonly, there's also an "Exception" port, for exception handling. and, sometimes there's an optional "Unify" port that happens just after Call and Redo, corresponding to "head unifications" in a predicate clause |
2021-11-06 01:16:29 +0100 | <ski> | (more or less, like pattern-matching on arguments left of the `=')) |
2021-11-06 01:16:55 +0100 | <ski> | well .. i haven't considered it from your polynomial perspective .. |
2021-11-06 01:17:13 +0100 | <ski> | but doing that kind of thing is exactly what i did, for my goal implications |
2021-11-06 01:18:51 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2021-11-06 01:18:59 +0100 | <joel135> | by the way, i also found some other truly beautiful stuff when investigating the interrelationships between o, (o -> o), ((o -> o) -> (o -> o)), &c but let's cotinue talking about your stuff |
2021-11-06 01:19:10 +0100 | <ski> | the usual CPS encoding of LP goals, with backtracking, is `ContT () (ContT o m)', for some suitable base monad `m' (e.g. `IO' or `ST s', since you likely want to implement logic variables via mutation, and possibly you want to be able to do I/O as well) |
2021-11-06 01:19:15 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2021-11-06 01:19:32 +0100 | <ski> | (well, i guess `o' would also be `()' there) |
2021-11-06 01:20:18 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-11-06 01:20:35 +0100 | <ski> | so, what i do for implication, `( Antecedent => Consequent )', is i shift the continuation levels for `Antecedent', one step. so, `Antecedent' (but not `Consequent') now is interpreted a la `((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o))' |
2021-11-06 01:21:20 +0100 | <ski> | except, of course this implication may itself be left-nested in an outer implication, in which case our `Antecedent' has four continuation levels, and `Consequent' has three .. and so on |
2021-11-06 01:21:43 +0100 | faultline | (~christian@nat-eduroam-01.scc.kit.edu) (Remote host closed the connection) |
2021-11-06 01:22:16 +0100 | <ski> | (the top-level call fixes/picks the number of continuation levels to two, using the base monad `m' under that. implication chooses the number of levels for `Antecedent' to be one more, so that's where the extra levels come from) |
2021-11-06 01:22:27 +0100 | faultline | (~christian@nat-eduroam-01.scc.kit.edu) |
2021-11-06 01:23:06 +0100 | <joel135> | wait wait. this sounds super cool for lack of a better word |
2021-11-06 01:23:44 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds) |
2021-11-06 01:24:01 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2021-11-06 01:24:17 +0100 | <unit73e> | so I was doing texture clipping and now I have to deal with aeson. I'll just make a pause... |
2021-11-06 01:25:09 +0100 | <joel135> | do you think of this ((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o)) as ((O -> O) -> (O -> O)) or as (_ -> ((o -> o) -> (o -> o))), if the question makes sense? |
2021-11-06 01:25:46 +0100 | <ski> | (fun fact .. this all started by me boredly translating a Sudoku solver from Common Lisp to Prolog, getting side-tracked on how to nicely represent arrays (quickly jumping to multi-dimensional ones), wanting to write higher-order predicates for iterating over them, then noticing some weird unexpected (incorrect) behaviour, attempting to fix it with low-level (mutation) primitives (which can possibly violate |
2021-11-06 01:25:53 +0100 | <ski> | the declarative/pure logical reading of the code) .. then, when that didn't work (i suspect because of optimizations assuming purity, or somesuch), started thinking about what i wanted, got into thinking about how to "backtrack backtracking") |
2021-11-06 01:26:33 +0100 | <unit73e> | in college the teachers made a competition of who could make the best sodoku solver |
2021-11-06 01:26:45 +0100 | <unit73e> | the teacher that won used prolog |
2021-11-06 01:26:55 +0100 | <unit73e> | it was so fast that the solution was faster than printing |
2021-11-06 01:27:00 +0100 | <joel135> | is this "shift" a variant of this from above? >>> exponentiation seems to require `Codensity' (iow, you pass around `forall o.'-ed stuff, rank-2) |
2021-11-06 01:27:51 +0100 | <ski> | joel135 : hmm .. implication definitely eliminates the top continuation layer of `Antecent', which i guess would correspond to your second alternative ? .. but when thinking about the execution of `Antecedent' itself, in isolation, i would say the first alternative, i think |
2021-11-06 01:28:07 +0100 | <unit73e> | the teacher that was talking about this competition used Java (lol) and he was saying the one that used prolog cheated because it was prolog |
2021-11-06 01:28:42 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2021-11-06 01:29:42 +0100 | <syd> | (what is it with punning usernames here?! I like it.) |
2021-11-06 01:29:45 +0100 | <ski> | "normally", success and failure continuations are not mixed up with each other. but for implication, when `Consequent' succeeds, that is then interpreted by `Antecedent' as a failure, a prod for it to generate another solution (spawning a new, conceptually separate, call to `Consequent') |
2021-11-06 01:30:40 +0100 | <joel135> | i need to think more about what you just wrote ^ |
2021-11-06 01:30:51 +0100 | <joel135> | but in the meanwhile, assuming Antecedent has type ((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o)) and Consequent has type ((o -> o) -> (o -> o)), is Antecedent => Consequent simply interpreted as Antecedent Consequent of type ((o -> o) -> (o -> o)) ? |
2021-11-06 01:30:56 +0100 | <ski> | unit73e : hm, did it use some constraint programming ? imho, that would be ideal |
2021-11-06 01:31:25 +0100 | <ski> | "is this "shift" a variant of this from above?" -- i think it's related, at least |
2021-11-06 01:32:32 +0100 | <ski> | yes, `Consequent' and `( Antecedent => Consequent )' would have the same type, the same number of continuation levels |
2021-11-06 01:33:16 +0100 | <joel135> | and if you have antecedent (lowercase) of type ((O -> O) -> (O -> O)) where O is a type variable, would you somehow "upgrade" it to Antecedent by setting O := (o -> o) ? |
2021-11-06 01:33:37 +0100 | <ski> | yes |
2021-11-06 01:33:47 +0100 | <ski> | (modulo some fiddly stuff with the base monad) |
2021-11-06 01:34:22 +0100 | <joel135> | do you know what the inverse of this "upgrade" operation is? this is what i referred to above as "some other truly beautiful stuff" |
2021-11-06 01:35:21 +0100 | <ski> | hm, i don't think so |
2021-11-06 01:37:09 +0100 | <joel135> | the "downgrade" from forall o. (((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o))) to forall O. ((O -> O) -> (O -> O)) is a nondeterministic operation that basically takes a polynomial as input and chooses a term (in the sense of polynomials) of this polynomial, and returns its exponent. |
2021-11-06 01:38:06 +0100 | <ski> | hmm .. exponent |
2021-11-06 01:38:54 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 01:38:59 +0100 | random-jellyfish | (~random-je@user/random-jellyfish) (Ping timeout: 256 seconds) |
2021-11-06 01:39:03 +0100 | <ski> | i wonder if there's possibly two distinct "downgrades" (or two distinct "upgrades" ?) |
2021-11-06 01:40:15 +0100 | <joel135> | if a term T of type forall o. (((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o))) is thought of as a type containing a free type variable (the polynomial x : (o -> o) -> (o -> o) being this variable) and you have a partial term t of this type T(x), then the type downgrade(T)_t : forall O. (O -> O) -> (O -> O) is the type of holes of type x inside t : T(x). |
2021-11-06 01:41:30 +0100 | <ski> | g₀ ⇒ g₁ : Ω ⊣ g₀,g₁ : Ω |
2021-11-06 01:41:37 +0100 | <ski> | (g₀ ⇒ g₁) ω s f = g₀ (ω → ω) (λ s₀ ↦ λ f′ ↦ |
2021-11-06 01:41:43 +0100 | <ski> | g₁ ω (λ f″ ↦ s₀ f″) f′) (λ f‴ ↦ s f‴) f |
2021-11-06 01:41:46 +0100 | <ski> | = g₀ (ω → ω) (g₁ ω) s f |
2021-11-06 01:42:20 +0100 | <joel135> | there may in principle be k different upgrades when you have k levels of (_->_)-nesting, but i haven't thought it through fully. for instance a relatable example is that you could take a *polynomial* p as input and return the upgraded *operator* p(d/dx) as output. |
2021-11-06 01:42:20 +0100 | <ski> | that's my implication, given ⌜Ω = (ω :) ⋆ → (ω → ω) → (ω → ω)⌝ |
2021-11-06 01:42:55 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 01:43:24 +0100 | <ski> | (hm, i guess you can think of `x' as an oracle ..) |
2021-11-06 01:43:38 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
2021-11-06 01:43:45 +0100 | <joel135> | (the level of operators being something like ((((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o)))) -> ((((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o))))) |
2021-11-06 01:44:14 +0100 | <joel135> | hang on, i need to read what you wrote |
2021-11-06 01:46:36 +0100 | <joel135> | i can't parse Ω = (ω :) ⋆ → (ω → ω) → (ω → ω) |
2021-11-06 01:47:15 +0100 | <ski> | Omega = (o : Set) -> (o -> o) -> (o -> o) -- in Agda notation |
2021-11-06 01:47:47 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 264 seconds) |
2021-11-06 01:48:12 +0100 | <joel135> | ok right, you use ω → ω for ω |
2021-11-06 01:48:13 +0100 | <ski> | `Omega' just being a type of "logic programming goals/queries", which also "just happens" to be church numerals |
2021-11-06 01:49:11 +0100 | <ski> | (having stripped away everything from the type that one'd use practically, for say instantiation / logic programming, or I/O, just focusing on the basic backtracking behaviour) |
2021-11-06 01:49:31 +0100 | <ski> | (er, s/logic programming/logic variables/) |
2021-11-06 01:49:55 +0100 | <joel135> | right |
2021-11-06 01:51:05 +0100 | SeungheonOh | (~Thunderbi@2600:1700:5168:1400:1574:2437:4f0d:50e6) |
2021-11-06 01:51:49 +0100 | <ski> | (fwiw, i'm not following "you have a partial term t of this type T(x)" .. `t' being (thought of as) an inhabitant of a polynomial `a_0 + a_1*x + a_2*x^2 + ..' ?) |
2021-11-06 01:52:52 +0100 | <joel135> | (let's maybe use the names ℕ₀(o) = o, ℕₙ₊₁(o) = (ℕₙ(o) → ℕₙ(o)) and ℕₙ = ∀o. ℕₙ(o) sometimes for readability, so e.g. ℕ₃ = Poly) |
2021-11-06 01:53:21 +0100 | <ski> | (fwiw, when i said `Consequent' and `( Antecedent => Consequent )' would have "the same number of continuation levels", i mean that the same `o' that is passed to the latter, is passed (type application, polymorphic instantiation) to the former) |
2021-11-06 01:55:06 +0100 | <joel135> | a partial term is a term that is specified as far as the type is specified. the type variable x is considered to be an unknown, so it is not clear what a term of type T(x) is precisely yet. a partial term t : T(x) thus contains holes of type x but no other holes. this is what i mean by partial here. |
2021-11-06 01:55:35 +0100 | <ski> | "wait wait. this sounds super cool for lack of a better word" -- yeah, that's what i first thought, when discovering this stuff :D |
2021-11-06 01:55:55 +0100 | <joel135> | :D |
2021-11-06 01:56:39 +0100 | <ski> | hm, holes |
2021-11-06 01:57:02 +0100 | <ski> | (makes me wonder about relation to McBride type differentiation) |
2021-11-06 01:57:26 +0100 | <joel135> | holes ... derivatives ... of types or of polynomials :) |
2021-11-06 01:57:40 +0100 | <ski> | yup |
2021-11-06 01:58:46 +0100 | <ski> | <joel135> is this related to what you wrote above? >>> also an interesting "duality" of sorts between logic variables and skolems/atoms emerged |
2021-11-06 01:59:40 +0100 | <ski> | so, i realized that, after doing this shift of one continuation level, when going to `Antecedent', i couldn't let any instantiations made by `Antecedent' "escape" the implications |
2021-11-06 02:00:17 +0100 | <ski> | because the solutions of `Antecedent' are merely hypothetical .. by the time the implication has succeeded, `Antecedent' has exhausted its solutions, and failed finally |
2021-11-06 02:00:42 +0100 | <ski> | this makes sense, since there's a polarity shift/swap, the antecedent is in a negated context |
2021-11-06 02:01:10 +0100 | <ski> | but, i'd still like `Consequent' to be able to make instantiations, which survived .. so the question was how to achieve this |
2021-11-06 02:01:18 +0100 | ubert | (~Thunderbi@p200300ecdf4fcafee019fddc82d0353e.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2021-11-06 02:01:24 +0100 | ub | (~Thunderbi@p200300ecdf4fca30e019fddc82d0353e.dip0.t-ipconnect.de) |
2021-11-06 02:01:34 +0100 | <joel135> | (i don't have quite enough practical experience with logic programming to have intuition for the things you just said) |
2021-11-06 02:01:49 +0100 | <ski> | `Consequent' here wouldn't (usually) communicate directly to the surrounding goals, and their logic variables, but only do so *via* `Antecedent' |
2021-11-06 02:02:54 +0100 | <joel135> | i think i need to try studying your code. do you still have it? |
2021-11-06 02:03:16 +0100 | <ski> | in the example with enumerating elements of a collection, `Antecedent' would set up a *temporary* link between an element of the collection, and a logic variable, and then `Consequent' would go on to instantiate the element to something, *via* this link. after that, the link would be removed (and a new link to a different element be instated), but the instantiation to the element ought still to persist |
2021-11-06 02:03:43 +0100 | ub | ubert |
2021-11-06 02:04:10 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
2021-11-06 02:04:48 +0100 | <ski> | hm. i know where i have one version, however it might still have a bug (in unification machinery, iirc), that i managed to fix in the end (turned out to be a silly mistake, like a boolean flip, or wrong argument passed, iirc) |
2021-11-06 02:05:38 +0100 | <joel135> | when you say "link between ... and a logic variable" is "a logic variable" referring to X or Xs? ( member(X,Xs) => between(1,6,X) ) |
2021-11-06 02:06:04 +0100 | <joel135> | i am guessing X |
2021-11-06 02:06:17 +0100 | <ski> | when we're *using* a polymorphic operation, say `length :: forall a. [a] -> Int', then `a' gets replaced by a logic variable, so that we have `length :: [_a] -> Int' for this particular occurance/use of `length', and then unification will instantiate `_a' to something appropriate |
2021-11-06 02:06:24 +0100 | <ski> | `X', yes |
2021-11-06 02:06:29 +0100 | <joel135> | ok |
2021-11-06 02:07:06 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-11-06 02:08:06 +0100 | <ski> | but when we're defining `length', checking its definition, `a' becomes replaced by a skolem constant, say `?a', so that we're checking `length :: [?a] -> Int'. `?a' is an opaque/abstract type that is only known to be equal to itself |
2021-11-06 02:08:25 +0100 | <ski> | the same phenomenon happens in logic programming |
2021-11-06 02:09:46 +0100 | acidsys | (~LSD@2.lsd.systems) (Excess Flood) |
2021-11-06 02:10:04 +0100 | <ski> | if you have a goal `some [X] ( member(X,Xs) )' (Mercury syntax) / `sigma X\ member X Xs' (lambdaProlog syntax), then `X' will become a logic variable, that can be further instantiated, when we attempt to unify it with stuff |
2021-11-06 02:10:21 +0100 | acidsys | (~LSD@2.lsd.systems) |
2021-11-06 02:10:46 +0100 | <joel135> | (i think ghc referred to skolem-something before i changed `type Poly` to `data Poly`) |
2021-11-06 02:11:59 +0100 | <ski> | if you have a goal `all [X] ( X = X )' / `pi X\ X = X', then `X' will become a skolem constant. this way, if you attempt the goal `pi X\ pi Y\ X = Y', you'll compare two skolem constants that are not known to be equal, and therefore this goal will fail |
2021-11-06 02:12:21 +0100 | <ski> | (while, using `sigma' instead of `pi', it would succeed) |
2021-11-06 02:13:08 +0100 | <ski> | so, considering `( member(X,Xs) => between(1,6,X) )', which logically ought to be treated as `all [X] ( member(X,Xs) => between(1,6,X) )' here, `X' ought to become a skolem constant |
2021-11-06 02:13:29 +0100 | Athas | (athas@2a01:7c8:aaac:1cf:a0d4:8908:cfdb:b9c0) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-11-06 02:13:45 +0100 | Athas | (athas@2a01:7c8:aaac:1cf:a0d4:8908:cfdb:b9c0) |
2021-11-06 02:14:14 +0100 | <ski> | but, once inside the antecedent (which involves shifting continuation levels), we'd like `X' to not act like a constant (we'd not like to instantiate the element in the collection `Xs' with some opaque constant), but rather as a logic variable, which is now known to be equal to whatever the element is equal to |
2021-11-06 02:15:50 +0100 | <unit73e> | ski, no idea what he did but from what I remember it was based on just telling the rules |
2021-11-06 02:15:51 +0100 | <ski> | so .. from this, i got the idea that, perhaps, we could represent logical variables, and skolem constants, in the *same* way, except for a single bit/boolean that tells which is which .. and then, whenever you shift continuation levels (odd number of levels), you flip a global boolean flag that changes the interpretation of the bit in logic variables and skolems ! |
2021-11-06 02:16:17 +0100 | <ski> | and the amazing thing is that this crazy idea actually worked ! :D |
2021-11-06 02:16:17 +0100 | <joel135> | hmm |
2021-11-06 02:16:19 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 02:16:54 +0100 | <joel135> | i really want to try this |
2021-11-06 02:17:21 +0100 | <geekosaur> | covariance/contravariance? |
2021-11-06 02:17:39 +0100 | geekosaur | doesn't quite follow all of the above, but what the heck |
2021-11-06 02:19:01 +0100 | <joel135> | i have no intuition for this logic variable vs skolem atom distinction though |
2021-11-06 02:19:14 +0100 | <ski> | (i know my implementation have another problem, causing unsoundness. basically, for `sigma X\ pi Y\ X = Y', what i've said above is not enough. this query ought to fail, there is not something which is equal to everything. so, one needs to also ensure that skolems don't "escape" in some sense. it seems that one way one could do this is adding timestamps of some kind to logic variables and skolems, and check |
2021-11-06 02:19:20 +0100 | <ski> | them, when unifying .. i believe this can be done, but i haven't worked through the details) |
2021-11-06 02:19:55 +0100 | <ski> | (recently, i was (re)looking at Lolli, a linear logic programming language, and they did something like this, that i'd have to study to understand how it works) |
2021-11-06 02:20:00 +0100 | <joel135> | it seems like logic variables are "positive" in the sense of girard whereas skolem atoms are "negative" |
2021-11-06 02:20:31 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 245 seconds) |
2021-11-06 02:20:51 +0100 | <ski> | in terms of typechecking, the usual term is "meta variable" (or maybe "placeholder"), rather than "logic variable". but it's the same idea |
2021-11-06 02:21:21 +0100 | <ski> | note that it's incorrect to think that logic variables are associated with existential quantification, and skolems with universal quantification |
2021-11-06 02:21:55 +0100 | <joel135> | ok good that you pointed that out |
2021-11-06 02:22:07 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3) |
2021-11-06 02:22:12 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-11-06 02:22:35 +0100 | <ski> | logic variables are generated by existential goals *and* universal clauses. while skolems are generated by universal goals and existential clauses (except usually the last thing isn't allowed in logic programming. i think possibly some experimental deductive databases may allow such) |
2021-11-06 02:23:43 +0100 | <ski> | similarly, checking the callee/definer/implementor/producer of a `forall a. ..a..' involves skolems, while the caller/user/consumer involves meta variables |
2021-11-06 02:23:55 +0100 | <ski> | (and the opposite, for `exists a. ..a..') |
2021-11-06 02:24:46 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2021-11-06 02:25:11 +0100 | <ski> | clauses are the stuff that you assume, the axioms/rules/hypotheses that you tell the logic programming system to believe. goals are the queries/questions that you ask the system to check, to try to solve, generate solutions for (thinking about solving equation systems is a nice analogy) |
2021-11-06 02:25:20 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2021-11-06 02:26:41 +0100 | <ski> | in Prolog, clauses are either facts, like `member(X,[X|_]).', or rules, like `member(X,[_|Xs]) :- member(X,Xs).' (`:-' is reverse implication, `<='). `member(X,Xs)' here, the body of the rule, is a goal |
2021-11-06 02:27:24 +0100 | <ski> | (and variables are implicitly universally quantified around clauses. if the variable only occurs in the body, then this is equivalent to it being implicitly existentially quantified in the body) |
2021-11-06 02:29:48 +0100 | lbseale_ | (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer) |
2021-11-06 02:29:58 +0100 | <unit73e> | geekosaur, the covariance/contravariance has to do with subtyping. it's talked a lot in scala because a list of cats should be compatible with a list of animals, and that's because it's covariant. |
2021-11-06 02:30:01 +0100 | <joel135> | ok so from one perspective is `append([0,1,2],[3,4],L)` is a clause and `L` is a goal. and from another perspective a clause is like a polynomial ideal and a goal is like a polynomial that you're examining in relation to this ideal (maybe testing for membership or similar) |
2021-11-06 02:30:10 +0100 | <ski> | unit73e : anyway, Prolog is great for non-deterministic search :) (although, for larger search spaces, you'd usually want to try to be smarter, if you can, pruning irrelevant sub-search-trees, or "failing earlier" (reordering goals (conjuncts) so that something that's (more) likely to fail is checked first, so that you avoid wastefully checking an expensive condition) |
2021-11-06 02:30:50 +0100 | <joel135> | or maybe i am wrong to call `L` a goal and it is `member(X,Xs)` that is the goal as you say. |
2021-11-06 02:31:26 +0100 | <ski> | (and constraint logic programming (CLP) can be great at implicitly doing both of those, while keeping the source code rather readable .. a bit similar to how laziness can improve modularity, by allowing reasonable efficiency while maintaining separation of concerns / modularity) |
2021-11-06 02:32:10 +0100 | <ski> | joel135 : yes, `L' is a term (a variable in this case), and `member(X,Xs)' is a goal |
2021-11-06 02:32:22 +0100 | <unit73e> | functors are a classic for the covariant/contravariant mambo jambo, it doesn't matter that much tbh |
2021-11-06 02:32:43 +0100 | shriekingnoise | (~shrieking@186.137.144.80) (Quit: Quit) |
2021-11-06 02:33:29 +0100 | <ski> | (whether something is a clause or goal can't, in general, be determined in isolation, just by looking at the thing is question. what determines it is the context in which it occurs. so it's an extrinsic notion, not an intrisic) |
2021-11-06 02:34:28 +0100 | <joel135> | > logic variables are generated by existential goals *and* universal clauses. while skolems are generated by universal goals and existential clauses |
2021-11-06 02:34:29 +0100 | <lambdabot> | error: |
2021-11-06 02:34:30 +0100 | <lambdabot> | Variable not in scope: |
2021-11-06 02:34:30 +0100 | <lambdabot> | logic :: t0 -> t1 -> t2 -> t3 -> t4 -> t5 -> t Bool -> Boolerror: Vari... |
2021-11-06 02:34:37 +0100 | shriekingnoise | (~shrieking@186.137.144.80) |
2021-11-06 02:34:49 +0100 | <ski> | @botsmack |
2021-11-06 02:34:49 +0100 | <lambdabot> | :) |
2021-11-06 02:35:03 +0100 | <joel135> | this feels reminiscent of the distinction between additive and multiplicative connectives |
2021-11-06 02:35:11 +0100 | <joel135> | rather than positive and negative connectives |
2021-11-06 02:35:31 +0100 | syd | (~syd@cpc91646-hart11-2-0-cust432.11-3.cable.virginm.net) (Read error: No route to host) |
2021-11-06 02:35:47 +0100 | <ski> | meta/logic variable vs. skolem is an operational/procedural issue |
2021-11-06 02:35:47 +0100 | <nitrix> | Poor ski, perpetually doomed now talking about logic programming. I'm sorry I did this to you. |
2021-11-06 02:35:57 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Quit: Lost terminal) |
2021-11-06 02:36:05 +0100 | <ski> | nitrix : nah, you didn't, that i can recall :b |
2021-11-06 02:36:06 +0100 | <joel135> | which i think leads us back to the notion of "upgrade" which does connect addition to multiplication, just like the exponential function does |
2021-11-06 02:36:17 +0100 | <unit73e> | logic programming does have it's uses |
2021-11-06 02:36:24 +0100 | <geekosaur> | unit73e, I was asking if the flipping between logic variables and skolems could be seen as co- vs. contravariance, not asking what they were |
2021-11-06 02:36:45 +0100 | <unit73e> | yeah I found it strange if you didn't know lol |
2021-11-06 02:37:35 +0100 | <unit73e> | regardless, scala guys like to talk about that |
2021-11-06 02:37:45 +0100 | <unit73e> | with all the + and - stuff |
2021-11-06 02:37:46 +0100 | <joel135> | this kind of fits with your finding that one changes between variables and atoms when going inside the antecedent position of an implication, but it is still a bit strange that one should alternate back and forth |
2021-11-06 02:37:51 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) |
2021-11-06 02:38:46 +0100 | <ski> | geekosaur : contravariance represents a flipping of polarity (while covariance is a non-flipping). logic variables vs. skolems is not about flipping or not, but rather is (in my prototype) what was being flipped around (exchanging the interpretation so that logic variables are now interpreted as skolems, and vice versa, upon flipping) |
2021-11-06 02:40:14 +0100 | <unit73e> | he.. I also find it confusing. I kind of get it but to me it's much simpler to think as "can I polymorph up or down" |
2021-11-06 02:40:54 +0100 | <unit73e> | because I see the image in my head |
2021-11-06 02:47:36 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
2021-11-06 02:48:39 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) |
2021-11-06 02:49:38 +0100 | <joel135> | going back to the upgrade/downgrade business: one way of thinking about this that i found is that this downgrade styled "hole" together with another downgrade (not competely sure if that it qualifies as a "downgrade" though) styled "partial term" combine to form the basis for a type checker. |
2021-11-06 02:50:21 +0100 | <joel135> | this connects again to your question earlier about whether there could be several differerent upgrades/downgrades |
2021-11-06 02:51:46 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer) |
2021-11-06 02:51:49 +0100 | <joel135> | <ski> i wonder if there's possibly two distinct "downgrades" (or two distinct "upgrades" ?) |
2021-11-06 02:53:00 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 02:56:03 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) |
2021-11-06 02:56:19 +0100 | <joel135> | i am imagining that the collection of all possible upgrades and downgrades form a simplicial set. perhaps ℕ₃ = Poly is like a triangle, of which the notions of "partial term" and "hole" are two edges that meet together at a single vertex, which is the source of the induction-recursion needed to type these notions. |
2021-11-06 02:58:04 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 268 seconds) |
2021-11-06 02:58:19 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer) |
2021-11-06 02:58:48 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) |
2021-11-06 02:59:36 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:e9ee:3bd5:4988:8148) (Quit: Textual IRC Client: www.textualapp.com) |
2021-11-06 02:59:54 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Remote host closed the connection) |
2021-11-06 03:00:33 +0100 | hololeap | (~hololeap@user/hololeap) (Remote host closed the connection) |
2021-11-06 03:01:48 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) |
2021-11-06 03:01:59 +0100 | hololeap | (~hololeap@user/hololeap) |
2021-11-06 03:03:25 +0100 | Cajun | (~Cajun@user/cajun) |
2021-11-06 03:06:23 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) (Ping timeout: 264 seconds) |
2021-11-06 03:07:34 +0100 | hololeap | (~hololeap@user/hololeap) (Remote host closed the connection) |
2021-11-06 03:07:41 +0100 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving) |
2021-11-06 03:08:33 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 268 seconds) |
2021-11-06 03:08:34 +0100 | <Cajun> | ive been looking into effect systems and found the usual sort: mtl, fused effects, polysemy, freer-simple/freer, and eff. the ones based on free monads seem really cool, but the others tend to be faster (eff is the exception). i also watched the vod of the eff dev mentioning issues with scoped effects which was highly discouraging. im wondering in |
2021-11-06 03:08:34 +0100 | <Cajun> | general whats the best system to use, considering speed and ease of use? |
2021-11-06 03:08:46 +0100 | <joel135> | (and upgrading a polynomial p : ℕ₃ to an operator p(d/dx) : ℕ₄ would be the middle degeneracy that takes you from the simplex with 3 vertices to the simplex with 4 vertices) |
2021-11-06 03:08:51 +0100 | hololeap | (~hololeap@user/hololeap) |
2021-11-06 03:13:56 +0100 | alx741 | (~alx741@181.196.68.55) (Quit: alx741) |
2021-11-06 03:19:35 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 03:23:27 +0100 | alzgh | (~alzgh@user/alzgh) (Remote host closed the connection) |
2021-11-06 03:28:00 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.) |
2021-11-06 03:32:11 +0100 | EvanR | (~evan@user/evanr) (Ping timeout: 245 seconds) |
2021-11-06 03:42:17 +0100 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-11-06 03:42:42 +0100 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
2021-11-06 03:43:43 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 03:45:50 +0100 | xff0x | (~xff0x@2001:1a81:5273:3700:28cd:42fe:3b9:2637) (Ping timeout: 260 seconds) |
2021-11-06 03:47:41 +0100 | xff0x | (~xff0x@2001:1a81:52b1:3000:b3ef:fedd:d143:889a) |
2021-11-06 03:48:38 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 268 seconds) |
2021-11-06 03:51:02 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-11-06 04:00:00 +0100 | sander | (~sander@user/sander) (Quit: So long! :)) |
2021-11-06 04:01:29 +0100 | sander | (~sander@user/sander) |
2021-11-06 04:06:28 +0100 | faultline | (~christian@nat-eduroam-01.scc.kit.edu) (Remote host closed the connection) |
2021-11-06 04:07:45 +0100 | Square | (~a@178.62.91.8) (Changing host) |
2021-11-06 04:07:45 +0100 | Square | (~a@user/square) |
2021-11-06 04:08:19 +0100 | <lyxia> | Use IO and don't get into situations where you need anything else. |
2021-11-06 04:08:25 +0100 | EvanR | (~evan@2600:1700:ba69:10:98b6:b5c4:3b00:4c9a) |
2021-11-06 04:13:18 +0100 | EvanR | (~evan@2600:1700:ba69:10:98b6:b5c4:3b00:4c9a) (Ping timeout: 268 seconds) |
2021-11-06 04:15:33 +0100 | slack1256 | (~slack1256@191.125.99.211) |
2021-11-06 04:18:19 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 04:23:11 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 268 seconds) |
2021-11-06 04:34:35 +0100 | nosewings | (~ngpc@2603-8081-3e05-e2d0-91fa-0be4-4222-fe4b.res6.spectrum.com) (Remote host closed the connection) |
2021-11-06 04:39:30 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2021-11-06 04:39:30 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2021-11-06 04:39:30 +0100 | finn_elija | FinnElija |
2021-11-06 04:47:30 +0100 | waleee | (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 260 seconds) |
2021-11-06 04:51:29 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 04:55:52 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 268 seconds) |
2021-11-06 04:56:43 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) |
2021-11-06 04:57:12 +0100 | <a6a45081-2b83> | how can I define something similar for `Ratio Integer` (https://hackage.haskell.org/package/memoize-0.8.1/docs/src/Data.Function.Memoize.html#memoFix) |
2021-11-06 04:59:24 +0100 | <a6a45081-2b83> | my plan is to have `instace Memoizable (Ratio Integer) where memoize f = let f' (a,b) = f (a%b) in memoize f'` |
2021-11-06 04:59:27 +0100 | <a6a45081-2b83> | or something like that |
2021-11-06 04:59:34 +0100 | hiruji | (~hiruji@user/hiruji) (Ping timeout: 268 seconds) |
2021-11-06 05:01:02 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 05:05:34 +0100 | Cajun | (~Cajun@user/cajun) (Quit: Client closed) |
2021-11-06 05:05:42 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
2021-11-06 05:11:05 +0100 | mcglk | (~mcglk@131.191.49.120) (Read error: Connection reset by peer) |
2021-11-06 05:11:21 +0100 | Cajun | (~Cajun@user/cajun) |
2021-11-06 05:12:12 +0100 | <ski> | joel135 : sorry, i became stuck for a bit, trying to get my old code to work (finally managed) .. if you want to, i could send you the code |
2021-11-06 05:13:47 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer) |
2021-11-06 05:13:52 +0100 | mcglk | (~mcglk@131.191.49.120) |
2021-11-06 05:15:18 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2021-11-06 05:16:07 +0100 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-11-06 05:18:08 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) |
2021-11-06 05:18:53 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer) |
2021-11-06 05:19:21 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) |
2021-11-06 05:19:27 +0100 | a6a45081-2b83 | (~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Client Quit) |
2021-11-06 05:19:30 +0100 | img | (~img@user/img) |
2021-11-06 05:35:04 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) (Quit: leaving) |
2021-11-06 05:35:47 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
2021-11-06 05:45:25 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 05:47:02 +0100 | zebrag | (~chris@user/zebrag) (Quit: Konversation terminated!) |
2021-11-06 05:47:34 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) |
2021-11-06 05:47:35 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 05:48:01 +0100 | ishutin | (~ishutin@62-165-208-189.pool.digikabel.hu) (Ping timeout: 245 seconds) |
2021-11-06 05:50:03 +0100 | ishutin | (~ishutin@92-249-179-61.pool.digikabel.hu) |
2021-11-06 05:50:07 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 268 seconds) |
2021-11-06 05:50:48 +0100 | <ski> | joel135 : perhaps you could elaborate on the "upgrading a polynomial p : ℕ₃ to an operator p(d/dx)" part (what is meant by that) |
2021-11-06 06:07:11 +0100 | SeungheonOh | (~Thunderbi@2600:1700:5168:1400:1574:2437:4f0d:50e6) (Quit: SeungheonOh) |
2021-11-06 06:07:35 +0100 | emf | (~emf@2620:10d:c090:400::5:38d) (Ping timeout: 264 seconds) |
2021-11-06 06:10:50 +0100 | emf | (~emf@163.114.132.5) |
2021-11-06 06:15:24 +0100 | emf | (~emf@163.114.132.5) (Read error: Connection reset by peer) |
2021-11-06 06:16:15 +0100 | emf | (~emf@2620:10d:c090:400::5:f801) |
2021-11-06 06:17:45 +0100 | slack1256 | (~slack1256@191.125.99.211) (Ping timeout: 256 seconds) |
2021-11-06 06:18:44 +0100 | mrianbloom | (sid350277@id-350277.ilkley.irccloud.com) (Ping timeout: 252 seconds) |
2021-11-06 06:18:44 +0100 | vito | (sid1962@user/vito) (Ping timeout: 252 seconds) |
2021-11-06 06:18:51 +0100 | pepeiborra | (sid443799@id-443799.ilkley.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:18:51 +0100 | lightandlight | (sid135476@id-135476.helmsley.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:18:54 +0100 | whez | (sid470288@id-470288.lymington.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:18:59 +0100 | gregberns__ | (sid315709@id-315709.helmsley.irccloud.com) (Ping timeout: 264 seconds) |
2021-11-06 06:18:59 +0100 | parseval | (sid239098@id-239098.helmsley.irccloud.com) (Ping timeout: 264 seconds) |
2021-11-06 06:19:07 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Ping timeout: 268 seconds) |
2021-11-06 06:19:08 +0100 | carter | (sid14827@id-14827.helmsley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:08 +0100 | truckasaurus | (sid457088@id-457088.helmsley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:08 +0100 | NemesisD | (sid24071@id-24071.lymington.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:08 +0100 | supersven | (sid501114@id-501114.ilkley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:08 +0100 | systemfault | (sid267009@id-267009.uxbridge.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:08 +0100 | nrr_ | (sid20938@id-20938.lymington.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:09 +0100 | aria | (sid380617@id-380617.lymington.irccloud.com) (Ping timeout: 265 seconds) |
2021-11-06 06:19:10 +0100 | sa | (sid1055@id-1055.tinside.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:10 +0100 | cbarrett | (sid192934@id-192934.helmsley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:10 +0100 | bw | (sid2730@user/betawaffle) (Ping timeout: 260 seconds) |
2021-11-06 06:19:16 +0100 | hamishmack | (sid389057@id-389057.hampstead.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:19:16 +0100 | glowcoil | (sid3405@id-3405.tinside.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:19:16 +0100 | idnar | (sid12240@debian/mithrandi) (Ping timeout: 245 seconds) |
2021-11-06 06:19:35 +0100 | aristid | (sid1599@id-1599.uxbridge.irccloud.com) (Ping timeout: 264 seconds) |
2021-11-06 06:19:36 +0100 | SanchayanMaity | (sid478177@id-478177.hampstead.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:36 +0100 | alanz | (sid110616@id-110616.uxbridge.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:19:41 +0100 | jackdk | (sid373013@cssa/jackdk) (Ping timeout: 245 seconds) |
2021-11-06 06:19:41 +0100 | meinside | (uid24933@id-24933.helmsley.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:19:41 +0100 | dpratt_ | (sid193493@id-193493.helmsley.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:19:41 +0100 | obviyus | (sid415299@user/obviyus) (Ping timeout: 245 seconds) |
2021-11-06 06:19:41 +0100 | Pent | (sid313808@id-313808.lymington.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:19:41 +0100 | edmundnoble | (sid229620@id-229620.helmsley.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:19:41 +0100 | taktoa[c] | (sid282096@id-282096.tinside.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:19:41 +0100 | gonz___ | (sid304396@id-304396.lymington.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:19:41 +0100 | bbhoss | (sid18216@id-18216.tinside.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:19:43 +0100 | servytor | (uid525486@id-525486.hampstead.irccloud.com) (Ping timeout: 268 seconds) |
2021-11-06 06:19:45 +0100 | dsal | (sid13060@id-13060.lymington.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:04 +0100 | SethTisue__ | (sid14912@id-14912.ilkley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:04 +0100 | hendi | (sid489601@id-489601.lymington.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:04 +0100 | christiaanb | (sid84827@id-84827.lymington.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:04 +0100 | kaychaks__ | (sid236345@id-236345.helmsley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:06 +0100 | agander_m | (sid407952@id-407952.tinside.irccloud.com) (Ping timeout: 245 seconds) |
2021-11-06 06:20:11 +0100 | JSharp | (sid4580@id-4580.lymington.irccloud.com) (Ping timeout: 264 seconds) |
2021-11-06 06:20:18 +0100 | pjlsergeant | (sid143467@id-143467.hampstead.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:18 +0100 | rubin55 | (sid175221@id-175221.hampstead.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:20 +0100 | ysh | (sid6017@id-6017.ilkley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:20 +0100 | alinab | (sid468903@id-468903.helmsley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:20 +0100 | econo | (uid147250@user/econo) (Ping timeout: 268 seconds) |
2021-11-06 06:20:20 +0100 | rtpg | (sid443069@id-443069.ilkley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:20 +0100 | gmc | (sid58314@id-58314.ilkley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:21 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) (Ping timeout: 268 seconds) |
2021-11-06 06:20:23 +0100 | S11001001 | (sid42510@id-42510.ilkley.irccloud.com) (Ping timeout: 252 seconds) |
2021-11-06 06:20:23 +0100 | sa1 | (sid7690@id-7690.ilkley.irccloud.com) (Ping timeout: 252 seconds) |
2021-11-06 06:20:26 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 06:20:32 +0100 | tritlo | (sid58727@user/tritlo) (Ping timeout: 260 seconds) |
2021-11-06 06:20:32 +0100 | ehamberg | (sid18208@id-18208.hampstead.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:32 +0100 | aarchi | (sid486183@id-486183.uxbridge.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:32 +0100 | ephemient | (uid407513@id-407513.lymington.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:32 +0100 | scav | (sid309693@id-309693.helmsley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:32 +0100 | hubvu | (sid495858@user/hubvu) (Ping timeout: 260 seconds) |
2021-11-06 06:20:32 +0100 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:32 +0100 | b20n | (sid115913@id-115913.uxbridge.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:39 +0100 | jakesyl_ | (sid56879@id-56879.hampstead.irccloud.com) (Ping timeout: 268 seconds) |
2021-11-06 06:20:46 +0100 | pony | (sid524992@smol/hors) (Ping timeout: 260 seconds) |
2021-11-06 06:20:55 +0100 | mcfilib | (sid302703@user/mcfilib) (Ping timeout: 260 seconds) |
2021-11-06 06:20:55 +0100 | integral | (sid296274@user/integral) (Ping timeout: 260 seconds) |
2021-11-06 06:20:55 +0100 | awpr | (uid446117@id-446117.lymington.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:20:58 +0100 | hongminhee | (sid295@id-295.tinside.irccloud.com) (Ping timeout: 268 seconds) |
2021-11-06 06:21:00 +0100 | stevenxl | (sid133530@id-133530.uxbridge.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:21:00 +0100 | tnks | (sid412124@id-412124.helmsley.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:21:00 +0100 | bjs | (sid190364@user/bjs) (Ping timeout: 260 seconds) |
2021-11-06 06:21:00 +0100 | Firedancer | (sid336191@id-336191.hampstead.irccloud.com) (Ping timeout: 260 seconds) |
2021-11-06 06:21:04 +0100 | lightandlight | (sid135476@id-135476.helmsley.irccloud.com) |
2021-11-06 06:21:08 +0100 | parseval | (sid239098@id-239098.helmsley.irccloud.com) |
2021-11-06 06:21:09 +0100 | ysh | (sid6017@id-6017.ilkley.irccloud.com) |
2021-11-06 06:21:10 +0100 | hubvu | (sid495858@user/hubvu) |
2021-11-06 06:21:10 +0100 | scav | (sid309693@id-309693.helmsley.irccloud.com) |
2021-11-06 06:21:10 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) |
2021-11-06 06:21:11 +0100 | S11001001 | (sid42510@id-42510.ilkley.irccloud.com) |
2021-11-06 06:21:15 +0100 | NemesisD | (sid24071@id-24071.lymington.irccloud.com) |
2021-11-06 06:21:16 +0100 | aristid | (sid1599@id-1599.uxbridge.irccloud.com) |
2021-11-06 06:21:18 +0100 | gregberns__ | (sid315709@helmsley.irccloud.com) |
2021-11-06 06:21:19 +0100 | SethTisue__ | (sid14912@ilkley.irccloud.com) |
2021-11-06 06:21:19 +0100 | sa1 | (sid7690@id-7690.ilkley.irccloud.com) |
2021-11-06 06:21:20 +0100 | dsal | (sid13060@id-13060.lymington.irccloud.com) |
2021-11-06 06:21:21 +0100 | whez | (sid470288@lymington.irccloud.com) |
2021-11-06 06:21:21 +0100 | bjs | (sid190364@user/bjs) |
2021-11-06 06:21:22 +0100 | bbhoss | (sid18216@id-18216.tinside.irccloud.com) |
2021-11-06 06:21:24 +0100 | mrianbloom | (sid350277@ilkley.irccloud.com) |
2021-11-06 06:21:24 +0100 | glowcoil | (sid3405@tinside.irccloud.com) |
2021-11-06 06:21:24 +0100 | supersven | (sid501114@ilkley.irccloud.com) |
2021-11-06 06:21:27 +0100 | sa | (sid1055@id-1055.tinside.irccloud.com) |
2021-11-06 06:21:29 +0100 | vito | (sid1962@id-1962.uxbridge.irccloud.com) |
2021-11-06 06:21:30 +0100 | hongminhee | (sid295@id-295.tinside.irccloud.com) |
2021-11-06 06:21:30 +0100 | hendi | (sid489601@id-489601.lymington.irccloud.com) |
2021-11-06 06:21:31 +0100 | vito | (sid1962@id-1962.uxbridge.irccloud.com) (Changing host) |
2021-11-06 06:21:31 +0100 | vito | (sid1962@user/vito) |
2021-11-06 06:21:39 +0100 | servytor | (uid525486@2a03:5180:f:4::8:4ae) |
2021-11-06 06:21:39 +0100 | JSharp | (sid4580@id-4580.lymington.irccloud.com) |
2021-11-06 06:21:42 +0100 | meinside | (uid24933@helmsley.irccloud.com) |
2021-11-06 06:21:44 +0100 | alinab | (sid468903@helmsley.irccloud.com) |
2021-11-06 06:21:44 +0100 | Pent | (sid313808@2a03:5180:f:2::4:c9d0) |
2021-11-06 06:21:45 +0100 | gmc | (sid58314@ilkley.irccloud.com) |
2021-11-06 06:21:46 +0100 | gonz___ | (sid304396@2a03:5180:f:2::4:a50c) |
2021-11-06 06:21:46 +0100 | aria | (sid380617@lymington.irccloud.com) |
2021-11-06 06:21:48 +0100 | idnar | (sid12240@debian/mithrandi) |
2021-11-06 06:21:49 +0100 | rtpg | (sid443069@2a03:5180:f:3::6:c2bd) |
2021-11-06 06:21:52 +0100 | hamishmack | (sid389057@2a03:5180:f:4::5:efc1) |
2021-11-06 06:21:52 +0100 | awpr | (uid446117@lymington.irccloud.com) |
2021-11-06 06:21:53 +0100 | systemfault | (sid267009@2a03:5180:f:5::4:1301) |
2021-11-06 06:21:54 +0100 | christiaanb | (sid84827@id-84827.lymington.irccloud.com) |
2021-11-06 06:21:58 +0100 | bw | (sid2730@user/betawaffle) |
2021-11-06 06:21:58 +0100 | truckasaurus | (sid457088@id-457088.helmsley.irccloud.com) |
2021-11-06 06:21:59 +0100 | agander_m | (sid407952@2a03:5180:f::6:3990) |
2021-11-06 06:21:59 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds) |
2021-11-06 06:21:59 +0100 | obviyus | (sid415299@user/obviyus) |
2021-11-06 06:22:00 +0100 | tnks | (sid412124@2a03:5180:f:1::6:49dc) |
2021-11-06 06:22:00 +0100 | mcfilib | (sid302703@2a03:5180:f:1::4:9e6f) |
2021-11-06 06:22:00 +0100 | mcfilib | (sid302703@2a03:5180:f:1::4:9e6f) (Changing host) |
2021-11-06 06:22:00 +0100 | mcfilib | (sid302703@user/mcfilib) |
2021-11-06 06:22:01 +0100 | taktoa[c] | (sid282096@id-282096.tinside.irccloud.com) |
2021-11-06 06:22:02 +0100 | nrr_ | (sid20938@id-20938.lymington.irccloud.com) |
2021-11-06 06:22:04 +0100 | kaychaks__ | (sid236345@2a03:5180:f:1::3:9b39) |
2021-11-06 06:22:05 +0100 | ephemient | (uid407513@2a03:5180:f:2::6:37d9) |
2021-11-06 06:22:06 +0100 | edmundnoble | (sid229620@2a03:5180:f:1::3:80f4) |
2021-11-06 06:22:08 +0100 | cbarrett | (sid192934@2a03:5180:f:1::2:f1a6) |
2021-11-06 06:22:11 +0100 | jackdk | (sid373013@cssa/jackdk) |
2021-11-06 06:22:11 +0100 | econo | (uid147250@user/econo) |
2021-11-06 06:22:14 +0100 | integral | (sid296274@user/integral) |
2021-11-06 06:22:18 +0100 | whatsupdoc | (uid509081@2a03:5180:f:4::7:c499) |
2021-11-06 06:22:20 +0100 | carter | (sid14827@id-14827.helmsley.irccloud.com) |
2021-11-06 06:22:21 +0100 | b20n | (sid115913@2a03:5180:f:5::1:c4c9) |
2021-11-06 06:22:22 +0100 | stevenxl | (sid133530@2a03:5180:f:5::2:99a) |
2021-11-06 06:22:22 +0100 | dpratt_ | (sid193493@helmsley.irccloud.com) |
2021-11-06 06:22:24 +0100 | pony | (sid524992@smol/hors) |
2021-11-06 06:22:25 +0100 | aarchi | (sid486183@2a03:5180:f:5::7:6b27) |
2021-11-06 06:22:25 +0100 | SanchayanMaity | (sid478177@2a03:5180:f:4::7:4be1) |
2021-11-06 06:22:25 +0100 | Firedancer | (sid336191@2a03:5180:f:4::5:213f) |
2021-11-06 06:22:25 +0100 | pepeiborra | (sid443799@2a03:5180:f:3::6:c597) |
2021-11-06 06:22:25 +0100 | alanz | (sid110616@2a03:5180:f:5::1:b018) |
2021-11-06 06:22:27 +0100 | pjlsergeant | (sid143467@2a03:5180:f:4::2:306b) |
2021-11-06 06:22:29 +0100 | rubin55 | (sid175221@2a03:5180:f:4::2:ac75) |
2021-11-06 06:22:47 +0100 | NiKaN | (sid385034@2a03:5180:f:1::5:e00a) |
2021-11-06 06:22:49 +0100 | jakesyl_ | (sid56879@2a03:5180:f:4::de2f) |
2021-11-06 06:24:11 +0100 | ehamberg | (sid18208@id-18208.hampstead.irccloud.com) |
2021-11-06 06:24:16 +0100 | tritlo | (sid58727@user/tritlo) |
2021-11-06 06:25:17 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 268 seconds) |
2021-11-06 06:27:01 +0100 | EvanR | (~evan@2600:1700:ba69:10:acd9:793b:27c9:b878) |
2021-11-06 06:36:26 +0100 | yauhsien | (~yauhsien@2402:7500:4e4:2cb1:35e8:471e:a055:9d52) |
2021-11-06 06:41:06 +0100 | Cajun | (~Cajun@user/cajun) (Quit: Client closed) |
2021-11-06 06:42:24 +0100 | Cajun | (~Cajun@user/cajun) |
2021-11-06 06:55:31 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 07:00:23 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 264 seconds) |
2021-11-06 07:05:10 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) (Read error: Connection reset by peer) |
2021-11-06 07:05:32 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) |
2021-11-06 07:06:42 +0100 | hololeap | (~hololeap@user/hololeap) (Remote host closed the connection) |
2021-11-06 07:08:14 +0100 | hololeap | (~hololeap@user/hololeap) |
2021-11-06 07:13:59 +0100 | euandreh | (~euandreh@2804:14c:33:9fe5:90d0:563b:3279:f95b) (Ping timeout: 268 seconds) |
2021-11-06 07:15:47 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2021-11-06 07:16:08 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2021-11-06 07:21:51 +0100 | chomwitt | (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) |
2021-11-06 07:25:05 +0100 | xff0x | (~xff0x@2001:1a81:52b1:3000:b3ef:fedd:d143:889a) (Ping timeout: 268 seconds) |
2021-11-06 07:25:35 +0100 | EvanR | (~evan@2600:1700:ba69:10:acd9:793b:27c9:b878) (Ping timeout: 264 seconds) |
2021-11-06 07:25:53 +0100 | xff0x | (~xff0x@2001:1a81:52b1:3000:355a:710f:ac35:1a61) |
2021-11-06 07:32:50 +0100 | MidAutumnMoon | (~MidAutumn@user/midautumnmoon) (Quit: Leaving for a break - theLounge) |
2021-11-06 07:33:26 +0100 | MidAutumnMoon | (~MidAutumn@user/midautumnmoon) |
2021-11-06 07:35:54 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2021-11-06 07:36:05 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2021-11-06 07:38:42 +0100 | chomwitt | (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Ping timeout: 260 seconds) |
2021-11-06 07:40:06 +0100 | xff0x | (~xff0x@2001:1a81:52b1:3000:355a:710f:ac35:1a61) (Ping timeout: 245 seconds) |
2021-11-06 07:41:05 +0100 | xff0x | (~xff0x@2001:1a81:52b1:3000:7ef:3640:6d4d:8cb8) |
2021-11-06 07:42:31 +0100 | aegon | (~mike@174.127.249.180) (Remote host closed the connection) |
2021-11-06 07:46:06 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 07:48:56 +0100 | alzgh | (~alzgh@user/alzgh) |
2021-11-06 07:50:31 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 245 seconds) |
2021-11-06 07:54:16 +0100 | yauhsien | (~yauhsien@2402:7500:4e4:2cb1:35e8:471e:a055:9d52) (Remote host closed the connection) |
2021-11-06 07:54:34 +0100 | vysn | (~vysn@user/vysn) |
2021-11-06 08:08:11 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2021-11-06 08:12:29 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 08:12:38 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-11-06 08:16:30 +0100 | chomwitt | (~chomwitt@athedsl-32204.home.otenet.gr) |
2021-11-06 08:17:07 +0100 | Sgeo_ | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2021-11-06 08:18:01 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 08:19:02 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-11-06 08:20:02 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-11-06 08:21:21 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-11-06 08:22:25 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 08:25:31 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 245 seconds) |
2021-11-06 08:27:14 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 260 seconds) |
2021-11-06 08:27:58 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-11-06 08:31:14 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) |
2021-11-06 08:33:49 +0100 | brainfreeze | (~brainfree@2a03:1b20:4:f011::20d) (Remote host closed the connection) |
2021-11-06 08:38:17 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2021-11-06 08:43:43 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 08:48:26 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 245 seconds) |
2021-11-06 08:51:54 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2021-11-06 08:52:11 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds) |
2021-11-06 08:59:40 +0100 | cheater | (~Username@user/cheater) |
2021-11-06 09:05:03 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-11-06 09:05:39 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection) |
2021-11-06 09:05:52 +0100 | johnny_sitar | (~artur@078088015209.bialystok.vectranet.pl) |
2021-11-06 09:07:05 +0100 | madjestic | (~madjestic@88-159-247-120.fixed.kpn.net) |
2021-11-06 09:08:30 +0100 | hendursa1 | (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
2021-11-06 09:12:53 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 09:14:47 +0100 | emf | (~emf@2620:10d:c090:400::5:f801) (Ping timeout: 264 seconds) |
2021-11-06 09:17:11 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Ping timeout: 245 seconds) |
2021-11-06 09:17:27 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-11-06 09:17:36 +0100 | hendursaga | (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
2021-11-06 09:17:51 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-11-06 09:19:26 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-11-06 09:21:40 +0100 | emf | (~emf@c-73-97-137-43.hsd1.wa.comcast.net) |
2021-11-06 09:26:47 +0100 | madjestic | (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 264 seconds) |
2021-11-06 09:28:59 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-11-06 09:29:05 +0100 | mei3 | (~mei@user/mei) |
2021-11-06 09:33:34 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
2021-11-06 09:39:36 +0100 | madjestic | (~madjestic@88-159-247-120.fixed.kpn.net) |
2021-11-06 09:43:20 +0100 | wonko | (~wjc@user/wonko) |
2021-11-06 09:55:16 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
2021-11-06 09:55:57 +0100 | v01d4lph4 | (~v01d4lph4@106.215.93.204) |
2021-11-06 09:55:57 +0100 | v01d4lph4 | (~v01d4lph4@106.215.93.204) (Changing host) |
2021-11-06 09:55:57 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) |
2021-11-06 10:00:03 +0100 | cloudy | (~cloudy@2001:470:69fc:105::50c0) (Quit: You have been kicked for being idle) |
2021-11-06 10:00:35 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 10:02:09 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection) |
2021-11-06 10:02:35 +0100 | random-jellyfish | (~random-je@user/random-jellyfish) |
2021-11-06 10:08:11 +0100 | johnny_sitar | (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 264 seconds) |
2021-11-06 10:12:55 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) |
2021-11-06 10:15:08 +0100 | Lycurgus | (~juan@98.4.112.204) |
2021-11-06 10:15:18 +0100 | ByronJohnson | (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 268 seconds) |
2021-11-06 10:19:55 +0100 | boxscape_ | (~boxscape_@mue-88-130-59-018.dsl.tropolys.de) |
2021-11-06 10:26:22 +0100 | _ht | (~quassel@82-169-194-8.biz.kpn.net) |
2021-11-06 10:26:54 +0100 | ByronJohnson | (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) |
2021-11-06 10:29:33 +0100 | johnny_sitar | (~artur@078088015209.bialystok.vectranet.pl) |
2021-11-06 10:33:56 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection) |
2021-11-06 10:36:35 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) |
2021-11-06 10:44:47 +0100 | kuribas | (~user@ptr-25vy0i7euy3zycfmzaa.18120a2.ip6.access.telenet.be) |
2021-11-06 10:47:18 +0100 | arahael | (~arahael@124.148.78.199) (Ping timeout: 260 seconds) |
2021-11-06 10:50:13 +0100 | Lycurgus | (~juan@98.4.112.204) (Quit: Exeunt) |
2021-11-06 10:53:39 +0100 | Athas | (athas@2a01:7c8:aaac:1cf:a0d4:8908:cfdb:b9c0) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-11-06 10:53:49 +0100 | Athas | (athas@sigkill.dk) |
2021-11-06 10:55:06 +0100 | wonko | (~wjc@user/wonko) (Ping timeout: 245 seconds) |
2021-11-06 10:59:16 +0100 | emanuele6 | (~emanuele6@user/emanuele6) (WeeChat 3.3) |
2021-11-06 10:59:47 +0100 | johnny_sitar | (~artur@078088015209.bialystok.vectranet.pl) (Remote host closed the connection) |
2021-11-06 11:00:04 +0100 | johnny_sitar | (~artur@078088015209.bialystok.vectranet.pl) |
2021-11-06 11:00:21 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection) |
2021-11-06 11:04:16 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds) |
2021-11-06 11:07:19 +0100 | chomwitt | (~chomwitt@athedsl-32204.home.otenet.gr) (Ping timeout: 256 seconds) |
2021-11-06 11:12:36 +0100 | arahael | (~arahael@202-159-171-156.tpgi.com.au) |
2021-11-06 11:13:01 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) |
2021-11-06 11:17:26 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2021-11-06 11:22:18 +0100 | <joel135> | ski: by p(d/dx) i mean for example the differential operator f ↦ f + 5 d²f/dx², if p(t) is 1 + 5 t^2. the idea that you get the typing p(d/dx) : ℕ₄ is unfortunately only approximate, since supposedly ℕ₄ consists of just the "algebraic" operators (formed from the progression of constants 0, 1, x, I and corresponding binary operators _+_, _*_, _∘_, _▫_ (for lack of more standard notation)), |
2021-11-06 11:23:05 +0100 | <joel135> | among which d/dx and p(d/dx) don't seem to quite fit in although do they live "at the right level" in that they are operators that can be turned into functions ℕ₃ → ℕ₃ (i.e. forall o. ⋯ → forall o. ⋯). |
2021-11-06 11:29:55 +0100 | mmhat | (~mmh@55d4b9d8.access.ecotel.net) |
2021-11-06 11:35:52 +0100 | Inst | (~Inst@2601:6c4:4080:3f80:40a:9f91:8f3e:4f02) |
2021-11-06 11:36:03 +0100 | <Inst> | a gonad is just a gonoid in the category of endofunctors ;) |
2021-11-06 11:44:56 +0100 | zer0bitz | (~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi) |
2021-11-06 11:45:13 +0100 | kuribas | (~user@ptr-25vy0i7euy3zycfmzaa.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
2021-11-06 11:47:05 +0100 | whatsupdoc | (uid509081@2a03:5180:f:4::7:c499) (Quit: Connection closed for inactivity) |
2021-11-06 11:47:42 +0100 | <joel135> | the reason that i want to call it a "middle degeneracy" is that addition is sent to addition ((p+q)(d/dx) = p(d/dx)+q(d/dx), the "same level") whereas multiplication of pure powers tᵃtᵇ is sent to operator composition ((tᵃtᵇ)(d/dx) = dᵃ⁺ᵇ/dxᵃ⁺ᵇ = dᵃ/dxᵃ ▫ dᵇ/dxᵇ = (tᵃ)(d/dx) ▫ (tᵇ)(d/dx), a "higher level" in the progression of _+_, _*_, _∘_, _▫_, ...) |
2021-11-06 11:51:08 +0100 | <joel135> | anything that is not acting in the "middle" of this progression of operators would either leave it alone (sending p to \_ -> p) or shift the entire hierarchy by one or more steps like you do for the Antecedent (sending p to p) |
2021-11-06 12:00:50 +0100 | alx741 | (~alx741@181.196.68.55) |
2021-11-06 12:05:18 +0100 | tremon | (~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in) |
2021-11-06 12:05:30 +0100 | Pickchea | (~private@user/pickchea) |
2021-11-06 12:07:19 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
2021-11-06 12:10:16 +0100 | cocreatu1 | cocreature |
2021-11-06 12:14:20 +0100 | desantra | (~skykanin@user/skykanin) |
2021-11-06 12:21:34 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 12:22:48 +0100 | rond_ | (~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438) |
2021-11-06 12:23:02 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-11-06 12:23:27 +0100 | <joel135> | <ski> "normally", success and failure continuations are not mixed up with each other. but for implication, when `Consequent' succeeds, that is then interpreted by `Antecedent' as a failure, a prod for it to generate another solution (spawning a new, conceptually separate, call to `Consequent') |
2021-11-06 12:24:43 +0100 | <joel135> | ah, after a night's sleep am beginning to understand this now. it is an astute observation |
2021-11-06 12:25:46 +0100 | johnny_sitar | (~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 260 seconds) |
2021-11-06 12:27:08 +0100 | desantra | (~skykanin@user/skykanin) (Quit: WeeChat 3.3) |
2021-11-06 12:27:20 +0100 | desantra | (~skykanin@user/skykanin) |
2021-11-06 12:28:55 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
2021-11-06 12:31:16 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-11-06 12:32:07 +0100 | <joel135> | by the way, did you represent your type of multidimensional arrays (assuming you mean something like a list of lists, but with the constraint that they form a rectangular grid in the end) by some kind of Church encoding? i don't see how to accomplish that off the top of my head. |
2021-11-06 12:32:21 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Remote host closed the connection) |
2021-11-06 12:35:43 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
2021-11-06 12:36:37 +0100 | desantra | (~skykanin@user/skykanin) (Quit: WeeChat 3.3) |
2021-11-06 12:37:49 +0100 | desantra | (~skykanin@user/skykanin) |
2021-11-06 12:40:42 +0100 | chomwitt | (~chomwitt@athedsl-32204.home.otenet.gr) |
2021-11-06 12:42:25 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
2021-11-06 12:44:41 +0100 | madjestic | (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 245 seconds) |
2021-11-06 12:48:09 +0100 | fendor | (~fendor@91.141.74.77.wireless.dyn.drei.com) |
2021-11-06 12:49:44 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:9554:7177:bc66:d82f) |
2021-11-06 12:49:47 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:9554:7177:bc66:d82f) (Client Quit) |
2021-11-06 12:50:41 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 268 seconds) |
2021-11-06 12:52:18 +0100 | boxscape_ | (~boxscape_@mue-88-130-59-018.dsl.tropolys.de) (Ping timeout: 260 seconds) |
2021-11-06 12:59:16 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2021-11-06 12:59:47 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2021-11-06 13:01:18 +0100 | <alzgh> | hello, I'm trying to rewrite `tupledMonad1` using bind notation `>>=`. Any help and hint is appreciated https://paste.tomsmeding.com/odkcLN80 |
2021-11-06 13:01:31 +0100 | basti_ | (~basti@ip-84-119-8-195.unity-media.net) |
2021-11-06 13:02:05 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 13:03:20 +0100 | tfeb | (~tfb@88.98.95.237) |
2021-11-06 13:04:34 +0100 | alx741 | (~alx741@181.196.68.55) (Quit: alx741) |
2021-11-06 13:05:13 +0100 | cosimone | (~user@93-47-229-157.ip115.fastwebnet.it) |
2021-11-06 13:07:42 +0100 | tfeb | (~tfb@88.98.95.237) (Client Quit) |
2021-11-06 13:08:01 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds) |
2021-11-06 13:11:50 +0100 | fendor_ | (~fendor@91.141.74.77.wireless.dyn.drei.com) |
2021-11-06 13:11:51 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) |
2021-11-06 13:12:36 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65) (Remote host closed the connection) |
2021-11-06 13:14:15 +0100 | fendor | (~fendor@91.141.74.77.wireless.dyn.drei.com) (Ping timeout: 256 seconds) |
2021-11-06 13:17:30 +0100 | fendor_ | fendor |
2021-11-06 13:22:38 +0100 | <Pickchea> | Hey, is there a way to make the type checker accept this? \p q -> p q p |
2021-11-06 13:24:24 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2021-11-06 13:24:39 +0100 | <hpc> | wrap it in Fix maybe? |
2021-11-06 13:25:54 +0100 | <hpc> | what type do you want p to have? |
2021-11-06 13:26:00 +0100 | <ski> | joel135 : by ⌜f ↦ f + 5 d²f/dx²⌝, you mean ⌜f ↦ x ↦ f x + 5 ⋅ d² (f x) / (d x)²⌝ ? what's ⌜I⌝,⌜▫⌝ ? |
2021-11-06 13:26:30 +0100 | <ski> | ("ah, after a night's sleep .." -- ok, good) |
2021-11-06 13:27:45 +0100 | <joel135> | yes that is what i mean |
2021-11-06 13:28:26 +0100 | <ski> | joel135 : no, iirc just nested "arrays" (implemented as compound terms, using the standard arg/3 to access at a positive integer index). this was before i got to thinking about "backtracking backtracking", and started fiddling with continuation levels |
2021-11-06 13:29:27 +0100 | jess | (~jess@libera/staff/jess) |
2021-11-06 13:30:41 +0100 | <joel135> | of type ℕ₄, I and _▫_ are just id and comp |
2021-11-06 13:31:15 +0100 | <joel135> | of type ℕ₅, I and _▫_ are pure id and liftA2 comp |
2021-11-06 13:31:23 +0100 | <joel135> | and so on |
2021-11-06 13:31:24 +0100 | <ski> | (i then tried using some (iirc) setarg/3 (low-level mutation), in order to attempt to make some changes survive backtracking. recently i found a linkarg/3 (more unsafe), which i think maybe could have been used to avoid (what i deemed to be) problems caused by optimizations assuming purity (no mutation)) |
2021-11-06 13:31:34 +0100 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
2021-11-06 13:32:22 +0100 | <Pickchea> | hpc, couldn't figure it out with fix. I'm just playing around. Say `true a b = a' and `false a b = b'. It would follow that `and a b = a b a'. |
2021-11-06 13:32:26 +0100 | <ski> | hm, so just continuing the pattern of successively (environment-)lifted identity and composition, ok |
2021-11-06 13:32:52 +0100 | <ski> | (i still wonder about a "numerical" interpretation of them) |
2021-11-06 13:34:03 +0100 | <ski> | Pickchea : what about `and a b p q = a (b p q) q' ? |
2021-11-06 13:34:03 +0100 | <joel135> | I is to be that operator which given a polynomial returns that polynomial without modification |
2021-11-06 13:34:05 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2021-11-06 13:35:19 +0100 | <joel135> | another operator of the same type would be p(x) ↦ p(x+n) for a fixed natural number n. this is a bona fide operator of type ℕ₄. |
2021-11-06 13:35:45 +0100 | <ski> | "operator" here being an operator on polynomials, presumably generated from an "oracle"/indeterminate/unknown/variable/formal such operator ? |
2021-11-06 13:35:56 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) |
2021-11-06 13:37:08 +0100 | <ski> | (i take that to mean ⌜p ↦ x ↦ p (x + n)⌝) |
2021-11-06 13:37:37 +0100 | <Pickchea> | ski, what are you, some kind genius? :-D |
2021-11-06 13:37:58 +0100 | <ski> | Pickchea : or, you could declare `type ChurchBool = forall o. o -> o -> o' (and enable `Rank2Types'), i think ? |
2021-11-06 13:38:07 +0100 | jumper149 | (~jumper149@80.240.31.34) |
2021-11-06 13:38:46 +0100 | <ski> | (i think, using that, you may be able to get `and a b = a b a' to check) |
2021-11-06 13:39:24 +0100 | <ski> | Pickchea : i was just talking, some hours ago, about Church numerals :) |
2021-11-06 13:40:13 +0100 | <ski> | (oh, and obviously you'd need the type signature that you expect, on `and', for that to possibly work) |
2021-11-06 13:43:44 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 268 seconds) |
2021-11-06 13:44:34 +0100 | favonia | (~favonia@user/favonia) |
2021-11-06 13:45:37 +0100 | <Pickchea> | ski, couldn't do it with Rank2Types. But interesting stuff. If it works with `and a b p q = a (b p q) q' I wonder why `and a b = a b a' can't pass the type check. |
2021-11-06 13:45:47 +0100 | <Pickchea> | Seems complicated :-D |
2021-11-06 13:46:17 +0100 | <hpc> | it's the same reason you can't write (\x -> x x) in simply typed lambda calculus |
2021-11-06 13:47:48 +0100 | <hpc> | the unifier has to solve a = b -> a -> c |
2021-11-06 13:47:59 +0100 | <hpc> | which is a = b -> (b -> (b -> (... |
2021-11-06 13:48:02 +0100 | <hpc> | which is an infinite type |
2021-11-06 13:49:32 +0100 | <Pickchea> | Yeah, I thought something like that! |
2021-11-06 13:49:45 +0100 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
2021-11-06 13:50:10 +0100 | <Pickchea> | This point goes to Lisp I guess :-D |
2021-11-06 13:51:44 +0100 | aleator | (~aleator@178-55-117-52.bb.dnainternet.fi) |
2021-11-06 13:52:09 +0100 | <ski> | Pickchea : did you try adding a type signature for `and' ? |
2021-11-06 13:53:02 +0100 | <joel135> | ski: yes, an operator on polynomials, and it is correct to write it as p ↦ x ↦ p (x + n) where then p : ((o -> o) -> (o -> o)) -> ((o -> o) -> (o -> o)) and x : ((o -> o) -> (o -> o)) and o is a type variable |
2021-11-06 13:53:05 +0100 | <ski> | Pickchea : oh .. and if you want to play around with cyclic / "infinite" (/ equi-recursive) types, you could use `ocaml -rectypes' |
2021-11-06 13:53:47 +0100 | <unit73e> | I don't know why aeson only has these super simple examples |
2021-11-06 13:53:54 +0100 | <unit73e> | the best I found was this guy: https://artyom.me/aeson |
2021-11-06 13:54:12 +0100 | <joel135> | note the distinction between the type ℕ₃ → ℕ₃ of arbitrary recursively defined operators on polynomials, and the more modest type ℕ₄ of "algebraically defined" operators on polynomials |
2021-11-06 13:54:36 +0100 | <joel135> | the latter includes the translation operator from above, but presumably it doesn't include the differentiation operator |
2021-11-06 13:55:02 +0100 | <ski> | (but there's a reason why static type systems normally don't allow that .. namely that there's a lot of false negatives, common type errors that now become type-correct, with strange inferred cyclic types, and only at a later time and place the issue may be noticed, the error location usually pointing to the "wrong place") |
2021-11-06 13:55:57 +0100 | <ski> | joel135 : *nod*, interesting |
2021-11-06 13:58:04 +0100 | <ski> | (this relates to my idea of, in implication chains in proofs, whenever possible, working inside/within a universal, rather than using (the more powerful) reasoning between universals. a kind of "principle of least power" or something) |
2021-11-06 13:58:09 +0100 | <unit73e> | however I agree that artyom should show the efficient way of using aeson. I don't like when you're tuturials show the wrong way. Why? Makes no sense to me. |
2021-11-06 13:59:14 +0100 | <ski> | (hm, now i'm associating the above to minimal logic, and to the meta-distinction between derivable and admissible inference rules) |
2021-11-06 14:01:04 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-11-06 14:01:05 +0100 | <ski> | joel135 : would this indeterminate operator that generates "operanomials" have any kind of "distribute" laws or something, wrt the other algebraic operations ? |
2021-11-06 14:02:18 +0100 | aleator | (~aleator@178-55-117-52.bb.dnainternet.fi) (Ping timeout: 260 seconds) |
2021-11-06 14:02:27 +0100 | Alex_test | (~al_test@94.233.241.187) (Quit: ;-) |
2021-11-06 14:02:30 +0100 | AlexZenon | (~alzenon@94.233.241.187) (Quit: ;-) |
2021-11-06 14:02:59 +0100 | AlexNoo | (~AlexNoo@94.233.241.187) (Quit: Leaving) |
2021-11-06 14:03:53 +0100 | chomwitt | (~chomwitt@athedsl-32204.home.otenet.gr) (Remote host closed the connection) |
2021-11-06 14:03:57 +0100 | <Inst> | erm |
2021-11-06 14:03:59 +0100 | <Inst> | looking for some help |
2021-11-06 14:04:13 +0100 | <Inst> | in Haskell code, provided I'm running on a Windows system |
2021-11-06 14:04:40 +0100 | <Inst> | how do I call the Windows API to create a default system "open file / save file" dialogue, then bind it to Haskell IO? |
2021-11-06 14:05:00 +0100 | <joel135> | i think all generalized operators satisfy a one-sided distributive law like (A *ₖ B) *ₗ C = (A *ₗ C ) *ₖ (B *ₗ C) for k < l (or k > l, depending on conventions) |
2021-11-06 14:05:50 +0100 | <joel135> | where *ₖ and *ₗ have the same type ℕₙ → ℕₙ → ℕₙ |
2021-11-06 14:06:23 +0100 | <joel135> | generalized nullary/binary operators, i should say |
2021-11-06 14:06:33 +0100 | <Pickchea> | ski, thanks! :-) |
2021-11-06 14:06:34 +0100 | basti_ | (~basti@ip-84-119-8-195.unity-media.net) (Ping timeout: 260 seconds) |
2021-11-06 14:08:50 +0100 | <hpc> | Inst: there's a win32 package, and bindings to various ui toolkits |
2021-11-06 14:09:16 +0100 | <Inst> | win32 package and bindings to various ui toolkits? |
2021-11-06 14:09:25 +0100 | <Inst> | iirc there's a package to set up windows GUI, etc |
2021-11-06 14:09:30 +0100 | <hpc> | yeah, one of those might have it |
2021-11-06 14:09:40 +0100 | <Inst> | "might" |
2021-11-06 14:09:41 +0100 | <Inst> | sigh |
2021-11-06 14:09:48 +0100 | <hpc> | windows has so many random ways of doing things i don't know exactly what the api call for that dialogue is |
2021-11-06 14:10:08 +0100 | jinsun | (~quassel@user/jinsun) (Read error: Connection reset by peer) |
2021-11-06 14:10:18 +0100 | <hpc> | worst case scenario, you get a gtk window instead of a native window |
2021-11-06 14:10:28 +0100 | <hpc> | so that way is guaranteed to work with some effort |
2021-11-06 14:10:40 +0100 | <hpc> | can't help more, myself :( |
2021-11-06 14:13:19 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
2021-11-06 14:13:48 +0100 | zincy | (~tom@2a00:23c8:970c:4801:e02d:7bbd:5337:7d58) (Remote host closed the connection) |
2021-11-06 14:14:02 +0100 | <joel135> | ski: yes, these contemplations about "power" and "meta-inferences" seem relevant here |
2021-11-06 14:16:34 +0100 | azimut_ | (~azimut@gateway/tor-sasl/azimut) |
2021-11-06 14:17:03 +0100 | <Inst> | can this handle it for me? |
2021-11-06 14:17:04 +0100 | <Inst> | https://hackage.haskell.org/package/Win32 |
2021-11-06 14:17:13 +0100 | <Inst> | it's a win32 api binding for windows |
2021-11-06 14:18:02 +0100 | EvanR | (~evan@2600:1700:ba69:10:75fc:f740:4c21:d03d) |
2021-11-06 14:19:12 +0100 | <ski> | joel135 : hm, i see |
2021-11-06 14:20:30 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds) |
2021-11-06 14:21:05 +0100 | AlexNoo | (~AlexNoo@94.233.241.187) |
2021-11-06 14:21:08 +0100 | AlexZenon | (~alzenon@94.233.241.187) |
2021-11-06 14:22:03 +0100 | jinsun | (~quassel@user/jinsun) |
2021-11-06 14:22:13 +0100 | <ski> | (it's not really clear to me why polynomials, or "operanomials", crop up here .. also, i'm now vaguely recalling some paper that talked about representing numbers in terms of endofunctions on endofunctions, and, iirc, introduced extra conditions for when one could form e.g. various rationals (in addition to the negatives, which require bijectivity on the inner endos)) |
2021-11-06 14:22:29 +0100 | Alex_test | (~al_test@94.233.241.187) |
2021-11-06 14:25:10 +0100 | ski | . o O ( "Continuity of Gödel's system T definable functionals via effectful forcing" by Martín Escardó in 2013 at <https://www.cs.bham.ac.uk/~mhe/dialogue/dialogue.pdf> .. has oracles ) |
2021-11-06 14:26:47 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
2021-11-06 14:27:33 +0100 | <tomjaguarpaw> | How do I get Haddock to link to a constructor or pattern rather than a data type? |
2021-11-06 14:28:12 +0100 | <tomjaguarpaw> | For example if I have data Foo = Bar; data Baz = Foo how do I get the Haddock syntax 'Foo' to link to the constructor of Bar ? |
2021-11-06 14:29:29 +0100 | <tomjaguarpaw> | Ah, it's v'Foo' |
2021-11-06 14:29:34 +0100 | rond_ | (~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438) (Quit: Client closed) |
2021-11-06 14:29:41 +0100 | <tomjaguarpaw> | https://github.com/haskell/haddock/issues/667 |
2021-11-06 14:36:18 +0100 | max22- | (~maxime@2a01cb08833598005d78e1cb2fc9f4a2.ipv6.abo.wanadoo.fr) |
2021-11-06 14:40:28 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2021-11-06 14:40:31 +0100 | MidAutumnMoon | (~MidAutumn@user/midautumnmoon) (Quit: Ping timeout (120 seconds)) |
2021-11-06 14:40:44 +0100 | MidAutumnMoon | (~MidAutumn@user/midautumnmoon) |
2021-11-06 14:40:49 +0100 | johnny_sitar | (~artur@078088015209.bialystok.vectranet.pl) |
2021-11-06 14:41:42 +0100 | max22- | (~maxime@2a01cb08833598005d78e1cb2fc9f4a2.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds) |
2021-11-06 14:48:52 +0100 | <gentauro> | built my first ARM (M1) Haskell binary with stack/cabal. Not that hard. The worst part? Is going from NixOS + Xmonad to `macOS`. Gosh, that OS is absolutely rubbish :-\ |
2021-11-06 14:49:31 +0100 | <joel135> | ski: that stuff of representing numbers (not just the semiring of natural numbers N but also N[x] and so on) in terms of endofunctions on endofunctions is the sort of stuff i was thinking briefly about earlier this week |
2021-11-06 14:49:40 +0100 | gentauro | I would <3 that somebody managed to make the `fancy` Apple hardware work on NixOS xD |
2021-11-06 14:49:56 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-11-06 14:50:08 +0100 | <joel135> | also N[eps] := N[x]/(x^2) |
2021-11-06 14:50:47 +0100 | <joel135> | for what o is this the same as the type (o -> o) -> (o -> o) ? trippy question |
2021-11-06 14:52:47 +0100 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 268 seconds) |
2021-11-06 14:56:38 +0100 | favonia | (~favonia@user/favonia) (Remote host closed the connection) |
2021-11-06 14:57:36 +0100 | favonia | (~favonia@user/favonia) |
2021-11-06 14:59:42 +0100 | <ski> | hmm |
2021-11-06 15:04:27 +0100 | <tomjaguarpaw> | c |
2021-11-06 15:08:08 +0100 | rembo10 | (~rembo10@remulis.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-11-06 15:08:43 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2021-11-06 15:09:11 +0100 | rembo10 | (~rembo10@remulis.com) |
2021-11-06 15:12:15 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2021-11-06 15:14:55 +0100 | jumper149 | (~jumper149@80.240.31.34) (Quit: WeeChat 3.3) |
2021-11-06 15:20:52 +0100 | max22- | (~maxime@2a01cb0883359800bbde3f2c88505b2a.ipv6.abo.wanadoo.fr) |
2021-11-06 15:23:38 +0100 | gg | (~gg@2a01:e0a:819:1510:89f0:97ca:21c4:6ea6) (Ping timeout: 268 seconds) |
2021-11-06 15:27:32 +0100 | <Inst> | my problem is partially solved |
2021-11-06 15:27:42 +0100 | <Inst> | turns out there's haskell libs binding to FLTK |
2021-11-06 15:27:46 +0100 | <Inst> | FLTK has native window open close support |
2021-11-06 15:28:04 +0100 | <Inst> | erm, support for opening native file open / save apps |
2021-11-06 15:31:16 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 15:31:24 +0100 | kspalaiologos | (~kspalaiol@user/kspalaiologos) |
2021-11-06 15:32:23 +0100 | hendursaga | (~weechat@user/hendursaga) (Remote host closed the connection) |
2021-11-06 15:33:05 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-11-06 15:33:30 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-11-06 15:38:11 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
2021-11-06 15:42:55 +0100 | __monty__ | (~toonn@user/toonn) |
2021-11-06 15:46:44 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-11-06 15:47:38 +0100 | acidjnk | (~acidjnk@p200300d0c7263574f86fe22bbcd0fec5.dip0.t-ipconnect.de) |
2021-11-06 15:49:20 +0100 | robertfry | (~robertfry@cosh-19-b2-v4wan-161499-cust683.vm10.cable.virginm.net) |
2021-11-06 15:53:45 +0100 | hendursaga | (~weechat@user/hendursaga) (Remote host closed the connection) |
2021-11-06 15:54:17 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-11-06 15:55:06 +0100 | TheCoffeMaker_ | (~TheCoffeM@125-121-245-190.fibertel.com.ar) (Quit: So long and thanks for all the fish) |
2021-11-06 15:57:03 +0100 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) |
2021-11-06 15:57:54 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 16:02:18 +0100 | hololeap_ | (~hololeap@user/hololeap) |
2021-11-06 16:02:33 +0100 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
2021-11-06 16:03:56 +0100 | mrkrktsndctcrpt | (~mrkrktsnd@50.228.44.6) |
2021-11-06 16:05:23 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2021-11-06 16:08:10 +0100 | basti_ | (~basti@ip-84-119-8-195.unity-media.net) |
2021-11-06 16:11:38 +0100 | <dsal> | gentauro: I run nix on macos |
2021-11-06 16:12:05 +0100 | <dsal> | Not xmonad, though. I run that on nixos |
2021-11-06 16:13:37 +0100 | <gentauro> | dsal: yeah, I run the `nix` (package manager) as well on the `macOS` |
2021-11-06 16:13:50 +0100 | <gentauro> | but I would rather run `NixOS` on the Apple hardware ;) |
2021-11-06 16:14:17 +0100 | TranquilEcho | (~grom@user/tranquilecho) |
2021-11-06 16:15:53 +0100 | <geekosaur> | xmonad's a bad fit for macos anyway, because of how its x11 emulation works |
2021-11-06 16:16:10 +0100 | <geekosaur> | and you can't use xmonad to manage native windows |
2021-11-06 16:16:35 +0100 | Pickchea | (~private@user/pickchea) (Quit: Leaving) |
2021-11-06 16:18:08 +0100 | <gentauro> | dsal: another `bad` thing about `nix` vs `NixOS`, is that you don't have a `stable` channel for packages |
2021-11-06 16:18:32 +0100 | hiruji | (~hiruji@user/hiruji) |
2021-11-06 16:18:37 +0100 | <gentauro> | I mean, I tried to build an application on the `macOS` and the `llvm rc-compiler` is broken .. |
2021-11-06 16:18:52 +0100 | <gentauro> | not very "optimal" for a "workstation" |
2021-11-06 16:19:41 +0100 | <dsal> | Heh, I've never been a fan of stable. Makes me think of debian where everything I care about is too old to be useful. |
2021-11-06 16:19:52 +0100 | <dsal> | That's not as much of an issue on nixos, though. |
2021-11-06 16:21:59 +0100 | max22- | (~maxime@2a01cb0883359800bbde3f2c88505b2a.ipv6.abo.wanadoo.fr) (Remote host closed the connection) |
2021-11-06 16:23:16 +0100 | aman | (~aman@user/aman) |
2021-11-06 16:23:33 +0100 | random-jellyfish | (~random-je@user/random-jellyfish) (Ping timeout: 256 seconds) |
2021-11-06 16:24:23 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
2021-11-06 16:27:41 +0100 | <gentauro> | dsal: at the moment I can't `build` C/C++ app's on my apple-device. Makes it pretty useless, don't you think? |
2021-11-06 16:27:45 +0100 | acidjnk | (~acidjnk@p200300d0c7263574f86fe22bbcd0fec5.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
2021-11-06 16:27:52 +0100 | <EvanR> | it's late 2021 does haskell have a decent way to make a global variable |
2021-11-06 16:28:10 +0100 | gentauro | unless you want to go the "manual" / `homebrew` way which I don't want to |
2021-11-06 16:28:27 +0100 | <geekosaur> | it probably never will |
2021-11-06 16:28:35 +0100 | <hpc> | EvanR: does it have to be mutable? |
2021-11-06 16:28:37 +0100 | <gentauro> | EvanR: there no concept of `variables` |
2021-11-06 16:28:39 +0100 | <dsal> | gentauro: I have some... |
2021-11-06 16:28:39 +0100 | <geekosaur> | isn't that kinda the point of fp? |
2021-11-06 16:28:42 +0100 | <gentauro> | everything are `values` |
2021-11-06 16:28:51 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 245 seconds) |
2021-11-06 16:29:03 +0100 | <EvanR> | yeah I get it, but instead we have several shitty ways to do it xD |
2021-11-06 16:29:18 +0100 | <gentauro> | dsal: I have setup `nix` + `home-manager` to handle "software". It's the closest I can get to `NixOS` … |
2021-11-06 16:29:33 +0100 | <hpc> | to be fair, there's no good way to do global mutable state :P |
2021-11-06 16:29:50 +0100 | <dsal> | Yeah, "global variables" is one of those engineering practices that people tend to strive for. |
2021-11-06 16:30:07 +0100 | <geekosaur> | yeh, haskell just uncovers all the ugly cracks in the concept |
2021-11-06 16:30:10 +0100 | <dsal> | gentauro: yep, that's how I do it |
2021-11-06 16:30:13 +0100 | <gentauro> | main state = … |
2021-11-06 16:30:23 +0100 | <gentauro> | EvanR: just pass it as a parameter on your main function? |
2021-11-06 16:30:25 +0100 | <gentauro> | :P |
2021-11-06 16:30:44 +0100 | <hpc> | main = newIORef >>= main' |
2021-11-06 16:30:59 +0100 | <dsal> | EvanR: what would you do with a global variable if you had one? |
2021-11-06 16:31:17 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) |
2021-11-06 16:31:23 +0100 | <EvanR> | one use case would be for a throw away script (in haskell) which uses IO and modifies the globally visible ref for its own inscruptible purposes |
2021-11-06 16:31:39 +0100 | <gentauro> | dsal: read/update from many different threads to get inconsistent resutls :P |
2021-11-06 16:31:56 +0100 | <[exa]> | EvanR: man they literally spent 30 years getting rid of global variables |
2021-11-06 16:32:14 +0100 | <[exa]> | y u no appreciate |
2021-11-06 16:32:15 +0100 | <EvanR> | also, global TVar was used in a game programming example (another area that haskell "is too good for" ? xD) |
2021-11-06 16:33:12 +0100 | <EvanR> | specifically to hold handles to driver resources that are set once |
2021-11-06 16:33:28 +0100 | <dsal> | Sure, I put TVars in Readers for programs. |
2021-11-06 16:33:29 +0100 | <hpc> | game programming is one of the last places you want global state, funny enough |
2021-11-06 16:33:36 +0100 | <hpc> | global player data? what about multiplayer |
2021-11-06 16:33:42 +0100 | <EvanR> | yeah not that |
2021-11-06 16:33:43 +0100 | <hpc> | global viewport data? what about virtual cameras |
2021-11-06 16:33:49 +0100 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
2021-11-06 16:34:00 +0100 | hiruji | (~hiruji@user/hiruji) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-11-06 16:34:52 +0100 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
2021-11-06 16:35:41 +0100 | <EvanR> | so we have IVars which can be set with IO and then referenced as a pure value, but they're not "global" as such |
2021-11-06 16:36:46 +0100 | kspalaiologos | (~kspalaiol@user/kspalaiologos) (Ping timeout: 260 seconds) |
2021-11-06 16:37:15 +0100 | <dsal> | I think there's a bit of a communication problem. Many of us have been programming for decades and have been subjected to global variables in programs and are having difficulty understanding why anyone would think that's a good idea again. |
2021-11-06 16:37:17 +0100 | <EvanR> | doing a monadic read each time you want to access it, in this case, would be silly |
2021-11-06 16:38:10 +0100 | <hpc> | not that silly |
2021-11-06 16:38:39 +0100 | <hpc> | you could read the value once and pass that as a parameter to everything instead |
2021-11-06 16:38:48 +0100 | <hpc> | same way you can read a file and pass a great big ByteString around |
2021-11-06 16:41:00 +0100 | <EvanR> | yeah that's a case when you imagine the data involved being an unknown and potentially visible to the code |
2021-11-06 16:42:14 +0100 | <EvanR> | unlike handles to os resources, GL objects (numbers that one should not mess with) |
2021-11-06 16:43:32 +0100 | <EvanR> | if your program requires a single opaque context or something, it could be convenient to refer to this directly without so much ceremony |
2021-11-06 16:44:26 +0100 | <EvanR> | an example would be a web request handler script, the request is your life, and there's only one |
2021-11-06 16:45:00 +0100 | <EvanR> | bad example I guess, since that data is not opaque nevermind |
2021-11-06 16:45:56 +0100 | <hpc> | i suppose if you really wanted, you could make a dupable unsafePerformIO readIORef kind of thing, and then you have something mutable you don't have to actually read from |
2021-11-06 16:46:00 +0100 | <hpc> | but then you have Very Fun Bugs |
2021-11-06 16:46:08 +0100 | <EvanR> | exactly |
2021-11-06 16:47:12 +0100 | hololeap_ | hololeap |
2021-11-06 16:52:53 +0100 | <EvanR> | another difficulty is realistic programs with many modules, you would need some sort of bureacracy to understand who can see the global |
2021-11-06 16:53:50 +0100 | fendor_ | (~fendor@178.165.196.101.wireless.dyn.drei.com) |
2021-11-06 16:54:26 +0100 | <monochrom> | Fortunately, today you can use the (rhetorical) question "is it thread-safe?" to exorcise any want of global variables. In C and Unix, this has happened to errno, random_r(), DNS libraries. |
2021-11-06 16:54:35 +0100 | <EvanR> | also if its a library, how would libraries not collide on the name |
2021-11-06 16:55:24 +0100 | <EvanR> | errno, great example of a terrible use for global variable |
2021-11-06 16:55:30 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 260 seconds) |
2021-11-06 16:55:47 +0100 | <monochrom> | Oh haha, name clash is solved by every library choosing a prefix and hoping that it's, um, universally unique :) |
2021-11-06 16:56:22 +0100 | fendor | (~fendor@91.141.74.77.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
2021-11-06 17:02:00 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
2021-11-06 17:02:22 +0100 | <hpc> | just do what ldap does and give everything an oid |
2021-11-06 17:02:31 +0100 | <hpc> | instead of defining bitwise_and, define 1.2.840.113556.1.4.803 |
2021-11-06 17:02:35 +0100 | <hpc> | easy |
2021-11-06 17:03:12 +0100 | x6C697370 | (~michael@2600:1700:7c02:3180::44) |
2021-11-06 17:03:33 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2021-11-06 17:03:42 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection) |
2021-11-06 17:03:59 +0100 | hiruji | (~hiruji@user/hiruji) |
2021-11-06 17:04:40 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) |
2021-11-06 17:05:08 +0100 | <Inst> | are there any haskellers using visual studio code? |
2021-11-06 17:05:16 +0100 | <Inst> | I need to figure out how to install packages from hackage |
2021-11-06 17:05:30 +0100 | <Inst> | https://hackage.haskell.org/package/fltkhs |
2021-11-06 17:05:32 +0100 | gg | (~gg@88.160.100.84) |
2021-11-06 17:06:13 +0100 | fendor_ | fendor |
2021-11-06 17:06:30 +0100 | <[exa]> | Inst: you can either make a cabal project and write it in the dependencies (will get auto-installed) or just invoke cabal from the commandline |
2021-11-06 17:06:57 +0100 | <Inst> | I got VSC specifically to avoid using cabal / stock |
2021-11-06 17:06:57 +0100 | <maerwald> | Inst: https://cabal.readthedocs.io/en/latest/getting-started.html |
2021-11-06 17:06:59 +0100 | <Inst> | stack |
2021-11-06 17:07:02 +0100 | <Inst> | thanks |
2021-11-06 17:07:28 +0100 | <geekosaur> | I don't think you'll be able to avoid using at least one of them |
2021-11-06 17:09:20 +0100 | <hpc> | and if you use stack, you're still not getting away from using cabal too |
2021-11-06 17:10:11 +0100 | <[exa]> | why avoid it though? |
2021-11-06 17:11:17 +0100 | <Inst> | minimize challenge |
2021-11-06 17:11:18 +0100 | <geekosaur> | avoiding both is a nice way to get yourself into nasty dependency jungles |
2021-11-06 17:11:21 +0100 | <Inst> | ugh, i'm stuck with cabal, then |
2021-11-06 17:11:33 +0100 | <geekosaur> | which is not minimizing challenge |
2021-11-06 17:11:42 +0100 | <monochrom> | vsc is orthogonal to avoiding cabal and stack. To avoid cabal and stack, either don't use any 3rd-party libraries or manually run Setup.hs per library. |
2021-11-06 17:12:00 +0100 | hendursaga | (~weechat@user/hendursaga) (Quit: hendursaga) |
2021-11-06 17:12:01 +0100 | <[exa]> | Inst: honestly, setting up a cabal package (using the guide linked above) is like 2539872345x less of a trick than trying vscode do it correctly |
2021-11-06 17:12:14 +0100 | <Inst> | thanks for the help |
2021-11-06 17:12:25 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-11-06 17:12:35 +0100 | <Inst> | i'm trying to set up a hack to get Haskell to be able to call native Windows file open / save windows |
2021-11-06 17:12:45 +0100 | <Inst> | I'm suspecting fltkhs might not be able to do it, though |
2021-11-06 17:13:21 +0100 | <monochrom> | Consider https://hackage.haskell.org/package/Win32 |
2021-11-06 17:13:49 +0100 | <monochrom> | or generally https://hackage.haskell.org/packages/search?terms=win32 |
2021-11-06 17:13:57 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2021-11-06 17:14:08 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
2021-11-06 17:14:23 +0100 | <[exa]> | the open/save dialogs are not a part of any C-style winapi right? |
2021-11-06 17:14:55 +0100 | <EvanR> | proper bindings to win API sounds like the right thing. But if you want hacks... write a normal windows program and control it from haskell using interprocess communication xD |
2021-11-06 17:15:46 +0100 | <EvanR> | bonus it will work on not windows too, as soon as you implement the other native front ends |
2021-11-06 17:16:57 +0100 | <monochrom> | Write a webapp. Then there is only one native front end. >:) |
2021-11-06 17:17:22 +0100 | <[exa]> | Inst: if fltk fails, consider making a small C program with this library https://github.com/mlabbe/nativefiledialog |
2021-11-06 17:17:27 +0100 | <[exa]> | and calling it from haskell via FFI |
2021-11-06 17:17:39 +0100 | <Inst> | thanks exa, you're a lifesaver |
2021-11-06 17:18:13 +0100 | <Inst> | exa: how did the Instagram filters go? |
2021-11-06 17:18:26 +0100 | aman | (~aman@user/aman) (Ping timeout: 245 seconds) |
2021-11-06 17:18:28 +0100 | <Inst> | I was also thinking: "use Haskell to strip DRM from obsolete CDs" |
2021-11-06 17:18:45 +0100 | <Inst> | or "use Haskell, with or without the assistance of a finance export / prof, to do stock market analysis" |
2021-11-06 17:18:50 +0100 | <Inst> | those are both practical and interesting |
2021-11-06 17:18:51 +0100 | <[exa]> | it was kinda too specific, we went with something different at the end |
2021-11-06 17:19:09 +0100 | <Inst> | as long as it works out |
2021-11-06 17:19:19 +0100 | <[exa]> | too much time for tuning the filters and from haskell-side the assignment is not really challenging |
2021-11-06 17:19:31 +0100 | <Inst> | the reason I need Haskell with a file open / shut hack is so I can try to teach my fellow non-programmer friend |
2021-11-06 17:19:47 +0100 | <Inst> | Haskell with early IO |
2021-11-06 17:20:19 +0100 | <EvanR> | define early IO |
2021-11-06 17:21:21 +0100 | Lycurgus | (~juan@98.4.112.204) |
2021-11-06 17:22:27 +0100 | <Inst> | main = do -> random stuff in monad-land without explaining monads -> how2io -> typeclasses, expressions, recursion, lists, etc |
2021-11-06 17:23:01 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 245 seconds) |
2021-11-06 17:23:20 +0100 | <Inst> | i need to keep her engaged so she doesn't run off to Python |
2021-11-06 17:23:24 +0100 | <Inst> | which she threatens to do |
2021-11-06 17:23:33 +0100 | <EvanR> | oh yeah... sounds helpful to have some magic IO actions that just do stuff |
2021-11-06 17:23:59 +0100 | <Inst> | "in media res" |
2021-11-06 17:24:14 +0100 | <EvanR> | pickFile :: IO Filepath |
2021-11-06 17:24:16 +0100 | <EvanR> | xD |
2021-11-06 17:24:45 +0100 | <Inst> | you're being sarcastic, right? |
2021-11-06 17:24:58 +0100 | <EvanR> | no? |
2021-11-06 17:25:16 +0100 | <Inst> | thanks |
2021-11-06 17:26:01 +0100 | desantra | (~skykanin@user/skykanin) (Quit: WeeChat 3.3) |
2021-11-06 17:26:11 +0100 | <Inst> | the idea is that IO makes everything practical now, you see immediate results, the build-up of understanding and skill via theory is immediately useful because the theory etc immediately gets translated back to practical results |
2021-11-06 17:26:16 +0100 | <Inst> | therefore, no running off to Pythonland |
2021-11-06 17:26:28 +0100 | <Lycurgus> | geekosaur, you cheeky debbil i just realized you pm'ed me without notice was the thing to be suppressed so soto voce? |
2021-11-06 17:26:51 +0100 | <Lycurgus> | and how is quietism gonna work? |
2021-11-06 17:27:23 +0100 | <geekosaur> | mostly hoping the whole thing would blow over faster if not publicly restarted |
2021-11-06 17:27:57 +0100 | <Lycurgus> | illogical to think doing nothing will cause the desired result |
2021-11-06 17:28:12 +0100 | <Inst> | moreover, I asked someone for a monad tutorial a while back, they suggested the best way to learn it is to run around without monads until you accidentally implement it yourself |
2021-11-06 17:28:25 +0100 | <Inst> | Lycurgus: you know what's the easiest way to kill someone? |
2021-11-06 17:28:29 +0100 | <Lycurgus> | doing stuff behind the scenes, yeah |
2021-11-06 17:28:43 +0100 | <Lycurgus> | Inst, no what? |
2021-11-06 17:28:50 +0100 | <Inst> | eat doritos |
2021-11-06 17:28:51 +0100 | <Inst> | drink beer |
2021-11-06 17:28:55 +0100 | <Inst> | watch TV, go on with your everyday life |
2021-11-06 17:29:04 +0100 | <EvanR> | yes the monad tutorial fallacy |
2021-11-06 17:29:06 +0100 | <Inst> | eventually that someone will drop dead of hopefully natural causes |
2021-11-06 17:29:12 +0100 | <Lycurgus> | i c |
2021-11-06 17:29:18 +0100 | <Inst> | you're in their light cone |
2021-11-06 17:29:25 +0100 | <Inst> | technically you're a causative actor in the most minimal way possible |
2021-11-06 17:29:31 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection) |
2021-11-06 17:29:32 +0100 | <Inst> | so no, doing nothing is not illogical |
2021-11-06 17:29:39 +0100 | <Lycurgus> | and the death will be attributed to covid prolly |
2021-11-06 17:29:54 +0100 | <Inst> | 无为 |
2021-11-06 17:30:06 +0100 | <EvanR> | Inst I think you're on the right track |
2021-11-06 17:30:10 +0100 | <monochrom> | It is OK to learn and use IO without bringing up the monad generality. |
2021-11-06 17:30:13 +0100 | lyxia | (~lyxia@poisson.chat) (Quit: WeeChat 3.2) |
2021-11-06 17:30:18 +0100 | <EvanR> | ^ |
2021-11-06 17:30:27 +0100 | lyxia | (~lyxia@poisson.chat) |
2021-11-06 17:30:35 +0100 | <Inst> | whitington does something similar, i.e, he teaches how to use either, maybe, and io |
2021-11-06 17:30:39 +0100 | <Inst> | without going into monads |
2021-11-06 17:31:02 +0100 | <monochrom> | People have already learned and are using numbers without ring field generality. Heck most of them haven't even heard of Peano axioms. |
2021-11-06 17:31:03 +0100 | <Inst> | he says it's for another book, but i feel sufficiently functional (small f) without it |
2021-11-06 17:31:09 +0100 | <EvanR> | if they're a complete beginner, then they won't even want to get into monad memes with you |
2021-11-06 17:31:18 +0100 | Lycurgus | abhors all mysticism and religion, taoism and quietism are no exceptions |
2021-11-06 17:31:18 +0100 | <Inst> | I just feel hungry for burritos |
2021-11-06 17:31:29 +0100 | <Inst> | Taoism -> philosophical and religious elements |
2021-11-06 17:31:31 +0100 | <Inst> | but offtopic |
2021-11-06 17:31:37 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 17:31:43 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
2021-11-06 17:31:44 +0100 | <maerwald> | best way to get into monads is to see what you can't do with applicative |
2021-11-06 17:32:12 +0100 | <EvanR> | and applicative requires first explaining or demonstrating Functor, which is a lot more useful anyway xD |
2021-11-06 17:32:34 +0100 | <Lycurgus> | or be super reductionist and say it's just a damn datastruce hs weenies use to get referential transparency |
2021-11-06 17:32:35 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 17:32:46 +0100 | <EvanR> | no don't |
2021-11-06 17:32:51 +0100 | <monochrom> | That is false. |
2021-11-06 17:32:53 +0100 | <Lycurgus> | *data structure |
2021-11-06 17:33:08 +0100 | <Lycurgus> | yeah it's a lil more than just reductionist |
2021-11-06 17:33:22 +0100 | <monochrom> | Unless you decide to classify the X->Y type as a data structure too. |
2021-11-06 17:33:40 +0100 | <Lycurgus> | but only wrong by a detail |
2021-11-06 17:34:18 +0100 | <EvanR> | since X->Y is a negative type, perhaps you could classify it as a negative data structure xD |
2021-11-06 17:35:17 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-11-06 17:35:21 +0100 | <maerwald> | what do monads have to do with referential transparency? |
2021-11-06 17:35:41 +0100 | <hpc> | here's a fun math game: combine related concepts to create the most confused terminology possible |
2021-11-06 17:35:51 +0100 | <hpc> | X is negative in X -> Y, but also X -> Y = Y ** X |
2021-11-06 17:35:58 +0100 | <hpc> | so in exponentiation, the value on the right is negative |
2021-11-06 17:36:24 +0100 | mrkrktsn1ctcrpt | (~mrkrktsnd@50.228.44.6) |
2021-11-06 17:36:30 +0100 | <hpc> | @let negate x = (** x) |
2021-11-06 17:36:31 +0100 | <lambdabot> | Defined. |
2021-11-06 17:37:25 +0100 | <geekosaur> | isn't that going to collide with Prelude negate? |
2021-11-06 17:37:30 +0100 | <hpc> | :P |
2021-11-06 17:38:53 +0100 | mrkrktsndctcrpt | (~mrkrktsnd@50.228.44.6) (Ping timeout: 256 seconds) |
2021-11-06 17:39:24 +0100 | <EvanR> | when two negates collide, the result is a positive |
2021-11-06 17:39:46 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
2021-11-06 17:43:59 +0100 | mrkrktsn1ctcrpt | (~mrkrktsnd@50.228.44.6) (Ping timeout: 256 seconds) |
2021-11-06 17:46:08 +0100 | tfeb | (~tfb@88.98.95.237) |
2021-11-06 17:48:05 +0100 | <xerox> | > negate it |
2021-11-06 17:48:07 +0100 | <lambdabot> | error: |
2021-11-06 17:48:07 +0100 | <lambdabot> | • Variable not in scope: it |
2021-11-06 17:48:07 +0100 | <lambdabot> | • Perhaps you meant one of these: |
2021-11-06 17:49:32 +0100 | <Lycurgus> | lambdabot doesn't have prelude? |
2021-11-06 17:50:00 +0100 | <Lycurgus> | or the same error processing as ghci igess |
2021-11-06 17:51:21 +0100 | zaquest | (~notzaques@5.128.210.178) (Quit: Leaving) |
2021-11-06 17:53:26 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
2021-11-06 17:54:41 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) |
2021-11-06 17:54:58 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2021-11-06 17:55:46 +0100 | zaquest | (~notzaques@5.128.210.178) |
2021-11-06 17:56:12 +0100 | fendor | (~fendor@178.165.196.101.wireless.dyn.drei.com) (Remote host closed the connection) |
2021-11-06 17:58:27 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 18:00:05 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
2021-11-06 18:00:48 +0100 | fendor | (~fendor@178.165.196.101.wireless.dyn.drei.com) |
2021-11-06 18:00:54 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2021-11-06 18:01:26 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2021-11-06 18:04:49 +0100 | tfeb | (~tfb@88.98.95.237) (Quit: died) |
2021-11-06 18:05:11 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds) |
2021-11-06 18:07:28 +0100 | mrkrktsndctcrpt | (~mrkrktsnd@mobile-166-171-248-94.mycingular.net) |
2021-11-06 18:11:46 +0100 | <geekosaur> | Lycurgus, it's not ghci, no. it used to expose a variable that worked not quite like "it" but it got abused |
2021-11-06 18:12:45 +0100 | <hpc> | yahb is ghci |
2021-11-06 18:12:47 +0100 | <hpc> | % it |
2021-11-06 18:12:48 +0100 | <yahb> | hpc: () |
2021-11-06 18:13:09 +0100 | <hpc> | you even get to execute IO |
2021-11-06 18:13:56 +0100 | mastarija | (~mastarija@2a05:4f46:e06:ff00:18c4:3126:ef80:d743) |
2021-11-06 18:16:30 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-11-06 18:16:52 +0100 | <Lycurgus> | % negate it |
2021-11-06 18:16:52 +0100 | <yahb> | Lycurgus: ; <interactive>:2:1: error:; * No instance for (Num ()) arising from a use of `negate'; * In the expression: negate it; In an equation for `it': it = negate it |
2021-11-06 18:17:18 +0100 | <Lycurgus> | whatever repl i have stacked suggests id from prelude |
2021-11-06 18:18:14 +0100 | <Lycurgus> | 'foolish consistency is the hobgoblin of small minds' |
2021-11-06 18:20:34 +0100 | v01d4lph4 | (~v01d4lph4@122.177.85.95) |
2021-11-06 18:20:34 +0100 | v01d4lph4 | (~v01d4lph4@122.177.85.95) (Changing host) |
2021-11-06 18:20:34 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) |
2021-11-06 18:20:42 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) |
2021-11-06 18:20:46 +0100 | <hpc> | i prefer consistent foolishness |
2021-11-06 18:21:18 +0100 | <monochrom> | I don't see a foolish consistency there. |
2021-11-06 18:21:24 +0100 | <monochrom> | Foolish spell-checking, maybe. |
2021-11-06 18:22:18 +0100 | <Lycurgus> | no here it would be a foolish expectation of consistency |
2021-11-06 18:22:37 +0100 | aleator | (~aleator@87-93-222-114.bb.dnainternet.fi) |
2021-11-06 18:23:10 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 260 seconds) |
2021-11-06 18:23:23 +0100 | econo | (uid147250@user/econo) |
2021-11-06 18:23:33 +0100 | <monochrom> | I guess I have a foolish expectation of accurate wording, too. |
2021-11-06 18:24:31 +0100 | <monochrom> | Now Inst is going to breathe "the accuracy that can be accurated is not the real accuracy" down my throat :) |
2021-11-06 18:24:48 +0100 | <Inst> | um, what, it's just noumenon vs phenomenon |
2021-11-06 18:25:06 +0100 | <Inst> | we try to get as close as we can to the actual reality, but the actual reality is unreachable |
2021-11-06 18:25:30 +0100 | <Inst> | good enough, back to work, have a beer after you're done |
2021-11-06 18:25:32 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds) |
2021-11-06 18:25:34 +0100 | <Inst> | don't be a pedant |
2021-11-06 18:25:42 +0100 | fuzzypixelz | (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) |
2021-11-06 18:26:38 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-11-06 18:28:10 +0100 | <Lycurgus> | copilot suggests "= "/" ++ it |
2021-11-06 18:28:42 +0100 | <Lycurgus> | " |
2021-11-06 18:30:31 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
2021-11-06 18:31:06 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
2021-11-06 18:31:34 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
2021-11-06 18:32:05 +0100 | robertfry | (~robertfry@cosh-19-b2-v4wan-161499-cust683.vm10.cable.virginm.net) (Quit: Konversation terminated!) |
2021-11-06 18:32:34 +0100 | mrkrktsndctcrpt | (~mrkrktsnd@mobile-166-171-248-94.mycingular.net) (Ping timeout: 260 seconds) |
2021-11-06 18:33:27 +0100 | ulvarrefr | (~user@185.24.53.152) (Read error: Connection reset by peer) |
2021-11-06 18:33:34 +0100 | ulvarrefr | (~user@185.24.53.152) |
2021-11-06 18:35:51 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 18:38:19 +0100 | aleator | (~aleator@87-93-222-114.bb.dnainternet.fi) (Ping timeout: 260 seconds) |
2021-11-06 18:40:09 +0100 | random-jellyfish | (~random-je@user/random-jellyfish) |
2021-11-06 18:40:58 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
2021-11-06 18:43:05 +0100 | Lycurgus | (~juan@98.4.112.204) (Quit: Exeunt) |
2021-11-06 18:43:36 +0100 | Pickchea | (~private@user/pickchea) |
2021-11-06 18:45:23 +0100 | hiruji | (~hiruji@user/hiruji) (Ping timeout: 264 seconds) |
2021-11-06 18:48:30 +0100 | hgolden | (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection) |
2021-11-06 18:48:53 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 18:49:48 +0100 | hgolden | (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) |
2021-11-06 18:50:13 +0100 | Guest|10 | (~Guest|10@70-36-136-248.dsl.dynamic.fusionbroadband.com) |
2021-11-06 18:51:05 +0100 | Guest|10 | (~Guest|10@70-36-136-248.dsl.dynamic.fusionbroadband.com) (Client Quit) |
2021-11-06 18:51:15 +0100 | hiruji | (~hiruji@user/hiruji) |
2021-11-06 18:54:15 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 256 seconds) |
2021-11-06 18:55:57 +0100 | hiruji | (~hiruji@user/hiruji) (Ping timeout: 256 seconds) |
2021-11-06 18:59:00 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-11-06 18:59:07 +0100 | <tomjaguarpaw> | Anyone know where there isn't a ShowTypePrec or ShowTypeParens for TypeError ? Looks like I have to either tolerate MyConstructor (Int) or MyConstructor Just a |
2021-11-06 19:01:40 +0100 | random-jellyfish | (~random-je@user/random-jellyfish) (Ping timeout: 256 seconds) |
2021-11-06 19:05:14 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 19:06:27 +0100 | jess | (~jess@libera/staff/jess) () |
2021-11-06 19:09:43 +0100 | ees | (~user@pool-108-18-30-46.washdc.fios.verizon.net) |
2021-11-06 19:11:47 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 268 seconds) |
2021-11-06 19:13:18 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 19:13:35 +0100 | ees | (~user@pool-108-18-30-46.washdc.fios.verizon.net) (Read error: Connection reset by peer) |
2021-11-06 19:14:40 +0100 | ees | (~user@pool-108-18-30-46.washdc.fios.verizon.net) |
2021-11-06 19:23:28 +0100 | msmhnd^ | (~msmhnd@h50.174.139.63.static.ip.windstream.net) (Remote host closed the connection) |
2021-11-06 19:24:43 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 19:30:06 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 245 seconds) |
2021-11-06 19:34:19 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-11-06 19:36:24 +0100 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
2021-11-06 19:36:48 +0100 | hololeap | (~hololeap@user/hololeap) |
2021-11-06 19:38:02 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-11-06 19:38:39 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 19:40:14 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-11-06 19:41:18 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-11-06 19:42:01 +0100 | kawzeg | (kawzeg@2a01:7e01::f03c:92ff:fee2:ec34) |
2021-11-06 19:43:02 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 19:44:40 +0100 | hiruji | (~hiruji@user/hiruji) |
2021-11-06 19:46:10 +0100 | <hololeap> | anyone know of a library for normalizing inequalities? |
2021-11-06 19:46:30 +0100 | <awpr> | type-level Nat inequalities? |
2021-11-06 19:46:43 +0100 | <hololeap> | no, just any Ord |
2021-11-06 19:47:31 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2021-11-06 19:47:52 +0100 | <hololeap> | for instance, if I have a set of inequalities on Int, [>=4, <8, >5, <6], it would find the smallest set of inequalities that satisfy all those: [>5, <6] |
2021-11-06 19:48:09 +0100 | eruditass | (uid248673@id-248673.uxbridge.irccloud.com) |
2021-11-06 19:48:10 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 260 seconds) |
2021-11-06 19:48:33 +0100 | <awpr> | hmm, I don't know of a library specifically for that, but you might be able to find an interval library that could do it with left-infinite and right-infinite intervals |
2021-11-06 19:49:33 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-11-06 19:50:05 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 19:52:00 +0100 | ees | (~user@pool-108-18-30-46.washdc.fios.verizon.net) (ERC 5.4 (IRC client for GNU Emacs 28.0.60)) |
2021-11-06 19:52:42 +0100 | ees | (~ees@pool-108-18-30-46.washdc.fios.verizon.net) |
2021-11-06 19:54:42 +0100 | <hololeap> | this doesn't really match what I'm asking for, but seems interesting: https://hackage.haskell.org/package/speculate |
2021-11-06 19:55:10 +0100 | dsrt^ | (~dsrt@h50.174.139.63.static.ip.windstream.net) (Ping timeout: 260 seconds) |
2021-11-06 19:57:34 +0100 | <hololeap> | awpr: can you give an example of how intervals are relavant to my question? I'm not too familiar with the math terms behind it, so it might be helpful to me finding what I'm looking for. |
2021-11-06 19:58:31 +0100 | chisui | (~chisui@dyndsl-095-033-149-191.ewe-ip-backbone.de) |
2021-11-06 19:58:38 +0100 | <EvanR> | so you want to merge all the half open intervals to get a two sided interval, but also track the difference between < and <= |
2021-11-06 19:58:41 +0100 | <geekosaur> | >=4 is 4–inf, for example. then use an interval library that can find the smallest (resp. largest) bounding interval for all of your intervals |
2021-11-06 20:00:02 +0100 | <EvanR> | if it's integers you could simplify to only <='s |
2021-11-06 20:00:12 +0100 | <geekosaur> | and then translate back to comparisons |
2021-11-06 20:00:46 +0100 | ees | (~ees@pool-108-18-30-46.washdc.fios.verizon.net) (Killed buffer) |
2021-11-06 20:01:20 +0100 | chisui | (~chisui@dyndsl-095-033-149-191.ewe-ip-backbone.de) (Client Quit) |
2021-11-06 20:01:28 +0100 | <hololeap> | ok |
2021-11-06 20:02:37 +0100 | <hololeap> | this is going to be for parsing package versions from various PMSs, so it will likely be a (NonEmpty Natural) value for the comparisons |
2021-11-06 20:03:07 +0100 | kawzeg | (kawzeg@2a01:7e01::f03c:92ff:fee2:ec34) (Quit: WeeChat 3.3) |
2021-11-06 20:03:55 +0100 | <hololeap> | but that makes sense, smallest bounding interval |
2021-11-06 20:05:27 +0100 | kawzeg | (kawzeg@2a01:7e01::f03c:92ff:fee2:ec34) |
2021-11-06 20:07:14 +0100 | <hololeap> | hm, I might also want to normalize versions, for instance 5.0.0 = 5 (for this purpose) |
2021-11-06 20:08:09 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-11-06 20:08:14 +0100 | <geekosaur> | that might not work so well in the presence of a version like 5.0.12 |
2021-11-06 20:08:42 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 20:09:15 +0100 | <hololeap> | this is going to be for normalizing version range dependencies |
2021-11-06 20:09:23 +0100 | <hololeap> | so >5.0.0 = >5 |
2021-11-06 20:09:32 +0100 | ees | (~user@pool-108-18-30-46.washdc.fios.verizon.net) |
2021-11-06 20:10:32 +0100 | <hololeap> | >5.0.12 /= >5 |
2021-11-06 20:10:49 +0100 | neurocyte0132889 | (~neurocyte@45.10.61.172) |
2021-11-06 20:10:49 +0100 | neurocyte0132889 | (~neurocyte@45.10.61.172) (Changing host) |
2021-11-06 20:10:49 +0100 | neurocyte0132889 | (~neurocyte@user/neurocyte) |
2021-11-06 20:13:47 +0100 | zzz | (~z@user/zero) |
2021-11-06 20:13:50 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
2021-11-06 20:15:35 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-11-06 20:15:48 +0100 | mrkrktsndctcrpt | (~mrkrktsnd@c-24-6-12-87.hsd1.ca.comcast.net) |
2021-11-06 20:17:53 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-11-06 20:20:34 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
2021-11-06 20:21:04 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2021-11-06 20:24:23 +0100 | <zzz> | @def newtype N = N Int |
2021-11-06 20:24:24 +0100 | <lambdabot> | Defined. |
2021-11-06 20:24:29 +0100 | <zzz> | @def sup (N x) = ("sup",x) |
2021-11-06 20:24:30 +0100 | <lambdabot> | Defined. |
2021-11-06 20:24:34 +0100 | <zzz> | > fst $ sup undefined |
2021-11-06 20:24:35 +0100 | <lambdabot> | "sup" |
2021-11-06 20:25:10 +0100 | <zzz> | this patternmatches because the newtype "doesn't really exist" right? |
2021-11-06 20:25:37 +0100 | <dolio> | Something like that. |
2021-11-06 20:26:54 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
2021-11-06 20:27:03 +0100 | <zzz> | somehow i feel like there's something more to say |
2021-11-06 20:27:09 +0100 | <tomjaguarpaw> | zzz: No, why? If you defined it as data you'd get the same behaviour |
2021-11-06 20:27:28 +0100 | <dolio> | No, with data you'd get undefined. |
2021-11-06 20:27:46 +0100 | <hololeap> | "sup" is a literal so it doesn't need the value of x |
2021-11-06 20:27:47 +0100 | <tomjaguarpaw> | Oh yes, so you would |
2021-11-06 20:28:28 +0100 | <dolio> | You can also imagine that ~ is the default mode for newtype patterns. |
2021-11-06 20:28:30 +0100 | <tomjaguarpaw> | Right, so the N pattern doesn't actually force anything whereas the D pattern would |
2021-11-06 20:29:08 +0100 | <c_wraith> | zzz: the best way to think of it is that matching a newtype constructor is a coercion. Matching a data constructor is evaluation. |
2021-11-06 20:30:02 +0100 | <zzz> | right |
2021-11-06 20:30:44 +0100 | <dolio> | zzz: Sometimes you can observe incidental consequences of wrapping things in a newtype. |
2021-11-06 20:31:09 +0100 | <dolio> | Like, if you have polymorphic stuff in a newtype, it might cause an eta expansion that makes something non-bottom. |
2021-11-06 20:31:35 +0100 | zmt00 | (~zmt00@user/zmt00) (Ping timeout: 264 seconds) |
2021-11-06 20:31:38 +0100 | <zzz> | can you provide an example of that? |
2021-11-06 20:31:46 +0100 | <dolio> | No, I don't remember an example. :) |
2021-11-06 20:32:44 +0100 | <hololeap> | I don't understand either, dolio |
2021-11-06 20:32:57 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection) |
2021-11-06 20:33:45 +0100 | zmt00 | (~zmt00@user/zmt00) |
2021-11-06 20:34:42 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 20:35:06 +0100 | <c_wraith> | @let newtype F = F (forall f. Functor f => () -> f ()) |
2021-11-06 20:35:07 +0100 | <lambdabot> | Defined. |
2021-11-06 20:35:10 +0100 | <dolio> | The type was like `newtype N = N (forall a. <something>)`, and somehow it was possible that the generalization step caused by `N e` made an undefined expression `e` get expanded into something more like `\_ -> undefined`. |
2021-11-06 20:35:15 +0100 | <c_wraith> | > seq (F undefined) () |
2021-11-06 20:35:16 +0100 | <lambdabot> | () |
2021-11-06 20:35:22 +0100 | <c_wraith> | just like that |
2021-11-06 20:35:26 +0100 | <dolio> | Oh, nice. |
2021-11-06 20:35:37 +0100 | FragByte | (~christian@user/fragbyte) (Quit: Quit) |
2021-11-06 20:36:03 +0100 | max22- | (~maxime@2a01cb0883359800ab19ff1ba7c64c00.ipv6.abo.wanadoo.fr) |
2021-11-06 20:36:05 +0100 | <tomjaguarpaw> | Interesting |
2021-11-06 20:36:09 +0100 | <c_wraith> | and yeah, that's eta expansion biting |
2021-11-06 20:36:36 +0100 | <dolio> | Yeah, the newtype still 'doesn't exist', but the generality of the type it corresponds to might have semantic consequences. |
2021-11-06 20:37:10 +0100 | <dolio> | And might force generalizing something that wouldn't otherwise be generalized. |
2021-11-06 20:37:24 +0100 | FragByte | (~christian@user/fragbyte) |
2021-11-06 20:37:33 +0100 | <c_wraith> | It requires the class constraint |
2021-11-06 20:37:47 +0100 | <c_wraith> | So it has something to do with dictionary passing in the internal representation |
2021-11-06 20:37:52 +0100 | <tomjaguarpaw> | newtype F = F (forall f. f ()) shows the same behaviour |
2021-11-06 20:37:54 +0100 | <hololeap> | what _should_ happen in that example, c_wraith? |
2021-11-06 20:38:08 +0100 | <tomjaguarpaw> | Err sorry, I mean newtype F = F (forall f. Functor f => f ()) |
2021-11-06 20:38:08 +0100 | <c_wraith> | tomjaguarpaw: huh, not for me. ghc 9.2.1 on my side |
2021-11-06 20:38:26 +0100 | <c_wraith> | tomjaguarpaw: wait, no. That's not a function, so it doesn't get eta expanded. |
2021-11-06 20:38:36 +0100 | <c_wraith> | I tested with (forall f. () -> f ()) |
2021-11-06 20:38:47 +0100 | <c_wraith> | that gives an exception |
2021-11-06 20:38:58 +0100 | <tomjaguarpaw> | Not sure if you've seen my correction |
2021-11-06 20:39:01 +0100 | <c_wraith> | ah, right. |
2021-11-06 20:39:11 +0100 | <c_wraith> | definitely has to do with the dictionary-passing in core |
2021-11-06 20:39:14 +0100 | <tomjaguarpaw> | and indeed newtype F = F (forall a. Num a => a) |
2021-11-06 20:39:16 +0100 | <tomjaguarpaw> | Yes I agree |
2021-11-06 20:39:19 +0100 | <c_wraith> | that must cause eta expansion |
2021-11-06 20:39:32 +0100 | <c_wraith> | hololeap: naively, you'd expect to get an exception from evaluating undefined |
2021-11-06 20:39:59 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 268 seconds) |
2021-11-06 20:40:09 +0100 | <hololeap> | so the compiler has no idea that (forall f. Functor f => () -> f ()) doesn't make sense |
2021-11-06 20:40:53 +0100 | <c_wraith> | nope. that's irrelevant |
2021-11-06 20:40:57 +0100 | <hololeap> | I suppose it wouldn't, since that's a result of what Functor means semantically, vs Applicative |
2021-11-06 20:42:08 +0100 | <hololeap> | e.g. there is no pure defined for Functor, so no function could satisfy that type, unless it was also an Applicative |
2021-11-06 20:42:19 +0100 | <tomjaguarpaw> | OK this is weird. Consider seq (F (undefined :: forall a. Num a => a)) () . It is undefined with newtype F a = F a but defined with newtype F = F (forall a. Num a => a) . |
2021-11-06 20:42:22 +0100 | zmt01 | (~zmt00@user/zmt00) |
2021-11-06 20:43:30 +0100 | <c_wraith> | huh. I didn't expect that. |
2021-11-06 20:43:31 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
2021-11-06 20:44:27 +0100 | <awpr> | we actually just talked about the reason for this in the FP discord: `Functor f => ...` is a function value once you get down to Core |
2021-11-06 20:44:50 +0100 | <hpc> | what if there isn't a class constraint? |
2021-11-06 20:44:53 +0100 | <c_wraith> | that doesn't explain the last thing tomjaguarpaw mentioned. At least, not completely |
2021-11-06 20:44:59 +0100 | <awpr> | yeah, getting to that |
2021-11-06 20:45:31 +0100 | zmt00 | (~zmt00@user/zmt00) (Ping timeout: 245 seconds) |
2021-11-06 20:45:31 +0100 | <awpr> | GHC wouldn't instantiate `F` impredicatively, so the former one is just `F a` for some `a`, and not constrained |
2021-11-06 20:45:47 +0100 | <awpr> | probably defaults it to `Integer` |
2021-11-06 20:46:15 +0100 | <awpr> | in the latter, the contents of the newtype are actually a type with a constraint, no need to infer impredicativity |
2021-11-06 20:46:57 +0100 | <hololeap> | what was the library that was termed "a better ListT" |
2021-11-06 20:47:03 +0100 | <tomjaguarpaw> | streaming? |
2021-11-06 20:47:03 +0100 | <geekosaur> | logict? |
2021-11-06 20:47:11 +0100 | zmt01 | (~zmt00@user/zmt00) (Ping timeout: 245 seconds) |
2021-11-06 20:47:17 +0100 | <hololeap> | logict |
2021-11-06 20:47:45 +0100 | <[exa]> | परोलोग |
2021-11-06 20:48:06 +0100 | <[exa]> | whoops what happened there. I wanted to write "prolog". |
2021-11-06 20:48:33 +0100 | <hololeap> | sanskrit? |
2021-11-06 20:48:36 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 268 seconds) |
2021-11-06 20:49:08 +0100 | zmt00 | (~zmt00@user/zmt00) |
2021-11-06 20:51:06 +0100 | ees | (~user@pool-108-18-30-46.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
2021-11-06 20:53:07 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-11-06 20:53:27 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2021-11-06 20:53:49 +0100 | euandreh | (~euandreh@2804:14c:65c9:5161:4d0f:6b02:d329:b5d2) |
2021-11-06 20:56:24 +0100 | Codaraxis | (~Codaraxis@user/codaraxis) |
2021-11-06 20:56:46 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 20:58:00 +0100 | <hololeap> | ok, so I'm looking at my problem where a version inequality for a package can be normalized where >5.0.0.... = >5, but >5.0.0.0.0.1 /= >5 |
2021-11-06 20:58:19 +0100 | <hololeap> | so this looks like a depth-first search with backtracking. how can I use logict here? |
2021-11-06 20:58:38 +0100 | pgib | (~textual@173.38.117.89) (Ping timeout: 260 seconds) |
2021-11-06 20:58:55 +0100 | <dolio> | If you just use it normally like a list, it'll be depth-first. |
2021-11-06 20:59:17 +0100 | LiaoTao | (~LiaoTao@gateway/tor-sasl/liaotao) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-11-06 20:59:30 +0100 | <dolio> | For the same reason that list is depth first. LogicT is essentially an encoded list. |
2021-11-06 20:59:35 +0100 | <hololeap> | I haven't ever used it, normally or not, because I haven't had a use-case since I discovered it |
2021-11-06 20:59:41 +0100 | LiaoTao | (~LiaoTao@gateway/tor-sasl/liaotao) |
2021-11-06 21:00:16 +0100 | <dolio> | The only way it'll do things out of order is if you use the additional combinators in the package, like `interleave` or >>-. |
2021-11-06 21:00:52 +0100 | <dolio> | What I mean is that if you use it the way you'd use list monad stuff for DFS. |
2021-11-06 21:01:11 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2021-11-06 21:01:28 +0100 | <hololeap> | ok, so what I don't understand is what is how it is used for "backtracking" |
2021-11-06 21:02:03 +0100 | <hololeap> | s/is what is how/is how/ |
2021-11-06 21:02:54 +0100 | <dolio> | The same way list is used for backtracking. `x <- [1,2,3]` essentially tries the rest of the computation with `1`, and gives all results, then gives all the results you'd get by using `2`, etc. |
2021-11-06 21:03:25 +0100 | hendursaga | (~weechat@user/hendursaga) (Remote host closed the connection) |
2021-11-06 21:03:48 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-11-06 21:04:02 +0100 | <geekosaur> | that's natural for lists. ^^ and at some point you either get an answer involving the whole list (and get another if you continue), or a sublist fails (produces [] instead of the rest of the list) and it gets retried with the next list item |
2021-11-06 21:05:10 +0100 | juhp | (~juhp@128.106.188.220) (Ping timeout: 260 seconds) |
2021-11-06 21:05:15 +0100 | <hololeap> | so, by the nature of list, you have to have seen the first element to see the second, and so on, and so you could have cached that value somewhere, allowing you to backtrack to the first value ... is that about right? |
2021-11-06 21:05:20 +0100 | retro_ | (~retro@2e41e9c8.skybroadband.com) |
2021-11-06 21:05:26 +0100 | <geekosaur> | mhh, if logs were still running I'd point you to ski's discussion last night my time |
2021-11-06 21:05:57 +0100 | <geekosaur> | you don't need to do caching, the list monad (or, here, LogicT) does it automatically |
2021-11-06 21:06:44 +0100 | juhp | (~juhp@128.106.188.220) |
2021-11-06 21:07:00 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
2021-11-06 21:07:11 +0100 | <dolio> | If you ask for the first answer/head of the list, what you will get will be the result of 'backtracking' whenever some branch results in the empty list. |
2021-11-06 21:07:20 +0100 | mrkrktsn1ctcrpt | (~mrkrktsnd@c-24-6-12-87.hsd1.ca.comcast.net) |
2021-11-06 21:07:31 +0100 | <dolio> | Becasue there will be 0 results from that branch, so to get any result, you must use another branch. |
2021-11-06 21:08:32 +0100 | <dolio> | And the order of results is depth-first in the sense that it runs the entire rest of the computation for each choice point before considering the next value at that point. |
2021-11-06 21:08:57 +0100 | retroid_ | (~retro@2e41e9c8.skybroadband.com) (Ping timeout: 268 seconds) |
2021-11-06 21:09:18 +0100 | <hololeap> | ok, so we're specifically talking about the list monad, ([a] -> (a -> [b]) -> [b]), here? |
2021-11-06 21:09:47 +0100 | <dolio> | That and LogicT both work essentially the same way. |
2021-11-06 21:10:12 +0100 | <dolio> | Except LogicT uses a better behaved implementation for certain uses. |
2021-11-06 21:10:21 +0100 | <hololeap> | so when the function `f :: a -> [b]` returns [], it naturally falls back to the previous element? |
2021-11-06 21:10:50 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2021-11-06 21:11:06 +0100 | <hololeap> | because something else after it is still looking for a `b`? |
2021-11-06 21:11:45 +0100 | <dolio> | Right, because it's concatMap. [1,2,3] >>= f = f 1 ++ f 2 ++ f 3. |
2021-11-06 21:11:48 +0100 | LiaoTao_ | (~LiaoTao@gateway/tor-sasl/liaotao) |
2021-11-06 21:12:15 +0100 | <geekosaur> | "backtracking" is actually a mischaracterization. it produces all possible values, but it does so lazily at all levels, so it *looks* like backtracking |
2021-11-06 21:12:17 +0100 | <hololeap> | I'm still lost on how any of this is backtracking |
2021-11-06 21:12:31 +0100 | <hololeap> | oh |
2021-11-06 21:13:15 +0100 | <dolio> | Yeah, lazy evaluation makes lists act like backtracking computationally. |
2021-11-06 21:13:15 +0100 | LiaoTao | (~LiaoTao@gateway/tor-sasl/liaotao) (Ping timeout: 276 seconds) |
2021-11-06 21:13:21 +0100 | <dolio> | LogicT does it with continuation passing. |
2021-11-06 21:13:26 +0100 | <hololeap> | actually, I did write something that used this for an n-queens problem on some programming challenge thing, but I don't think I fully understood how it worked |
2021-11-06 21:13:41 +0100 | LiaoTao_ | LiaoTao |
2021-11-06 21:14:00 +0100 | <ski> | geekosaur : what's the difference ? |
2021-11-06 21:15:22 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2021-11-06 21:15:31 +0100 | <geekosaur> | not sure there is one, tbh. I haven't fully followed a computation through the list monad to see how it behaves, but I feel like there is no literal backtracking, each level is just continuing its computation regardless of what lower levels do and if those happen to fail, you get nothing from them |
2021-11-06 21:15:50 +0100 | burnsidesLlama | (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
2021-11-06 21:16:07 +0100 | <geekosaur> | and laziness means if you ask for only one result, it'll just stop and discard the whole computation after producing it |
2021-11-06 21:16:16 +0100 | <ski> | hololeap : "you could have cached that value somewhere, allowing you to backtrack to the first value" -- iiuc, that's not what "backtracking" refers to. rather, it's about the retracing of your steps down a path in the search tree, up to a branch point where you now instead try to go down a different path |
2021-11-06 21:18:36 +0100 | <geekosaur> | I could see this as different from backtracking, or as a "laziness implementation" of backtracking, or as semantic fiddling to no point |
2021-11-06 21:19:19 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
2021-11-06 21:21:15 +0100 | pavonia | (~user@user/siracusa) |
2021-11-06 21:22:01 +0100 | <ski> | "each level is just continuing its computation regardless of what lower levels do and if those happen to fail, you get nothing from them" -- which gives you the behaviour of backtracking, afaiac |
2021-11-06 21:22:59 +0100 | <ski> | sure, it's implemented differently than backtracking usually is, say in Prolog systems, or if you manually code it with loops in C or Pascal something |
2021-11-06 21:23:29 +0100 | <geekosaur> | yeh, but I think a "conventional" view of backtracking expects that some information is propagated backwards to resume the previous level |
2021-11-06 21:23:43 +0100 | <geekosaur> | whereas here it's just the natural behavior of a lazy list |
2021-11-06 21:24:50 +0100 | <dolio> | Prolog does something better than depth-first backtracking search, right? |
2021-11-06 21:26:41 +0100 | <dolio> | But, I don't really see why it wouldn't be considered backtracking, unless someone is adamant that you have to manually use mutation while keeping track of how to revert the mutable variables to older states or something. |
2021-11-06 21:30:10 +0100 | favonia | (~favonia@user/favonia) (Quit: Leaving) |
2021-11-06 21:31:18 +0100 | mei3 | (~mei@user/mei) (Ping timeout: 260 seconds) |
2021-11-06 21:32:42 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 260 seconds) |
2021-11-06 21:34:34 +0100 | <ski> | (`app_ordered_selections' at <https://bpa.st/4IUQ> is an example of backtracking, in C, using a loop, as well as `goto' out of, and into, it) |
2021-11-06 21:35:06 +0100 | <ski> | geekosaur : what kind of information ? |
2021-11-06 21:35:29 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 21:36:42 +0100 | <ski> | dolio : basic Prolog behaviour is depth-first. you can use the cut to (non-declaratively) prune parts of the search tree/space, and systems also often implement indexing, which can be seen as a limited (local) breadth-first exploring of alternatives |
2021-11-06 21:37:47 +0100 | <dolio> | Oh, I meant that I thought it was typical for some 'better' strategy than depth first to be used. |
2021-11-06 21:38:09 +0100 | <dolio> | But I'm not that well read on implementing Prolog. |
2021-11-06 21:38:26 +0100 | <ski> | (some systems also allow you to put a bound on depth of search, so that you can do iterative deepening, but that's not on by default. oh, and some systems have "coroutining", meaning that goals can be delayed, later being triggered, typically when some logic variable becomes instantiated. this can e.g. be used to implement breadth-first, queue-like, possibly streaming, behaviour) |
2021-11-06 21:38:51 +0100 | <ski> | no, i think normally plain depth-first is what is used |
2021-11-06 21:39:05 +0100 | <dolio> | Oh, huh. |
2021-11-06 21:39:16 +0100 | <ski> | one reason is that people sometimes depend on the specific ordering that they get with the naïve depth-first |
2021-11-06 21:39:50 +0100 | <ski> | and so implementations don't want to mess with that, unasked, in ways that's not obvious |
2021-11-06 21:40:35 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 264 seconds) |
2021-11-06 21:43:12 +0100 | <ski> | e.g. interconverting between `( foo ; bar ),baz' and `( foo,baz ; bar,baz )' would be ok in the sense of preserving ordering (and multiplicity) of solutions, while interconverting between `foo,( bar ; baz )' and `( foo,bar ; foo,baz )' wouldn't (since `foo' could have multiple solutions) (.. and obviously also commutativity and idempotency of disjunction isn't used) |
2021-11-06 21:44:03 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-11-06 21:45:51 +0100 | <dolio> | I guess it could just be less naive implementatiaon of DFS. Like, it's conceivable that you could detect that the thing that makes a branch fail is independent of a certain choice, and so not re-evaluate the branch for each choice. |
2021-11-06 21:46:13 +0100 | <ski> | > [[x,y] | x <- "ab" ++ "cd",y <- "ef"] |
2021-11-06 21:46:14 +0100 | <lambdabot> | ["ae","af","be","bf","ce","cf","de","df"] |
2021-11-06 21:46:15 +0100 | <ski> | [[x,y] | x <- "ab",y <- "ef"] ++ [[x,y] | x <- "cd",y <- "ef"] |
2021-11-06 21:46:18 +0100 | <ski> | > [[x,y] | x <- "ab",y <- "ef"] ++ [[x,y] | x <- "cd",y <- "ef"] |
2021-11-06 21:46:19 +0100 | <lambdabot> | ["ae","af","be","bf","ce","cf","de","df"] |
2021-11-06 21:46:39 +0100 | <ski> | > [[x,y] | x <- "ab",y <- "cd" ++ "ef"] |
2021-11-06 21:46:41 +0100 | <lambdabot> | ["ac","ad","ae","af","bc","bd","be","bf"] |
2021-11-06 21:46:42 +0100 | <ski> | > [[x,y] | x <- "ab",y <- "cd"] ++ [[x,y] | x <- "ab",y <- "ef"] |
2021-11-06 21:46:43 +0100 | <lambdabot> | ["ac","ad","bc","bd","ae","af","be","bf"] |
2021-11-06 21:47:10 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2021-11-06 21:47:44 +0100 | <ski> | dolio : yea, but that'd require analysis of that, and that there's no side-effects happening |
2021-11-06 21:48:01 +0100 | <geekosaur> | ski, like in your discussion last night where success of a consequent is treated as a failure by the Antecedent |
2021-11-06 21:48:10 +0100 | <ski> | Mercury is more free to reorder and refactor stuff, because it doesn't allow side-effects |
2021-11-06 21:48:56 +0100 | <ski> | (although, it's possible to run Mercury in a "strict" mode where it doesn't reorder solutions) |
2021-11-06 21:49:06 +0100 | <ski> | (or deduplicate) |
2021-11-06 21:49:26 +0100 | <geekosaur> | whereas with laziness the "antecedent" just keeps going without considering what happened with the "consequent" |
2021-11-06 21:50:23 +0100 | <ski> | well, what i talked about last night was not the behaviour of `(>>=)', but of another combinator |
2021-11-06 21:53:44 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-11-06 21:54:16 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) |
2021-11-06 21:54:56 +0100 | <geekosaur> | in any case, the naïve view of backtracking would expect that the preceding level needs to be told to restart somehow, when in the laziness implementation it would do so regardless when a(nother) value is demanded |
2021-11-06 21:55:14 +0100 | michalz | (~michalz@185.246.204.58) |
2021-11-06 21:55:54 +0100 | <geekosaur> | and neither knows nor cares whether any value(s) have already been produced |
2021-11-06 21:58:22 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
2021-11-06 22:01:56 +0100 | <ski> | @let infixl 1 ==>; (==>) :: [a] -> (a -> [b]) -> [[b]]; (==>) = for |
2021-11-06 22:01:57 +0100 | <lambdabot> | Defined. |
2021-11-06 22:02:00 +0100 | <ski> | > [1,4,2,9] ==> \x -> guard (x < 10) |
2021-11-06 22:02:02 +0100 | <lambdabot> | error: |
2021-11-06 22:02:02 +0100 | <lambdabot> | Ambiguous occurrence ‘==>’ |
2021-11-06 22:02:02 +0100 | <lambdabot> | It could refer to |
2021-11-06 22:02:08 +0100 | <ski> | oh |
2021-11-06 22:02:16 +0100 | <ski> | @let infixl 1 ===>; (===>) :: [a] -> (a -> [b]) -> [[b]]; (===>) = for |
2021-11-06 22:02:17 +0100 | <lambdabot> | Defined. |
2021-11-06 22:02:21 +0100 | <ski> | > [1,4,2,9] ===> \x -> guard (x < 10) |
2021-11-06 22:02:22 +0100 | <lambdabot> | [[(),(),(),()]] |
2021-11-06 22:02:25 +0100 | <ski> | > [1,4,2,9] ===> \x -> guard (x < 5) |
2021-11-06 22:02:27 +0100 | <lambdabot> | [] |
2021-11-06 22:02:51 +0100 | <ski> | > [1,4,2,9] ===> \x -> return (x*x) |
2021-11-06 22:02:52 +0100 | <lambdabot> | [[1,16,4,81]] |
2021-11-06 22:03:12 +0100 | <ski> | > [1,4,2,9] ==> \x -> do guard (x >= 0); let {y = floor (sqrt (fromIntegral x))}; guard (x == y * y); return y <|> return (-y) |
2021-11-06 22:03:13 +0100 | <lambdabot> | error: |
2021-11-06 22:03:14 +0100 | <lambdabot> | Ambiguous occurrence ‘==>’ |
2021-11-06 22:03:14 +0100 | <lambdabot> | It could refer to |
2021-11-06 22:03:25 +0100 | <ski> | > [1,4,2,9] ===> \x -> do guard (x >= 0); let {y = floor (sqrt (fromIntegral x))}; guard (x == y * y); return y <|> return (-y) |
2021-11-06 22:03:27 +0100 | <lambdabot> | [] |
2021-11-06 22:03:29 +0100 | <ski> | > [1,4,9] ===> \x -> do guard (x >= 0); let {y = floor (sqrt (fromIntegral x))}; guard (x == y * y); return y <|> return (-y) |
2021-11-06 22:03:30 +0100 | <lambdabot> | [[1,2,3],[1,2,-3],[1,-2,3],[1,-2,-3],[-1,2,3],[-1,2,-3],[-1,-2,3],[-1,-2,-3]] |
2021-11-06 22:04:07 +0100 | <ski> | that's basically what i implemented, except using continuations, and also supporting logic variables (implemented using mutation) |
2021-11-06 22:05:10 +0100 | acidjnk | (~acidjnk@p200300d0c72635825cb0fefbc648f0e4.dip0.t-ipconnect.de) |
2021-11-06 22:05:39 +0100 | <ski> | (in my version, i had basically `(==>) :: Logic a -> (a -> Logic b) -> Logic b', though, so the first input is not simply a list that you could `for'/`traverse' over .. it's an action generating solutions, by calling success and failure continuations) |
2021-11-06 22:07:16 +0100 | <ski> | geekosaur : well, fwiw, what you just said i'd argue is more or less what Prolog systems do, as well .. |
2021-11-06 22:08:10 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 260 seconds) |
2021-11-06 22:08:20 +0100 | <geekosaur> | yes, but see hololeap's confusion about it |
2021-11-06 22:08:30 +0100 | <ski> | .. as soon as you've entered the Redo port of a predicate call, things proceed as if it was an initial Call. and the Fail port means that no (more) solutions were produced |
2021-11-06 22:09:13 +0100 | <geekosaur> | not seeing how this corresponded to "backtracking" |
2021-11-06 22:09:37 +0100 | <ski> | (when a Prolog system answers "no"/"No" (or sometimes "false"), it should be interpreted not as "the query was false", but that no more solutions were found. it could answer `X = 2', and then say `no'/`false' when you use `;' (meaning "or") to ask for more) |
2021-11-06 22:10:21 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2021-11-06 22:11:22 +0100 | <ski> | backtracking, in the simplest view, causes execution to flow "backwards", back inside the last Exit-ed call, and inside that, proceed from the end backwards, in and out of calls, (undoing variable instantiations that've been done) until it finds a location where there was an alternative choice to attempt |
2021-11-06 22:11:43 +0100 | retro_ | (~retro@2e41e9c8.skybroadband.com) (Read error: Connection reset by peer) |
2021-11-06 22:11:59 +0100 | <geekosaur> | (also last time I got to seriously use Prolog was 1992ish, sigh) |
2021-11-06 22:12:04 +0100 | <ski> | acrual implementations record where the last choice-point was, and just jumps back to it |
2021-11-06 22:12:25 +0100 | retroid_ | (~retro@2e41e9c8.skybroadband.com) |
2021-11-06 22:12:56 +0100 | <ski> | so, when backtracking starts, because some call Fail-s, you jump back to the last choice-point, Redo-ing that call, trying the next clause of the predicate in question |
2021-11-06 22:13:12 +0100 | <geekosaur> | confused the heck out of my boss when I used it to model a complex pricing system :) |
2021-11-06 22:13:40 +0100 | <ski> | from the point of Redo-ing, it is as if it's the initial Call, assuming the predicate in question started at the clause in question (as if previous clauses didn't exist) |
2021-11-06 22:13:49 +0100 | darkstardevx | (~darkstard@50.39.114.152) (Read error: Connection reset by peer) |
2021-11-06 22:16:41 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 22:17:32 +0100 | mrkrktsn1ctcrpt | (~mrkrktsnd@c-24-6-12-87.hsd1.ca.comcast.net) (Quit: Lost terminal) |
2021-11-06 22:18:22 +0100 | mrkrktsndctcrpt | (~mrkrktsnd@c-24-6-12-87.hsd1.ca.comcast.net) (Quit: Lost terminal) |
2021-11-06 22:18:23 +0100 | <ski> | (well, actual signature is `(==>) :: Logic m o a -> (a -> Logic m p o) -> Logic m p o' .. so, there's some "interesting" dependency (the `o') between the antecedent and the consequent) |
2021-11-06 22:18:26 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-11-06 22:19:23 +0100 | <ski> | geekosaur : i guess they'd never seen it before ? |
2021-11-06 22:19:34 +0100 | <geekosaur> | nope |
2021-11-06 22:20:14 +0100 | <geekosaur> | my boss was a database dev turned salesman, had not much clue about languages beyond C |
2021-11-06 22:21:20 +0100 | <geekosaur> | so I got thrown at the stuff with more "exotic" languages including a business cobol and a custom embedded-programming basic dialect |
2021-11-06 22:21:36 +0100 | _ht | (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
2021-11-06 22:21:42 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 260 seconds) |
2021-11-06 22:22:11 +0100 | <geekosaur> | and the prolog thing, which was to escape writing the same logic in C while we still weren't quite certain what it fully was, so prolog made it easier for me to tinker with it |
2021-11-06 22:22:22 +0100 | <geekosaur> | then I rewrote it for speed when we had it firmed down |
2021-11-06 22:22:25 +0100 | <ski> | well, a general cursory knowledge of different paradigms and approaches to programming (both general, and sometimes more specific), is unfortunately commonly lacking .. |
2021-11-06 22:22:29 +0100 | ski | nods |
2021-11-06 22:22:32 +0100 | darkstardevx | (~darkstard@50.39.114.152) |
2021-11-06 22:23:07 +0100 | <ski> | (Basic for embedded programming ?) |
2021-11-06 22:23:28 +0100 | darkstardevx | (~darkstard@50.39.114.152) (Remote host closed the connection) |
2021-11-06 22:23:52 +0100 | darkstardevx | (~darkstard@50.39.114.152) |
2021-11-06 22:24:13 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-11-06 22:24:14 +0100 | <geekosaur> | it was a highly customized basic. I don't recall all the details now but it got compiled down to code for a hard realtime controller |
2021-11-06 22:24:28 +0100 | <geekosaur> | all this stuff was around 20 years ago |
2021-11-06 22:24:53 +0100 | LiaoTao | (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection) |
2021-11-06 22:25:14 +0100 | LiaoTao | (~LiaoTao@gateway/tor-sasl/liaotao) |
2021-11-06 22:25:24 +0100 | <geekosaur> | mm, actually the hrt thing would have been 1987 |
2021-11-06 22:25:41 +0100 | <ski> | hm, sounds curious |
2021-11-06 22:26:26 +0100 | ski | was recently toying around with a Prolog implementation for the Commodore 64 |
2021-11-06 22:26:56 +0100 | <geekosaur> | I only worked with it for a few weeks, then they took it away and assigned it to their engineering dept. because they didn't think someone from the front office should be working on it… think the assigned engineer still used the code I'd written though |
2021-11-06 22:28:06 +0100 | <ski> | (now i'm tinkering a little bit with seeing how far i'd get with reverse-engineering it .. i'd like to add LCO/TCO to it (and that it'll fail directly when the last clause fails, rather than fruitlessly first attempting to look for the next clause)) |
2021-11-06 22:29:06 +0100 | aeke | (~a@p200300ef973db1af4086f0a6a24fc4dd.dip0.t-ipconnect.de) |
2021-11-06 22:29:59 +0100 | <aeke> | Hi, is beta reduction the same as function application in lambda calculus? |
2021-11-06 22:30:08 +0100 | <ski> | no |
2021-11-06 22:30:59 +0100 | <ski> | beta reduction amounts to removing a function application whose operand is a lambda abstraction, by substituting the actual parameter for the formal parameter, in the body of the lambda abstraction |
2021-11-06 22:31:43 +0100 | <ski> | (\x. x * x) (2 + 3) --> (2 + 3) * (2 + 3) |
2021-11-06 22:31:51 +0100 | <ski> | is an example of beta-reduction |
2021-11-06 22:32:37 +0100 | <aeke> | So is function application just the juxtaposition of two lambda terms? |
2021-11-06 22:33:16 +0100 | <aeke> | And the left term does not need to be a lambda abstraction? |
2021-11-06 22:33:21 +0100 | <ski> | a function application is a kind of construct, a way of forming a term/expression, a node in the abstract syntax tree. beta-reduction is about how one can rewrite a term, a tree, into another one |
2021-11-06 22:34:15 +0100 | <ski> | function application is usually written as just juxtaposition (left-associative), in lambda calculus, yes. occasionally you'll see an explicit infix operator, like `@' |
2021-11-06 22:34:46 +0100 | <ski> | aeke : yes, the left term could be a variable, or another application, e.g. |
2021-11-06 22:35:06 +0100 | <ski> | e.g. `f x y' is normally parsed as `(f x) y' |
2021-11-06 22:36:04 +0100 | <aeke> | So function application is part of building up an AST while beta reduction is part of evaluation/reducing that tree (if the left term of the fun app happens to be a lambda abstraction)? |
2021-11-06 22:36:32 +0100 | <ski> | so .. beta-reduction removes both an application, and an abstaction, from the AST. they "react", so to speak |
2021-11-06 22:36:46 +0100 | <ski> | aeke : yes |
2021-11-06 22:37:22 +0100 | zmt01 | (~zmt00@user/zmt00) |
2021-11-06 22:38:01 +0100 | zmt00 | (~zmt00@user/zmt00) (Ping timeout: 245 seconds) |
2021-11-06 22:38:50 +0100 | wonko | (~wjc@user/wonko) |
2021-11-06 22:43:35 +0100 | zmt01 | (~zmt00@user/zmt00) (Ping timeout: 264 seconds) |
2021-11-06 22:44:39 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 22:44:40 +0100 | emf | (~emf@c-73-97-137-43.hsd1.wa.comcast.net) (Remote host closed the connection) |
2021-11-06 22:45:46 +0100 | emf | (~emf@163.114.132.5) |
2021-11-06 22:46:52 +0100 | ulvarrefr | (~user@185.24.53.152) (ERC (IRC client for Emacs 27.2)) |
2021-11-06 22:49:42 +0100 | aqua0210 | (~user@101.85.11.168) (Ping timeout: 260 seconds) |
2021-11-06 22:54:29 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2021-11-06 22:55:46 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2021-11-06 22:57:30 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 268 seconds) |
2021-11-06 22:58:50 +0100 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-11-06 22:59:32 +0100 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
2021-11-06 23:00:28 +0100 | basti_ | (~basti@ip-84-119-8-195.unity-media.net) (Quit: leaving) |
2021-11-06 23:02:02 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) |
2021-11-06 23:05:54 +0100 | qwedfg | (~qwedfg@user/qwedfg) (Remote host closed the connection) |
2021-11-06 23:06:58 +0100 | v01d4lph4 | (~v01d4lph4@user/v01d4lph4) (Ping timeout: 260 seconds) |
2021-11-06 23:08:23 +0100 | qwedfg | (~qwedfg@user/qwedfg) |
2021-11-06 23:10:05 +0100 | fendor | (~fendor@178.165.196.101.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
2021-11-06 23:11:16 +0100 | zmt00 | (~zmt00@user/zmt00) |
2021-11-06 23:11:26 +0100 | <EvanR> | often times (beta) reducing something greatly increases its size xD |
2021-11-06 23:12:43 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2021-11-06 23:14:45 +0100 | ubert | (~Thunderbi@p200300ecdf4fca30e019fddc82d0353e.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
2021-11-06 23:24:36 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2021-11-06 23:29:05 +0100 | wonko | (~wjc@user/wonko) (Ping timeout: 256 seconds) |
2021-11-06 23:30:08 +0100 | fluffyballoon | (~user@131.93.208.196) |
2021-11-06 23:30:41 +0100 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
2021-11-06 23:32:23 +0100 | pavonia | (~user@user/siracusa) (Read error: Connection reset by peer) |
2021-11-06 23:33:03 +0100 | Sgeo_ | (~Sgeo@user/sgeo) |
2021-11-06 23:33:06 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2021-11-06 23:33:26 +0100 | Sgeo | (~Sgeo@user/sgeo) (Ping timeout: 245 seconds) |
2021-11-06 23:33:27 +0100 | cheater | (~Username@user/cheater) |
2021-11-06 23:37:05 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-11-06 23:37:34 +0100 | pavonia | (~user@user/siracusa) |
2021-11-06 23:45:27 +0100 | aqua0210 | (~user@101.85.11.168) |
2021-11-06 23:46:54 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) |
2021-11-06 23:49:56 +0100 | slack1256 | (~slack1256@191.125.227.73) |
2021-11-06 23:50:01 +0100 | cosimone | (~user@93-47-229-157.ip115.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1)) |
2021-11-06 23:51:45 +0100 | yauhsien | (~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2021-11-06 23:57:18 +0100 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 268 seconds) |
2021-11-06 23:57:26 +0100 | mastarija | (~mastarija@2a05:4f46:e06:ff00:18c4:3126:ef80:d743) (Quit: Leaving) |
2021-11-06 23:59:01 +0100 | ubert | (~Thunderbi@p200300ecdf4fca30e019fddc82d0353e.dip0.t-ipconnect.de) |
2021-11-06 23:59:09 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 268 seconds) |