2020-11-19 00:00:02 +0100 | <hekkaidekapus> | Ah, ok. |
2020-11-19 00:00:23 +0100 | <ski> | (for some reason, i've noticed that i, unnervingly often, write "i" when i mean "it") |
2020-11-19 00:01:15 +0100 | <hekkaidekapus> | heh Those pesky keyboards :d |
2020-11-19 00:02:12 +0100 | <ski> | (.. and some other annoying typos, like the "the the" class of typos (you pause after writing a word, to think, and then when you continue, you repeat the last word). also, sometimes, when thinking ahead about how to formulate myself, i write out a later planned word, in place of the current one that i intended) |
2020-11-19 00:02:30 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-19 00:04:00 +0100 | <ski> | (and no, i don't think i'm simply failing to press the "t" key in the "it". it may be related to another class of typos, where i write another word, that, when pronounced, sounds more or less similar to the intended word) |
2020-11-19 00:05:33 +0100 | <ski> | (.. some kind of mess-up, in the internal sentence-structure to keypress serialization) |
2020-11-19 00:05:34 +0100 | <hekkaidekapus> | Maybe it’s the cerebral chemistry being quicker than the bio-mechanical anatomy. By the time a typo is spotted, some other body part has already initiated an irreversible action. |
2020-11-19 00:05:39 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 00:06:39 +0100 | <hpc> | i wonder if they make joke keyboards that don't have a backspace or delete key |
2020-11-19 00:07:11 +0100 | <ski> | it's interesting to read a transcript of what someone has spoken, including "er"s, half-formed sentences, changing midway through, &c. |
2020-11-19 00:08:22 +0100 | <ski> | hm. perhaps they could brand those keyboards "Dijkstra" |
2020-11-19 00:09:14 +0100 | <justsomeguy> | ski: I do a lot of that, too. My worst sin is writing in inconsistent tense (past, present, future), because I've rephrased my comment in the chat box five or six times before sending. |
2020-11-19 00:09:22 +0100 | <ski> | (another example of an annoying typo is writing "now" in place of "not" (or vice versa)) |
2020-11-19 00:09:34 +0100 | random | (~random@46.254.129.126) (Ping timeout: 246 seconds) |
2020-11-19 00:10:10 +0100 | <ski> | yea, rephrasing (incompletely/inconsistently) is dangerous |
2020-11-19 00:10:38 +0100 | abhixec | (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) (Remote host closed the connection) |
2020-11-19 00:11:02 +0100 | justsomeguy | also sometimes habitually replaces English words with similar sounding command names since he's more used to typing them, which is hilarious. |
2020-11-19 00:11:21 +0100 | <ski> | hm, yea. i've noticed that too |
2020-11-19 00:11:33 +0100 | <ski> | e.g. writing "type" in place of "typo" |
2020-11-19 00:11:58 +0100 | <ski> | partly a muscle-memory thing, i'd guess |
2020-11-19 00:11:58 +0100 | Tourist | (~tourist@unaffiliated/tourist) (Ping timeout: 256 seconds) |
2020-11-19 00:12:00 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2020-11-19 00:12:04 +0100 | Flonk | (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com) (Ping timeout: 240 seconds) |
2020-11-19 00:12:06 +0100 | digia | (~digia@unaffiliated/digia) (Remote host closed the connection) |
2020-11-19 00:12:08 +0100 | bsima | (~bsima@simatime.com) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-11-19 00:12:09 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
2020-11-19 00:12:19 +0100 | digia | (~digia@unaffiliated/digia) |
2020-11-19 00:12:31 +0100 | bsima | (~bsima@simatime.com) |
2020-11-19 00:12:36 +0100 | <boxscape> | any idea why `Fam alt MkR = alt` here doesn't produce an error? (using ghc 8.10) https://gist.github.com/JakobBruenker/a1b8c66abcb1c05e9bf4ff55e73fa6c8 |
2020-11-19 00:12:43 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
2020-11-19 00:12:44 +0100 | bobbytables | (~bobbytabl@ec2-44-224-191-138.us-west-2.compute.amazonaws.com) (Ping timeout: 240 seconds) |
2020-11-19 00:12:53 +0100 | orcus- | (~orcus@unaffiliated/orcus) |
2020-11-19 00:13:03 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds) |
2020-11-19 00:13:07 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 00:13:08 +0100 | conal | (~conal@64.71.133.70) (Client Quit) |
2020-11-19 00:13:09 +0100 | <ski> | (or, writing an english (usually short) word in place of a similar-looking swedish one) |
2020-11-19 00:13:16 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2020-11-19 00:13:18 +0100 | mastarija | (~mastarija@93-136-63-196.adsl.net.t-com.hr) |
2020-11-19 00:13:23 +0100 | Inoperable | (~PLAYER_1@fancydata.science) (Ping timeout: 260 seconds) |
2020-11-19 00:13:25 +0100 | cheers | (user@unaffiliated/cheers) (Ping timeout: 240 seconds) |
2020-11-19 00:13:25 +0100 | Madars | (~null@unaffiliated/madars) (Ping timeout: 240 seconds) |
2020-11-19 00:13:48 +0100 | rotty | (rotty@ghost.xx.vu) (Ping timeout: 272 seconds) |
2020-11-19 00:13:59 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 00:14:20 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Max SendQ exceeded) |
2020-11-19 00:14:24 +0100 | siraben | (sirabenmat@gateway/shell/matrix.org/x-ayxhmamsaxhvcaxs) (Ping timeout: 240 seconds) |
2020-11-19 00:14:39 +0100 | <ski> | boxscape : hm, i'd guess it's interpreted as `Fam @a @b @b alt MkR = alt' ? |
2020-11-19 00:14:50 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2020-11-19 00:14:56 +0100 | bobbytables | (~bobbytabl@ec2-44-224-191-138.us-west-2.compute.amazonaws.com) |
2020-11-19 00:14:57 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2020-11-19 00:15:04 +0100 | maralorn | (maralornma@gateway/shell/matrix.org/x-dbfnqoxrhdjljtko) (Ping timeout: 240 seconds) |
2020-11-19 00:15:13 +0100 | <boxscape> | oh, hm, I suppose that makes sense |
2020-11-19 00:15:25 +0100 | <ski> | so, in that case, that `MkR' has kind `Relation b b' |
2020-11-19 00:15:27 +0100 | cheers | (user@unaffiliated/cheers) |
2020-11-19 00:15:44 +0100 | iinuwa | (iinuwamatr@gateway/shell/matrix.org/x-jxshhrkktrqfnuqi) (Ping timeout: 240 seconds) |
2020-11-19 00:15:44 +0100 | orcus | (~orcus@unaffiliated/orcus) (Ping timeout: 240 seconds) |
2020-11-19 00:15:54 +0100 | <boxscape> | I think I only considered that the pattern matching could influence what the invisible args are, and forgot that the result could as well |
2020-11-19 00:15:57 +0100 | rotty | (rotty@ghost.xx.vu) |
2020-11-19 00:16:00 +0100 | <boxscape> | thanks |
2020-11-19 00:17:04 +0100 | maralorn | (maralornma@gateway/shell/matrix.org/x-qdyphvplrxcjzfoq) |
2020-11-19 00:17:39 +0100 | abhixec | (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) |
2020-11-19 00:18:22 +0100 | In0perable | (~PLAYER_1@fancydata.science) |
2020-11-19 00:18:54 +0100 | <ski> | well, well, `alt :: Relation a c' is consistent with `alt :: Relation a b',`MkR :: Relation b c', if `b = c' |
2020-11-19 00:19:09 +0100 | Flonk | (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com) |
2020-11-19 00:19:25 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2020-11-19 00:19:26 +0100 | <boxscape> | right, that makes sense |
2020-11-19 00:20:02 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 00:20:12 +0100 | conal | (~conal@64.71.133.70) (Client Quit) |
2020-11-19 00:20:16 +0100 | siraben | (sirabenmat@gateway/shell/matrix.org/x-moaedtsqvaqtshxu) |
2020-11-19 00:20:29 +0100 | <ski> | (that "well, well, " being an (inadvertent) example of the "the the" class of typos mentioned above) |
2020-11-19 00:20:30 +0100 | hackage | th-lift-instances 0.1.18 - Lift instances for template-haskell for common data types. https://hackage.haskell.org/package/th-lift-instances-0.1.18 (BennoFuenfstueck) |
2020-11-19 00:20:52 +0100 | aoei | (~aoei@240.223.246.35.bc.googleusercontent.com) (Remote host closed the connection) |
2020-11-19 00:22:03 +0100 | crdrost | (~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) |
2020-11-19 00:22:04 +0100 | aoei | (~aoei@240.223.246.35.bc.googleusercontent.com) |
2020-11-19 00:22:15 +0100 | <boxscape> | What apparently also confused me is that I encountered this in a situation where MkR was slightly different and made b ~ c impossible, but not in a way that was obvious to the type checker |
2020-11-19 00:23:33 +0100 | <boxscape> | (specifically, MkR took a proof that b < c) |
2020-11-19 00:23:49 +0100 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds) |
2020-11-19 00:23:55 +0100 | abhixec | (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) (Ping timeout: 246 seconds) |
2020-11-19 00:25:22 +0100 | rotty | (rotty@ghost.xx.vu) (Ping timeout: 260 seconds) |
2020-11-19 00:26:00 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) |
2020-11-19 00:27:03 +0100 | rotty | (rotty@ghost.xx.vu) |
2020-11-19 00:27:42 +0100 | shutdown_-h_now | (~arjan@2001:1c06:2d0b:2312:190f:5fcb:2d71:58b) (Ping timeout: 260 seconds) |
2020-11-19 00:27:56 +0100 | <ski> | hmm, it's curious that a polymorphic type family isn't blind in the `forall' |
2020-11-19 00:28:07 +0100 | Madars | (~null@unaffiliated/madars) |
2020-11-19 00:28:22 +0100 | <boxscape> | what do you mean by "blind" here? |
2020-11-19 00:29:07 +0100 | ystael | (~ystael@209.6.50.55) (Ping timeout: 260 seconds) |
2020-11-19 00:29:19 +0100 | <ski> | not being able to match on the kind bound by the `forall' |
2020-11-19 00:29:56 +0100 | <boxscape> | I think that's what Richard Eisenberg et al call "relevant" vs "irrelevant"? |
2020-11-19 00:30:06 +0100 | <ski> | you can't write `notId :: forall a. a -> a; notId @Int n = n + 1; notId x = x' |
2020-11-19 00:30:13 +0100 | <boxscape> | he's complained before that the "forall" on the kind level really should be called "foreach" to match up with the value level plans |
2020-11-19 00:30:41 +0100 | <ski> | in relation to type (and `data') families, specifically ? |
2020-11-19 00:31:25 +0100 | <boxscape> | Well, I'm fairly certain that relevancy is a concept applicable to type families, I'm less certain if I saw Richard complain about it in that context |
2020-11-19 00:32:17 +0100 | <ski> | (since i'd think parametricity would also sensibly apply to polymorphic types) |
2020-11-19 00:32:23 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 00:32:30 +0100 | <ski> | mhm |
2020-11-19 00:32:51 +0100 | <boxscape> | Yeah, hm, I suppose relevancy can break parametricity |
2020-11-19 00:32:57 +0100 | <ski> | iow, i guess i'd expect your `Fam' to use `foreach' instead, but to also be able to use `forall' on the type-level |
2020-11-19 00:32:59 +0100 | iinuwa | (iinuwamatr@gateway/shell/matrix.org/x-cburarlywoxtjfrp) |
2020-11-19 00:33:12 +0100 | <boxscape> | yeah that makes sense |
2020-11-19 00:34:06 +0100 | <ski> | that could have helped catch your confusion in the pasted code, preventing `Fam alt MkR = alt' to work, unless you used `foreach' |
2020-11-19 00:34:17 +0100 | shutdown_-h_now | (~arjan@2001:1c06:2d0b:2312:794d:ef9:43c6:21d5) |
2020-11-19 00:34:23 +0100 | <boxscape> | that's true |
2020-11-19 00:34:53 +0100 | <ski> | (btw, i think the "blind" terminology might come from Japaridze's computability logic) |
2020-11-19 00:34:58 +0100 | <boxscape> | although even then I think in a value level function with foreach the result (as supposed to matching on other arguments) couldn't influence the invisible arguments like that? I'm not sure |
2020-11-19 00:35:25 +0100 | <boxscape> | s/supposed/opposed |
2020-11-19 00:37:00 +0100 | <ski> | i'm still not totally sure what you mean by "the result [..] couldn't influence the invisible arguments like that" -- i suspect you mean the "back-propagation" of unification of tyvars, to specialize the (implicit type-)parameters, based on the type inference/checking on the body |
2020-11-19 00:37:33 +0100 | <boxscape> | that.. sounds it like should be what I mean |
2020-11-19 00:38:18 +0100 | <dolio> | The whole system is kind of inconsistent. |
2020-11-19 00:38:29 +0100 | nek0 | (~nek0@mail.nek0.eu) (Quit: Ping timeout (120 seconds)) |
2020-11-19 00:38:33 +0100 | <dolio> | Like, type families already let you match on things that you aren't normally allowed to match on. |
2020-11-19 00:38:36 +0100 | <glguy> | unclechu: You around? |
2020-11-19 00:38:42 +0100 | <ski> | hmm .. consider something like `sameNat :: foreach (m :: Nat) (n :: Nat). Maybe (Equal m n); sameNat = Just Refl; sameNat = Nothing' |
2020-11-19 00:38:43 +0100 | ulidtko | (~ulidtko@193.111.48.79) (Remote host closed the connection) |
2020-11-19 00:38:50 +0100 | <glguy> | I was playing with a module based on your wanting a reusable, type-level Map https://gist.github.com/glguy/98331ca1c3876a188e5380b9d0da5751 |
2020-11-19 00:39:02 +0100 | nek0 | (~nek0@mail.nek0.eu) |
2020-11-19 00:39:02 +0100 | ulidtko | (~ulidtko@193.111.48.79) |
2020-11-19 00:39:06 +0100 | <glguy> | It's not "light-weight", but I thought it was cool that it worked |
2020-11-19 00:39:31 +0100 | <ski> | where the definition would be expanded into `sameNat @n @n = Just (Refl @Nat @n); sameNat @_ @_ = Nothing' |
2020-11-19 00:39:34 +0100 | jonatanb | (~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) |
2020-11-19 00:40:11 +0100 | <ski> | dolio : yea. we sortof pretend `*'/`Type' is a(n open) sum type, in families |
2020-11-19 00:40:20 +0100 | <dolio> | So it's kind of hard to draw analogies between the two levels, because they don't work the same in many ways. |
2020-11-19 00:41:14 +0100 | <boxscape> | right, but the eventual goal of folks like Richard is to unify them, so.. I guess I was analogizing with that hypothetical future value level |
2020-11-19 00:41:15 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 00:41:29 +0100 | <boxscape> | though of course that's not fully specified at this point |
2020-11-19 00:41:39 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Ping timeout: 256 seconds) |
2020-11-19 00:41:52 +0100 | <dolio> | And even in more uniform systems, parametricity gets kind of fuzzy and unsatisfying when you talk about applying it to types. |
2020-11-19 00:42:05 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 00:42:08 +0100 | <boxscape> | ski intuitively I would expect sameNat not to compile in a Haskell with foreach, but maybe it should, I'm not sure. Hm, would it compile in agda? |
2020-11-19 00:42:28 +0100 | <ski> | (and this is one argument against the terminology "type constructor" (vs. "data constructor"), i suppose .. also, with `DataKinds', with say `data Tag = E | D', `Tag' being a kind, what do we call `Tag',`E',`D' ? calling the latter two "type constructors" would seem to be confusing, possibly ? .. oh, well) |
2020-11-19 00:43:06 +0100 | <ski> | boxscape : in Agda, with implicit parameters, yes |
2020-11-19 00:43:14 +0100 | <boxscape> | okay, fair enough |
2020-11-19 00:43:32 +0100 | <ski> | or, well |
2020-11-19 00:43:50 +0100 | <ski> | you'd have to actually do recursion on the `Nat's, not being able to use non-linear patterns |
2020-11-19 00:44:09 +0100 | <ski> | (so not with that exact implementation. but you could implement it) |
2020-11-19 00:44:13 +0100 | <boxscape> | ok |
2020-11-19 00:44:30 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) |
2020-11-19 00:46:37 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Quit: Connection closed) |
2020-11-19 00:46:50 +0100 | jonatanb | (~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Remote host closed the connection) |
2020-11-19 00:47:03 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) |
2020-11-19 00:47:19 +0100 | hexfive | (~hexfive@50-47-142-195.evrt.wa.frontiernet.net) (Quit: i must go. my people need me.) |
2020-11-19 00:48:01 +0100 | <energizer> | usually arrays are indexed by natural numbers. is there something like an array but indexed by some other type |
2020-11-19 00:48:30 +0100 | <energizer> | like strings or whatever |
2020-11-19 00:48:33 +0100 | <ski> | > listArray (LT,GT) [-1,0,1] |
2020-11-19 00:48:35 +0100 | <lambdabot> | array (LT,GT) [(LT,-1),(EQ,0),(GT,1)] |
2020-11-19 00:48:38 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-19 00:49:01 +0100 | <ski> | perhaps you want some form of trie ? |
2020-11-19 00:49:24 +0100 | <ski> | @type listArray (LT,GT) [-1,0,1 :: Integer] |
2020-11-19 00:49:26 +0100 | <lambdabot> | Array Ordering Integer |
2020-11-19 00:49:31 +0100 | <ClaudiusMaximus> | Ix is a class for mapping values of a type to natural numbers for use as array indices |
2020-11-19 00:49:44 +0100 | <ski> | (an array indexed by values of type `Ordering') |
2020-11-19 00:49:59 +0100 | <ski> | @type listArray |
2020-11-19 00:50:01 +0100 | <lambdabot> | Ix i => (i, i) -> [e] -> Array i e |
2020-11-19 00:50:23 +0100 | jonatanb | (jonatanb@gateway/vpn/protonvpn/jonatanb) |
2020-11-19 00:50:54 +0100 | <energizer> | there should be the property that a<b<c means b is a valid index whenever a and c are |
2020-11-19 00:51:15 +0100 | <ski> | @type range |
2020-11-19 00:51:16 +0100 | <lambdabot> | Ix a => (a, a) -> [a] |
2020-11-19 00:51:27 +0100 | <ski> | gives values in a kind of "interval" |
2020-11-19 00:51:46 +0100 | <ski> | (for two-dimensional arrays, it gives indices in a "rectangle") |
2020-11-19 00:52:00 +0100 | <ClaudiusMaximus> | @type inRange -- tests, and i can never remember the argument order |
2020-11-19 00:52:01 +0100 | <lambdabot> | Ix a => (a, a) -> a -> Bool |
2020-11-19 00:52:05 +0100 | <ski> | > range ((-1,-1),(2,3)) |
2020-11-19 00:52:06 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 00:52:07 +0100 | <lambdabot> | [(-1,-1),(-1,0),(-1,1),(-1,2),(-1,3),(0,-1),(0,0),(0,1),(0,2),(0,3),(1,-1),(... |
2020-11-19 00:52:23 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 00:52:54 +0100 | <ClaudiusMaximus> | (it has a name that sounds infix, but it is flipped w.r.t. infix usage) |
2020-11-19 00:54:24 +0100 | <ski> | in other words, `range (lo,hi)' should give a list of all indices `i', where ⌜lo ≼ i ∧ i ≼ hi⌝, where the ordering here is not lexicographic ordering in case of tuples, but rather the product order (a partial order, not a total/linear one) |
2020-11-19 00:57:06 +0100 | <ski> | (ClaudiusMaximus : i wonder how that happened ..) |
2020-11-19 00:58:34 +0100 | <boxscape> | %! ghc --version |
2020-11-19 00:58:34 +0100 | <yahb> | boxscape: [Segmentation fault] |
2020-11-19 00:58:35 +0100 | <boxscape> | cool |
2020-11-19 01:00:38 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Quit: Connection closed) |
2020-11-19 01:00:49 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) |
2020-11-19 01:02:44 +0100 | <boxscape> | % :kind! Fam MkR (MkR :: Relation Int Int) -- so this is fine |
2020-11-19 01:02:45 +0100 | <yahb> | boxscape: forall {k} {a :: k}. Relation a Int; = 'MkR |
2020-11-19 01:02:46 +0100 | <boxscape> | % :kind! Fam MkR (MkR :: Int Int) -- But I do find it a bit confusing that this has no output |
2020-11-19 01:02:46 +0100 | <yahb> | boxscape: |
2020-11-19 01:03:24 +0100 | <boxscape> | I guess I'll try installing HEAD and see if it's fixed there |
2020-11-19 01:03:31 +0100 | erisco | (~erisco@d24-57-249-233.home.cgocable.net) |
2020-11-19 01:05:27 +0100 | sfvm | (~sfvm@37.228.215.148) (Remote host closed the connection) |
2020-11-19 01:05:37 +0100 | alp | (~alp@2a01:e0a:58b:4920:7462:8d66:154:f167) (Ping timeout: 272 seconds) |
2020-11-19 01:06:19 +0100 | ski | . o O ( <https://lambdacats.github.io/fixed-in-head/> ) |
2020-11-19 01:07:01 +0100 | sfvm | (~sfvm@37.228.215.148) |
2020-11-19 01:07:34 +0100 | <boxscape> | :) |
2020-11-19 01:08:23 +0100 | <hpc> | whenever someone says "it's fixed in head", i read it as "it's fixed in my imagination" |
2020-11-19 01:08:26 +0100 | borne | (~fritjof@200116b864880600f1dc39039d201adf.dip.versatel-1u1.de) (Ping timeout: 264 seconds) |
2020-11-19 01:09:30 +0100 | hackage | witch 0.0.0.3 - Convert values from one type into another. https://hackage.haskell.org/package/witch-0.0.0.3 (fozworth) |
2020-11-19 01:10:52 +0100 | jedws | (~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 01:15:57 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 01:16:36 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2020-11-19 01:19:03 +0100 | mastarija | (~mastarija@93-136-63-196.adsl.net.t-com.hr) (Remote host closed the connection) |
2020-11-19 01:19:07 +0100 | Entertainment | (~entertain@104.246.132.210) () |
2020-11-19 01:19:25 +0100 | mastarija | (~mastarija@93-136-63-196.adsl.net.t-com.hr) |
2020-11-19 01:20:19 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:d091:432d:3cee:b0b2) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 01:24:41 +0100 | jonatanb | (jonatanb@gateway/vpn/protonvpn/jonatanb) (Remote host closed the connection) |
2020-11-19 01:27:44 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
2020-11-19 01:27:44 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 01:28:01 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 01:28:19 +0100 | conal | (~conal@64.71.133.70) (Ping timeout: 246 seconds) |
2020-11-19 01:29:48 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) |
2020-11-19 01:29:49 +0100 | <monochrom> | That's half true because clearly there is no release plan other than imagination. |
2020-11-19 01:30:00 +0100 | conal | (~conal@66.115.157.132) |
2020-11-19 01:32:10 +0100 | solonarv | (~solonarv@astrasbourg-653-1-156-4.w90-6.abo.wanadoo.fr) (Ping timeout: 265 seconds) |
2020-11-19 01:32:13 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 01:32:42 +0100 | haasn | (~nand@mpv/developer/haasn) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
2020-11-19 01:33:04 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 01:33:39 +0100 | DTZUZU | toxix |
2020-11-19 01:35:55 +0100 | hekkaidekapus_ | (~tchouri@gateway/tor-sasl/hekkaidekapus) |
2020-11-19 01:37:29 +0100 | fendor_ | (~fendor@178.165.128.131.wireless.dyn.drei.com) |
2020-11-19 01:37:38 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 01:37:43 +0100 | hekkaidekapus | (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds) |
2020-11-19 01:37:45 +0100 | jespada | (~jespada@90.254.245.49) (Ping timeout: 256 seconds) |
2020-11-19 01:37:50 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 01:38:04 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 01:38:25 +0100 | <boxscape> | ski: FWIW this fails in agda, but I'm not sure if the same caveat applies here that you mentioned about Nats https://pastebin.com/jKsJpPVd |
2020-11-19 01:39:05 +0100 | jespada | (~jespada@90.254.245.49) |
2020-11-19 01:39:22 +0100 | <boxscape> | guess I should look up non-linear pattern |
2020-11-19 01:39:32 +0100 | <dolio> | You need to prove it by cases. |
2020-11-19 01:40:03 +0100 | fendor | (~fendor@77.119.128.218.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
2020-11-19 01:40:31 +0100 | mastarija | (~mastarija@93-136-63-196.adsl.net.t-com.hr) (Quit: Leaving) |
2020-11-19 01:40:34 +0100 | <boxscape> | dolio right, that would have been my intuition but from my conversation with ski it initially sounded like this would work (and it would in Haskell type families, I think) |
2020-11-19 01:41:28 +0100 | fr33domlover | (~fr33domlo@fsf/member/fr33domlover) (Ping timeout: 260 seconds) |
2020-11-19 01:42:00 +0100 | haasn | (~nand@mpv/developer/haasn) |
2020-11-19 01:44:55 +0100 | fr33domlover | (~fr33domlo@fsf/member/fr33domlover) |
2020-11-19 01:46:23 +0100 | <dolio> | Yeah, an analogous type family would work. That it does work is a massive difference in expectation of what they mean, more or less. |
2020-11-19 01:46:25 +0100 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 240 seconds) |
2020-11-19 01:46:39 +0100 | <dolio> | Like, type families are assuming that all the things they operate over have decidable equality. |
2020-11-19 01:47:05 +0100 | <boxscape> | Oh, that's interesting |
2020-11-19 01:47:39 +0100 | <dolio> | I guess in some ways it's not even that, though. |
2020-11-19 01:47:52 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) |
2020-11-19 01:48:27 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) (Client Quit) |
2020-11-19 01:48:48 +0100 | <dolio> | Because the actual behavior is like, 'if you ever figure out that m = n, then `foo m n` reduces to one thing, and if you figure out that m /= n, it reduces to another.' |
2020-11-19 01:49:16 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-19 01:49:55 +0100 | <boxscape> | oh, yeah.. I thought it would work in agda if you wrote {a} {.a}, but with your it doesn't sound like it, and indeed, it says "Failed to infer the value of dotted pattern". |
2020-11-19 01:50:09 +0100 | <boxscape> | s/with your/with your explanation |
2020-11-19 01:50:17 +0100 | bergey | (~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Remote host closed the connection) |
2020-11-19 01:50:19 +0100 | <dolio> | No, .a is for when you match on a proof that two things are equal. |
2020-11-19 01:50:51 +0100 | <boxscape> | RIght, okay |
2020-11-19 01:51:03 +0100 | <boxscape> | So it's very different from saying @a @a in a type family |
2020-11-19 01:51:26 +0100 | <dolio> | Yeah. |
2020-11-19 01:51:49 +0100 | DataComp_ | (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Remote host closed the connection) |
2020-11-19 01:54:30 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
2020-11-19 01:54:46 +0100 | rogue_cheddar | (~manjaro-u@2806:1000:8003:2a54:da9a:e457:f660:288a) |
2020-11-19 01:55:37 +0100 | <dolio> | Anyhow, if you don't want things to get stuck, which is important in Agda, then decidable equality is kind of important for justifying that sort of matching. |
2020-11-19 01:56:07 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) |
2020-11-19 01:56:19 +0100 | <dolio> | Whereas type families are kind of based on the idea of adding things that get stuck, and specifying certain scenarios where they become unstuck, with no guarantee that all scenarios are covered. |
2020-11-19 01:56:37 +0100 | wpcarro | (sid397589@gateway/web/irccloud.com/x-jyvrhcovkjnuufaq) (Ping timeout: 260 seconds) |
2020-11-19 01:57:36 +0100 | <boxscape> | hmm I wonder how this pretend-dec-eq-ness will work when you try to match on unsaturated type families once those are merged |
2020-11-19 01:57:44 +0100 | <boxscape> | I guess maybe it'll just get stuck |
2020-11-19 01:58:21 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.) |
2020-11-19 01:59:24 +0100 | wpcarro | (sid397589@gateway/web/irccloud.com/x-mptadpaqtazralft) |
2020-11-19 01:59:33 +0100 | xsperry | (~as@unaffiliated/xsperry) (Ping timeout: 260 seconds) |
2020-11-19 02:01:14 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 02:02:13 +0100 | Tesseraction | (~Tesseract@unaffiliated/tesseraction) |
2020-11-19 02:02:54 +0100 | thc202 | (~thc202@unaffiliated/thc202) (Quit: thc202) |
2020-11-19 02:03:00 +0100 | <ski> | boxscape : yes, you'd need `sameNat {false} {false} = just refl; sameNat {true} {true} = just refl; sameNat = nothing', pretty sure |
2020-11-19 02:03:47 +0100 | <boxscape> | yeah, that does work |
2020-11-19 02:05:37 +0100 | jneira | (02896ac0@gateway/web/cgi-irc/kiwiirc.com/ip.2.137.106.192) (Ping timeout: 264 seconds) |
2020-11-19 02:05:38 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 02:06:01 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 02:06:30 +0100 | <p0a> | /quit bye |
2020-11-19 02:06:32 +0100 | p0a | (~user@unaffiliated/p0a) (Quit: bye) |
2020-11-19 02:06:39 +0100 | SupaYoshi | (~supayoshi@213-10-140-13.fixed.kpn.net) (Ping timeout: 260 seconds) |
2020-11-19 02:08:14 +0100 | cosimone | (~cosimone@5.171.24.92) |
2020-11-19 02:08:19 +0100 | iqubic | (~user@2601:602:9500:4870:18b7:5f73:2db2:1881) ("ERC (IRC client for Emacs 28.0.50)") |
2020-11-19 02:09:18 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2020-11-19 02:13:25 +0100 | m0rphism | (~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) (Ping timeout: 264 seconds) |
2020-11-19 02:13:49 +0100 | SupaYoshi | (~supayoshi@213-10-140-13.fixed.kpn.net) |
2020-11-19 02:17:10 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving) |
2020-11-19 02:17:45 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
2020-11-19 02:19:14 +0100 | DataComputist | (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) |
2020-11-19 02:20:37 +0100 | Tourist | (~tourist@da.tourist.sh) |
2020-11-19 02:20:37 +0100 | Tourist | (~tourist@da.tourist.sh) (Changing host) |
2020-11-19 02:20:37 +0100 | Tourist | (~tourist@unaffiliated/tourist) |
2020-11-19 02:20:41 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 02:21:14 +0100 | nuncanada | (~dude@179.235.160.168) |
2020-11-19 02:21:27 +0100 | guest1119 | (~user@49.5.6.87) |
2020-11-19 02:25:32 +0100 | nek0 | (~nek0@mail.nek0.eu) (Ping timeout: 260 seconds) |
2020-11-19 02:25:45 +0100 | cgfuh | (~cgfuh@181.167.191.58) (Ping timeout: 240 seconds) |
2020-11-19 02:27:03 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-19 02:30:34 +0100 | i8ucl | (~manjaro-u@201.130.137.230.dsl.dyn.telnor.net) |
2020-11-19 02:31:07 +0100 | rogue_cheddar | (~manjaro-u@2806:1000:8003:2a54:da9a:e457:f660:288a) (Ping timeout: 272 seconds) |
2020-11-19 02:32:06 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 265 seconds) |
2020-11-19 02:32:45 +0100 | Rudd0 | (~Rudd0@185.189.115.103) (Ping timeout: 240 seconds) |
2020-11-19 02:33:16 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving) |
2020-11-19 02:33:24 +0100 | magnuscake | (~magnuscak@103.44.33.121) |
2020-11-19 02:33:36 +0100 | Lord_of_Life_ | (~Lord@46.217.218.252) |
2020-11-19 02:33:36 +0100 | Lord_of_Life | (~Lord@46.217.217.18) (Ping timeout: 240 seconds) |
2020-11-19 02:34:31 +0100 | hackage | citeproc 0.2 - Generates citations and bibliography from CSL styles. https://hackage.haskell.org/package/citeproc-0.2 (JohnMacFarlane) |
2020-11-19 02:35:47 +0100 | magnuscake | (~magnuscak@103.44.33.121) (Client Quit) |
2020-11-19 02:37:03 +0100 | wh0 | (~wh0000@cpc152777-shef18-2-0-cust223.17-1.cable.virginm.net) |
2020-11-19 02:37:05 +0100 | elliott__ | (~elliott@pool-108-51-141-12.washdc.fios.verizon.net) |
2020-11-19 02:42:42 +0100 | nek0 | (~nek0@mail.nek0.eu) |
2020-11-19 02:44:51 +0100 | Deide | (~Deide@217.155.19.23) (Quit: Seeee yaaaa) |
2020-11-19 02:47:29 +0100 | nek0 | (~nek0@mail.nek0.eu) (Client Quit) |
2020-11-19 02:49:07 +0100 | nek0 | (~nek0@mail.nek0.eu) |
2020-11-19 02:52:07 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-19 02:52:51 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2020-11-19 03:06:19 +0100 | <guest1119> | case parse (spaces >> symbol) "lisp" input of ... |
2020-11-19 03:06:27 +0100 | <guest1119> | what "lisp" and input here mean? |
2020-11-19 03:06:40 +0100 | <guest1119> | parse :: Stream s Identity t => Parsec s () a -> SourceName -> s -> Either ParseError a |
2020-11-19 03:06:52 +0100 | <guest1119> | from https://hackage.haskell.org/package/parsec-3.1.14.0/docs/Text-Parsec.html |
2020-11-19 03:07:25 +0100 | wh0 | (~wh0000@cpc152777-shef18-2-0-cust223.17-1.cable.virginm.net) (Ping timeout: 264 seconds) |
2020-11-19 03:07:46 +0100 | <guest1119> | also, what do Stream s Identity t constraint? constraint for s? not t? |
2020-11-19 03:08:37 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 03:10:47 +0100 | <glguy> | "lisp" is the name of the input |
2020-11-19 03:11:01 +0100 | <glguy> | Often that's a filename or some other description |
2020-11-19 03:13:19 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 03:15:44 +0100 | <Axman6> | s appears to be the type of impot that's being parsed, to probably usually a String or Text |
2020-11-19 03:15:51 +0100 | <Axman6> | input* |
2020-11-19 03:17:49 +0100 | xsperry | (~as@unaffiliated/xsperry) |
2020-11-19 03:18:44 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) |
2020-11-19 03:23:00 +0100 | jakob_ | (~textual@p200300f49f162200756a589588d5c172.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…) |
2020-11-19 03:23:44 +0100 | conal | (~conal@66.115.157.132) (Quit: Computer has gone to sleep.) |
2020-11-19 03:24:46 +0100 | <Axman6> | guest1119: does that help at all? |
2020-11-19 03:30:34 +0100 | <guest1119> | Axman6: yes |
2020-11-19 03:30:50 +0100 | <guest1119> | but why we would give input a name? |
2020-11-19 03:31:03 +0100 | <guest1119> | case (parse numbers "" "11, 2, 43") of |
2020-11-19 03:31:15 +0100 | <guest1119> | numbers = commaSep integer |
2020-11-19 03:31:43 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 260 seconds) |
2020-11-19 03:31:44 +0100 | <guest1119> | this give "11, 2, 43" a "" name? |
2020-11-19 03:33:25 +0100 | st8less | (~st8less@2603:a060:11fd:0:9539:fd10:c1ca:1d78) (Quit: WeeChat 2.9) |
2020-11-19 03:37:40 +0100 | guest1119 | (~user@49.5.6.87) (Remote host closed the connection) |
2020-11-19 03:38:10 +0100 | nuncanada | (~dude@179.235.160.168) (Quit: Leaving) |
2020-11-19 03:39:51 +0100 | isacl___ | (uid13263@gateway/web/irccloud.com/x-zatkgdiubqivrbyl) |
2020-11-19 03:40:09 +0100 | xff0x | (~fox@2001:1a81:5310:3c00:eddd:290e:8cac:b048) (Ping timeout: 272 seconds) |
2020-11-19 03:41:33 +0100 | xff0x | (~fox@2001:1a81:534b:a000:20f1:4040:a0e2:f16) |
2020-11-19 03:48:08 +0100 | jakob_ | (~textual@p200300f49f16220080fac7d5cef5a2db.dip0.t-ipconnect.de) |
2020-11-19 03:48:17 +0100 | jakob_ | (~textual@p200300f49f16220080fac7d5cef5a2db.dip0.t-ipconnect.de) (Client Quit) |
2020-11-19 03:48:54 +0100 | drbean | (~drbean@TC210-63-209-68.static.apol.com.tw) |
2020-11-19 03:50:45 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
2020-11-19 03:54:34 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 03:55:37 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Client Quit) |
2020-11-19 03:56:35 +0100 | SupaYoshii | (~supayoshi@213-10-140-13.fixed.kpn.net) |
2020-11-19 03:57:23 +0100 | SupaYoshi | (~supayoshi@213-10-140-13.fixed.kpn.net) (Ping timeout: 260 seconds) |
2020-11-19 03:58:59 +0100 | guest1119 | (~user@49.5.6.87) |
2020-11-19 04:02:50 +0100 | guest1119 | (~user@49.5.6.87) (Client Quit) |
2020-11-19 04:04:00 +0100 | guest1119 | (~user@49.5.6.87) |
2020-11-19 04:04:02 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Quit: Connection closed) |
2020-11-19 04:04:31 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) |
2020-11-19 04:05:45 +0100 | wei2912 | (~wei2912@unaffiliated/wei2912) |
2020-11-19 04:07:37 +0100 | rab24ack[m] | (rab24ackma@gateway/shell/matrix.org/x-psmufgypmrylcnyv) |
2020-11-19 04:12:27 +0100 | inkbottle | (~inkbottle@aaubervilliers-654-1-104-55.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2020-11-19 04:12:27 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 04:13:05 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 04:13:07 +0100 | howdoi | (uid224@gateway/web/irccloud.com/x-xcriusnvhpaknzlz) (Quit: Connection closed for inactivity) |
2020-11-19 04:13:16 +0100 | erisco | (~erisco@d24-57-249-233.home.cgocable.net) (Ping timeout: 240 seconds) |
2020-11-19 04:14:18 +0100 | falafel | (~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) |
2020-11-19 04:15:08 +0100 | Benzi-Junior | (~BenziJuni@dsl-149-67-198.hive.is) (Ping timeout: 244 seconds) |
2020-11-19 04:15:32 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-104-55.w86-212.abo.wanadoo.fr) |
2020-11-19 04:18:27 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 04:18:27 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 04:19:01 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 04:19:41 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Client Quit) |
2020-11-19 04:19:41 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 04:20:26 +0100 | urodna | (~urodna@unaffiliated/urodna) (Quit: urodna) |
2020-11-19 04:21:43 +0100 | i8ucl | (~manjaro-u@201.130.137.230.dsl.dyn.telnor.net) (Quit: Konversation terminated!) |
2020-11-19 04:24:00 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 04:25:08 +0100 | Saukk | (~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4) |
2020-11-19 04:25:18 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) (Remote host closed the connection) |
2020-11-19 04:26:38 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) |
2020-11-19 04:28:21 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2020-11-19 04:29:26 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Max SendQ exceeded) |
2020-11-19 04:29:30 +0100 | hackage | aeson-gadt-th 0.2.5.0 - Derivation of Aeson instances for GADTs https://hackage.haskell.org/package/aeson-gadt-th-0.2.5.0 (abrar) |
2020-11-19 04:29:53 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2020-11-19 04:33:39 +0100 | ph88 | (~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
2020-11-19 04:37:47 +0100 | Amras | (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
2020-11-19 04:39:06 +0100 | crdrost | (~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) (Quit: This computer has gone to sleep) |
2020-11-19 04:42:39 +0100 | Benzi-Junior | (~BenziJuni@88-149-67-198.du.xdsl.is) |
2020-11-19 04:43:39 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 04:43:58 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 246 seconds) |
2020-11-19 04:45:19 +0100 | lagothrix | (~lagothrix@unaffiliated/lagothrix) (Killed (moon.freenode.net (Nickname regained by services))) |
2020-11-19 04:45:27 +0100 | lagothrix | (~lagothrix@unaffiliated/lagothrix) |
2020-11-19 04:45:48 +0100 | Tario | (~Tario@201.192.165.173) (Ping timeout: 260 seconds) |
2020-11-19 04:46:59 +0100 | andi- | (~andi-@NixOS/user/andi-) (Remote host closed the connection) |
2020-11-19 04:50:17 +0100 | <hololeap> | i have a function: tryE :: MonadUnliftIO m => m a -> ExceptT IOException m a |
2020-11-19 04:51:06 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) (Remote host closed the connection) |
2020-11-19 04:51:07 +0100 | jedws | (~jedws@101.184.150.93) |
2020-11-19 04:51:23 +0100 | <hololeap> | how reasonable is it to use this wherever possible (and deal with the ExceptT monad) vs. keeping IOExceptions from the IO monad implicit and dealing with them closer to the `main` function |
2020-11-19 04:51:45 +0100 | theDon | (~td@94.134.91.119) (Ping timeout: 240 seconds) |
2020-11-19 04:52:14 +0100 | <hololeap> | converting to `ExceptT ...` makes the possibility of an exception more explicit |
2020-11-19 04:52:38 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) |
2020-11-19 04:53:57 +0100 | theDon | (~td@muedsl-82-207-238-104.citykom.de) |
2020-11-19 04:54:04 +0100 | andi- | (~andi-@NixOS/user/andi-) |
2020-11-19 04:54:08 +0100 | <hololeap> | but then again, i could just try to remember that any IO operation has the possibility of throwing an IOException |
2020-11-19 04:58:41 +0100 | <glguy> | Doing this will mean you have two places to catch IOExceptions, still in IO and also in ExceptT, and your code will be slower |
2020-11-19 05:00:01 +0100 | alexelcu | (~alexelcu@142.93.180.198) (Quit: ZNC 1.8.2 - https://znc.in) |
2020-11-19 05:00:15 +0100 | <hololeap> | yeah, it's also more typing |
2020-11-19 05:00:23 +0100 | Rudd0 | (~Rudd0@185.189.115.108) |
2020-11-19 05:00:55 +0100 | <hololeap> | i did it in one place and then realized it's kind of an all-or-nothing approach. you can't really mix it with the default. |
2020-11-19 05:01:00 +0100 | alexelcu | (~alexelcu@142.93.180.198) |
2020-11-19 05:01:22 +0100 | <hololeap> | well, you can... |
2020-11-19 05:02:19 +0100 | ddellacosta | (dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 256 seconds) |
2020-11-19 05:04:27 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff57608036dc958592ad.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2020-11-19 05:05:12 +0100 | macrover | (~macrover@ip70-189-231-35.lv.lv.cox.net) |
2020-11-19 05:05:26 +0100 | renzhi | (~renzhi@2607:fa49:655f:e600::28da) (Ping timeout: 264 seconds) |
2020-11-19 05:12:13 +0100 | thunderrd | (~thunderrd@183.182.111.169) (Ping timeout: 264 seconds) |
2020-11-19 05:14:11 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) |
2020-11-19 05:16:31 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 246 seconds) |
2020-11-19 05:17:35 +0100 | moth | (~moth@s91904426.blix.com) (Remote host closed the connection) |
2020-11-19 05:19:29 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) (Remote host closed the connection) |
2020-11-19 05:20:12 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) |
2020-11-19 05:20:35 +0100 | mwehner | (~martin@li910-8.members.linode.com) () |
2020-11-19 05:22:31 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 05:24:21 +0100 | thunderrd | (~thunderrd@183.182.114.130) |
2020-11-19 05:24:56 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) (Ping timeout: 240 seconds) |
2020-11-19 05:26:19 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) |
2020-11-19 05:29:35 +0100 | ph88 | (~ph88@2a02:8109:9e00:7e5c:a963:461:83fa:2c4) |
2020-11-19 05:30:58 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 05:37:36 +0100 | drbean | (~drbean@TC210-63-209-68.static.apol.com.tw) (Ping timeout: 240 seconds) |
2020-11-19 05:46:28 +0100 | tumdedum | (~tumdedum@unaffiliated/espiral) (Ping timeout: 260 seconds) |
2020-11-19 05:46:31 +0100 | hackage | yesod-core 1.6.18.7 - Creation of type-safe, RESTful web applications. https://hackage.haskell.org/package/yesod-core-1.6.18.7 (MichaelSnoyman) |
2020-11-19 05:53:12 +0100 | falafel | (~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) (Ping timeout: 260 seconds) |
2020-11-19 05:53:14 +0100 | spatchkaa | (~spatchkaa@S010600fc8da47b63.gv.shawcable.net) |
2020-11-19 05:53:35 +0100 | tumdedum | (~tumdedum@unaffiliated/espiral) |
2020-11-19 05:54:30 +0100 | thunderrd | (~thunderrd@183.182.114.130) (Ping timeout: 246 seconds) |
2020-11-19 05:55:23 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds) |
2020-11-19 05:56:55 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2020-11-19 06:00:17 +0100 | texasmynsted | (~texasmyns@212.102.45.121) (Remote host closed the connection) |
2020-11-19 06:00:57 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 06:00:57 +0100 | Saukk | (~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4) (Remote host closed the connection) |
2020-11-19 06:02:29 +0100 | texasmynsted | (~texasmyns@212.102.45.121) |
2020-11-19 06:04:13 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) |
2020-11-19 06:05:15 +0100 | tumdedum | (~tumdedum@unaffiliated/espiral) (Ping timeout: 265 seconds) |
2020-11-19 06:07:12 +0100 | texasmynsted | (~texasmyns@212.102.45.121) (Ping timeout: 260 seconds) |
2020-11-19 06:07:42 +0100 | thunderrd | (~thunderrd@183.182.110.8) |
2020-11-19 06:08:54 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2020-11-19 06:09:49 +0100 | spatchkaa | (~spatchkaa@S010600fc8da47b63.gv.shawcable.net) (Ping timeout: 264 seconds) |
2020-11-19 06:10:56 +0100 | mbomba | (~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca) (Quit: WeeChat 3.0) |
2020-11-19 06:12:53 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 06:13:03 +0100 | tumdedum | (~tumdedum@unaffiliated/espiral) |
2020-11-19 06:13:16 +0100 | cosimone | (~cosimone@5.171.24.92) (Ping timeout: 240 seconds) |
2020-11-19 06:14:21 +0100 | aioe | (aoei@2a01:7e01::f03c:92ff:fe4f:e85a) |
2020-11-19 06:14:23 +0100 | monochrom | (trebla@216.138.220.146) (Quit: NO CARRIER) |
2020-11-19 06:15:20 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) (Remote host closed the connection) |
2020-11-19 06:15:25 +0100 | xerox_ | (~xerox@unaffiliated/xerox) (Ping timeout: 240 seconds) |
2020-11-19 06:17:16 +0100 | cosimone | (~cosimone@5.170.241.44) |
2020-11-19 06:17:23 +0100 | christo | (~chris@81.96.113.213) (Ping timeout: 260 seconds) |
2020-11-19 06:17:29 +0100 | aoei | (~aoei@240.223.246.35.bc.googleusercontent.com) (Remote host closed the connection) |
2020-11-19 06:18:44 +0100 | aioe | aoei |
2020-11-19 06:19:07 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:8c9:42ac:c0f6:8508) (Ping timeout: 272 seconds) |
2020-11-19 06:21:32 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection) |
2020-11-19 06:21:38 +0100 | ft | (~ft@shell.chaostreff-dortmund.de) (Ping timeout: 264 seconds) |
2020-11-19 06:21:52 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) |
2020-11-19 06:22:23 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving) |
2020-11-19 06:22:38 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-19 06:24:43 +0100 | day_ | (~Unknown@unaffiliated/day) |
2020-11-19 06:27:05 +0100 | SanchayanMaity | (~Sanchayan@106.201.35.233) |
2020-11-19 06:27:45 +0100 | day | (~Unknown@unaffiliated/day) (Ping timeout: 240 seconds) |
2020-11-19 06:27:45 +0100 | day_ | day |
2020-11-19 06:27:58 +0100 | monochrom | (trebla@216.138.220.146) |
2020-11-19 06:28:31 +0100 | xerox_ | (~xerox@unaffiliated/xerox) |
2020-11-19 06:31:06 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:b274:8c51:102c:8ca9) |
2020-11-19 06:32:10 +0100 | n00b | (d055ed89@208.85.237.137) |
2020-11-19 06:32:55 +0100 | n00b | n0042 |
2020-11-19 06:33:34 +0100 | <n0042> | Hello folks. May I ask what is probably a pretty common newbie question? I have done a lot of research on it and am starting to feel a little stumped at having not found the proper answer |
2020-11-19 06:33:48 +0100 | xerox_ | (~xerox@unaffiliated/xerox) (Ping timeout: 272 seconds) |
2020-11-19 06:34:52 +0100 | zyklotomic | (~ethan@unaffiliated/chocopuff) |
2020-11-19 06:35:29 +0100 | <n0042> | I have a situation where I need to take an unknown # of lines from stdin (no more, no less, finite but unknown until runtime). I have tried a hundred different ways of trying to use getLine programmatically so that it collects exactly n-amount of lines, after n is known. Is there a good article I can read on this? |
2020-11-19 06:36:11 +0100 | <zyklotomic> | what have you tried so far |
2020-11-19 06:37:33 +0100 | <n0042> | So far my most promising approach has been to get the initial number of lines with getLine (because that input is known) parse it and extract the number, and then try to run getLine that amount of times. |
2020-11-19 06:37:59 +0100 | <glguy> | that sounds right |
2020-11-19 06:37:59 +0100 | <zyklotomic> | i'm just a beginner, but maybe replicateM might help |
2020-11-19 06:38:04 +0100 | <dsal> | It'd be easier to show code and describe the confusion than to describe the problem. |
2020-11-19 06:38:06 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
2020-11-19 06:38:18 +0100 | <glguy> | ?paste |
2020-11-19 06:38:18 +0100 | <lambdabot> | A pastebin: https://paste.debian.net/ |
2020-11-19 06:38:20 +0100 | <zyklotomic> | replicateM n getLine |
2020-11-19 06:38:39 +0100 | <n0042> | I have not tried replicateM. I'll try that. |
2020-11-19 06:38:41 +0100 | <glguy> | zyklotomic, maybe, but n0042 ought to be able to do this without any library functions first |
2020-11-19 06:39:13 +0100 | <glguy> | n0042, Do you have any attempts yet? What have you tried? |
2020-11-19 06:39:32 +0100 | <n0042> | I did try: "take n (repeat getLine)" and wound up with a list of getLine functions that I then wasn't sure how to turn into values |
2020-11-19 06:39:54 +0100 | <n0042> | I also tried recursive-do as described in the ghc docs, but that didn't want to compile the way I was trying to do it. |
2020-11-19 06:40:29 +0100 | <glguy> | recursive-do is something you don't need |
2020-11-19 06:40:29 +0100 | <dsal> | Showing code (and errors/confusion) is more informative than describing code. |
2020-11-19 06:40:42 +0100 | cosimone | (~cosimone@5.170.241.44) (Quit: cosimone) |
2020-11-19 06:40:45 +0100 | <glguy> | You can paste your code on a pastebin so that people can see what you've got |
2020-11-19 06:40:56 +0100 | <n0042> | I'll use pastebin real quick to show you what I've got so far. uno momento |
2020-11-19 06:41:04 +0100 | <glguy> | showing code will help us see what you do know how to do |
2020-11-19 06:41:52 +0100 | agrajag` | (~agrajag`@84.39.117.57) |
2020-11-19 06:43:24 +0100 | <dsal> | Some confusion seems to be between functions and actions. replicating `getLine` will make a bunch of `getLine` actions, but it won't get lines. There's a path from there, but it's probably not what you want. |
2020-11-19 06:43:57 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) |
2020-11-19 06:44:49 +0100 | <zyklotomic> | on a seperate thread, i have a question about folds vs monads |
2020-11-19 06:44:59 +0100 | <zyklotomic> | hope you guys don't mind juggling the convo a bit |
2020-11-19 06:45:11 +0100 | <glguy> | go for it |
2020-11-19 06:45:29 +0100 | <zyklotomic> | is there any deeper relationship b/w them? I was reading https://mail.haskell.org/pipermail/beginners/2014-August/013993.html |
2020-11-19 06:45:43 +0100 | <zyklotomic> | as a result of a google search, after noticing that foldl was kinda like State |
2020-11-19 06:46:20 +0100 | <zyklotomic> | then I was writing another function that folded with a monoid (list appending) |
2020-11-19 06:46:30 +0100 | <glguy> | There's not much relating folds to monads |
2020-11-19 06:46:31 +0100 | <zyklotomic> | and it basically was Writer (i think) |
2020-11-19 06:46:38 +0100 | <zyklotomic> | are these just coincidences? |
2020-11-19 06:46:56 +0100 | <zyklotomic> | I should generally prefer using folds right |
2020-11-19 06:47:11 +0100 | <zyklotomic> | I can show an example |
2020-11-19 06:47:29 +0100 | aoei | (aoei@2a01:7e01::f03c:92ff:fe4f:e85a) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-11-19 06:47:37 +0100 | <n0042> | https://pastebin.com/zwuqHsSY |
2020-11-19 06:47:37 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 06:48:00 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 06:48:02 +0100 | <glguy> | zyklotomic, foldl is similar to traverse used with State |
2020-11-19 06:48:04 +0100 | <n0042> | Here's sort of what I got so far. It's for an assignment but there's no need to get into the assignment itself. I already have that part figured out. It's just the I/O that's confusing me |
2020-11-19 06:48:08 +0100 | <glguy> | but that's not much about being a monad |
2020-11-19 06:48:17 +0100 | <zyklotomic> | https://paste.debian.net/1173146/ |
2020-11-19 06:48:32 +0100 | <zyklotomic> | wait yeah, you're right, I probably shouldn't have jumped to monad |
2020-11-19 06:48:35 +0100 | <glguy> | that's more about foldl being related to State specifically in the context of foldable types |
2020-11-19 06:49:44 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 06:49:56 +0100 | <glguy> | :t \f t -> runState(traverse (state . f) t) |
2020-11-19 06:49:57 +0100 | <lambdabot> | Traversable t => (a -> s -> (b, s)) -> t a -> s -> (t b, s) |
2020-11-19 06:50:08 +0100 | aoei | (~aoei@li2174-104.members.linode.com) |
2020-11-19 06:50:12 +0100 | <glguy> | :t foldl |
2020-11-19 06:50:13 +0100 | <lambdabot> | Foldable t => (b -> a -> b) -> b -> t a -> b |
2020-11-19 06:50:36 +0100 | <glguy> | :t scanl |
2020-11-19 06:50:38 +0100 | <lambdabot> | (b -> a -> b) -> b -> [a] -> [b] |
2020-11-19 06:50:46 +0100 | <glguy> | :t mapAccumL |
2020-11-19 06:50:47 +0100 | <lambdabot> | Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
2020-11-19 06:51:01 +0100 | <zyklotomic> | or actually, I mean, what about Writer and State |
2020-11-19 06:51:17 +0100 | <zyklotomic> | would you like classify them as some kind, or am I looking into this too much |
2020-11-19 06:51:27 +0100 | <zyklotomic> | and it is just a nice coincidenec |
2020-11-19 06:51:51 +0100 | <zyklotomic> | where the behavior is "traversing" |
2020-11-19 06:51:52 +0100 | <glguy> | there's no deep connection that I can think of |
2020-11-19 06:52:21 +0100 | <zyklotomic> | ah fair enough, thanks for entertaining my q |
2020-11-19 06:52:43 +0100 | <dsal> | n0042: what do you want `results` to be? |
2020-11-19 06:53:14 +0100 | <dsal> | From the application, it looks like you want it to be a single string. |
2020-11-19 06:54:18 +0100 | <n0042> | So, results is going to print a line for each "packet" showing the time it was processed or if it was processed. That's all going to be handled by the program logic which i've got covered, and it'll just print off a list of strings. But to get there I need to collect the strings which contain the arrival time and time-to-process for each packet, |
2020-11-19 06:54:18 +0100 | <n0042> | which is the programmatic input part. |
2020-11-19 06:54:54 +0100 | <dsal> | Do you understand what `repeat getLine` means? |
2020-11-19 06:55:01 +0100 | <dsal> | :t repeat getLine |
2020-11-19 06:55:04 +0100 | <lambdabot> | [IO String] |
2020-11-19 06:55:35 +0100 | <n0042> | Yeah it's a list of getLine functions. I was trying to find some way to call getLine a certain amount of times in a row. |
2020-11-19 06:55:43 +0100 | <n0042> | But I'm not sure I'm on the right track |
2020-11-19 06:55:50 +0100 | <dsal> | It's a list of actions that produce strings. |
2020-11-19 06:56:31 +0100 | <dsal> | What type would make more sense here? |
2020-11-19 06:57:02 +0100 | <dsal> | (it's often easier to think about what you want than to struggle with the parts you have) |
2020-11-19 06:57:11 +0100 | <n0042> | Strings themselves, I suppose. |
2020-11-19 06:57:33 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
2020-11-19 06:57:44 +0100 | <dsal> | What does "Strings themselves" mean? |
2020-11-19 06:57:56 +0100 | <n0042> | The assignment's program flow is: Input buffer size and number of packets -> input line for each packet -> calculate the processing time for each packet or if it was dropped -> output a line for each packet. |
2020-11-19 06:58:00 +0100 | <dsal> | (Haskell is an ideal language to speak here to avoid misunderstanding) |
2020-11-19 06:58:08 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 06:58:22 +0100 | <n0042> | The input/output is pre-determined and I can't change how it works because it's an automated system that collectes from stdin during runtime. |
2020-11-19 06:58:38 +0100 | <dsal> | None of these details are relevant to what you're trying to do. |
2020-11-19 06:58:42 +0100 | <n0042> | We got to choose our language though and I figured it's be a good way to dive in head first with haskell |
2020-11-19 06:59:23 +0100 | <zyklotomic> | i'm saying in case no one pointed out the distinction, `repeat getLine` is returing a list of the actions, but nothing is executing those actions |
2020-11-19 06:59:48 +0100 | <dsal> | But taking a step back and identifying what you actually want might make this easy. |
2020-11-19 06:59:52 +0100 | <n0042> | I know. I'm not sure how to execute those actions once I have them. |
2020-11-19 07:00:00 +0100 | <zyklotomic> | yup that is the crux (i think) |
2020-11-19 07:00:10 +0100 | <dsal> | Stating clearly what you want would speed things up a lot. |
2020-11-19 07:00:38 +0100 | <n0042> | What I want is to get n-lines from stdin, separated by newline characters. |
2020-11-19 07:00:58 +0100 | <n0042> | As [Char] types |
2020-11-19 07:01:17 +0100 | <n0042> | Which I will then parse into [Int] types |
2020-11-19 07:01:37 +0100 | <dsal> | OK, closer... Less English, more Haskell. How would you describe the above in Haskell? |
2020-11-19 07:01:44 +0100 | <dsal> | :t getLine -- e.g. |
2020-11-19 07:01:46 +0100 | <lambdabot> | IO String |
2020-11-19 07:01:54 +0100 | <n0042> | Well, a single line is easy: line <- getLine |
2020-11-19 07:01:58 +0100 | <dsal> | So, `getLine` is `IO String` |
2020-11-19 07:02:04 +0100 | <dsal> | What type are you looking for |
2020-11-19 07:02:05 +0100 | <dsal> | ? |
2020-11-19 07:02:06 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Client Quit) |
2020-11-19 07:02:35 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 07:02:58 +0100 | <n0042> | String |
2020-11-19 07:03:07 +0100 | <zyklotomic> | bigger |
2020-11-19 07:03:20 +0100 | <n0042> | [String]? |
2020-11-19 07:03:21 +0100 | <zyklotomic> | think a bit higher |
2020-11-19 07:03:23 +0100 | <zyklotomic> | yup |
2020-11-19 07:03:37 +0100 | <dsal> | Closer, but it isn't pure. |
2020-11-19 07:03:40 +0100 | <dsal> | You're doing IO to get there. |
2020-11-19 07:03:56 +0100 | <n0042> | I am intrigued. Tell me more. |
2020-11-19 07:04:03 +0100 | <dsal> | :t getLine |
2020-11-19 07:04:04 +0100 | <lambdabot> | IO String |
2020-11-19 07:04:31 +0100 | <dsal> | That's not a String. |
2020-11-19 07:04:37 +0100 | <n0042> | line <- getLine results in String. |
2020-11-19 07:04:49 +0100 | <n0042> | according to my REPL, the type of line is String after that |
2020-11-19 07:05:03 +0100 | <dsal> | Eh. That's slightly confusing. |
2020-11-19 07:05:20 +0100 | <n0042> | Which is why I thought I might be able to turn [getLine] into [String] somehow |
2020-11-19 07:05:34 +0100 | <zyklotomic> | the <- does some magic lol |
2020-11-19 07:05:56 +0100 | <dsal> | It's also not a complete useful expression. The repl lets you do things that don't fully make sense. |
2020-11-19 07:06:08 +0100 | <dsal> | @undo do { line <- getLine } |
2020-11-19 07:06:08 +0100 | <lambdabot> | <unknown>.hs:1:23:Parse error: Last statement in a do-block must be an expression |
2020-11-19 07:06:16 +0100 | <dsal> | @undo do { line <- getLine; putStrLn line } |
2020-11-19 07:06:16 +0100 | <lambdabot> | getLine >>= \ line -> putStrLn line |
2020-11-19 07:07:34 +0100 | <dsal> | How about this. Let's say you want to create a new thing called `getLines`. What does is its type? |
2020-11-19 07:07:40 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
2020-11-19 07:07:49 +0100 | <n0042> | :t getLine |
2020-11-19 07:07:50 +0100 | <lambdabot> | IO String |
2020-11-19 07:07:57 +0100 | <n0042> | so... [IO String] ? |
2020-11-19 07:08:22 +0100 | <LKoen> | IO [String] ? |
2020-11-19 07:08:26 +0100 | <dsal> | That's not super useful, though, as you found out, because now instead of having one action, you have a list of actions. What would one action look like? |
2020-11-19 07:08:57 +0100 | xerox_ | (~xerox@unaffiliated/xerox) |
2020-11-19 07:09:48 +0100 | <dsal> | So, there's a super easy way to go from `[m a]` to `m [a]` but I don't think it's necessarily a good path. It might be more useful for you to consider writing a function that takes the `n` and returns the actual thing you need. |
2020-11-19 07:10:24 +0100 | <dsal> | (which is technical `replicateM`, but you'd get pretty far along if you write this yourself) |
2020-11-19 07:10:29 +0100 | <n0042> | I must admit I'm having a hard time with Haskell's I/O. That is exactly what I'd like to do. |
2020-11-19 07:10:54 +0100 | <dsal> | You're having a hard time because you're trying to use it without understanding it or your goal. :) |
2020-11-19 07:10:59 +0100 | <n0042> | I have really enjoyed using this language for my assignments so far. It's a real pleasure to write and work with. |
2020-11-19 07:11:34 +0100 | borne | (~fritjof@200116b864eda200f1dc39039d201adf.dip.versatel-1u1.de) |
2020-11-19 07:11:34 +0100 | <dsal> | It continues to get better as you learn more of it. But some things that you can kind of hand wave will eventually require a bit more understanding. In particular, expressing the type of the thing you want. |
2020-11-19 07:12:12 +0100 | SanchayanM | (~Sanchayan@223.226.123.235) |
2020-11-19 07:12:57 +0100 | <n0042> | Well my goal is to take input, calculate some results, and print outputs. The "calculating some results" part is the actual assignment, and I've already worked it out, and was the fun part. The I/O part is throwing me for a loop because it should have been trivial. It's like two different languages when it comes to program logic and I/O |
2020-11-19 07:12:59 +0100 | <dsal> | Also, though it's still partial, I'd write what you have so far something like: `[bufferSize, numPackets] <- map read . words <$> getLine` -- but that's next week's episode. |
2020-11-19 07:13:16 +0100 | SanchayanMaity | (~Sanchayan@106.201.35.233) (Ping timeout: 260 seconds) |
2020-11-19 07:13:39 +0100 | <n0042> | I am the sort of person who likes to understand this stuff from first principles where possible. Do you have any good resources for understanding how replicateM works on a more intuitive level? I'd like to learn this. |
2020-11-19 07:14:06 +0100 | <dsal> | Haskell Programming From First Principles will get you there quickly. |
2020-11-19 07:14:34 +0100 | <dsal> | @src replicateM |
2020-11-19 07:14:34 +0100 | <lambdabot> | replicateM n x = sequence (replicate n x) |
2020-11-19 07:14:49 +0100 | <zyklotomic> | the weird part about haskell is, the hard stuff becomes easy and the "easy" stuff becomes hard |
2020-11-19 07:14:55 +0100 | <zyklotomic> | *when you're first learning it |
2020-11-19 07:15:13 +0100 | <zyklotomic> | like IO basically |
2020-11-19 07:15:22 +0100 | <dsal> | I'd by that with the addendum. After a while, most things are easy. |
2020-11-19 07:15:51 +0100 | lukelau_ | (~lukelau@46.101.13.214) (Quit: Bye) |
2020-11-19 07:16:05 +0100 | <n0042> | I recently joined a study group for that book, but we haven't started yet. |
2020-11-19 07:16:05 +0100 | <zyklotomic> | but i'm sure the fun never gets old |
2020-11-19 07:16:07 +0100 | lukelau | (~lukelau@46.101.13.214) |
2020-11-19 07:16:25 +0100 | <n0042> | It really is a fun language. The list comprehensions are my favorite in any language I've used so far. |
2020-11-19 07:16:49 +0100 | <dsal> | I generally recommend that book. It's a slow path, which I think will get you somewhere useful the fastest. |
2020-11-19 07:17:19 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) |
2020-11-19 07:17:46 +0100 | darjeeling_ | (~darjeelin@122.245.211.11) |
2020-11-19 07:17:46 +0100 | <zyklotomic> | list comprehensions are cool indeed |
2020-11-19 07:18:07 +0100 | <dsal> | I somehow don't use list comprehensions that much in haskell. |
2020-11-19 07:18:28 +0100 | <zyklotomic> | I use them in ghci most often tbh |
2020-11-19 07:18:31 +0100 | <dsal> | I often forget they exist. heh. |
2020-11-19 07:18:35 +0100 | <n0042> | So far everything I've written has been a mixture of list comprehensions and the recursive-go pattern. |
2020-11-19 07:18:42 +0100 | <n0042> | But I'm still doing pretty basic stuff |
2020-11-19 07:18:52 +0100 | <zyklotomic> | when I switched to Linux from a Mac, ghci replaced the Spotlight calculator if you know what spotlight is |
2020-11-19 07:18:59 +0100 | <n0042> | recursive-go makes my inner LISP programmer happy |
2020-11-19 07:19:07 +0100 | <zyklotomic> | basically just quickfire calculator that you can type some math into |
2020-11-19 07:19:07 +0100 | <dsal> | what's recursive-go? |
2020-11-19 07:19:52 +0100 | <n0042> | Where you wrap a function in a "go" function scoped in a "where" statement that requires parameters that don't make sense to call outside the function. Usually to do something in a list-processing kind of way |
2020-11-19 07:20:08 +0100 | <dsal> | Oh. Just recursion. :) |
2020-11-19 07:20:36 +0100 | <zyklotomic> | I've been struggling to know what to call that practice lol |
2020-11-19 07:20:36 +0100 | <dsal> | Usually there's a higher level abstraction that does the thing already |
2020-11-19 07:20:42 +0100 | <n0042> | Yes, but in Scheme or something you'd have to wrap it in a macro to make it look decent. |
2020-11-19 07:20:57 +0100 | <zyklotomic> | some things are just kinda un-pronuncable in Haskell lol |
2020-11-19 07:21:10 +0100 | <zyklotomic> | like all the weird operators and when someone decides to roll their own custom operator too |
2020-11-19 07:21:42 +0100 | <dsal> | > maximumOf (folded . _Right) [Left 1, Right 2, Left 3, Right 4, Left 5, Right 3] |
2020-11-19 07:21:44 +0100 | <lambdabot> | Just 4 |
2020-11-19 07:22:35 +0100 | <dsal> | Operators are just functions. The really common ones have fairly common names. Or we just don't say them much. |
2020-11-19 07:23:58 +0100 | <n0042> | I am still trying to wrap my head around some of them. You used two I'm unfamiliar with in that snippet you posted: (.) and <$> |
2020-11-19 07:24:07 +0100 | <dsal> | > sum (digitToInt <$> "123") |
2020-11-19 07:24:09 +0100 | <lambdabot> | 6 |
2020-11-19 07:24:16 +0100 | alp | (~alp@2a01:e0a:58b:4920:d4c7:761f:e715:72ea) |
2020-11-19 07:24:17 +0100 | <dsal> | . and $ are *super* common |
2020-11-19 07:24:22 +0100 | <dsal> | :t (.) |
2020-11-19 07:24:24 +0100 | <lambdabot> | (b -> c) -> (a -> b) -> a -> c |
2020-11-19 07:24:25 +0100 | <zyklotomic> | with time |
2020-11-19 07:24:25 +0100 | <dsal> | :t ($) |
2020-11-19 07:24:27 +0100 | <lambdabot> | (a -> b) -> a -> b |
2020-11-19 07:24:41 +0100 | codeAlways | (uid272474@gateway/web/irccloud.com/x-rnqcrwigssxuyxdw) |
2020-11-19 07:24:42 +0100 | <dsal> | . is just how you compose functions. |
2020-11-19 07:24:50 +0100 | <dsal> | @src (.) |
2020-11-19 07:24:50 +0100 | <lambdabot> | (f . g) x = f (g x) |
2020-11-19 07:24:56 +0100 | <zyklotomic> | <$> is fmap |
2020-11-19 07:24:58 +0100 | <dsal> | That's it. |
2020-11-19 07:25:05 +0100 | <n0042> | Oh |
2020-11-19 07:25:06 +0100 | <zyklotomic> | it is like a generlaized map |
2020-11-19 07:25:22 +0100 | <dsal> | IMO, map shouldn't exist, but at least a few people think it's not bad. |
2020-11-19 07:25:35 +0100 | <dsal> | > fmap (+1) [1..5] |
2020-11-19 07:25:37 +0100 | <lambdabot> | [2,3,4,5,6] |
2020-11-19 07:25:42 +0100 | <dsal> | > (+1) <$> [1..5] |
2020-11-19 07:25:44 +0100 | <lambdabot> | [2,3,4,5,6] |
2020-11-19 07:25:48 +0100 | <n0042> | ($) I have used plenty to get rid of parentheses, but <$> was a new one. That's pretty sweet |
2020-11-19 07:26:07 +0100 | <dsal> | $ should be used sparingly. :) |
2020-11-19 07:26:13 +0100 | <dsal> | :t ($) |
2020-11-19 07:26:14 +0100 | <lambdabot> | (a -> b) -> a -> b |
2020-11-19 07:26:16 +0100 | <dsal> | :t (<$>) |
2020-11-19 07:26:18 +0100 | <lambdabot> | Functor f => (a -> b) -> f a -> f b |
2020-11-19 07:26:20 +0100 | <zyklotomic> | dsal: I find myself using fmap on lists unconsciously, cause you type that before the list and you don't register that you're getting a list mentally yet |
2020-11-19 07:26:38 +0100 | <n0042> | <$> is just infix fmap... got it.. that's pretty neat |
2020-11-19 07:26:43 +0100 | <zyklotomic> | yup |
2020-11-19 07:26:48 +0100 | <dsal> | @src (<$>) |
2020-11-19 07:26:48 +0100 | <lambdabot> | f <$> a = fmap f a |
2020-11-19 07:27:16 +0100 | <zyklotomic> | but I'm guessing it's existence is legacy cruft |
2020-11-19 07:27:17 +0100 | <n0042> | And you said ($) should be used sparingly? I have been using it willy-nilly on the assumption that people don't like parentheses as much as I do. What's the general guideline there? |
2020-11-19 07:27:32 +0100 | <dsal> | If you're composing functions, use . |
2020-11-19 07:27:53 +0100 | <zyklotomic> | when would you say it's acceptable to use $ |
2020-11-19 07:28:05 +0100 | <dsal> | At the end of a bunch of .s :) |
2020-11-19 07:28:27 +0100 | <n0042> | take 5 $ repeat 10 |
2020-11-19 07:28:31 +0100 | <n0042> | or something like that |
2020-11-19 07:28:38 +0100 | <n0042> | to avoid take 5 (repeat 10) ? |
2020-11-19 07:28:43 +0100 | <dsal> | > replicate 5 10 |
2020-11-19 07:28:45 +0100 | <lambdabot> | [10,10,10,10,10] |
2020-11-19 07:29:02 +0100 | <dsal> | : take 5 . repeat |
2020-11-19 07:29:07 +0100 | <dsal> | :t take 5 . repeat |
2020-11-19 07:29:08 +0100 | <zyklotomic> | (take 5 . repeat) 10 hon oh you beat me to it |
2020-11-19 07:29:09 +0100 | <lambdabot> | a -> [a] |
2020-11-19 07:29:27 +0100 | <zyklotomic> | but it's not that much cleaner i'm gonna oh, wait ig you can put a $ instead of the paren |
2020-11-19 07:29:40 +0100 | <dsal> | > take 5 . repeat $ 10 |
2020-11-19 07:29:42 +0100 | <zyklotomic> | i'm clearly not a very good user of $ lol |
2020-11-19 07:29:42 +0100 | <lambdabot> | [10,10,10,10,10] |
2020-11-19 07:29:55 +0100 | <n0042> | Oh nice |
2020-11-19 07:29:55 +0100 | <dsal> | Save yo # |
2020-11-19 07:29:57 +0100 | <dsal> | Save yo $ |
2020-11-19 07:29:58 +0100 | <dsal> | damnit |
2020-11-19 07:30:12 +0100 | <n0042> | Okay I see how (.) works now |
2020-11-19 07:30:21 +0100 | <zyklotomic> | i'm going to go out on a limb though and say that sometimes |
2020-11-19 07:30:30 +0100 | <zyklotomic> | take 5 $ repeat 10 is just easier to read |
2020-11-19 07:30:50 +0100 | <zyklotomic> | or my brain hasn't been molded enough |
2020-11-19 07:31:21 +0100 | <dsal> | > let f = show . sum . take 5 . repeat in f 10 |
2020-11-19 07:31:23 +0100 | <lambdabot> | "50" |
2020-11-19 07:32:36 +0100 | <n0042> | For something a little different, do any of you know if it's true that last is an O(n) function? Like, if you wanted to use a list as a Queue, would it really be O(n) to call last to dequeue? |
2020-11-19 07:32:46 +0100 | <dsal> | > let f = nub . sort show . sum . take 11 . repeat in f 13 |
2020-11-19 07:32:48 +0100 | <lambdabot> | error: |
2020-11-19 07:32:48 +0100 | <lambdabot> | • Couldn't match expected type ‘b -> [a2]’ with actual type ‘[a0]’ |
2020-11-19 07:32:48 +0100 | <lambdabot> | • Possible cause: ‘sort’ is applied to too many arguments |
2020-11-19 07:32:51 +0100 | <dsal> | stupid keyboard |
2020-11-19 07:32:54 +0100 | <dsal> | > let f = nub . sort . show . sum . take 11 . repeat in f 13 |
2020-11-19 07:32:57 +0100 | <lambdabot> | "134" |
2020-11-19 07:32:58 +0100 | <n0042> | I sort of assumed that the built-in list object would have a tail pointer, but hoogle says that's O(n) |
2020-11-19 07:33:17 +0100 | <dsal> | @src (:) |
2020-11-19 07:33:17 +0100 | <lambdabot> | Source not found. Listen, broccoli brains, I don't have time to listen to this trash. |
2020-11-19 07:33:20 +0100 | <dsal> | boooo |
2020-11-19 07:33:26 +0100 | <dsal> | a list is just a head and a tail. |
2020-11-19 07:33:29 +0100 | <n0042> | Whoah that bot has atittude |
2020-11-19 07:34:02 +0100 | <dsal> | It's a cons list. You said you're familiar with lisp. |
2020-11-19 07:34:14 +0100 | <n0042> | Right, a singly-linked list with a head pointer |
2020-11-19 07:34:46 +0100 | <n0042> | So to get the last element you would have to traverse all the way down the list, hence O(n). |
2020-11-19 07:34:48 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) (Remote host closed the connection) |
2020-11-19 07:35:21 +0100 | <n0042> | But there's no reason you couldn't have the low-level logic include a tail pointer so that last is O(1). |
2020-11-19 07:35:26 +0100 | <dsal> | Lists are great, but if you need other performance characteristics, there are better data structures. |
2020-11-19 07:35:37 +0100 | <dsal> | There are many, many reasons you can't do that. |
2020-11-19 07:35:42 +0100 | <dsal> | But if you disagree, write one. |
2020-11-19 07:35:56 +0100 | <dsal> | Haskell has very little magic. You can write most of what you see. |
2020-11-19 07:36:12 +0100 | <dsal> | Even many of the super fancy compiler optimizations are library-definable. |
2020-11-19 07:37:04 +0100 | <n0042> | My plan was to use Data.Array but that seems kind of un-functional. What would you suggest? |
2020-11-19 07:37:10 +0100 | mceier | (~mceier@89-68-132-187.dynamic.chello.pl) (Ping timeout: 268 seconds) |
2020-11-19 07:37:12 +0100 | <dsal> | Vector? |
2020-11-19 07:37:16 +0100 | <dsal> | Seq? |
2020-11-19 07:37:17 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2020-11-19 07:37:18 +0100 | <MarcelineVQ> | for what? |
2020-11-19 07:37:28 +0100 | <n0042> | To simulate a Queue, or circular buffer |
2020-11-19 07:38:03 +0100 | <dsal> | Lists are fine for many of these things, but there are specific structures. |
2020-11-19 07:40:45 +0100 | <zyklotomic> | is it a bad practice to append to the front of a list instead tehn |
2020-11-19 07:40:50 +0100 | <zyklotomic> | to get around the time complexity of ++ |
2020-11-19 07:40:56 +0100 | <dsal> | It's the best. |
2020-11-19 07:41:01 +0100 | <n0042> | Seems like the opposite. Bad practice to append to the rear |
2020-11-19 07:41:04 +0100 | <dsal> | No better place to put something. |
2020-11-19 07:41:13 +0100 | <dsal> | ++ is another one of those language warts. |
2020-11-19 07:41:21 +0100 | <MarcelineVQ> | lists make pretty good queues in haskell https://rafal.io/posts/haskell-queues.html |
2020-11-19 07:41:55 +0100 | <zyklotomic> | dsal: so lists make a pretty bad monoid? |
2020-11-19 07:41:58 +0100 | <MarcelineVQ> | This doesn't explain super in depth, but the idea is to use two lists with one in reverse to create your queue |
2020-11-19 07:42:15 +0100 | <dsal> | zyklotomic: ++ vs. <> |
2020-11-19 07:42:19 +0100 | <n0042> | Thank you very much |
2020-11-19 07:42:22 +0100 | <dsal> | lists are fine for what they do |
2020-11-19 07:42:23 +0100 | mceier | (~mceier@89-68-132-187.dynamic.chello.pl) |
2020-11-19 07:42:47 +0100 | shangxiao | (~davids@101.181.159.140) |
2020-11-19 07:43:21 +0100 | <MarcelineVQ> | There's a lot of queue-like things around though so you'd probably just want to use whatever and optommize later, Seq that dsal mentioned is a fair all-around option for accessing either end of. |
2020-11-19 07:44:02 +0100 | <n0042> | Oh wow, Haskell has built-ins for everything |
2020-11-19 07:44:12 +0100 | <dsal> | built-in? |
2020-11-19 07:44:52 +0100 | <n0042> | Stuff you don't have to roll on your own. |
2020-11-19 07:45:02 +0100 | <MarcelineVQ> | dsal: people who don't already know don't know what you mean when you say you don't like map and ++. They won't realize you mean you don't like that there's both fmap and map and just want one, or relatedly that ++ and <> are the same for lists so just <> is fine |
2020-11-19 07:45:12 +0100 | <dsal> | Oh. Not built-in, just already implemented.. |
2020-11-19 07:45:22 +0100 | <n0042> | Yes, thank you |
2020-11-19 07:45:35 +0100 | Stanley|00 | (~stanley00@unaffiliated/stanley00) |
2020-11-19 07:45:46 +0100 | <dsal> | MarcelineVQ: that's true. People should understand me better. heh |
2020-11-19 07:46:02 +0100 | <n0042> | You've both been very helpful, thank you. |
2020-11-19 07:46:24 +0100 | jlamothe | (~jlamothe@198.251.55.207) (Ping timeout: 260 seconds) |
2020-11-19 07:46:48 +0100 | <dsal> | The functional data structure stuff is amazing. That queue thing was amazing to see. |
2020-11-19 07:47:34 +0100 | <zyklotomic> | MarcelineVQ: wait, I don't think ++ and <> are the same |
2020-11-19 07:47:41 +0100 | <dsal> | :t (++) |
2020-11-19 07:47:42 +0100 | <lambdabot> | [a] -> [a] -> [a] |
2020-11-19 07:47:44 +0100 | <dsal> | :t (<>) |
2020-11-19 07:47:45 +0100 | <lambdabot> | Semigroup a => a -> a -> a |
2020-11-19 07:47:49 +0100 | <MarcelineVQ> | The okasaki paper is a bit of a hard read if you're new to it all but it's pretty great, interesting how little progress there's been since it at as well |
2020-11-19 07:47:51 +0100 | <zyklotomic> | which was what dsal meant |
2020-11-19 07:48:10 +0100 | <dsal> | ++ doesn't need to exist in Haskell. Or, perhaps, <> should be ++ |
2020-11-19 07:48:17 +0100 | <dsal> | Same as map vs. fmap |
2020-11-19 07:48:56 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) (Ping timeout: 240 seconds) |
2020-11-19 07:49:04 +0100 | <MarcelineVQ> | Where your Semigroup is [a] then <> = ++ |
2020-11-19 07:49:33 +0100 | <zyklotomic> | <> should be ++ i think |
2020-11-19 07:49:43 +0100 | <zyklotomic> | ++ looks more natural |
2020-11-19 07:50:02 +0100 | <zyklotomic> | idk about fmap vs map though if you had to pick one of the two |
2020-11-19 07:50:15 +0100 | Stanley|00 | (~stanley00@unaffiliated/stanley00) (Remote host closed the connection) |
2020-11-19 07:50:30 +0100 | <dsal> | Sure. It's just one of those things that is too much legacy code. |
2020-11-19 07:50:31 +0100 | <zyklotomic> | MarcelineVQ: I meant the implementation, I'm not sure if they behave the same |
2020-11-19 07:50:40 +0100 | <zyklotomic> | I get that they're isomorphic |
2020-11-19 07:50:50 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2020-11-19 07:50:53 +0100 | <dsal> | How could they behave differently? |
2020-11-19 07:50:53 +0100 | <zyklotomic> | mconcat xss = [x | xs <- xss, x <- xs] |
2020-11-19 07:51:05 +0100 | <zyklotomic> | (++) [] ys = ys |
2020-11-19 07:51:07 +0100 | <zyklotomic> | (++) (x:xs) ys = x : xs ++ ys |
2020-11-19 07:51:19 +0100 | <dsal> | @quick \l1 l2 -> (l1 ++ l2) === (l1 <> l2) |
2020-11-19 07:51:19 +0100 | <lambdabot> | Not enough privileges |
2020-11-19 07:51:31 +0100 | <dsal> | @check \l1 l2 -> (l1 ++ l2) === (l1 <> l2) |
2020-11-19 07:51:33 +0100 | <lambdabot> | +++ OK, passed 100 tests. |
2020-11-19 07:51:33 +0100 | <MarcelineVQ> | That is the implementation :> http://hackage.haskell.org/package/base-4.14.0.0/docs/src/GHC.Base.html#line-306 |
2020-11-19 07:52:00 +0100 | <zyklotomic> | my bad im barking up the wrong tree |
2020-11-19 07:52:12 +0100 | <zyklotomic> | I looked into Data.Monoid |
2020-11-19 07:53:48 +0100 | <zyklotomic> | wait so that wasnt disagreeing with lists being a somewhat inefficient monoid then |
2020-11-19 07:54:05 +0100 | <n0042> | So when I asked about lists with tail-pointers dsal said "There are many, many reasons you can't do that." I have implemented a few linked lists in C and I've done some LISPing, but I'm far from an expert. I would be interested in hearing some of those reasons. Is it a performance thing, from the days of yore? Thanks again for answering my |
2020-11-19 07:54:05 +0100 | <n0042> | questions. You folks are all very helpful. |
2020-11-19 07:54:57 +0100 | <n0042> | I've learned more just hanging out in here for an hour than in the last two days combined. You guys are great. |
2020-11-19 07:55:37 +0100 | <glguy> | n0042, the issue is that things aren't mutable, so you can't use a reference to the last element to add to the end of a list |
2020-11-19 07:56:04 +0100 | <glguy> | Unless you build a mutable structure explicitly with mutable references that's accessed using IO actions |
2020-11-19 07:56:27 +0100 | mananamenos | (~mananamen@84.122.202.215.dyn.user.ono.com) |
2020-11-19 07:56:56 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 240 seconds) |
2020-11-19 07:57:25 +0100 | <zyklotomic> | I was also thinking, what about [1..] |
2020-11-19 07:58:00 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-104-55.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2020-11-19 07:58:02 +0100 | borne | (~fritjof@200116b864eda200f1dc39039d201adf.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
2020-11-19 07:58:04 +0100 | <dsal> | let a = 1:a in take 5 a |
2020-11-19 07:58:09 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) |
2020-11-19 07:58:10 +0100 | <dsal> | > let a = 1:a in take 5 a |
2020-11-19 07:58:12 +0100 | <lambdabot> | [1,1,1,1,1] |
2020-11-19 07:59:17 +0100 | <dsal> | > let a = 'x':a in length a |
2020-11-19 07:59:24 +0100 | <lambdabot> | mueval: ExitFailure 1 |
2020-11-19 07:59:29 +0100 | <dsal> | boo. Too many exes. |
2020-11-19 07:59:44 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) (Remote host closed the connection) |
2020-11-19 08:00:10 +0100 | <MarcelineVQ> | how many, would you say? |
2020-11-19 08:00:11 +0100 | <dsal> | n0042: A lot of these questions get a lot easier when you try to do the thing you think is probably easy. :) |
2020-11-19 08:00:27 +0100 | alp | (~alp@2a01:e0a:58b:4920:d4c7:761f:e715:72ea) (Ping timeout: 272 seconds) |
2020-11-19 08:01:13 +0100 | <n0042> | That's good advice in general, for sure |
2020-11-19 08:01:24 +0100 | <dsal> | > let a = 'x':a in take 5 (a <> "and then y") |
2020-11-19 08:01:26 +0100 | <lambdabot> | "xxxxx" |
2020-11-19 08:02:10 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2020-11-19 08:02:18 +0100 | <dsal> | I just made a list of infinite length and appended a list to the end of it. Please adjust pointers accordingly. :) |
2020-11-19 08:06:59 +0100 | idhugo | (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) |
2020-11-19 08:07:11 +0100 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) |
2020-11-19 08:08:02 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 08:08:17 +0100 | <n0042> | Is the `<> "and then y"` part ever evaluated? |
2020-11-19 08:09:02 +0100 | actuallybatman | (~sam@S010664777dafd303.cg.shawcable.net) |
2020-11-19 08:09:06 +0100 | <n0042> | lazy evaluation is pretty wild. I'm still trying to wrap my head around that part. |
2020-11-19 08:09:34 +0100 | solonarv | (~solonarv@astrasbourg-653-1-156-4.w90-6.abo.wanadoo.fr) |
2020-11-19 08:09:54 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) (Remote host closed the connection) |
2020-11-19 08:10:59 +0100 | <ClaudiusMaximus> | n0042: it's evaluated, just enough to push it down 5 cells: (x : xs) <> ys = x : (xs <> ys) happens 5 times during the evaluation of the result, after which take drops it |
2020-11-19 08:13:27 +0100 | zyklotomic | (~ethan@unaffiliated/chocopuff) (Quit: WeeChat 2.9) |
2020-11-19 08:14:52 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
2020-11-19 08:15:04 +0100 | idhugo | (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Quit: Leaving) |
2020-11-19 08:15:40 +0100 | <n0042> | Yeah, I have no idea how you'd do the pointers for that. That's a mind-bender. |
2020-11-19 08:16:10 +0100 | <dsal> | It's really easy to follow if you don't try to think about how you'd write it as a singly linked list in C. |
2020-11-19 08:16:32 +0100 | <n0042> | Conditioning is hard to break '=D |
2020-11-19 08:16:44 +0100 | <n0042> | But thank you for bearing with me. I really appreciate it |
2020-11-19 08:17:10 +0100 | <dsal> | What is `a`? It's a list where the head is 'x' and the tail is some other stuff. If you only need the head, you're done. If you need the tail, you look at that. Oh, it's `a, that's a list where... |
2020-11-19 08:18:39 +0100 | alx741 | (~alx741@181.196.68.148) (Ping timeout: 265 seconds) |
2020-11-19 08:19:03 +0100 | Amras | (~Amras@unaffiliated/amras0000) |
2020-11-19 08:21:16 +0100 | chaosmasttter | (~chaosmast@p200300c4a70b2a01441f1455f36b3658.dip0.t-ipconnect.de) |
2020-11-19 08:21:33 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2020-11-19 08:23:51 +0100 | sfvm | (~sfvm@37.228.215.148) (Remote host closed the connection) |
2020-11-19 08:25:08 +0100 | p8m_ | (p8m@gateway/vpn/protonvpn/p8m) |
2020-11-19 08:26:32 +0100 | p8m | (p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 272 seconds) |
2020-11-19 08:27:41 +0100 | <n0042> | If I replace `take 5` with `tail` that sequence generates `x`s forever. That is wild. |
2020-11-19 08:30:50 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff57608036dc958592ad.dip0.t-ipconnect.de) |
2020-11-19 08:31:16 +0100 | alx741 | (~alx741@181.196.68.156) |
2020-11-19 08:32:21 +0100 | dan64- | (~dan64@dannyadam.com) |
2020-11-19 08:32:52 +0100 | <dsal> | @src tail |
2020-11-19 08:32:52 +0100 | <lambdabot> | tail (_:xs) = xs |
2020-11-19 08:32:52 +0100 | <lambdabot> | tail [] = error "Prelude.tail: empty list" |
2020-11-19 08:34:49 +0100 | dan64 | (~dan64@dannyadam.com) (Ping timeout: 256 seconds) |
2020-11-19 08:34:59 +0100 | <dsal> | :t tail . tail . tail |
2020-11-19 08:35:01 +0100 | <lambdabot> | [a] -> [a] |
2020-11-19 08:35:16 +0100 | dhouthoo | (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) |
2020-11-19 08:35:47 +0100 | <dsal> | Or you could `drop ∞` and get to that appended bit. |
2020-11-19 08:36:01 +0100 | <dsal> | @src drop |
2020-11-19 08:36:01 +0100 | <lambdabot> | drop n xs | n <= 0 = xs |
2020-11-19 08:36:01 +0100 | <lambdabot> | drop _ [] = [] |
2020-11-19 08:36:01 +0100 | <lambdabot> | drop n (_:xs) = drop (n-1) xs |
2020-11-19 08:36:13 +0100 | <dsal> | drop isn't partial. |
2020-11-19 08:36:26 +0100 | <dsal> | I wonder why `tail` isn't `drop 1` |
2020-11-19 08:36:41 +0100 | <dsal> | @check \l -> tail l === drop 1 l |
2020-11-19 08:36:43 +0100 | <lambdabot> | *Exception: Prelude.tail: empty list |
2020-11-19 08:36:55 +0100 | <dsal> | 👍 |
2020-11-19 08:37:11 +0100 | <n0042> | That's what I was trying to do. I was trying to see what I could put in there to get to the appended part |
2020-11-19 08:37:12 +0100 | <dsal> | Partial functions aren't awesome. |
2020-11-19 08:37:33 +0100 | <dsal> | It's an infinitely long list, do you'd have to drop infinite items first. |
2020-11-19 08:39:47 +0100 | <n0042> | I was trying to get a better grip on the "let" and "in" syntax earlier today, and that was a pretty useful practical example. Thank you. |
2020-11-19 08:42:11 +0100 | SourOatMilk | (SourOatMil@gateway/vpn/protonvpn/souroatmilk) |
2020-11-19 08:42:12 +0100 | <dsal> | This is one of the things I like about the book mentioned earlier. If you think about eager evaluation in C or something, you'll find haskell confusing. If you stop pretending you know things, it'll make a lot more sense. |
2020-11-19 08:42:25 +0100 | Sgeo | (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer) |
2020-11-19 08:42:59 +0100 | <dsal> | (also worth noting that list isn't mentioned for like, several chapters, and you make it yourself) |
2020-11-19 08:43:03 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) |
2020-11-19 08:44:23 +0100 | <n0042> | That sounds pretty intense |
2020-11-19 08:44:29 +0100 | <n0042> | I'll check it out for sure |
2020-11-19 08:44:33 +0100 | <dsal> | No, there's nothing very special about it. |
2020-11-19 08:44:54 +0100 | <dsal> | There are three or four books you can read and end up finding haskell is actually pretty boring and doesn't have a lot of magic. |
2020-11-19 08:45:14 +0100 | <dsal> | It's just that most other languages are worse and don't give the user much power or ability to generalize things. |
2020-11-19 08:46:14 +0100 | <dsal> | @let data MyList a = Item a | EOL deriving Show |
2020-11-19 08:46:16 +0100 | <lambdabot> | .L.hs:162:1: error: |
2020-11-19 08:46:16 +0100 | <lambdabot> | Multiple declarations of ‘MyList’ |
2020-11-19 08:46:16 +0100 | <lambdabot> | Declared at: .L.hs:158:1 |
2020-11-19 08:46:31 +0100 | Flonk | (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com) (Ping timeout: 246 seconds) |
2020-11-19 08:46:34 +0100 | <n0042> | The things that I really like about it so far are the amazing REPL, the list comprehensions, and recursion-friendly syntax. It's just really easy to write most things I want to write. Except I/O, but I'll get there. |
2020-11-19 08:46:39 +0100 | <dsal> | Er. Ignore the error. That's basically List, plus a few other things (and a slightly fancier Show) |
2020-11-19 08:46:48 +0100 | <dibblego> | Maybe |
2020-11-19 08:47:13 +0100 | <dsal> | er, I messed that up anyway |
2020-11-19 08:47:38 +0100 | bob_twinkles | (~quassel@ec2-52-37-66-13.us-west-2.compute.amazonaws.com) (Quit: No Ping reply in 180 seconds.) |
2020-11-19 08:47:53 +0100 | bob_twinkles | (~quassel@ec2-52-37-66-13.us-west-2.compute.amazonaws.com) |
2020-11-19 08:48:03 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) (Ping timeout: 240 seconds) |
2020-11-19 08:48:28 +0100 | <dsal> | @let data MyList a = Item a (MyList a) | EOL deriving Show |
2020-11-19 08:48:29 +0100 | <lambdabot> | Defined. |
2020-11-19 08:48:30 +0100 | Flonk | (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com) |
2020-11-19 08:48:50 +0100 | clog | (~nef@bespin.org) (Ping timeout: 256 seconds) |
2020-11-19 08:49:05 +0100 | <dsal> | > let a = Item 'x' a in a |
2020-11-19 08:49:07 +0100 | <lambdabot> | Item 'x' (Item 'x' (Item 'x' (Item 'x' (Item 'x' (Item 'x' (Item 'x' (Item '... |
2020-11-19 08:49:44 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) |
2020-11-19 08:51:13 +0100 | <dsal> | > let mytake _ EOL = EOL; mytake 0 _ = EOL; mytake n (Item x l) = Item x (mytake (n-1) l); a = Item 'x' a in mytake 3 a |
2020-11-19 08:51:15 +0100 | <lambdabot> | Item 'x' (Item 'x' (Item 'x' EOL)) |
2020-11-19 08:51:18 +0100 | jedws | (~jedws@101.184.150.93) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 08:51:57 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2020-11-19 08:55:29 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) |
2020-11-19 08:58:33 +0100 | coco | (~coco@212-51-146-87.fiber7.init7.net) |
2020-11-19 08:58:40 +0100 | <dsal> | @let instance Foldable MyList where foldMap _ EOL = mempty; foldMap f (Item a l) = f a <> foldMap f l |
2020-11-19 08:58:41 +0100 | <lambdabot> | Defined. |
2020-11-19 08:58:55 +0100 | <dsal> | > toList (Item 1 (Item 2 (Item 3 EOL))) |
2020-11-19 08:58:57 +0100 | <lambdabot> | error: |
2020-11-19 08:58:57 +0100 | <lambdabot> | Ambiguous occurrence ‘toList’ |
2020-11-19 08:58:57 +0100 | <lambdabot> | It could refer to |
2020-11-19 08:59:05 +0100 | <dsal> | > sum (Item 1 (Item 2 (Item 3 EOL))) |
2020-11-19 08:59:08 +0100 | <lambdabot> | 6 |
2020-11-19 08:59:11 +0100 | <dsal> | woo |
2020-11-19 08:59:20 +0100 | kritzefitz | (~kritzefit@fw-front.credativ.com) |
2020-11-19 08:59:22 +0100 | <n0042> | nice |
2020-11-19 08:59:42 +0100 | SourOatMilk | (SourOatMil@gateway/vpn/protonvpn/souroatmilk) (Quit: leaving) |
2020-11-19 09:00:02 +0100 | <dsal> | :t fmap |
2020-11-19 09:00:06 +0100 | <lambdabot> | Functor f => (a -> b) -> f a -> f b |
2020-11-19 09:01:15 +0100 | <dsal> | @let instance Functor MyList where fmap _ EOL = EOL; fmap f (Item x l) = Item (f x) (fmap f l) |
2020-11-19 09:01:17 +0100 | <lambdabot> | Defined. |
2020-11-19 09:01:42 +0100 | <dsal> | > (2 ^) <$> Item 1 (Item 2 (Item 3 EOL)) |
2020-11-19 09:01:44 +0100 | <lambdabot> | Item 2 (Item 4 (Item 8 EOL)) |
2020-11-19 09:03:40 +0100 | <dsal> | Throw in monoid, monad, applicative, and probably a few other things and that's basically list. |
2020-11-19 09:06:20 +0100 | chele | (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) |
2020-11-19 09:07:10 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2020-11-19 09:09:08 +0100 | <n0042> | From the POV of someone who's still pretty new to the language, that's impressive stuff. |
2020-11-19 09:15:07 +0100 | jedws | (~jedws@101.184.150.93) |
2020-11-19 09:16:26 +0100 | <dsal> | n0042: It gets cooler. e.g. |
2020-11-19 09:16:44 +0100 | <dsal> | % [1, 2, 3] :: MyList Int |
2020-11-19 09:16:44 +0100 | <yahb> | dsal: Item 1 (Item 2 (Item 3 EOL)) |
2020-11-19 09:16:47 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) |
2020-11-19 09:16:59 +0100 | <dsal> | I taught yahb how to understand my list from normal list syntax. |
2020-11-19 09:17:26 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-11-19 09:17:35 +0100 | <dsal> | % sum ([1..100] :: MyList Int) |
2020-11-19 09:17:36 +0100 | <yahb> | dsal: ; <interactive>:1:18: error:; Not in scope: type constructor or class `MyList'; Perhaps you meant one of these: `IsList' (imported from GHC.Exts), `TyLit' (imported from Language.Haskell.TH) |
2020-11-19 09:17:46 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Client Quit) |
2020-11-19 09:17:47 +0100 | keep_learning | (~keep_lear@43.231.26.152) (Quit: Leaving) |
2020-11-19 09:18:13 +0100 | <dsal> | Someone else taught it how to not know that, apparently. heh |
2020-11-19 09:19:53 +0100 | <dsal> | n0042: Anyway, I should've gone to bed a while ago. The main point is that haskell doesn't reserve a lot of magic for the ivory tower. If you see something that looks magical, you can often implement it yourself from scratch. |
2020-11-19 09:20:04 +0100 | alp | (~alp@2a01:e0a:58b:4920:6cd6:5f96:4d6d:5a5) |
2020-11-19 09:20:33 +0100 | <n0042> | That's good to know! Thanks for all the help. I am planning on going through that book with a study group, so I'm looking forward to it. |
2020-11-19 09:20:44 +0100 | <n0042> | Have a good night and thanks again |
2020-11-19 09:20:58 +0100 | <dsal> | (e.g., I could've made a Show instance that displayed my list exactly as regular list does, making it look and and act just like the list you already know) |
2020-11-19 09:21:48 +0100 | <dsal> | It's like learning Santa Claus isn't real. All this wonderful magic is suddenly boring, but then you get to be Santa Claus, so that's nice. |
2020-11-19 09:21:50 +0100 | <dsal> | 'night. :) |
2020-11-19 09:24:28 +0100 | Franciman | (~francesco@host-82-56-223-169.retail.telecomitalia.it) |
2020-11-19 09:29:06 +0100 | n0042 | (d055ed89@208.85.237.137) () |
2020-11-19 09:31:09 +0100 | thc202 | (~thc202@unaffiliated/thc202) |
2020-11-19 09:34:35 +0100 | frogger | (d055ed89@208.85.237.137) |
2020-11-19 09:35:16 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
2020-11-19 09:36:24 +0100 | ph88^ | (~ph88@2a02:8109:9e00:7e5c:f073:c081:c2ef:433b) |
2020-11-19 09:40:31 +0100 | ph88 | (~ph88@2a02:8109:9e00:7e5c:a963:461:83fa:2c4) (Ping timeout: 272 seconds) |
2020-11-19 09:45:18 +0100 | jedws | (~jedws@101.184.150.93) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 09:45:38 +0100 | borne | (~fritjof@200116b864eda200f1dc39039d201adf.dip.versatel-1u1.de) |
2020-11-19 09:46:09 +0100 | frogger | (d055ed89@208.85.237.137) (Remote host closed the connection) |
2020-11-19 09:46:54 +0100 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) |
2020-11-19 09:48:06 +0100 | n0042 | (d055ed89@208.85.237.137) |
2020-11-19 09:48:30 +0100 | hackage | mu-rpc 0.4.0.1 - Protocol-independent declaration of services and servers. https://hackage.haskell.org/package/mu-rpc-0.4.0.1 (AlejandroSerrano) |
2020-11-19 09:49:25 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 264 seconds) |
2020-11-19 09:50:47 +0100 | danvet_ | (~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453) |
2020-11-19 09:51:25 +0100 | Boomerang | (~Boomerang@xd520f68c.cust.hiper.dk) |
2020-11-19 09:51:52 +0100 | <unclechu> | glguy: no i am around, why? |
2020-11-19 09:53:07 +0100 | Yumasi | (~guillaume@2a01cb09b06b29ea0877e1bda345185b.ipv6.abo.wanadoo.fr) |
2020-11-19 09:53:17 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) |
2020-11-19 09:54:00 +0100 | hackage | compendium-client 0.2.1.1 - Client for the Compendium schema server https://hackage.haskell.org/package/compendium-client-0.2.1.1 (AlejandroSerrano) |
2020-11-19 09:54:04 +0100 | hnOsmium0001 | (uid453710@gateway/web/irccloud.com/x-rpvaqdolaahudqno) (Quit: Connection closed for inactivity) |
2020-11-19 09:55:24 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
2020-11-19 09:57:00 +0100 | hackage | mu-avro 0.4.0.2 - Avro serialization support for Mu microservices https://hackage.haskell.org/package/mu-avro-0.4.0.2 (AlejandroSerrano) |
2020-11-19 09:58:11 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
2020-11-19 09:58:29 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Client Quit) |
2020-11-19 09:59:00 +0100 | hackage | mu-protobuf 0.4.0.2 - Protocol Buffers serialization and gRPC schema import for Mu microservices https://hackage.haskell.org/package/mu-protobuf-0.4.0.2 (AlejandroSerrano) |
2020-11-19 09:59:17 +0100 | britva | (~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) |
2020-11-19 10:00:31 +0100 | hackage | mu-optics 0.3.0.1 - Optics for @mu-schema@ terms https://hackage.haskell.org/package/mu-optics-0.3.0.1 (AlejandroSerrano) |
2020-11-19 10:01:31 +0100 | hackage | mu-persistent 0.3.1.0 - Utilities for interoperation between Mu and Persistent https://hackage.haskell.org/package/mu-persistent-0.3.1.0 (AlejandroSerrano) |
2020-11-19 10:02:31 +0100 | hackage | mu-grpc-client 0.4.0.1 - gRPC clients from Mu definitions https://hackage.haskell.org/package/mu-grpc-client-0.4.0.1 (AlejandroSerrano) |
2020-11-19 10:04:31 +0100 | hackage | mu-graphql 0.4.1.0 - GraphQL support for Mu https://hackage.haskell.org/package/mu-graphql-0.4.1.0 (AlejandroSerrano) |
2020-11-19 10:06:56 +0100 | watt801 | (~watt801@124.123.105.47) |
2020-11-19 10:07:23 +0100 | n0042 | (d055ed89@208.85.237.137) (Remote host closed the connection) |
2020-11-19 10:08:26 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
2020-11-19 10:10:09 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2020-11-19 10:10:23 +0100 | laxask | sudden |
2020-11-19 10:10:24 +0100 | <idnar> | :t \a -> a <> a |
2020-11-19 10:10:26 +0100 | <lambdabot> | Semigroup a => a -> a |
2020-11-19 10:10:35 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz) |
2020-11-19 10:11:30 +0100 | watt801 | (~watt801@124.123.105.47) (Ping timeout: 256 seconds) |
2020-11-19 10:13:28 +0100 | invaser | (~Thunderbi@31.148.23.125) |
2020-11-19 10:13:52 +0100 | <idnar> | I guess that's `stimes 2` |
2020-11-19 10:14:04 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
2020-11-19 10:17:18 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-19 10:17:32 +0100 | <avn> | Folks, anyone could hint me some examples of usage for aside/outside/without from Control.Lens.Prisms? |
2020-11-19 10:20:22 +0100 | rotty | (rotty@ghost.xx.vu) (Ping timeout: 260 seconds) |
2020-11-19 10:23:33 +0100 | jakob_ | (~textual@p200300f49f162200c400a7daff5c73c4.dip0.t-ipconnect.de) |
2020-11-19 10:26:20 +0100 | kuribas | (~user@ptr-25vy0i8y4kl4v762twz.18120a2.ip6.access.telenet.be) |
2020-11-19 10:27:19 +0100 | <jophish> | bgamari: is your ring-buffer library worth using? |
2020-11-19 10:27:31 +0100 | <jophish> | It doesn't build at the moment, but I think that's just version bounds |
2020-11-19 10:30:21 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) |
2020-11-19 10:31:10 +0100 | britva | (~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Quit: This computer has gone to sleep) |
2020-11-19 10:31:27 +0100 | sagax | (~sagax_nb@213.138.71.146) (Ping timeout: 260 seconds) |
2020-11-19 10:34:55 +0100 | Varis | (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
2020-11-19 10:35:36 +0100 | ADG1089 | (~adg1089@223.235.75.84) |
2020-11-19 10:36:29 +0100 | <ADG1089> | @hoogle (FilePath -> IO ()) -> IO [FilePath] -> IO () |
2020-11-19 10:36:30 +0100 | <lambdabot> | Data.Drinkery.Combinators traverseFrom_ :: (Foldable t, Monad m) => m (t a) -> (a -> m b) -> m () |
2020-11-19 10:36:36 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) (Remote host closed the connection) |
2020-11-19 10:36:59 +0100 | <ADG1089> | @ty mapM |
2020-11-19 10:37:01 +0100 | <lambdabot> | (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) |
2020-11-19 10:37:28 +0100 | Lycurgus | (~niemand@cpe-45-46-142-188.buffalo.res.rr.com) |
2020-11-19 10:37:55 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) |
2020-11-19 10:38:08 +0100 | phaul | (~phaul@ruby/staff/phaul) (Ping timeout: 256 seconds) |
2020-11-19 10:38:53 +0100 | nckx | (~nckx@tobias.gr) (Quit: Updating my Guix System — https://guix.gnu.org) |
2020-11-19 10:39:31 +0100 | britva | (~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) |
2020-11-19 10:40:00 +0100 | phaul | (~phaul@ruby/staff/phaul) |
2020-11-19 10:41:33 +0100 | nckx | (~nckx@tobias.gr) |
2020-11-19 10:43:02 +0100 | Varis | (~Tadas@unaffiliated/varis) |
2020-11-19 10:43:16 +0100 | <boxscape> | % type family Fam :: a :~: b where |
2020-11-19 10:43:16 +0100 | <yahb> | boxscape: |
2020-11-19 10:43:19 +0100 | <boxscape> | % :kind Fam |
2020-11-19 10:43:20 +0100 | <yahb> | boxscape: forall k (a :: k) (b :: k). a :~: b |
2020-11-19 10:44:16 +0100 | <boxscape> | % type family Fam :: a :~: b where Fam = 'Refl |
2020-11-19 10:44:16 +0100 | <yahb> | boxscape: ; <interactive>:24:26: error:; * Couldn't match `a' with `b'; * In the type family declaration for `Fam' |
2020-11-19 10:44:25 +0100 | <boxscape> | % type Fam :: forall k (a :: k) (b :: k) . a :~: b; type family Fam :: a :~: b where Fam = 'Refl |
2020-11-19 10:44:26 +0100 | <yahb> | boxscape: |
2020-11-19 10:44:31 +0100 | clog | (~nef@bespin.org) |
2020-11-19 10:44:34 +0100 | <boxscape> | the inferred kind seems to be the same one I gave it |
2020-11-19 10:44:41 +0100 | <boxscape> | why does it result in an error without type sig? |
2020-11-19 10:44:44 +0100 | <boxscape> | (kind sig) |
2020-11-19 10:45:22 +0100 | <boxscape> | ohh wait |
2020-11-19 10:45:31 +0100 | <boxscape> | is the Refl call changing the inferred kind |
2020-11-19 10:46:04 +0100 | Varis | (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
2020-11-19 10:46:40 +0100 | <idnar> | jophish: last time I tried to use it, I got segfaults |
2020-11-19 10:48:25 +0100 | Varis | (~Tadas@unaffiliated/varis) |
2020-11-19 10:48:53 +0100 | <idnar> | @type \f x -> traverse_ f =<< x |
2020-11-19 10:48:54 +0100 | <lambdabot> | (Monad m, Foldable t) => (a -> m b) -> m (t a) -> m () |
2020-11-19 10:49:10 +0100 | <idnar> | ADG1089: ^ |
2020-11-19 10:49:34 +0100 | <ADG1089> | Thansk!! |
2020-11-19 10:50:52 +0100 | danvet_ | (~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453) (Quit: Leaving) |
2020-11-19 10:54:25 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) (Remote host closed the connection) |
2020-11-19 11:01:12 +0100 | thc202 | (~thc202@unaffiliated/thc202) (Ping timeout: 260 seconds) |
2020-11-19 11:02:10 +0100 | Zetagon | (~leo@c151-177-52-233.bredband.comhem.se) |
2020-11-19 11:04:16 +0100 | chalkmonster | (~chalkmons@unaffiliated/chalkmonster) |
2020-11-19 11:06:38 +0100 | Lord_of_Life_ | Lord_of_Life |
2020-11-19 11:07:30 +0100 | hackage | jsonifier 0.1.0.5 - Fast and simple JSON encoding toolkit https://hackage.haskell.org/package/jsonifier-0.1.0.5 (NikitaVolkov) |
2020-11-19 11:07:33 +0100 | thc202 | (~thc202@unaffiliated/thc202) |
2020-11-19 11:08:10 +0100 | jonatanb | (jonatanb@gateway/vpn/protonvpn/jonatanb) |
2020-11-19 11:15:25 +0100 | jonatanb | (jonatanb@gateway/vpn/protonvpn/jonatanb) (Ping timeout: 240 seconds) |
2020-11-19 11:16:18 +0100 | zyextant | (~zyextant@120.155.30.153) |
2020-11-19 11:16:21 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) |
2020-11-19 11:18:07 +0100 | ben_m | (~ben_m@unaffiliated/ben-m/x-8385872) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-11-19 11:18:12 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 11:19:33 +0100 | guest1119 | (~user@49.5.6.87) (Quit: ERC (IRC client for Emacs 27.1)) |
2020-11-19 11:20:52 +0100 | ben_m | (~ben_m@56.ip-51-38-127.eu) |
2020-11-19 11:22:16 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
2020-11-19 11:24:41 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
2020-11-19 11:26:38 +0100 | nerded | (~user@lfbn-idf3-1-374-154.w83-199.abo.wanadoo.fr) |
2020-11-19 11:26:53 +0100 | <nerded> | hi guys |
2020-11-19 11:27:29 +0100 | <Zetagon> | Hello |
2020-11-19 11:28:10 +0100 | ubert | (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) |
2020-11-19 11:28:31 +0100 | ubert | (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection) |
2020-11-19 11:29:18 +0100 | patier[m] | (patiermatr@gateway/shell/matrix.org/x-defohognfbqcqriu) |
2020-11-19 11:29:43 +0100 | nerded | (~user@lfbn-idf3-1-374-154.w83-199.abo.wanadoo.fr) (Client Quit) |
2020-11-19 11:32:01 +0100 | ubert | (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) |
2020-11-19 11:32:14 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
2020-11-19 11:32:16 +0100 | rprije | (~rprije@124.148.131.132) (Ping timeout: 240 seconds) |
2020-11-19 11:34:16 +0100 | fendor | (~fendor@178.165.131.185.wireless.dyn.drei.com) |
2020-11-19 11:36:05 +0100 | fendor_ | (~fendor@178.165.128.131.wireless.dyn.drei.com) (Ping timeout: 240 seconds) |
2020-11-19 11:36:37 +0100 | <jophish> | idnar: cool, thanks |
2020-11-19 11:36:47 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
2020-11-19 11:41:05 +0100 | ben_m | (~ben_m@56.ip-51-38-127.eu) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-11-19 11:41:25 +0100 | zyklotomic | (~ethan@unaffiliated/chocopuff) |
2020-11-19 11:43:25 +0100 | stree | (~stree@50-108-97-52.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception) |
2020-11-19 11:43:25 +0100 | star_cloud | (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Remote host closed the connection) |
2020-11-19 11:43:42 +0100 | stree | (~stree@50-108-97-52.adr01.mskg.mi.frontiernet.net) |
2020-11-19 11:44:48 +0100 | star_cloud | (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) |
2020-11-19 11:46:01 +0100 | <bgamari> | jophish, frankly I would need to check |
2020-11-19 11:46:10 +0100 | <bgamari> | jophish, it was a long time ago that I wrote that |
2020-11-19 11:46:16 +0100 | <bgamari> | and I had very particular needs |
2020-11-19 11:47:10 +0100 | ADG1089 | (~adg1089@223.235.75.84) () |
2020-11-19 11:48:38 +0100 | <dminuoso> | What's the motivation behind: data :~: where Refl :: a :~: a |
2020-11-19 11:48:50 +0100 | <dminuoso> | Err |
2020-11-19 11:49:00 +0100 | <dminuoso> | data a :~: b where Refl :: a :~: a |
2020-11-19 11:49:14 +0100 | <Franciman> | Hi, does happy have some functionality for writing pratt parsers? |
2020-11-19 11:49:24 +0100 | <dminuoso> | I keep staring at this, not quite understanding how this works or what this is for. |
2020-11-19 11:50:25 +0100 | <Franciman> | dminuoso, the motivation is that you can say that two things are the same, when they are the same |
2020-11-19 11:50:26 +0100 | <Franciman> | :P |
2020-11-19 11:50:47 +0100 | <Franciman> | so that you surely want to conclude a = a |
2020-11-19 11:51:53 +0100 | <kuribas> | I am wondering, would namedFieldPuns be prefered over RecordWildCards? |
2020-11-19 11:51:57 +0100 | <dminuoso> | Does GHC bury a (a ~ b) into the GADT? |
2020-11-19 11:52:20 +0100 | <kuribas> | RecordWildCards add hidden fields to the namespace, but namedFieldPuns make them visible. |
2020-11-19 11:52:21 +0100 | <dminuoso> | % import Data.Type.Equality |
2020-11-19 11:52:22 +0100 | <yahb> | dminuoso: |
2020-11-19 11:52:27 +0100 | <dminuoso> | % :t Refl |
2020-11-19 11:52:27 +0100 | <yahb> | dminuoso: forall k (a :: k). a :~: a |
2020-11-19 11:52:36 +0100 | <boxscape> | dminuoso as far as I know it does |
2020-11-19 11:52:38 +0100 | <boxscape> | or wait |
2020-11-19 11:52:43 +0100 | <boxscape> | I thought you wrote a ~ a |
2020-11-19 11:53:03 +0100 | <boxscape> | Oh nevermind |
2020-11-19 11:53:11 +0100 | <boxscape> | a ~ a wouldn't make sense |
2020-11-19 11:53:20 +0100 | <dminuoso> | Well, a ~ a necessarily holds true, no? |
2020-11-19 11:53:25 +0100 | <boxscape> | so yes, as far as I know it does put a ~ b into the GADT |
2020-11-19 11:53:32 +0100 | <boxscape> | dminuoso right, that's what I meant |
2020-11-19 11:53:55 +0100 | <dminuoso> | The above type signature seems strange, Id have expected it to we |
2020-11-19 11:53:59 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection) |
2020-11-19 11:54:15 +0100 | <dminuoso> | Refl :: forall a b. (a ~ b) => a :~: b |
2020-11-19 11:54:20 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
2020-11-19 11:54:22 +0100 | <dminuoso> | (ignoring the PolyKinds noise) |
2020-11-19 11:54:45 +0100 | <boxscape> | % :t undefined :: forall a b . (a ~ b) => a :~: b |
2020-11-19 11:54:45 +0100 | <yahb> | boxscape: forall k (b :: k). b :~: b |
2020-11-19 11:54:53 +0100 | <boxscape> | dminuoso same thing |
2020-11-19 11:54:54 +0100 | jwynn6 | (~jwynn6@050-088-122-078.res.spectrum.com) (Ping timeout: 272 seconds) |
2020-11-19 11:55:36 +0100 | jwynn6 | (~jwynn6@050-088-122-078.res.spectrum.com) |
2020-11-19 11:55:49 +0100 | zyxtant | (~zyextant@120.155.30.153) |
2020-11-19 11:57:07 +0100 | <dminuoso> | So Refl is just a reified ~ constraint? |
2020-11-19 11:57:18 +0100 | <boxscape> | yes |
2020-11-19 11:58:00 +0100 | <dminuoso> | im genuinely curious what this could be used for then |
2020-11-19 11:59:14 +0100 | <boxscape> | dminuoso to show that things are equal, for example, if you had data Nat = Z | S Nat, and defined plus for it, you could have plus_comm :: forall (n :: Nat) (m :: Nat) . Plus n m :~: Plus m n |
2020-11-19 11:59:20 +0100 | zyextant | (~zyextant@120.155.30.153) (Ping timeout: 272 seconds) |
2020-11-19 11:59:31 +0100 | <boxscape> | and the proof would contain 2 or 3 Refls |
2020-11-19 12:00:12 +0100 | <dminuoso> | 2 or 3 Refls? |
2020-11-19 12:00:51 +0100 | kuribas | (~user@ptr-25vy0i8y4kl4v762twz.18120a2.ip6.access.telenet.be) (Read error: Connection reset by peer) |
2020-11-19 12:01:31 +0100 | zyklotomic | (~ethan@unaffiliated/chocopuff) (Quit: WeeChat 2.9) |
2020-11-19 12:01:35 +0100 | <boxscape> | as in, the Refl constructor would appear in the proof two or three times - as the base case for the induction (though actually you need to add singleton arguments here I think to match on) |
2020-11-19 12:02:07 +0100 | kuribas | (~user@ptr-25vy0i8y4kl4v762twz.18120a2.ip6.access.telenet.be) |
2020-11-19 12:03:18 +0100 | <boxscape> | so if you also had data SNat :: Nat -> Type where SZ :: SNat Z | SS :: SNat n -> SNat (S n), i.e. the singleton type for Nat, you could have plus_comm :: SNat n -> SNat m -> Plus n m :~: Plus m n, and then the first equation, the inductive base case, could be plus_comm SZ n = Refl |
2020-11-19 12:03:59 +0100 | <boxscape> | assuming Plus is defined as type family Plus n m where Plus Z m = m; Plus (S n) m = S (Plus n m) |
2020-11-19 12:06:39 +0100 | ft | (~ft@shell.chaostreff-dortmund.de) |
2020-11-19 12:07:25 +0100 | chalkmonster | (~chalkmons@unaffiliated/chalkmonster) (Quit: WeeChat 2.9) |
2020-11-19 12:07:58 +0100 | zyklotomic | (~ethan@unaffiliated/chocopuff) |
2020-11-19 12:08:30 +0100 | hackage | hadolint 1.19.0 - Dockerfile Linter JavaScript API https://hackage.haskell.org/package/hadolint-1.19.0 (lorenzo) |
2020-11-19 12:08:46 +0100 | <zyklotomic> | soft question here, is there a reason behind the ". . . $" style? I think it's part of "point-free" style? but I might be wrong |
2020-11-19 12:09:17 +0100 | <boxscape> | (technically that base case isn't quite correct but let me write up the example real quick) |
2020-11-19 12:09:39 +0100 | <zyklotomic> | like just now, I wrote something like `drop 1 . foldl' f [a, start] $ xs`, but I honenstly find this style more difficult to read than `drop 1 $ foldl' f [a, start] $ xs` |
2020-11-19 12:10:31 +0100 | <zyklotomic> | * in the second one, the second $ was a typo / extraneous |
2020-11-19 12:10:50 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-11-19 12:13:02 +0100 | <dminuoso> | zyklotomic: It's personal taste, some people like: . . . $, others prefer (. . .) (. . .), and there's other styles too |
2020-11-19 12:13:20 +0100 | ft | (~ft@shell.chaostreff-dortmund.de) (Ping timeout: 260 seconds) |
2020-11-19 12:13:48 +0100 | <dminuoso> | I tend to avoid ($) generally except for do blocks/lambdas (cant get myself to enable BlockArguments) |
2020-11-19 12:15:26 +0100 | <dminuoso> | In my opinion it's good to use function composition and parens. It gives you a better view on code structure |
2020-11-19 12:15:28 +0100 | <kuribas> | dminuoso: so do you write (f . g . h) x then? |
2020-11-19 12:16:03 +0100 | <dminuoso> | kuribas: Generally I favor `... f x where f = g . h . i` |
2020-11-19 12:16:21 +0100 | datajerk | (~datajerk@sense.net) (Remote host closed the connection) |
2020-11-19 12:16:26 +0100 | kuribas | wonders if he writes everything infix his lisp colleages will like haskell more... |
2020-11-19 12:16:28 +0100 | <dminuoso> | but `f (g (h x))` is not bad either |
2020-11-19 12:16:35 +0100 | kuribas | means prefix |
2020-11-19 12:16:44 +0100 | <dminuoso> | It's somewhat situational |
2020-11-19 12:16:46 +0100 | datajerk | (~datajerk@sense.net) |
2020-11-19 12:16:49 +0100 | <kuribas> | dminuoso: lispers agree :) |
2020-11-19 12:16:55 +0100 | <kuribas> | dminuoso: but clojurers not |
2020-11-19 12:17:12 +0100 | <zyklotomic> | ah i see |
2020-11-19 12:17:15 +0100 | <zyklotomic> | thanks for sharing |
2020-11-19 12:17:28 +0100 | <zyklotomic> | i've been generally writing (f . g . h) x too |
2020-11-19 12:17:37 +0100 | <zyklotomic> | and $ felt a bit unnatural at first |
2020-11-19 12:17:54 +0100 | <kuribas> | clojurers write (-> x h g f). IMO it's strictly worse than ($) or (.), as it is a syntactic, rather than semantic construct. |
2020-11-19 12:18:30 +0100 | <dminuoso> | zyklotomic: Using function composition brings functions as first class objects more into view |
2020-11-19 12:18:43 +0100 | <dminuoso> | Say `fmap (f . g) ...` |
2020-11-19 12:18:51 +0100 | <kuribas> | zyklotomic: I think the reasoning behidn . . . $ is that if you remove the last argument it still works. |
2020-11-19 12:19:14 +0100 | <dminuoso> | (You could call this "point-free", but often its useful to think of functions as pipelines you can just compose to do more complex things) |
2020-11-19 12:19:15 +0100 | <boxscape> | dminuoso Refl example: https://gist.github.com/JakobBruenker/38251269a93cdd1f4979b771e613f4e6 |
2020-11-19 12:19:18 +0100 | <kuribas> | zyklotomic: f x = g . h $ x => f = g . h |
2020-11-19 12:19:20 +0100 | <zyklotomic> | yeah, i do `fmap (f . g)` too |
2020-11-19 12:19:44 +0100 | <zyklotomic> | like the other pattern i've seen that parallels this, is f <*> g <$> h |
2020-11-19 12:19:47 +0100 | <kuribas> | zyklotomic: but with f x = g $ h $ x you have to replace all the ($)'s |
2020-11-19 12:19:50 +0100 | <zyklotomic> | which well it does make sense |
2020-11-19 12:20:17 +0100 | <boxscape> | dminuoso in the pattern guards the equality constraint is extracted |
2020-11-19 12:20:25 +0100 | <dminuoso> | zyklotomic: If you explore this much, there's some pretty cool tricks |
2020-11-19 12:20:31 +0100 | <kuribas> | zyklotomic: in the end it's your own preference |
2020-11-19 12:20:33 +0100 | <dminuoso> | Personally Im a big fan of foldMap for example |
2020-11-19 12:20:45 +0100 | alp | (~alp@2a01:e0a:58b:4920:6cd6:5f96:4d6d:5a5) (Ping timeout: 272 seconds) |
2020-11-19 12:20:45 +0100 | <zyklotomic> | dminuoso: wait, I finally see exactly what you mean about the last argument now |
2020-11-19 12:20:53 +0100 | <zyklotomic> | I never came upon that realization |
2020-11-19 12:21:13 +0100 | <dminuoso> | % getSum . foldMap Sum $ [1,2,3,4] :: Integer |
2020-11-19 12:21:14 +0100 | <yahb> | dminuoso: 10 |
2020-11-19 12:21:14 +0100 | <zyklotomic> | it was always trying to work out the order of operations/priority of the operetors idk what it's called |
2020-11-19 12:21:19 +0100 | <zyklotomic> | precedence? |
2020-11-19 12:21:43 +0100 | <zyklotomic> | like the PEMDAS of operators, i'm not sure what to calli t |
2020-11-19 12:22:06 +0100 | <dminuoso> | boxscape: Okay, so Im staring at this, my head is not quite ready to be contorted. |
2020-11-19 12:22:16 +0100 | <dminuoso> | Superficially, I can read it and understand what this is doing |
2020-11-19 12:22:23 +0100 | <dminuoso> | But not quite why this works inductively |
2020-11-19 12:22:40 +0100 | pfurla_ | (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 260 seconds) |
2020-11-19 12:22:40 +0100 | <dminuoso> | Is this essentially a theorem prover like coq in action? |
2020-11-19 12:23:00 +0100 | <boxscape> | dminuoso yes, the main difference being that we can't be sure they're actually proofs because the totality checker is missing |
2020-11-19 12:23:01 +0100 | alp | (~alp@2a01:e0a:58b:4920:7900:a63:b56e:5a9) |
2020-11-19 12:23:15 +0100 | <boxscape> | (though if a proof terminates successfully for an input, you've proven it for that input) |
2020-11-19 12:23:20 +0100 | <dminuoso> | boxscape: Oh you mean because I can just sneak `undefined` in at any point to prove whatever? |
2020-11-19 12:23:24 +0100 | <boxscape> | right |
2020-11-19 12:23:55 +0100 | <kuribas> | dminuoso: how is that better than foldr (+) 0 [1, 2, 3, 4] ? |
2020-11-19 12:24:23 +0100 | <dminuoso> | kuribas: Sum carries monoid laws implictly |
2020-11-19 12:24:23 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
2020-11-19 12:24:32 +0100 | <boxscape> | dminuoso tbh these kinds of proofs are a lot easier to understand while writing than while reading, because you can look at the hole types along the way |
2020-11-19 12:24:33 +0100 | <dminuoso> | with foldr you cant reason about laws |
2020-11-19 12:24:43 +0100 | pfurla | (~pfurla@190.15.195.173.client.static.strong-in52.as13926.net) |
2020-11-19 12:25:01 +0100 | <dminuoso> | say, will `foldr (+) 0 [1,2,3,4]` and `foldl (+) 0 [1,2,3,4]` do the same thing? |
2020-11-19 12:25:12 +0100 | <dminuoso> | Dunno really |
2020-11-19 12:25:44 +0100 | <dminuoso> | I mean for this case I can of course tell, but the associativity and identity is not clearly communicated, and it's extra verbose |
2020-11-19 12:25:48 +0100 | <kuribas> | dminuoso: depends on the Num instance |
2020-11-19 12:25:59 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2020-11-19 12:26:00 +0100 | <dminuoso> | kuribas: Im just very fond of traverse and foldMap |
2020-11-19 12:26:08 +0100 | <boxscape> | for example `plus_Z (SS n) = _` has hole type `'S (Plus n1 'Z) :~: 'S n1`, so we can call plus_Z n recursively and match on that to get out the `Plus n1 Z ~ n1` constraint, and then we just have to make something of type `S n1 :~: S n1`, which is Refl |
2020-11-19 12:26:09 +0100 | <kuribas> | also foldMap Sum is very ineffecient |
2020-11-19 12:26:20 +0100 | <kuribas> | it's too lazy |
2020-11-19 12:26:46 +0100 | <dminuoso> | Often efficiency is not a problem I need, expressivity is more important to me :) |
2020-11-19 12:27:01 +0100 | <dminuoso> | Consider this trick to implement traverse: |
2020-11-19 12:27:04 +0100 | <kuribas> | I prefer both |
2020-11-19 12:27:11 +0100 | sdx23 | (~sdx23@unaffiliated/sdx23) (Remote host closed the connection) |
2020-11-19 12:27:16 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 240 seconds) |
2020-11-19 12:27:20 +0100 | <kuribas> | I mean efficiency and expressivity are not necessary mutually exclusive |
2020-11-19 12:27:26 +0100 | sdx23 | (~sdx23@unaffiliated/sdx23) |
2020-11-19 12:27:30 +0100 | <dminuoso> | % ala ZipList traverse [[1,2,3],[10,20,30],[100,200,300]] |
2020-11-19 12:27:30 +0100 | <yahb> | dminuoso: ; <interactive>:32:1: warning: [-Wtype-defaults]; * Defaulting the following constraints to type `Integer'; (Show b0) arising from a use of `print' at <interactive>:32:1-55; (Num b0) arising from a use of `it' at <interactive>:32:1-55; * In a stmt of an interactive GHCi command: print it; [[1,10,100],[2,20,200],[3,30,300]] |
2020-11-19 12:27:39 +0100 | <dminuoso> | % ala ZipList traverse [[1,2,3],[10,20,30],[100,200,300]] :: [[Integer]] |
2020-11-19 12:27:40 +0100 | <yahb> | dminuoso: [[1,10,100],[2,20,200],[3,30,300]] |
2020-11-19 12:28:02 +0100 | <dminuoso> | Can't deny there's a certain beauty of both foldMap and traverse :) |
2020-11-19 12:28:38 +0100 | <dminuoso> | kuribas: Also, we have foldMap' now :p |
2020-11-19 12:29:07 +0100 | <dminuoso> | % ala Product foldMap [1,2,3,4] |
2020-11-19 12:29:07 +0100 | <yahb> | dminuoso: ; <interactive>:34:1: warning: [-Wtype-defaults]; * Defaulting the following constraints to type `Integer'; (Show a0) arising from a use of `print' at <interactive>:34:1-29; (Num a0) arising from a use of `it' at <interactive>:34:1-29; * In a stmt of an interactive GHCi command: print it; 24 |
2020-11-19 12:29:27 +0100 | <dminuoso> | % ala Product foldMap [1,2,3,4] |
2020-11-19 12:29:28 +0100 | <yahb> | dminuoso: 24 |
2020-11-19 12:29:30 +0100 | <kuribas> | foldMap' evaluated from left? |
2020-11-19 12:29:44 +0100 | <dminuoso> | foldMap' f = foldl' (\ acc a -> acc <> f a) mempty |
2020-11-19 12:29:52 +0100 | <dminuoso> | foldMap f = foldr (mappend . f) mempty |
2020-11-19 12:29:56 +0100 | <kuribas> | ah cool |
2020-11-19 12:30:20 +0100 | <nshepperd> | i presume foldMap' is strictly evaluated in whatever direction makes most sense for the type? |
2020-11-19 12:30:52 +0100 | <kuribas> | nshepperd: is that even possible? |
2020-11-19 12:31:06 +0100 | <kuribas> | nshepperd: ah by type you mean the foldable? |
2020-11-19 12:31:21 +0100 | <nshepperd> | ie. foldl' for lists, foldr' for snoc lists |
2020-11-19 12:31:24 +0100 | <nshepperd> | yeah |
2020-11-19 12:33:40 +0100 | berberman_ | (~berberman@unaffiliated/berberman) |
2020-11-19 12:34:41 +0100 | berberman | (~berberman@unaffiliated/berberman) (Ping timeout: 272 seconds) |
2020-11-19 12:35:47 +0100 | chalkmonster | (~chalkmons@unaffiliated/chalkmonster) |
2020-11-19 12:36:31 +0100 | <dminuoso> | what is a snoc list? |
2020-11-19 12:37:04 +0100 | <pjb> | A list from the end? |
2020-11-19 12:37:24 +0100 | <dminuoso> | And that is different from a list... how? |
2020-11-19 12:37:54 +0100 | <boxscape> | I guess it's different in that foldl has been renamed to foldr and vice versa? |
2020-11-19 12:38:36 +0100 | <dminuoso> | boxscape: How's that? |
2020-11-19 12:38:46 +0100 | <dminuoso> | The difference between foldl and foldr is not the order of the lits |
2020-11-19 12:39:19 +0100 | <dminuoso> | It's how the function we replace the cons with associates |
2020-11-19 12:39:39 +0100 | <boxscape> | dminuoso I know, but for that you need to have some mental image of what left and right means in a list, right? |
2020-11-19 12:39:58 +0100 | <boxscape> | which isn't fundamentally part of the type |
2020-11-19 12:40:16 +0100 | <kuribas> | (a <> (b <> (c <> d))) should be the same as (((a <> b) <> c) <> d) |
2020-11-19 12:40:25 +0100 | <kuribas> | but one may be more efficient to calculate |
2020-11-19 12:40:34 +0100 | <boxscape> | so if you swap directions of that mental image, you rename foldr to foldl and foldl to foldr, and perhaps write the constructor as [a] : a, and I imagine that's what a snoc list would be |
2020-11-19 12:40:38 +0100 | <boxscape> | functionally the same as a list |
2020-11-19 12:40:55 +0100 | <dminuoso> | Ill await nshepperd's response. :) |
2020-11-19 12:40:59 +0100 | <dminuoso> | To clarify |
2020-11-19 12:40:59 +0100 | <boxscape> | that's fair |
2020-11-19 12:41:00 +0100 | <kuribas> | > foldMap' (<>) [a, b, c, d] |
2020-11-19 12:41:02 +0100 | <lambdabot> | <Expr -> Expr> |
2020-11-19 12:41:24 +0100 | <kuribas> | > foldMap' Sum [a, b, c, d] |
2020-11-19 12:41:26 +0100 | <lambdabot> | Sum {getSum = 0 + a + b + c + d} |
2020-11-19 12:41:30 +0100 | <kuribas> | > foldMap Sum [a, b, c, d] |
2020-11-19 12:41:32 +0100 | <lambdabot> | Sum {getSum = a + (b + (c + (d + 0)))} |
2020-11-19 12:41:51 +0100 | <dminuoso> | kuribas: The difference matters in two respects: Is the input data structure infinite, and do we need to be lazy on the output (do we build a chain of data constructors) |
2020-11-19 12:42:18 +0100 | <kuribas> | those aren't the same value |
2020-11-19 12:42:24 +0100 | <kuribas> | are they? |
2020-11-19 12:42:24 +0100 | chaosmasttter | (~chaosmast@p200300c4a70b2a01441f1455f36b3658.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
2020-11-19 12:42:59 +0100 | <kuribas> | ah they are since 0 is the empty element |
2020-11-19 12:43:16 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 240 seconds) |
2020-11-19 12:43:20 +0100 | <dminuoso> | kuribas: by monoid laws they are the same |
2020-11-19 12:43:41 +0100 | <dminuoso> | because precisely, a monoid is associative (so it doesnt matter how they associate) and mempty is the identity element (it doesnt matter where you slap it onto) |
2020-11-19 12:44:15 +0100 | ft | (~ft@shell.chaostreff-dortmund.de) |
2020-11-19 12:44:47 +0100 | <dminuoso> | Guess that's the sort of things that makes foldMap so cool. You can just replace it with foldMap' without worrying whether it changes its meaning |
2020-11-19 12:44:55 +0100 | <dminuoso> | with foldr/foldl |
2020-11-19 12:45:07 +0100 | <dminuoso> | you have to manually check for associativity and identity |
2020-11-19 12:46:55 +0100 | zyklotomic | (~ethan@unaffiliated/chocopuff) (Quit: WeeChat 2.9) |
2020-11-19 12:46:58 +0100 | Alleria_ | (~AllahuAkb@2604:2000:1484:26:ef:21ba:eb1b:b066) |
2020-11-19 12:47:05 +0100 | <boxscape> | hmm I wonder if a monoid with separate left and right identity elements could be useful |
2020-11-19 12:47:31 +0100 | <tomjaguarpaw> | If you had left and right identities el and er what would el <> er be? |
2020-11-19 12:48:26 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) () |
2020-11-19 12:48:53 +0100 | <boxscape> | that's a very good question |
2020-11-19 12:49:17 +0100 | <boxscape> | I guess it wouldn't be useful then |
2020-11-19 12:49:36 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9) |
2020-11-19 12:49:53 +0100 | Amras | (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
2020-11-19 12:50:32 +0100 | <kuribas> | dminuoso: it does change meaning wrt bottom |
2020-11-19 12:50:35 +0100 | jeet1 | (~jeet@183.83.41.219) |
2020-11-19 12:50:48 +0100 | <boxscape> | Although, I guess you could have a (not-quite-)monoid that *only* has left identity (or only right-identity) |
2020-11-19 12:51:22 +0100 | <kuribas> | > foldMap First [1, 2, undefined] |
2020-11-19 12:51:24 +0100 | <lambdabot> | error: |
2020-11-19 12:51:24 +0100 | <lambdabot> | • No instance for (Num (Maybe ())) arising from a use of ‘e_112’ |
2020-11-19 12:51:24 +0100 | <lambdabot> | • In the expression: e_112 |
2020-11-19 12:51:50 +0100 | <nshepperd> | yeah a snoc list is just a cons list that has had left and right renamed |
2020-11-19 12:52:41 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection) |
2020-11-19 12:53:02 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
2020-11-19 12:53:04 +0100 | <kuribas> | > foldMap First [Just 1, Just 2, undefined] |
2020-11-19 12:53:06 +0100 | <lambdabot> | First {getFirst = Just 1} |
2020-11-19 12:53:12 +0100 | <kuribas> | > foldMap' First [Just 1, Just 2, undefined] |
2020-11-19 12:53:14 +0100 | <lambdabot> | First {getFirst = Just 1} |
2020-11-19 12:53:47 +0100 | noctux | (~noctux@unaffiliated/noctux) (Read error: Connection reset by peer) |
2020-11-19 12:53:48 +0100 | <nshepperd> | you won't often find them in the wild |
2020-11-19 12:54:25 +0100 | noctux | (~noctux@unaffiliated/noctux) |
2020-11-19 12:54:36 +0100 | <kuribas> | > foldMap All [True, False, undefined] |
2020-11-19 12:54:37 +0100 | <lambdabot> | All {getAll = False} |
2020-11-19 12:54:41 +0100 | <kuribas> | > foldMap' All [True, False, undefined] |
2020-11-19 12:54:42 +0100 | <lambdabot> | All {getAll = False} |
2020-11-19 12:54:49 +0100 | <kuribas> | hmmm |
2020-11-19 12:55:10 +0100 | m0rphism | (~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) |
2020-11-19 12:55:36 +0100 | <dminuoso> | nshepperd: That sounds.. like a list. |
2020-11-19 12:56:04 +0100 | <nshepperd> | well yeah |
2020-11-19 12:56:38 +0100 | <nshepperd> | you can just do things with lists, and remember to reverse things in your head when reading code |
2020-11-19 12:57:27 +0100 | agrajag` | (~agrajag`@84.39.117.57) (Remote host closed the connection) |
2020-11-19 12:57:31 +0100 | <nshepperd> | but sometimes it's easier to have a different type so that the syntax corresponds to the intended ordering |
2020-11-19 12:57:56 +0100 | <dminuoso> | So roughly a `data Tsil a = Snoc a (Tsil a) | Lin` differs from [] by conceptually reversing before folding/traversing? |
2020-11-19 12:58:15 +0100 | <dminuoso> | (or in case of traverse, revere, traverse, and then reverse again) |
2020-11-19 12:58:15 +0100 | <kuribas> | they are the same even with bottom then? |
2020-11-19 12:59:14 +0100 | <boxscape> | the list matches the intended left right order better with Snoc (Tsil a) a: Lin `SNoc` 3 `Snoc` 2 `Snoc` 1 |
2020-11-19 12:59:17 +0100 | <nshepperd> | generally you write SnocList a = Nil | Snoc (SnocList a) a |
2020-11-19 12:59:29 +0100 | chaosmasttter | (~chaosmast@p200300c4a70b2a01441f1455f36b3658.dip0.t-ipconnect.de) |
2020-11-19 12:59:48 +0100 | <dminuoso> | Why not just use Dual? |
2020-11-19 13:00:02 +0100 | jeet1 | (~jeet@183.83.41.219) (Quit: WeeChat 2.9) |
2020-11-19 13:00:11 +0100 | <nshepperd> | performance |
2020-11-19 13:00:23 +0100 | <dminuoso> | Mmm, fair |
2020-11-19 13:00:34 +0100 | <nshepperd> | also, pattern matching |
2020-11-19 13:00:44 +0100 | Lycurgus | (~niemand@cpe-45-46-142-188.buffalo.res.rr.com) (Quit: Exeunt) |
2020-11-19 13:00:45 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2020-11-19 13:00:46 +0100 | pfurla | (~pfurla@190.15.195.173.client.static.strong-in52.as13926.net) (Ping timeout: 272 seconds) |
2020-11-19 13:00:56 +0100 | <dminuoso> | boxscape: Ill take a look at your gist later tonight, think I need to sit down and employ the good ol' fashioned Feynman algorithm |
2020-11-19 13:00:57 +0100 | __monty__ | (~toonn@unaffiliated/toonn) |
2020-11-19 13:01:18 +0100 | <dminuoso> | nshepperd: well, the pattern matching is a mood argument, since it's no different from (:) |
2020-11-19 13:01:37 +0100 | pfurla | (~pfurla@ool-182ed2e2.dyn.optonline.net) |
2020-11-19 13:01:44 +0100 | <nshepperd> | nooo |
2020-11-19 13:01:58 +0100 | <dminuoso> | Whether you write `1:2:3:[]` or `[]:%3:%2:%1` seems no different at all |
2020-11-19 13:02:07 +0100 | <nshepperd> | i mean, you can't use Dual when you're doing type level lists |
2020-11-19 13:02:07 +0100 | AWizzArd | (~code@unaffiliated/awizzard) (Read error: Connection reset by peer) |
2020-11-19 13:02:10 +0100 | <dminuoso> | ah |
2020-11-19 13:02:41 +0100 | AWizzArd | (~code@gehrels.uberspace.de) |
2020-11-19 13:03:42 +0100 | <boxscape> | dminuoso In a way I think these proofs are even harder to understand in Haskell than in some other languages, because the way constraint resolution makes it so it's not obvious how things are actually plugged together (though at least these are small proofs). But replacing the rhss with typed holes should help. |
2020-11-19 13:03:44 +0100 | xff0x | (~fox@2001:1a81:534b:a000:20f1:4040:a0e2:f16) (Ping timeout: 240 seconds) |
2020-11-19 13:03:58 +0100 | <boxscape> | s/the way// |
2020-11-19 13:04:32 +0100 | <kuribas> | I find myself going back from typed holes to tuples |
2020-11-19 13:04:45 +0100 | xff0x | (~fox@2001:1a81:534b:a000:65df:cebc:ef3d:70f7) |
2020-11-19 13:04:48 +0100 | <kuribas> | the error message is much better |
2020-11-19 13:05:06 +0100 | <__monty__> | Do you mean unit? |
2020-11-19 13:05:13 +0100 | <kuribas> | __monty__: yes |
2020-11-19 13:05:36 +0100 | <kuribas> | my-fun = () $ partial-implementation |
2020-11-19 13:06:11 +0100 | <__monty__> | That does change how associativity is parsed, no? |
2020-11-19 13:06:42 +0100 | <boxscape> | oh huh |
2020-11-19 13:06:45 +0100 | <dminuoso> | boxscape: Btw, I think there's a mistake in your proof |
2020-11-19 13:06:48 +0100 | <boxscape> | the error message is better, you're right |
2020-11-19 13:06:50 +0100 | <boxscape> | dminuoso oh? |
2020-11-19 13:06:53 +0100 | <dminuoso> | boxscape: plus_Z :: SNat n -> Plus n Z :~: n |
2020-11-19 13:06:58 +0100 | <dminuoso> | boxscape: Think you mixed up the order to Plus there |
2020-11-19 13:07:14 +0100 | <dminuoso> | The identity is only on one side in the tyfam |
2020-11-19 13:07:26 +0100 | <dminuoso> | Or am I confusing things? |
2020-11-19 13:07:46 +0100 | <boxscape> | dminuoso the identity of Plus Z n = n is trivial, but I have to write this proof to convince ghc that the other direction works, too |
2020-11-19 13:08:33 +0100 | <dminuoso> | boxscape: Ohh, so `plus_Z SZ = Refl` gives us `Plus Z Z ~ Z` for the base case |
2020-11-19 13:08:40 +0100 | <boxscape> | right |
2020-11-19 13:08:51 +0100 | <dminuoso> | (Which evalutaes to Z ~ Z, dischargable because every type is automatically equal to itself) |
2020-11-19 13:08:58 +0100 | <dminuoso> | So we dont need to provide proof ofZ ~ Z |
2020-11-19 13:09:29 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone) |
2020-11-19 13:09:35 +0100 | <boxscape> | I would hope that if there were a mistake ghc would have caught it, otherwise there'd be a bug in ghc (or in my copy-paste abilites) |
2020-11-19 13:10:15 +0100 | <boxscape> | uh, assuming it's not the sort of mistake that makes a proof non-total |
2020-11-19 13:10:34 +0100 | <dminuoso> | plus_Z (SS n) | Refl <- plus_Z n = Refl |
2020-11-19 13:10:44 +0100 | <dminuoso> | How does this inductive step work exaclty from the constraint solvers point of view? |
2020-11-19 13:13:17 +0100 | <boxscape> | so, if you write plus_Z (SS n), what you have to solve is 'S (Plus n 'Z) :~: 'S n. plus_Z n has type (Plus n Z) :~: n, so by matching on that, we can unify Plus n Z with n, and we have to solve S n :~: S n |
2020-11-19 13:13:31 +0100 | <boxscape> | and Refl is a value with that type, so we can just write Refl |
2020-11-19 13:13:39 +0100 | <boxscape> | dminuoso |
2020-11-19 13:14:14 +0100 | <dminuoso> | "what you have to solve is 'S (Plus n 'Z) :~: 'S n" |
2020-11-19 13:14:21 +0100 | oerjan | (~oerjan@195.206.169.184) |
2020-11-19 13:14:26 +0100 | <dminuoso> | do you mean `S (Plus n 'Z) ~ 'S`? |
2020-11-19 13:15:06 +0100 | <boxscape> | hmm I don't think I do. S by itself isn't a natural number, but S (Plus n Z) is a natural number, so that appears to be a kind error. |
2020-11-19 13:15:15 +0100 | <dminuoso> | err |
2020-11-19 13:15:37 +0100 | Tario | (~Tario@201.192.165.173) |
2020-11-19 13:16:17 +0100 | <boxscape> | ah but |
2020-11-19 13:16:23 +0100 | <boxscape> | I should have used a different letter |
2020-11-19 13:16:32 +0100 | <dminuoso> | boxscape: Sorry I think I cut off a quote there. We want to produce a value of type: 'S (Plus n 'Z) :~: 'S n |
2020-11-19 13:16:32 +0100 | <boxscape> | like S (Plus m 'Z) :~: 'S m |
2020-11-19 13:16:42 +0100 | <dminuoso> | So we use the data constructor Refl. That requires us to solve for a constraint |
2020-11-19 13:16:50 +0100 | <dminuoso> | 'S (Plus n 'Z) ~ 'S n |
2020-11-19 13:17:26 +0100 | <boxscape> | Ah, fair. What I meant by "solve" was "we have to write a value of that type on the rhs", but the terminology was a bit off, I admit |
2020-11-19 13:17:59 +0100 | <dminuoso> | The pattern matching `Refl <- plus_Z n` uncovers the dictionary for the proof of the inductive hypothesis |
2020-11-19 13:18:07 +0100 | <boxscape> | right |
2020-11-19 13:18:30 +0100 | <dminuoso> | And from that we can show that (Plus n 'Z) ~ n |
2020-11-19 13:18:36 +0100 | <dminuoso> | (or GHC can) |
2020-11-19 13:18:42 +0100 | <dminuoso> | Thus leading us to conclude that |
2020-11-19 13:18:50 +0100 | <dminuoso> | 'S n ~ 'S n |
2020-11-19 13:18:52 +0100 | alp | (~alp@2a01:e0a:58b:4920:7900:a63:b56e:5a9) (Ping timeout: 260 seconds) |
2020-11-19 13:19:08 +0100 | <boxscape> | yeah, that sounds right |
2020-11-19 13:19:08 +0100 | <dminuoso> | which is what Refl demands |
2020-11-19 13:19:18 +0100 | <dminuoso> | mmm okay |
2020-11-19 13:19:43 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 13:20:02 +0100 | <dminuoso> | So the value here of :~: is that we can have it in *positive* position, such that things can *produce* proofs of this |
2020-11-19 13:20:12 +0100 | <dminuoso> | Whereas with => its, in effect, in negative position |
2020-11-19 13:20:15 +0100 | alp | (~alp@2a01:e0a:58b:4920:7562:27bf:89c5:b0d) |
2020-11-19 13:20:18 +0100 | enoq | (~textual@194-208-146-143.lampert.tv) |
2020-11-19 13:20:24 +0100 | <boxscape> | right |
2020-11-19 13:22:27 +0100 | Entertainment | (~entertain@104.246.132.210) |
2020-11-19 13:22:51 +0100 | <dminuoso> | actually I missed one step! |
2020-11-19 13:22:57 +0100 | <dminuoso> | 13:18:42 dminuoso | Thus leading us to conclude that |
2020-11-19 13:23:15 +0100 | <dminuoso> | This requires injectivity of 'S |
2020-11-19 13:23:36 +0100 | <dminuoso> | Or.. mmm |
2020-11-19 13:23:48 +0100 | <boxscape> | I think any function would do |
2020-11-19 13:24:03 +0100 | <boxscape> | going the other way around would though |
2020-11-19 13:24:18 +0100 | noctux | (~noctux@unaffiliated/noctux) (Remote host closed the connection) |
2020-11-19 13:24:18 +0100 | <dminuoso> | I should really reimplement the type system myself to get an idea |
2020-11-19 13:24:23 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
2020-11-19 13:24:37 +0100 | xacktm | (xacktm@gateway/shell/panicbnc/x-wtuwnbsvfqpgvaqk) (Quit: PanicBNC - http://PanicBNC.net) |
2020-11-19 13:24:47 +0100 | <dminuoso> | It's a bit mysterous what we can do with this though |
2020-11-19 13:25:17 +0100 | <dminuoso> | Surely the value is not to prove commutativity of peano naturals to ourselves, using GHC. |
2020-11-19 13:25:29 +0100 | noctux | (~noctux@unaffiliated/noctux) |
2020-11-19 13:25:43 +0100 | <boxscape> | dminuoso the value is in using this proof for value level functions, let me see if I can think of a good example |
2020-11-19 13:26:01 +0100 | Kaiepi | (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Ping timeout: 264 seconds) |
2020-11-19 13:26:01 +0100 | Kaeipi | (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) |
2020-11-19 13:26:13 +0100 | invaser | (~Thunderbi@31.148.23.125) |
2020-11-19 13:28:16 +0100 | <boxscape> | dminuoso hmm for example you could use it to prove things about other value level functions, like if you wanted to prove that (<>) :: Vec n a -> Vec m a -> Vec (Plus n m) a is associative, you would need associativity of Plus first |
2020-11-19 13:28:52 +0100 | ArsenArsen | (~Arsen@fsf/member/ArsenArsen) (Quit: bye) |
2020-11-19 13:29:13 +0100 | ArsenArsen | (~Arsen@fsf/member/ArsenArsen) |
2020-11-19 13:29:13 +0100 | <boxscape> | dminuoso but it can also be useful for writing some regular type-level functions with complex types without explicitly trying to prove something about them, can't quite think of an example of that right now though |
2020-11-19 13:30:03 +0100 | <dminuoso> | boxscape: Well but whats the value of *proving* this to GHC? |
2020-11-19 13:30:16 +0100 | <dminuoso> | I mean providing a proof seems only useful if there's something demanding that proof |
2020-11-19 13:30:47 +0100 | <__monty__> | Certified libraries? |
2020-11-19 13:30:54 +0100 | <boxscape> | Right, that's what I meant with the example I can't think of right now :) Though I would say a proof is also useful to convice yourself that the function you wrote is correct |
2020-11-19 13:30:59 +0100 | Entertainment | (~entertain@104.246.132.210) () |
2020-11-19 13:32:25 +0100 | Entertainment | (~entertain@104.246.132.210) |
2020-11-19 13:32:40 +0100 | <boxscape> | dminuoso also when I wrote "regular type-level functions" I mean "regular value-level functions" |
2020-11-19 13:37:07 +0100 | p0a | (~user@unaffiliated/p0a) |
2020-11-19 13:37:26 +0100 | <p0a> | Hello why is this happening to `stack ghci' in every new stack project of mine? https://pastebin.com/SHVA1zET |
2020-11-19 13:39:07 +0100 | <__monty__> | p0a: Looks like the same filename in a lib and an executable? Not sure why it's a problem though. |
2020-11-19 13:39:26 +0100 | <__monty__> | Is the fully qualified name identical? |
2020-11-19 13:39:47 +0100 | <p0a> | I don't know how to check whta you're asking me __monty__ |
2020-11-19 13:39:58 +0100 | <merijn> | Who was asking about languages for low level/embedded stuff yesterday? I realised I forgot to mention a totally obvious candidate.. |
2020-11-19 13:40:21 +0100 | <p0a> | __monty__: what lib has the same filename as an executable? |
2020-11-19 13:40:40 +0100 | <p0a> | merijn: texasny-something I believe |
2020-11-19 13:40:54 +0100 | <__monty__> | p0a: Paths_read_binfiles |
2020-11-19 13:41:28 +0100 | <__monty__> | I think the problem is the module identifiers are identical and GHC doesn't know which one to pick. |
2020-11-19 13:41:28 +0100 | <p0a> | __monty__: I don't know if it's a problem but `stack ghci' has some weird modules loaded |
2020-11-19 13:41:36 +0100 | <p0a> | who decided on these names __monty__ ? |
2020-11-19 13:41:47 +0100 | <__monty__> | Don't know. |
2020-11-19 13:42:08 +0100 | <__monty__> | @hackage read-binfiles |
2020-11-19 13:42:08 +0100 | <lambdabot> | https://hackage.haskell.org/package/read-binfiles |
2020-11-19 13:42:10 +0100 | <merijn> | Paths_ modules are autogenerated by Cabal to access datafiles |
2020-11-19 13:42:18 +0100 | <p0a> | It happens to all my new projects __monty__ |
2020-11-19 13:43:13 +0100 | <merijn> | Make an issue on the stack github? Presumably they'll know how to debug what's going on |
2020-11-19 13:43:29 +0100 | <p0a> | ok wanted to make sure it's not something obvious |
2020-11-19 13:44:09 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
2020-11-19 13:45:49 +0100 | <merijn> | It might be, but I don't use stack, so who knows :p |
2020-11-19 13:47:59 +0100 | <boxscape> | dminuoso I ran into an example yesterday where I did need a proof, though not an equality proof, and it was on the type level, but I think should work equally well on the value level: Let's say you have an ordered list, where the cons constructor carries a proof that a cons'd element is less than the next element in the list (thus making sure it |
2020-11-19 13:47:59 +0100 | <boxscape> | actually is ordered). If you want to delete an element in that list, you'll need a proof that less-than is transitive, as e.g. if you have [a,b,c] and want to delete b, you'll need to somehow construct a proof that a<c to get a new ordered list |
2020-11-19 13:48:56 +0100 | <dminuoso> | Makes sense |
2020-11-19 13:49:18 +0100 | <dminuoso> | So providing this proof is just to be able to re-construct this provably ordered list after the operation |
2020-11-19 13:49:23 +0100 | gxt | (~gxt@gateway/tor-sasl/gxt) (Ping timeout: 240 seconds) |
2020-11-19 13:49:24 +0100 | <boxscape> | right |
2020-11-19 13:49:39 +0100 | <dminuoso> | And the value is, you have some provable assurance the ordering is preserved by all operations |
2020-11-19 13:49:46 +0100 | <boxscape> | yes |
2020-11-19 13:50:24 +0100 | <dminuoso> | (in the absence of shortcircuiting the proof with bottom, of course) |
2020-11-19 13:50:34 +0100 | p0a | (~user@unaffiliated/p0a) (Quit: bye) |
2020-11-19 13:50:45 +0100 | <boxscape> | right, though at least you can be sure that if your program *does* produce a result, it's a correct result |
2020-11-19 13:51:07 +0100 | <dminuoso> | well that depends though, if the proof of transitivity is just bottom.. ? |
2020-11-19 13:51:13 +0100 | <dminuoso> | It has to be runnable code |
2020-11-19 13:51:21 +0100 | <Boomerang> | We use Refl very often at work when writing circuits in Clash. Clash uses type level Nat everywhere, it's often useful to choose which sub-circuit to use depending on the type |
2020-11-19 13:51:59 +0100 | <boxscape> | right, it's still run to construct the actual proof object. Richard Eisenberg actually suggested in his thesis to replace equality proofs with unsafeCoerce Refl via a rewrite rule if you're sure they're total, for performance's sake |
2020-11-19 13:52:10 +0100 | gxt | (~gxt@gateway/tor-sasl/gxt) |
2020-11-19 13:53:24 +0100 | <dminuoso> | Ah right, because Refl still has a runtime representation |
2020-11-19 13:53:31 +0100 | <boxscape> | yeah |
2020-11-19 13:59:23 +0100 | <boxscape> | (Though you can't do this unsafeCoerce stuff with all proofs, because for less-than for example, proofs will typically have different run-time reprenentations depending on how large the difference between the two values is, at least for comparing data Nat = S Nat | Z) |
2020-11-19 14:00:15 +0100 | shangxiao | (~davids@101.181.159.140) (Quit: WeeChat 2.9) |
2020-11-19 14:01:59 +0100 | <boxscape> | (that is, data (<) :: Nat -> Nat -> Type where ZltS :: Z < (S n); SltS :: n < m -> (S n) < (S m), so for example SltS (SltS (ZltS) :: 2 < 5) |
2020-11-19 14:02:19 +0100 | <boxscape> | (I guess what matters there is actually the size of the first value, not the difference between them) |
2020-11-19 14:02:30 +0100 | troydm | (~troydm@unaffiliated/troydm) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset) |
2020-11-19 14:02:36 +0100 | elliott__ | (~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 240 seconds) |
2020-11-19 14:03:08 +0100 | elliott__ | (~elliott@pool-108-51-141-12.washdc.fios.verizon.net) |
2020-11-19 14:03:11 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) |
2020-11-19 14:05:15 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2020-11-19 14:07:41 +0100 | xacktm | (xacktm@gateway/shell/panicbnc/x-fxbrslxxjjorsbbu) |
2020-11-19 14:07:47 +0100 | kritzefitz | (~kritzefit@fw-front.credativ.com) (Read error: Connection timed out) |
2020-11-19 14:08:15 +0100 | n0042 | (d055ed89@208.85.237.137) |
2020-11-19 14:10:14 +0100 | urodna | (~urodna@unaffiliated/urodna) |
2020-11-19 14:12:47 +0100 | texasmynsted | (~texasmyns@212.102.45.112) |
2020-11-19 14:13:16 +0100 | valdyn | (~valdyn@host-88-217-143-53.customer.m-online.net) (Ping timeout: 260 seconds) |
2020-11-19 14:14:29 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) |
2020-11-19 14:15:55 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 14:16:00 +0100 | jwynn6 | (~jwynn6@050-088-122-078.res.spectrum.com) (Read error: Connection reset by peer) |
2020-11-19 14:16:19 +0100 | jwynn6 | (~jwynn6@050-088-122-078.res.spectrum.com) |
2020-11-19 14:18:14 +0100 | tromp_ | (~tromp@dhcp-077-249-230-040.chello.nl) |
2020-11-19 14:18:15 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer) |
2020-11-19 14:21:47 +0100 | bitmapper | (uid464869@gateway/web/irccloud.com/x-xpsufctbszodgohs) (Quit: Connection closed for inactivity) |
2020-11-19 14:22:26 +0100 | troydm | (~troydm@unaffiliated/troydm) |
2020-11-19 14:22:36 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 265 seconds) |
2020-11-19 14:24:45 +0100 | chalkmonster | (~chalkmons@unaffiliated/chalkmonster) (Ping timeout: 240 seconds) |
2020-11-19 14:24:57 +0100 | kritzefitz | (~kritzefit@fw-front.credativ.com) |
2020-11-19 14:31:30 +0100 | aarvar | (~foewfoiew@50.35.43.33) |
2020-11-19 14:31:36 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 14:32:47 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 14:32:57 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
2020-11-19 14:33:46 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:6c29:bc9c:b97a:2b45) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 14:35:42 +0100 | n0042 | (d055ed89@208.85.237.137) (Remote host closed the connection) |
2020-11-19 14:38:46 +0100 | gnumonic_ | (~gnumonic@c-73-170-91-210.hsd1.ca.comcast.net) (Read error: Connection reset by peer) |
2020-11-19 14:39:37 +0100 | n0042 | (d055ed89@208.85.237.137) |
2020-11-19 14:39:49 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) |
2020-11-19 14:40:00 +0100 | hackage | subG 0.4.1.0 - Some extension to the Foldable and Monoid classes. https://hackage.haskell.org/package/subG-0.4.1.0 (OleksandrZhabenko) |
2020-11-19 14:40:22 +0100 | <n0042> | Are there any rules or guidelines for messing with the Lambdabot? That looks like fun but I don't want to break it or anything |
2020-11-19 14:40:59 +0100 | <Uniaika> | don't try to form an emotional connection with it, you'll be disappointed |
2020-11-19 14:41:21 +0100 | <n0042> | :O |
2020-11-19 14:41:31 +0100 | <boxscape> | n0042 you may know this but if you want to mess with it without spamming #haskell, you can do so in DMs. If you do find a way to break it, seems like a great opportunity for a bug report |
2020-11-19 14:41:34 +0100 | <boxscape> | @botsnack |
2020-11-19 14:41:34 +0100 | <lambdabot> | :) |
2020-11-19 14:41:36 +0100 | <geekosaur> | .oO { if you can break it, we did it wrong } |
2020-11-19 14:41:36 +0100 | <tdammers> | I thought lambdabot was a "she"? |
2020-11-19 14:42:08 +0100 | <Uniaika> | I don't have a habit of anthropomorphising bots |
2020-11-19 14:42:10 +0100 | <n0042> | Thank you boxscape. That is a good tip |
2020-11-19 14:42:25 +0100 | <tdammers> | ships are "she" too |
2020-11-19 14:43:13 +0100 | <Uniaika> | tdammers: that's a maritime culture convention :P |
2020-11-19 14:43:33 +0100 | <boxscape> | countries do, too |
2020-11-19 14:43:42 +0100 | <boxscape> | s/do/are |
2020-11-19 14:43:53 +0100 | <Uniaika> | is that so? |
2020-11-19 14:44:18 +0100 | <boxscape> | yes, I mostly hear it in geopolitical commentary |
2020-11-19 14:44:26 +0100 | <boxscape> | or cgpgrey's videos |
2020-11-19 14:44:39 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:2da3:37d0:5114:5834) |
2020-11-19 14:46:07 +0100 | <boxscape> | ..or, actually, I think in geopolitical commentary I usually see the capital being used |
2020-11-19 14:46:24 +0100 | cads | (~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 260 seconds) |
2020-11-19 14:46:40 +0100 | <n0042> | That's definitely a thing. |
2020-11-19 14:46:41 +0100 | <tdammers> | Uniaika: if sailors can have weird traditions, why can't we |
2020-11-19 14:47:24 +0100 | <boxscape> | because if you anthropomorphize lambdabot, you'll form emotional connections with it, and as we learned that means you'll be disappointed |
2020-11-19 14:47:32 +0100 | wei2912 | (~wei2912@unaffiliated/wei2912) (Remote host closed the connection) |
2020-11-19 14:47:57 +0100 | <ski> | lambdabot was anthropomorphized as a she, rather long ago, yes |
2020-11-19 14:48:06 +0100 | <dminuoso> | authoritatively? |
2020-11-19 14:48:19 +0100 | dminuoso | didn't get the memo |
2020-11-19 14:48:27 +0100 | <n0042> | What is the command to make Lambdabot evaluate an expression or list comprehension? |
2020-11-19 14:48:47 +0100 | <boxscape> | > [ x | x <- [1..5] ] |
2020-11-19 14:48:49 +0100 | <lambdabot> | [1,2,3,4,5] |
2020-11-19 14:48:56 +0100 | <ski> | the South Park style avatar for lambdabot, chosen by voting in #haskell-blah, was definitely female |
2020-11-19 14:48:59 +0100 | <dminuoso> | > fix error |
2020-11-19 14:49:02 +0100 | <lambdabot> | "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Ex... |
2020-11-19 14:49:03 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) |
2020-11-19 14:49:09 +0100 | <boxscape> | (a list comprehension is an expression fwiw) |
2020-11-19 14:49:12 +0100 | <Uniaika> | ski: is that channel still alive? |
2020-11-19 14:49:17 +0100 | <boxscape> | ish |
2020-11-19 14:49:23 +0100 | __monty_1 | (~toonn@unaffiliated/toonn) |
2020-11-19 14:49:24 +0100 | <boxscape> | #haskell-offtopic is more popular |
2020-11-19 14:49:34 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:2da3:37d0:5114:5834) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 14:49:36 +0100 | <dminuoso> | ski: Maybe we could have the Haskell Foundation make an announcement then, as their first official act. |
2020-11-19 14:49:43 +0100 | <dminuoso> | It seems relevant. |
2020-11-19 14:49:58 +0100 | <Uniaika> | hahaha |
2020-11-19 14:50:05 +0100 | __monty__ | (~toonn@unaffiliated/toonn) (Ping timeout: 240 seconds) |
2020-11-19 14:50:05 +0100 | <n0042> | Excellent, thank you. I tried to do it without a space after the prompt, which is why it wasn't working. |
2020-11-19 14:50:11 +0100 | <ski> | i'm not sure if the page where there were some South Park style avatars for some people on #haskell / #haskell-blah, is still available somewhere. the original link doesn't work anymore, at least |
2020-11-19 14:51:08 +0100 | ski | idly recalls the `@vixen' command |
2020-11-19 14:52:21 +0100 | <hpc> | i liked it better when @vixen was removed and it autocorrected to @nixon :D |
2020-11-19 14:52:33 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) |
2020-11-19 14:52:40 +0100 | <ski> | that still happens |
2020-11-19 14:53:08 +0100 | <boxscape> | https://wiki.haskell.org/Lambdabot still has the lambdabot avatar, at least |
2020-11-19 14:53:22 +0100 | <ski> | yes, that was the one |
2020-11-19 14:54:53 +0100 | <ski> | (i think the idea was to portray someone being a bit overworked, eyes glazing over, by lots of queries, many of them not that interesting) |
2020-11-19 14:56:12 +0100 | <ski> | but there were also some similar style avatars selected, by some other channel regulars, including shapr, me, Philippa, &c. |
2020-11-19 14:57:28 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) (Remote host closed the connection) |
2020-11-19 14:58:07 +0100 | <siraben> | What's the shortest way to write r x y z = y z x, in pointfree? |
2020-11-19 14:58:22 +0100 | <siraben> | @pl \x y z -> y z x |
2020-11-19 14:58:22 +0100 | <lambdabot> | flip flip |
2020-11-19 14:58:37 +0100 | <ski> | @keal |
2020-11-19 14:58:37 +0100 | <lambdabot> | i try make program called Glyph to do it but my script lang called T too slow. i invent T |
2020-11-19 14:58:47 +0100 | <ski> | @palomer |
2020-11-19 14:58:47 +0100 | <lambdabot> | Brump! |
2020-11-19 15:01:04 +0100 | <n0042> | That's a pretty great bot lol. Its creators should be proud |
2020-11-19 15:01:20 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) |
2020-11-19 15:02:31 +0100 | lep-delete | test |
2020-11-19 15:03:00 +0100 | test | Guest56787 |
2020-11-19 15:03:07 +0100 | Guest56787 | lep-delete |
2020-11-19 15:03:23 +0100 | <boxscape> | tbh I tend to use yahb more often these days, it's nice to have a proper ghci with alls bells and whistles. Then again, you can't do this with yahb: |
2020-11-19 15:03:24 +0100 | <boxscape> | @pl \a b d c d e f -> f b d c a e |
2020-11-19 15:03:24 +0100 | <lambdabot> | ((const . ((flip .) .)) .) . flip (flip . ((flip . (flip .)) .) . flip . (flip .) . flip . flip id) |
2020-11-19 15:04:01 +0100 | <siraben> | boxscape: yahb? |
2020-11-19 15:04:15 +0100 | <boxscape> | % print "yahb" |
2020-11-19 15:04:15 +0100 | <yahb> | boxscape: "yahb" |
2020-11-19 15:04:31 +0100 | hackage | prolude 0.0.0.9 - ITProTV's custom prelude https://hackage.haskell.org/package/prolude-0.0.0.9 (saramuse) |
2020-11-19 15:04:43 +0100 | ski | remembers preflex |
2020-11-19 15:08:56 +0100 | invaser1 | (~Thunderbi@31.148.23.125) |
2020-11-19 15:10:03 +0100 | <kuribas> | I was just thinking how similar destructuring syntax for records in haskell is to clojure hashmaps. |
2020-11-19 15:10:15 +0100 | <kuribas> | with NamedFieldPuns it's almost the same. |
2020-11-19 15:10:36 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 240 seconds) |
2020-11-19 15:10:36 +0100 | invaser1 | invaser |
2020-11-19 15:11:16 +0100 | howdoi | (uid224@gateway/web/irccloud.com/x-zkpwgkjicmhndtdh) |
2020-11-19 15:11:24 +0100 | <kuribas> | And while haskell records are not extensible, you can still simulate it with overloadedFields and RecordWildCards. |
2020-11-19 15:12:00 +0100 | hackage | subG 0.4.2.0 - Some extension to the Foldable and Monoid classes. https://hackage.haskell.org/package/subG-0.4.2.0 (OleksandrZhabenko) |
2020-11-19 15:12:05 +0100 | <kuribas> | For example merging: merge PartialUser1{..} PartialUser2{..} = User{..} |
2020-11-19 15:12:58 +0100 | <kuribas> | the "drawback" is having to define partial types, although I think that's a feature, not a drawback. |
2020-11-19 15:13:16 +0100 | ft | (~ft@shell.chaostreff-dortmund.de) (Ping timeout: 246 seconds) |
2020-11-19 15:13:50 +0100 | <kuribas> | haskell has a reputation for being terrible with records, my experience is quite positive. |
2020-11-19 15:14:35 +0100 | <ski> | it's too bad that Haskell records binds selector functions to the field names |
2020-11-19 15:14:46 +0100 | <kuribas> | yeah true |
2020-11-19 15:14:56 +0100 | hexfive | (~hexfive@50-47-142-195.evrt.wa.frontiernet.net) |
2020-11-19 15:14:59 +0100 | <ski> | the ML way is, imho, much better |
2020-11-19 15:15:14 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 15:16:36 +0100 | aveltras | (uid364989@gateway/web/irccloud.com/x-jtdricnolbjelrxi) |
2020-11-19 15:16:47 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 15:17:14 +0100 | <merijn> | ski: That's fixed soon! |
2020-11-19 15:17:26 +0100 | <kuribas> | and with overloadedLabels selector functions are even more useless |
2020-11-19 15:17:26 +0100 | <merijn> | ski: There was a GHC proposal for -XNoFieldSelectors |
2020-11-19 15:17:28 +0100 | <ski> | writing `#x pt' or `pt #x' or something along those lines would be much better than to write `x pt'. that way, you don't shadow the field extraction, with `NamedFieldPuns' |
2020-11-19 15:17:44 +0100 | <merijn> | ski: It's already implemented and slated to merge into 9.2, iirc? |
2020-11-19 15:18:06 +0100 | hseg | (~gesh@185.120.126.113) |
2020-11-19 15:18:06 +0100 | <ski> | yea, i've heard that mentioned. is there are proposal for a replacement field selector syntax, that you know ? |
2020-11-19 15:18:07 +0100 | Lycurgus | (~niemand@cpe-45-46-142-188.buffalo.res.rr.com) |
2020-11-19 15:18:31 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 246 seconds) |
2020-11-19 15:18:39 +0100 | <merijn> | Not directly, but if you use it the namespace is free to generate, for example, lenses with the field names |
2020-11-19 15:18:56 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 15:19:07 +0100 | ski | nods |
2020-11-19 15:20:19 +0100 | <xsperry> | ski, how does ML do it? |
2020-11-19 15:20:39 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 15:20:43 +0100 | <ski> | (also, users (especially newbies) wouldn't be confused by the cognitive dissonance by the field signature `x :: Int' vs. the field extraction function signature `x :: Point -> Int') |
2020-11-19 15:21:18 +0100 | <ski> | xsperry : if `x' is a field in a record, then `#x' is a field extraction function, taking the record and extracting the field. that's in SML |
2020-11-19 15:21:28 +0100 | <ski> | O'Caml does `pt .x', iirc |
2020-11-19 15:21:54 +0100 | <xsperry> | so fields are in separate namespace? |
2020-11-19 15:22:01 +0100 | <ski> | (but the main point is to not simply bind the field name to a field extraction function) |
2020-11-19 15:22:22 +0100 | <ski> | yes |
2020-11-19 15:22:26 +0100 | cads | (~cads@ip-64-72-99-232.lasvegas.net) |
2020-11-19 15:22:41 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2020-11-19 15:22:44 +0100 | renzhi | (~renzhi@2607:fa49:655f:e600::28da) |
2020-11-19 15:23:17 +0100 | AlterEgo- | (~ladew@124-198-158-163.dynamic.caiway.nl) |
2020-11-19 15:23:28 +0100 | <xsperry> | and what if multiple objects have field named x? |
2020-11-19 15:23:33 +0100 | <xsperry> | multiple types* |
2020-11-19 15:23:58 +0100 | <merijn> | xsperry: With NoFieldSelectors, yes |
2020-11-19 15:24:16 +0100 | <merijn> | xsperry: i.e. you can only use them in pattern matches/record creation |
2020-11-19 15:24:18 +0100 | <ski> | in SML, you must pin down the record type |
2020-11-19 15:24:21 +0100 | <xsperry> | I mean in ML/Ocaml. just wondering if it basically works like structs/classes in mainstream languages |
2020-11-19 15:24:26 +0100 | ft | (~ft@shell.chaostreff-dortmund.de) |
2020-11-19 15:24:53 +0100 | <ski> | in OCaml, iirc, field extraction is polymorphic, using row types |
2020-11-19 15:25:02 +0100 | noteness | (noteness@unaffiliated/nessessary129) |
2020-11-19 15:25:26 +0100 | <merijn> | ski: uh |
2020-11-19 15:25:33 +0100 | <merijn> | ski: OCaml doesn't have rowtypes, does it? |
2020-11-19 15:25:47 +0100 | <ski> | (ML is a family of languages, including SML,O'Caml,F#,Alice ML,..) |
2020-11-19 15:25:50 +0100 | <ski> | it does |
2020-11-19 15:25:52 +0100 | <merijn> | Unless they added those super recently |
2020-11-19 15:26:32 +0100 | forell | (~forell@unaffiliated/forell) (Ping timeout: 260 seconds) |
2020-11-19 15:28:00 +0100 | sagax | (~sagax_nb@213.138.71.146) |
2020-11-19 15:28:12 +0100 | forell | (~forell@unaffiliated/forell) |
2020-11-19 15:28:37 +0100 | Amras | (~Amras@unaffiliated/amras0000) |
2020-11-19 15:29:38 +0100 | GilReiter | (4d7e19c5@77.126.25.197) |
2020-11-19 15:29:56 +0100 | n0042 | (d055ed89@208.85.237.137) (Remote host closed the connection) |
2020-11-19 15:29:57 +0100 | <ski> | object types and polymorphic variants have long been in O'Caml |
2020-11-19 15:30:00 +0100 | forell | (~forell@unaffiliated/forell) (Client Quit) |
2020-11-19 15:30:37 +0100 | <ski> | "If 'ident denotes an explicit polymorphic variable, and typexpr denotes either an object or polymorphic variant type, the row variable of typexpr is captured by 'ident, and quantified upon." |
2020-11-19 15:31:19 +0100 | elliott__ | (~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 256 seconds) |
2020-11-19 15:31:21 +0100 | forell | (~forell@unaffiliated/forell) |
2020-11-19 15:34:10 +0100 | oish | (~charlie@217.169.25.228) |
2020-11-19 15:34:14 +0100 | <ski> | "The type <{method-type ;} ..> is the type of an object whose method names and types are described by method-type₁ …, method-typeₙ, possibly some other methods represented by the ellipsis. This ellipsis actually is a special kind of type variable (called row variable in the literature) that stands for any number of extra method types." |
2020-11-19 15:34:44 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2020-11-19 15:35:12 +0100 | <ski> | (that's from <https://caml.inria.fr/pub/docs/manual-ocaml/types.html>) |
2020-11-19 15:40:10 +0100 | ystael | (~ystael@209.6.50.55) |
2020-11-19 15:40:44 +0100 | <ski> | xsperry : ah, ok. so it's just method selection for object types that's polymororphic, not field selection for record types. see < |
2020-11-19 15:40:50 +0100 | ystael | (~ystael@209.6.50.55) (Read error: Connection reset by peer) |
2020-11-19 15:41:55 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) (Remote host closed the connection) |
2020-11-19 15:42:25 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 15:43:05 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 15:43:16 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) |
2020-11-19 15:44:55 +0100 | <ski> | see <https://caml.inria.fr/pub/docs/manual-ocaml/coreexamples.html#ss:record-and-variant-disambiguation> and <https://caml.inria.fr/pub/docs/manual-ocaml/objectexamples.html> |
2020-11-19 15:45:01 +0100 | byorgey | (~byorgey@155.138.238.211) (Quit: leaving) |
2020-11-19 15:45:13 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 15:45:28 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection) |
2020-11-19 15:45:30 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) (Remote host closed the connection) |
2020-11-19 15:46:01 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) |
2020-11-19 15:46:23 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 15:46:47 +0100 | Lycurgus | (~niemand@cpe-45-46-142-188.buffalo.res.rr.com) (Quit: Exeunt) |
2020-11-19 15:47:26 +0100 | ystael | (~ystael@209.6.50.55) |
2020-11-19 15:50:31 +0100 | hseg | (~gesh@185.120.126.113) (Quit: WeeChat 2.9) |
2020-11-19 15:50:56 +0100 | cads | (~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 240 seconds) |
2020-11-19 15:52:19 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz) |
2020-11-19 15:53:12 +0100 | knupfer | (~Thunderbi@dynamic-046-114-144-166.46.114.pool.telefonica.de) |
2020-11-19 15:55:30 +0100 | knupfer | (~Thunderbi@dynamic-046-114-144-166.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2020-11-19 15:56:36 +0100 | oish | (~charlie@217.169.25.228) (Ping timeout: 240 seconds) |
2020-11-19 15:57:52 +0100 | Sgeo | (~Sgeo@ool-18b982ad.dyn.optonline.net) |
2020-11-19 16:00:13 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer) |
2020-11-19 16:00:13 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 16:00:31 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 16:00:48 +0100 | DataComputist | (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...) |
2020-11-19 16:01:34 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) |
2020-11-19 16:02:39 +0100 | GilReiter | (4d7e19c5@77.126.25.197) (Remote host closed the connection) |
2020-11-19 16:07:38 +0100 | nbloomf | (~nbloomf@76.217.43.73) |
2020-11-19 16:08:35 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 16:08:50 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) |
2020-11-19 16:09:46 +0100 | coco | (~coco@212-51-146-87.fiber7.init7.net) (Quit: WeeChat 2.9) |
2020-11-19 16:12:02 +0100 | xff0x | (~fox@2001:1a81:534b:a000:65df:cebc:ef3d:70f7) (Ping timeout: 264 seconds) |
2020-11-19 16:12:19 +0100 | nbloomf | (~nbloomf@76.217.43.73) (Ping timeout: 265 seconds) |
2020-11-19 16:13:55 +0100 | xff0x | (~fox@141.98.255.145) |
2020-11-19 16:14:34 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 272 seconds) |
2020-11-19 16:15:20 +0100 | invaser | (~Thunderbi@31.148.23.125) |
2020-11-19 16:15:43 +0100 | alp | (~alp@2a01:e0a:58b:4920:7562:27bf:89c5:b0d) (Ping timeout: 272 seconds) |
2020-11-19 16:22:18 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9) |
2020-11-19 16:24:13 +0100 | xff0x | (~fox@141.98.255.145) (Ping timeout: 264 seconds) |
2020-11-19 16:24:55 +0100 | st8less | (~st8less@2603:a060:11fd:0:744d:b66f:d608:4e8e) |
2020-11-19 16:25:02 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:f4f3:bbb1:9462:91ce) |
2020-11-19 16:26:07 +0100 | xerox_ | (~xerox@unaffiliated/xerox) (Ping timeout: 260 seconds) |
2020-11-19 16:26:09 +0100 | xff0x | (~fox@2001:1a81:534b:a000:65df:cebc:ef3d:70f7) |
2020-11-19 16:26:53 +0100 | xerox_ | (~xerox@unaffiliated/xerox) |
2020-11-19 16:29:55 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) (Read error: Connection reset by peer) |
2020-11-19 16:32:36 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) (Remote host closed the connection) |
2020-11-19 16:35:11 +0100 | Shiranai | (beed0255@gateway/web/cgi-irc/kiwiirc.com/ip.190.237.2.85) |
2020-11-19 16:39:03 +0100 | Sarma | (~Amras@unaffiliated/amras0000) |
2020-11-19 16:39:15 +0100 | __monty_1 | (~toonn@unaffiliated/toonn) (Quit: leaving) |
2020-11-19 16:41:03 +0100 | Amras | (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
2020-11-19 16:46:07 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 256 seconds) |
2020-11-19 16:46:15 +0100 | ddellacosta | (dd@gateway/vpn/mullvad/ddellacosta) |
2020-11-19 16:47:04 +0100 | bitmapper | (uid464869@gateway/web/irccloud.com/x-uhdfbowqpmvzztxz) |
2020-11-19 16:47:58 +0100 | Mrkz71 | (c1ef2595@193-239-37-149.ksi-system.net) |
2020-11-19 16:48:41 +0100 | carlomagno | (~cararell@148.87.23.12) (Remote host closed the connection) |
2020-11-19 16:49:01 +0100 | carlomagno | (~cararell@148.87.23.5) |
2020-11-19 16:51:57 +0100 | <dminuoso> | Mmm, I have a file with lines of varying indention, and I intend to interpret that as a tree like this https://gist.github.com/dminuoso/7911cb8e16c4de0d48de20e7270ebc68 |
2020-11-19 16:52:24 +0100 | <dminuoso> | I can cook up some sort of stateful unfold, but I was wondering whether there was some tree related library that would give me this for free |
2020-11-19 16:52:43 +0100 | northman_ | (~textual@204.111.252.124) |
2020-11-19 16:53:02 +0100 | <dminuoso> | (Doesnt have to be that exact tree data type) |
2020-11-19 16:53:03 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) |
2020-11-19 16:53:55 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-104-55.w86-212.abo.wanadoo.fr) |
2020-11-19 16:56:37 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 264 seconds) |
2020-11-19 16:57:28 +0100 | <[exa]> | dminuoso: you can preprocess the leading whitespace to 'indent' and 'unindent' marks easily, then it's pretty easy to do |
2020-11-19 16:57:40 +0100 | hnOsmium0001 | (uid453710@gateway/web/irccloud.com/x-lviokxjrzjjmnlqh) |
2020-11-19 17:01:39 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2020-11-19 17:01:45 +0100 | Codaraxis | (~Codaraxis@ip68-5-90-227.oc.oc.cox.net) |
2020-11-19 17:01:55 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) |
2020-11-19 17:01:59 +0100 | <dminuoso> | [exa]: Mmm, what kind of un/indent mark are you referring to? Should these become conceptual push/pop instructions of a stack of things? |
2020-11-19 17:03:20 +0100 | Codaraxis_ | (~Codaraxis@ip68-5-90-227.oc.oc.cox.net) (Ping timeout: 244 seconds) |
2020-11-19 17:04:19 +0100 | Codaraxis_ | (~Codaraxis@ip68-5-90-227.oc.oc.cox.net) |
2020-11-19 17:04:26 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2020-11-19 17:05:24 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Max SendQ exceeded) |
2020-11-19 17:05:48 +0100 | concept2 | (~concept2@unaffiliated/tubo) (Ping timeout: 256 seconds) |
2020-11-19 17:05:51 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2020-11-19 17:06:32 +0100 | Aquazi | (uid312403@gateway/web/irccloud.com/x-sgcggzhikhhgebxn) |
2020-11-19 17:06:42 +0100 | Shiranai | (beed0255@gateway/web/cgi-irc/kiwiirc.com/ip.190.237.2.85) (Quit: Connection closed) |
2020-11-19 17:06:47 +0100 | concept2 | (~concept2@unaffiliated/tubo) |
2020-11-19 17:06:59 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Max SendQ exceeded) |
2020-11-19 17:07:26 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2020-11-19 17:07:54 +0100 | Codaraxis | (~Codaraxis@ip68-5-90-227.oc.oc.cox.net) (Ping timeout: 265 seconds) |
2020-11-19 17:08:34 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Max SendQ exceeded) |
2020-11-19 17:09:05 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2020-11-19 17:11:15 +0100 | <[exa]> | dminuoso: yeah, it's not supersmart but safest way around I found |
2020-11-19 17:11:17 +0100 | hyperisco | (~hyperisco@d192-186-117-226.static.comm.cgocable.net) |
2020-11-19 17:12:01 +0100 | <dmj`> | why can't we :unset -Werror in ghci |
2020-11-19 17:14:19 +0100 | <dolio> | Seems like it doesn't no how to :unset any -W flag. |
2020-11-19 17:14:25 +0100 | <dolio> | Know, even. |
2020-11-19 17:15:00 +0100 | hackage | subG-instances 0.1.0.0 - Additional instances for the InsertLeft class from subG package. https://hackage.haskell.org/package/subG-instances-0.1.0.0 (OleksandrZhabenko) |
2020-11-19 17:15:45 +0100 | <dminuoso> | [exa]: heh yeah that's what Im already doing. I just keep the previous indention as state around, so if it increases it becomes a push on a buffer where I push things onto, and on a pop I just flush the butter |
2020-11-19 17:15:49 +0100 | <boxscape> | does :set -Wno-error work? |
2020-11-19 17:15:52 +0100 | <dminuoso> | this is incredibly imperative, sadly |
2020-11-19 17:16:06 +0100 | <[exa]> | https://gist.github.com/exaexa/9920eb85d2bd20f4c575f2f1d307ae96 |
2020-11-19 17:16:08 +0100 | <dolio> | You can `:set -Wwarn` |
2020-11-19 17:16:13 +0100 | <boxscape> | ah |
2020-11-19 17:16:14 +0100 | <dolio> | Which is supposed to reverse it. |
2020-11-19 17:16:26 +0100 | <dminuoso> | % :set -Wno-warn |
2020-11-19 17:16:26 +0100 | <yahb> | dminuoso: ; <no location info>: warning: unrecognised warning flag: -Wno-warn |
2020-11-19 17:16:33 +0100 | <dminuoso> | % :set -Wno-error |
2020-11-19 17:16:33 +0100 | <yahb> | dminuoso: ; <no location info>: warning: unrecognised warning flag: -Wno-error |
2020-11-19 17:16:35 +0100 | <dminuoso> | Mmm |
2020-11-19 17:16:45 +0100 | <dolio> | There's no `no-` for those for some reason. |
2020-11-19 17:16:52 +0100 | northman_ | (~textual@204.111.252.124) (Quit: Textual IRC Client: www.textualapp.com) |
2020-11-19 17:17:02 +0100 | <[exa]> | dminuoso: I guess there's no better way, the indented stream itself is a series of commands encoded in the spaces...so what. :] |
2020-11-19 17:17:03 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Read error: Connection reset by peer) |
2020-11-19 17:17:19 +0100 | <dminuoso> | [exa]: Well I can always throw `indents` at it! |
2020-11-19 17:17:41 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2020-11-19 17:18:21 +0100 | <boxscape> | hm I suppose if -Wno-warn existed the intuitive interpretation would be that it turns off warnings alltogether, and then it would be unclear if -Wno-error should put warnings into -Wwarn mode or into -Wno-warn mode |
2020-11-19 17:18:44 +0100 | northman_ | (~textual@204.111.252.124) |
2020-11-19 17:19:36 +0100 | invaser | (~Thunderbi@31.148.23.125) |
2020-11-19 17:19:51 +0100 | northman_ | (~textual@204.111.252.124) (Client Quit) |
2020-11-19 17:20:12 +0100 | larou | (5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) |
2020-11-19 17:20:17 +0100 | <larou> | hello! |
2020-11-19 17:20:42 +0100 | <boxscape> | hi |
2020-11-19 17:20:46 +0100 | huskyhaskell | (~user@2001:9b1:29fe:fc00:55d8:279e:df7e:2d64) |
2020-11-19 17:20:52 +0100 | <larou> | I have code!! |
2020-11-19 17:21:10 +0100 | <[exa]> | dminuoso: careful not to end up with python. :D |
2020-11-19 17:21:16 +0100 | <larou> | no i dont, i only have rumours of code |
2020-11-19 17:21:28 +0100 | northman_ | (~northman@204.111.252.124) |
2020-11-19 17:21:45 +0100 | huskyhaskell | (~user@2001:9b1:29fe:fc00:55d8:279e:df7e:2d64) () |
2020-11-19 17:22:08 +0100 | <larou> | i have a new type of tree |
2020-11-19 17:22:17 +0100 | howdoi | (uid224@gateway/web/irccloud.com/x-zkpwgkjicmhndtdh) (Quit: Connection closed for inactivity) |
2020-11-19 17:22:25 +0100 | <larou> | its better than normal trees |
2020-11-19 17:22:41 +0100 | <larou> | it has upwards branches |
2020-11-19 17:22:48 +0100 | <larou> | iv been trying to do it for ages |
2020-11-19 17:22:55 +0100 | [exa] | briefly recalls "normal" trees |
2020-11-19 17:23:08 +0100 | <larou> | yeah, those have only downwards branches |
2020-11-19 17:23:32 +0100 | <larou> | these are way better |
2020-11-19 17:23:34 +0100 | <[exa]> | I mean the nature ones |
2020-11-19 17:24:03 +0100 | <larou> | never mind your vacant wonderings |
2020-11-19 17:24:42 +0100 | <larou> | they typecheck and everything |
2020-11-19 17:24:45 +0100 | <boxscape> | does it have upwards as well as downward branches or only upwards branches? |
2020-11-19 17:24:45 +0100 | knupfer | (~Thunderbi@200116b82cfb87004c47b2fffe20891d.dip.versatel-1u1.de) |
2020-11-19 17:24:45 +0100 | knupfer | (~Thunderbi@200116b82cfb87004c47b2fffe20891d.dip.versatel-1u1.de) (Client Quit) |
2020-11-19 17:25:01 +0100 | hackage | git-lfs 1.1.1 - git-lfs protocol https://hackage.haskell.org/package/git-lfs-1.1.1 (JoeyHess) |
2020-11-19 17:25:05 +0100 | <larou> | sure, its not just an upside down tree... |
2020-11-19 17:25:08 +0100 | knupfer | (~Thunderbi@200116b82cfb8700fd61a7f6e9856548.dip.versatel-1u1.de) |
2020-11-19 17:25:14 +0100 | <boxscape> | ah, good |
2020-11-19 17:25:24 +0100 | <larou> | i put functions on them |
2020-11-19 17:25:30 +0100 | <larou> | at the branches |
2020-11-19 17:25:41 +0100 | <larou> | MIMO functions (multiple inputs multiple outputs) |
2020-11-19 17:25:58 +0100 | <larou> | just one input and one output argument, that are HLists |
2020-11-19 17:25:59 +0100 | boxscape | thinks the upwards branches should be called "roots" |
2020-11-19 17:26:13 +0100 | <larou> | original! |
2020-11-19 17:26:20 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) |
2020-11-19 17:26:38 +0100 | <larou> | i call them output edges |
2020-11-19 17:26:43 +0100 | jneira | (02896ac0@gateway/web/cgi-irc/kiwiirc.com/ip.2.137.106.192) |
2020-11-19 17:26:47 +0100 | <larou> | inputs go at the leafs |
2020-11-19 17:27:09 +0100 | <larou> | and they do the cyclic thing perfectly!!! |
2020-11-19 17:27:20 +0100 | <merijn> | So...graphs? |
2020-11-19 17:27:21 +0100 | <larou> | they are a list, instead of a free thing |
2020-11-19 17:27:34 +0100 | cocreature | (~cocreatur@eirene.uberspace.de) (Read error: Connection reset by peer) |
2020-11-19 17:27:34 +0100 | <larou> | meijn: no they are trees |
2020-11-19 17:27:41 +0100 | <larou> | they just have lookup tables |
2020-11-19 17:27:49 +0100 | <larou> | but its just the same |
2020-11-19 17:27:50 +0100 | <merijn> | trees are graphs |
2020-11-19 17:28:02 +0100 | <larou> | but graphs can be cyclic, while trees cant |
2020-11-19 17:28:04 +0100 | <merijn> | They're just a more boring subset of graphs (i.e. on without cycles) |
2020-11-19 17:28:08 +0100 | <larou> | thats what makes them trees not graphs |
2020-11-19 17:28:11 +0100 | <larou> | and this is a tree |
2020-11-19 17:28:12 +0100 | cocreature | (~cocreatur@eirene.uberspace.de) |
2020-11-19 17:28:31 +0100 | Mrkz71 | (c1ef2595@193-239-37-149.ksi-system.net) (Remote host closed the connection) |
2020-11-19 17:28:33 +0100 | <larou> | so... not graphs... |
2020-11-19 17:28:40 +0100 | <larou> | i have also "sparks" |
2020-11-19 17:28:47 +0100 | <larou> | these are the bits that make them not graphs |
2020-11-19 17:28:58 +0100 | <larou> | when you see a cycle, you must make a spark |
2020-11-19 17:29:01 +0100 | <larou> | it is a state |
2020-11-19 17:29:06 +0100 | <[exa]> | larou: data structure folks demand a precise written definition |
2020-11-19 17:29:11 +0100 | justan0theruser | (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds) |
2020-11-19 17:29:21 +0100 | <merijn> | [exa]: non-data structure folk too :p |
2020-11-19 17:29:41 +0100 | <larou> | it goes to an output instead of to the input variable, this is externally stored, as a state, and fed back in at the input at the next itteration |
2020-11-19 17:30:07 +0100 | <larou> | it would have been imposible to reference its current value to calculate itself at this iteration, so it has to be from the last |
2020-11-19 17:30:13 +0100 | <larou> | thats why we get "spark states" |
2020-11-19 17:30:51 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone) |
2020-11-19 17:31:01 +0100 | <[exa]> | like seriously, this sounds like the random rnn-generated paper about quantum physics. Get a piece of LaTeX and write it down, with examples and pics. |
2020-11-19 17:31:13 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 17:31:18 +0100 | <larou> | [exa]: its definition is an extension of the GADT for list, in that it has extra params on the thing being consed to. also, there is another record to the datatype which just wraps itself, but has a constraint that checks to see the sparks are correct in preventing cycles |
2020-11-19 17:31:49 +0100 | <larou> | oh you want the code, hang on |
2020-11-19 17:32:27 +0100 | enoq | (~textual@194-208-146-143.lampert.tv) (Quit: Textual IRC Client: www.textualapp.com) |
2020-11-19 17:33:06 +0100 | <larou> | here |
2020-11-19 17:33:07 +0100 | <larou> | https://pastebin.com/raw/Kq05pARC |
2020-11-19 17:34:50 +0100 | <larou> | and here; https://pastebin.com/raw/gHZaze9F |
2020-11-19 17:34:51 +0100 | <[exa]> | on which line are the trees and sparks? |
2020-11-19 17:35:04 +0100 | <larou> | in the 2nd paste, its "Net" |
2020-11-19 17:35:07 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Quit: Leaving) |
2020-11-19 17:35:26 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) |
2020-11-19 17:35:50 +0100 | kritzefitz | (~kritzefit@fw-front.credativ.com) (Remote host closed the connection) |
2020-11-19 17:36:13 +0100 | <[exa]> | ok cool, does it work? |
2020-11-19 17:36:14 +0100 | <larou> | now here i can specify the same graph, and using the definition of the input output pairs broken by designating "Sparks" |
2020-11-19 17:36:28 +0100 | <larou> | then, it will return a graph which passes the matrix test |
2020-11-19 17:36:33 +0100 | <larou> | ie, is not cyclic |
2020-11-19 17:36:42 +0100 | <larou> | this is the constraint on the CloseNet constructor |
2020-11-19 17:36:58 +0100 | <larou> | so you can, if you specify the correct sparks, as this check ensures you must |
2020-11-19 17:37:04 +0100 | jakob_ | (~textual@p200300f49f162200c400a7daff5c73c4.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
2020-11-19 17:38:01 +0100 | <larou> | you add functions to your net any which old way, and ensure that you have a way in mind to break the cycles (where you put the sparks, which inputs matched with outputs you do not pass as internal edges |
2020-11-19 17:38:03 +0100 | <larou> | ) |
2020-11-19 17:38:15 +0100 | <larou> | [exa]: i didnt make a graph yet |
2020-11-19 17:38:36 +0100 | <larou> | i need to shuffle them so the inputs to outputs are well ordered in the list of functions |
2020-11-19 17:38:40 +0100 | bob_twinkles | (~quassel@ec2-52-37-66-13.us-west-2.compute.amazonaws.com) (Read error: Connection reset by peer) |
2020-11-19 17:38:44 +0100 | <larou> | so you can supply inputs to each of them in a fold |
2020-11-19 17:39:00 +0100 | <larou> | and the values it calculates serve as inputs to the rest |
2020-11-19 17:39:02 +0100 | knupfer | (~Thunderbi@200116b82cfb8700fd61a7f6e9856548.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
2020-11-19 17:39:17 +0100 | <larou> | you specify type level symbols as annotations to the edges of the Net |
2020-11-19 17:39:26 +0100 | <larou> | thats how these new type of trees work |
2020-11-19 17:39:56 +0100 | <larou> | they dont sit underneath each other in a GADT, appearing as a self reference within a list, like a regular tree |
2020-11-19 17:40:20 +0100 | <larou> | so you give each of the edges a label, and have the nodes that are on either end of it both reference that |
2020-11-19 17:40:35 +0100 | bob_twinkles | (~quassel@ec2-52-37-66-13.us-west-2.compute.amazonaws.com) |
2020-11-19 17:40:38 +0100 | <larou> | the matrix is a numerical representation of the resulting adjacency matrix |
2020-11-19 17:40:45 +0100 | <larou> | well, its directed from inputs to outputs |
2020-11-19 17:41:11 +0100 | <larou> | and then you exponentiate that to get, "if it is above itself" which would throw an error as a cycle |
2020-11-19 17:41:34 +0100 | <larou> | the constraint on the CloseNet constructor would not hold |
2020-11-19 17:41:44 +0100 | <larou> | you would have to specify better sparks as a type annotation |
2020-11-19 17:42:13 +0100 | invaser1 | (~Thunderbi@31.148.23.125) |
2020-11-19 17:42:18 +0100 | <larou> | so what do you recon!? solved the ancient, upwards branching trees thing, finally |
2020-11-19 17:42:25 +0100 | <merijn> | I propose implementing a prototype and showing that to people, rather than roughly explaining in english |
2020-11-19 17:42:27 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-19 17:42:40 +0100 | <larou> | it works as in the links provided |
2020-11-19 17:42:50 +0100 | <[exa]> | cabal install <what> |
2020-11-19 17:42:52 +0100 | <larou> | i dont have it doing what i want yet though |
2020-11-19 17:43:06 +0100 | <merijn> | So...it doesn't work yet |
2020-11-19 17:43:16 +0100 | <larou> | i need to shuffle them so the nodes at the leafs pass inputs along for functions to be evaluated |
2020-11-19 17:43:30 +0100 | <larou> | merijn: exactly what i described is demonstrated in those pastes |
2020-11-19 17:43:38 +0100 | kritzefitz | (~kritzefit@212.86.56.80) |
2020-11-19 17:43:41 +0100 | <larou> | what it doesnt do yet, it does not yet do |
2020-11-19 17:43:54 +0100 | <larou> | so its not with "the final demo" |
2020-11-19 17:44:04 +0100 | <larou> | which would probably be what you would want |
2020-11-19 17:44:27 +0100 | <larou> | so, basically its a state function |
2020-11-19 17:44:32 +0100 | <larou> | so i can put it on a graph! |
2020-11-19 17:44:36 +0100 | <larou> | and that makes it a monad |
2020-11-19 17:44:39 +0100 | <larou> | which is pretty mad |
2020-11-19 17:44:47 +0100 | <larou> | the "net" thing, with actual functions on |
2020-11-19 17:44:52 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 260 seconds) |
2020-11-19 17:44:52 +0100 | invaser1 | invaser |
2020-11-19 17:44:59 +0100 | <larou> | its the monad from; "programs are monads" |
2020-11-19 17:45:14 +0100 | <merijn> | "and that makes it a monad" <- I doubt that without a proof |
2020-11-19 17:45:14 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 17:45:22 +0100 | <larou> | i have explicitly named bound variables expressed at type level |
2020-11-19 17:45:26 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 17:45:31 +0100 | <larou> | meijn: it is a monad though... |
2020-11-19 17:45:53 +0100 | justan0theruser | (~justanoth@unaffiliated/justanotheruser) |
2020-11-19 17:45:56 +0100 | <larou> | you can break programs down and compose them, programs aka functions |
2020-11-19 17:46:10 +0100 | <larou> | anyway, the point is its a *state* |
2020-11-19 17:46:12 +0100 | <larou> | so it changes |
2020-11-19 17:46:17 +0100 | <larou> | the whole program |
2020-11-19 17:46:26 +0100 | <larou> | and thats where these sparks sit, internally as states |
2020-11-19 17:46:51 +0100 | <larou> | they go along internal edges that you have brokn to make them external inputs and outputs directed to a state variable that acts as a memory store |
2020-11-19 17:46:59 +0100 | <[exa]> | larou: it makes no sense, seriously |
2020-11-19 17:47:20 +0100 | <larou> | you have the graph of functions, and with it, all of the spark states, that are returned when you run the function on its inputs and previous spark states |
2020-11-19 17:47:48 +0100 | <larou> | and you package all of that up as a state function |
2020-11-19 17:48:08 +0100 | pavonia | (~user@unaffiliated/siracusa) (Quit: Bye!) |
2020-11-19 17:48:15 +0100 | <larou> | and put it on a graph of functions, with its cycles broken as another layer of sparks, stored as states in another state function wrapper and so on |
2020-11-19 17:48:19 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) |
2020-11-19 17:48:23 +0100 | <larou> | its the "and so on" thats the monadic recursion |
2020-11-19 17:49:01 +0100 | <larou> | nodes, that internally, are graphs of functions |
2020-11-19 17:49:11 +0100 | <larou> | the "nets as neurons" monad |
2020-11-19 17:49:14 +0100 | Feuermagier | (~Feuermagi@213.178.26.41) (Remote host closed the connection) |
2020-11-19 17:49:36 +0100 | <larou> | you partition the program any which way into functions, depending on how you define them and with synonyms |
2020-11-19 17:49:43 +0100 | <larou> | or unpartition it |
2020-11-19 17:49:47 +0100 | <larou> | thats cobind and bind |
2020-11-19 17:50:08 +0100 | <merijn> | Just because you call them that, doesn't mean they obey the monad laws |
2020-11-19 17:50:15 +0100 | <larou> | yeah but they do though |
2020-11-19 17:50:37 +0100 | <larou> | in the same way a tree is |
2020-11-19 17:50:47 +0100 | <larou> | i guess i need them to be nonempty etc |
2020-11-19 17:50:58 +0100 | <larou> | but yeah, theres a monad there, no doubt |
2020-11-19 17:51:18 +0100 | <larou> | anyway, thats not the fun part |
2020-11-19 17:51:21 +0100 | alp | (~alp@2a01:e0a:58b:4920:e0d5:8136:ac9f:8cb7) |
2020-11-19 17:51:35 +0100 | <larou> | the spark states get "hidden" when you package them into a state function wrapper placed on the net |
2020-11-19 17:51:52 +0100 | <larou> | because the net can handle state functions, so the sparks just get absorbed by that machinery |
2020-11-19 17:52:00 +0100 | <larou> | you get new nodes to the graph |
2020-11-19 17:52:29 +0100 | <merijn> | I suggest writing a blogpost, rather than writing a novel in a channel meant for discussion |
2020-11-19 17:52:42 +0100 | <larou> | the spark cycles, end up at an input and output terminus, that stores the spark state, and can be written to and read from |
2020-11-19 17:52:59 +0100 | cocreature | (~cocreatur@eirene.uberspace.de) (Remote host closed the connection) |
2020-11-19 17:53:05 +0100 | <larou> | merijn: thanks for keeping me on track. |
2020-11-19 17:53:21 +0100 | cocreature | (~cocreatur@eirene.uberspace.de) |
2020-11-19 17:53:22 +0100 | <larou> | i have presented these new trees |
2020-11-19 17:55:22 +0100 | mananamenos | (~mananamen@84.122.202.215.dyn.user.ono.com) (Ping timeout: 260 seconds) |
2020-11-19 17:55:33 +0100 | <larou> | anyway, all this stuff to do with new nodes for the sparks when the nets handle state functions on the nodes - is just the next part of the todo - and is just to say what i have shown does not yet do |
2020-11-19 17:55:46 +0100 | <larou> | so far it just checks to see that the sparks provided are correct |
2020-11-19 17:55:56 +0100 | <larou> | so you cant make it wrong! |
2020-11-19 17:56:04 +0100 | <larou> | almost as good as making it right... |
2020-11-19 17:56:41 +0100 | <larou> | you basically just have to be sure the edges you define dont cause a cycle |
2020-11-19 17:56:50 +0100 | <larou> | but it will tell you if there is |
2020-11-19 17:57:27 +0100 | <larou> | the only thing worth discussing really is the fact we have a new notion of tree |
2020-11-19 17:57:36 +0100 | <larou> | not, how far i am at making it better |
2020-11-19 17:57:50 +0100 | <larou> | what i show completely defines it |
2020-11-19 17:58:07 +0100 | <larou> | but many other implementations of the same idea exist |
2020-11-19 17:58:13 +0100 | ChanServ | +q *!*@*/ip.94.174.37.145 |
2020-11-19 17:58:52 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 260 seconds) |
2020-11-19 18:00:02 +0100 | he9388 | (2fe3e53b@047-227-229-059.res.spectrum.com) |
2020-11-19 18:00:28 +0100 | <he9388> | Hi everyone, I'm trying to install the Haskell extension for VSCode, and I'm getting the error "Couldn't figure out what GHC version the project is using" |
2020-11-19 18:00:43 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) |
2020-11-19 18:00:48 +0100 | <he9388> | I couldn't figure out what's the issue. Can anyone give a pointer? Thanks a lot. |
2020-11-19 18:01:04 +0100 | <merijn> | are you using stack or cabal? |
2020-11-19 18:01:17 +0100 | <he9388> | Cabal |
2020-11-19 18:01:32 +0100 | <he9388> | Or I believe so at least... |
2020-11-19 18:01:35 +0100 | <merijn> | he9388: Is GHC in your path? |
2020-11-19 18:01:51 +0100 | <he9388> | Which path? |
2020-11-19 18:01:57 +0100 | <he9388> | Sorry, I am beginner :) |
2020-11-19 18:03:05 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 240 seconds) |
2020-11-19 18:03:10 +0100 | <he9388> | I get some message like this:Couldn't figure out what GHC version the project is using: /home/he/.config/Code/User/globalStorage/haskell.haskell/haskell-language-server-wrapper-0.6.0-linux --project-ghc-version exited with exit code 1: Module "/home/he/Documents/learn4haskell/a" is loaded by Cradle: Cradle {cradleRootDir = |
2020-11-19 18:03:11 +0100 | <he9388> | "/home/he/Documents/learn4haskell", cradleOptsProg = CradleAction: Cabal} Failed to get project GHC version:CradleError {cradleErrorDependencies = [], cradleErrorExitCode = ExitFailure 1, cradleErrorStderr = ["Error when calling cabal v2-exec ghc -v0 -- --numeric-version","","cabal: unrecognised command: v2-exec (try --help)\n"]} |
2020-11-19 18:03:17 +0100 | <merijn> | he9388: Let's rewind further: What OS? :p |
2020-11-19 18:03:20 +0100 | jlamothe | (~jlamothe@198.251.55.207) |
2020-11-19 18:03:26 +0100 | <he9388> | I am on Ubuntu |
2020-11-19 18:03:41 +0100 | <merijn> | he9388: If you run "which ghc" in your shell, what do you get? |
2020-11-19 18:03:55 +0100 | byorgey | (~byorgey@155.138.238.211) |
2020-11-19 18:04:20 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 18:04:25 +0100 | <he9388> | Ok, weird, I ran in two different directory and got two different location :) |
2020-11-19 18:04:44 +0100 | <he9388> | One I get: /usr/bin/ghc. The other: /home/he/.ghcup/bin/ghc |
2020-11-19 18:05:15 +0100 | <merijn> | The first is probably from your package manager, the second from ghcup. So step one is figuring out which you want :p |
2020-11-19 18:05:26 +0100 | invaser | (~Thunderbi@31.148.23.125) |
2020-11-19 18:05:55 +0100 | <he9388> | What's the difference :) |
2020-11-19 18:06:05 +0100 | <monochrom> | Ubuntu's is much older. |
2020-11-19 18:06:18 +0100 | <he9388> | Then probably I'll stick to the new one |
2020-11-19 18:06:37 +0100 | ubert | (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection) |
2020-11-19 18:06:38 +0100 | <monochrom> | How old? How bad? Answer: So old that only a few profs who never take a look at the current outside world still think it's in use. |
2020-11-19 18:06:52 +0100 | valdyn | (~valdyn@host-88-217-143-53.customer.m-online.net) |
2020-11-19 18:07:20 +0100 | <monochrom> | So old that it's like some Windows users hold on to Windows 98 because they still hold on to WinFax. (OK this is an exaggeration.) |
2020-11-19 18:07:39 +0100 | <he9388> | Point taken, ready to get rid of it :) |
2020-11-19 18:07:58 +0100 | mananamenos | (~mananamen@84.122.202.215.dyn.user.ono.com) |
2020-11-19 18:08:14 +0100 | <merijn> | he9388: Also, ghcup lets you install multiple different versions at the same time so you can test across compiler versions |
2020-11-19 18:08:22 +0100 | <he9388> | What's the proper way to get rid of it |
2020-11-19 18:08:33 +0100 | <monochrom> | sudo apt remove |
2020-11-19 18:08:50 +0100 | <he9388> | oh right |
2020-11-19 18:08:54 +0100 | <he9388> | was almost going to rm -rf it... |
2020-11-19 18:09:04 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) |
2020-11-19 18:09:24 +0100 | <he9388> | now it says ghc not found |
2020-11-19 18:09:28 +0100 | <he9388> | when I run which ghc |
2020-11-19 18:09:31 +0100 | hackage | rosebud 0.2.0.0 - Common rose tree/forest functions https://hackage.haskell.org/package/rosebud-0.2.0.0 (jship) |
2020-11-19 18:10:05 +0100 | <monochrom> | You will need /home/he/.ghcup/bin to be an element of your PATH |
2020-11-19 18:10:24 +0100 | <he9388> | OK, got it! Now this part works |
2020-11-19 18:11:06 +0100 | motte | (~weechat@unaffiliated/motte) (Quit: WeeChat 1.9.1) |
2020-11-19 18:12:14 +0100 | <he9388> | Now I am getting this error message: The Haskell (learn4haskell) server crashed 5 times in the last 3 minutes. The server will not be restarted. |
2020-11-19 18:12:39 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
2020-11-19 18:12:43 +0100 | <merijn> | hmm, what's learn4haskell? |
2020-11-19 18:13:19 +0100 | <he9388> | https://github.com/kowainik/learn4haskell |
2020-11-19 18:13:26 +0100 | <he9388> | It's tutorial I'm going through :) |
2020-11-19 18:13:44 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff57608036dc958592ad.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
2020-11-19 18:13:44 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 18:14:01 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 18:14:31 +0100 | <merijn> | hmmm |
2020-11-19 18:14:44 +0100 | <he9388> | Why should the extension be dependent on the server? |
2020-11-19 18:15:15 +0100 | <monochrom> | Never heard of it. |
2020-11-19 18:15:18 +0100 | jneira | (02896ac0@gateway/web/cgi-irc/kiwiirc.com/ip.2.137.106.192) (Quit: Ping timeout (120 seconds)) |
2020-11-19 18:16:11 +0100 | <merijn> | he9388: No clue. tbh, the editor plugin landscape has evolved rather dramatically over the past year, but it isn't quite at the "works reliably in all setups" state yet |
2020-11-19 18:17:01 +0100 | <merijn> | That said, for the vast majority of my haskell career I've worked without editor plugins just fine. It's not ideal, but I can't really recommend investing a lot of time into getting it working now |
2020-11-19 18:17:22 +0100 | <he9388> | Having type checking would be nice :) |
2020-11-19 18:17:40 +0100 | <he9388> | I'm just starting to develop |
2020-11-19 18:18:12 +0100 | <merijn> | he9388: Yeah, but the current editor plugin landscape that you can either invest hours fixing things or wait a month and the plugins has improved much more :p |
2020-11-19 18:18:22 +0100 | <monochrom> | -fdefer-type-errors achieves 90% of the same goal at 0.1% of the cost |
2020-11-19 18:18:43 +0100 | <merijn> | monochrom: -fdefer-typed-holes >> -fdefer-type-errors :) |
2020-11-19 18:19:18 +0100 | <merijn> | he9388: You can always try something like ghcid running in a separate terminal |
2020-11-19 18:19:28 +0100 | <monochrom> | It means it demotes die-hard-erroring-out to just warning. This means functions that are unaffected by the type error are still usable, so you can continue to explore and figure out what to do. |
2020-11-19 18:19:53 +0100 | <merijn> | he9388: That gets you 80% of the way there |
2020-11-19 18:20:16 +0100 | <monochrom> | my "cost" refers to installation cost |
2020-11-19 18:20:59 +0100 | <monochrom> | cost of one-time installing extra software and long-time babysitting said fragile perpetually-in-beta-quality software |
2020-11-19 18:21:05 +0100 | <he9388> | Did not know about ghcide either haha |
2020-11-19 18:21:06 +0100 | <monochrom> | s/long-time/long-term/ |
2020-11-19 18:21:21 +0100 | <merijn> | he9388: Confusingly ghcid and ghcide are different things :) |
2020-11-19 18:21:22 +0100 | <monochrom> | Oh, and ghcid != ghcide |
2020-11-19 18:21:43 +0100 | <he9388> | oh |
2020-11-19 18:21:45 +0100 | <monochrom> | This is ghcid: http://hackage.haskell.org/package/ghcid |
2020-11-19 18:22:05 +0100 | <merijn> | he9388: ghcide is what your current plugin probably uses, but it's not as robust as ghcid yet. ghcid is basically a program that just repeatedly runs compile for you and reports errors |
2020-11-19 18:22:30 +0100 | larou | (5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) (Quit: Connection closed) |
2020-11-19 18:22:51 +0100 | <monochrom> | It is just an inotify loop over "oh you have updated Foo.hs again, so let me run ghc again so you see the error messages" |
2020-11-19 18:23:17 +0100 | crdrost | (~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) |
2020-11-19 18:23:32 +0100 | <monochrom> | I think it is very misleading to call it anything related to IDE. |
2020-11-19 18:23:44 +0100 | <monochrom> | I would describe it as continuous smoke-testing |
2020-11-19 18:24:04 +0100 | <sm[m]> | I will say that VS Code + Haskell extension is quite likely to just work and give he9388 a really nice experience these days |
2020-11-19 18:24:15 +0100 | <monochrom> | You save a file, it reruns type checking, build checking, and test cases. |
2020-11-19 18:24:19 +0100 | <he9388> | I am using VS Code + Haskell extension actually... |
2020-11-19 18:24:41 +0100 | <sm[m]> | he9388: isn't it giving you realtime type errors, types on hover, etc ? |
2020-11-19 18:24:50 +0100 | <merijn> | monochrom: Well to be fair it was "ghci daemon", presumably |
2020-11-19 18:25:01 +0100 | <merijn> | sm[m]: Well, no, it kept crashing, hence the start of this discussion :p |
2020-11-19 18:25:08 +0100 | <he9388> | Oh, the extension is not loading: when I make new folder, I got "The Haskell (test) server crashed 5 times in the last 3 minutes. The server will not be restarted" |
2020-11-19 18:25:19 +0100 | <sm[m]> | oops, missed that. #haskell-ide-engine would help |
2020-11-19 18:25:28 +0100 | <sm[m]> | would also help. |
2020-11-19 18:25:35 +0100 | <he9388> | Ok, thank you for the reference |
2020-11-19 18:26:15 +0100 | aveltras | (uid364989@gateway/web/irccloud.com/x-jtdricnolbjelrxi) (Quit: Connection closed for inactivity) |
2020-11-19 18:26:45 +0100 | christo | (~chris@81.96.113.213) (Read error: Connection reset by peer) |
2020-11-19 18:27:09 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 18:30:37 +0100 | alp | (~alp@2a01:e0a:58b:4920:e0d5:8136:ac9f:8cb7) (Ping timeout: 272 seconds) |
2020-11-19 18:31:06 +0100 | howdoi | (uid224@gateway/web/irccloud.com/x-dgisunxwmcstbixs) |
2020-11-19 18:33:16 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 240 seconds) |
2020-11-19 18:35:49 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2020-11-19 18:36:27 +0100 | glguy | (x@freenode/staff/haskell.developer.glguy) (Ping timeout: 615 seconds) |
2020-11-19 18:36:51 +0100 | glguy | (x@freenode/staff/haskell.developer.glguy) |
2020-11-19 18:37:25 +0100 | kav | (~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi) (Ping timeout: 240 seconds) |
2020-11-19 18:37:40 +0100 | valdyn | (~valdyn@host-88-217-143-53.customer.m-online.net) (Read error: No route to host) |
2020-11-19 18:37:48 +0100 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) () |
2020-11-19 18:38:20 +0100 | avn | (~avn@78-56-108-78.static.zebra.lt) (Ping timeout: 260 seconds) |
2020-11-19 18:38:51 +0100 | ph88^ | (~ph88@2a02:8109:9e00:7e5c:f073:c081:c2ef:433b) (Ping timeout: 272 seconds) |
2020-11-19 18:38:52 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 18:40:40 +0100 | Boomerang | (~Boomerang@xd520f68c.cust.hiper.dk) (Ping timeout: 260 seconds) |
2020-11-19 18:41:16 +0100 | alp | (~alp@2a01:e0a:58b:4920:6867:806e:6b2d:b0d) |
2020-11-19 18:42:08 +0100 | <koz_> | monochrom: I don't recall if it was you, but someone complained that we say 'Big-O', not 'Big-omikron'. Bird and Gibbons' algorithms book is here to right this wrong! |
2020-11-19 18:42:31 +0100 | hackage | easy-args 0.1.0.1 - Parses command line arguments https://hackage.haskell.org/package/easy-args-0.1.0.1 (jlamothe) |
2020-11-19 18:42:33 +0100 | <boxscape> | "Big-omikron" isn't that just regular o |
2020-11-19 18:42:44 +0100 | <merijn> | I say death to Big O analysis :p |
2020-11-19 18:43:11 +0100 | <merijn> | It's just a mathematical way of lying about performance :p |
2020-11-19 18:43:31 +0100 | hackage | cryptol 2.10.0 - Cryptol: The Language of Cryptography https://hackage.haskell.org/package/cryptol-2.10.0 (AaronTomb) |
2020-11-19 18:43:41 +0100 | <c_wraith> | People are very bad at it, and believe lies like "hash table insert and lookup are O(1)" with shocking credulity |
2020-11-19 18:44:09 +0100 | <merijn> | c_wraith: A reasonable number people know about *that* |
2020-11-19 18:44:24 +0100 | codeAlways | (uid272474@gateway/web/irccloud.com/x-rnqcrwigssxuyxdw) (Quit: Connection closed for inactivity) |
2020-11-19 18:44:30 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 2.8) |
2020-11-19 18:44:53 +0100 | avn | (~avn@78-56-108-78.static.zebra.lt) |
2020-11-19 18:44:53 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2020-11-19 18:45:15 +0100 | <merijn> | The people that realise "the fundamental base of assumption of Big O is just 100% lies" is dramatically less :p |
2020-11-19 18:46:39 +0100 | <boxscape> | which assumption is that? |
2020-11-19 18:46:51 +0100 | <maerwald> | it's one of those things that make you look smart in interviews |
2020-11-19 18:46:54 +0100 | <dminuoso> | boxscape: Stuff like constant random memory access. |
2020-11-19 18:46:59 +0100 | <merijn> | It only seems to work because people in general mostly only care about the happy path |
2020-11-19 18:47:04 +0100 | kav | (~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi) |
2020-11-19 18:47:14 +0100 | <koz_> | maerwald: Alternatively, if you inhabit certain academic spaces. |
2020-11-19 18:47:17 +0100 | <koz_> | (which was my fate) |
2020-11-19 18:47:22 +0100 | <dminuoso> | If that's your model of computation, fine, but the truth of the matter is memory access is not constant on a computer implemented within the laws of physics. |
2020-11-19 18:47:27 +0100 | <merijn> | boxscape: random memory access is constant time |
2020-11-19 18:47:40 +0100 | <c_wraith> | that's only an assumption if you make it one... |
2020-11-19 18:47:40 +0100 | <merijn> | maerwald: It has real world implications |
2020-11-19 18:47:44 +0100 | <boxscape> | is the problem there caching or something else? |
2020-11-19 18:47:48 +0100 | <merijn> | boxscape: Yeah |
2020-11-19 18:47:51 +0100 | <boxscape> | I see |
2020-11-19 18:47:57 +0100 | <koz_> | Yeah, the memory hierarchy is a thing. |
2020-11-19 18:47:58 +0100 | <dminuoso> | boxscape: blackhole thermodynamics and relativity, roughly |
2020-11-19 18:48:01 +0100 | <koz_> | For good reason. |
2020-11-19 18:48:12 +0100 | <merijn> | You can construct algorithms that are "worse" per big O complexity while being *much* faster in reality |
2020-11-19 18:48:36 +0100 | <koz_> | merijn: And that's before we get to abuses of the form 'simplex is exponential'. |
2020-11-19 18:48:55 +0100 | <merijn> | c_wraith: eh, that assumption is baked into classical big O analysis as taught in CS and parroted when talking data structure complexity |
2020-11-19 18:49:10 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-19 18:49:24 +0100 | <c_wraith> | merijn: hmm. not in my courses/textbooks. They explicitly called out that they were working in the RAM model |
2020-11-19 18:49:24 +0100 | <dminuoso> | c_wraith: Well, the question is what conclusions you can draw from complexity analysis if the model doesn't fit reality well |
2020-11-19 18:50:22 +0100 | kav | (~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi) (Read error: Connection timed out) |
2020-11-19 18:50:25 +0100 | <merijn> | c_wraith: Well, *CLRS* assumes that throughout the book and even calls it out as a wildly unrealistic assumption in the first 1 or 2 chapters |
2020-11-19 18:50:35 +0100 | <merijn> | Anyway, dinner time |
2020-11-19 18:50:54 +0100 | <koz_> | merijn: Yeah, you get this a lot. 'This isn't realistic, but we're just goin' with it.' came up a bunch when I was learning a lot of algorithms-related things. |
2020-11-19 18:51:00 +0100 | <merijn> | c_wraith: What does "RAM model" mean? Did they include caches or not? |
2020-11-19 18:51:16 +0100 | <merijn> | (Actually, don't bother answering, 'cause dinner time :p) |
2020-11-19 18:51:25 +0100 | <koz_> | merijn: I assume Random Access Model. AKA 'all memory is flat, if you have an address, you have that memory in Theta(1)'. |
2020-11-19 18:51:26 +0100 | <c_wraith> | merijn: it's the standard name for the model in which all memory accesses have the same cost |
2020-11-19 18:52:05 +0100 | codeAlways | (uid272474@gateway/web/irccloud.com/x-zbflumxjrtygmhzc) |
2020-11-19 18:52:08 +0100 | kav | (~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi) |
2020-11-19 18:52:20 +0100 | toxix | (~DTZUZU@207.81.171.116) (Ping timeout: 256 seconds) |
2020-11-19 18:52:23 +0100 | <koz_> | I think monochrom (maybe?) mentioned that many presentations of Dijkstra's algorithm straight-up lie about their actual performance because they assume magical thinking in priority changes. |
2020-11-19 18:54:44 +0100 | <monochrom> | Rather, an important implementation question of decrease-priority is grossed over. |
2020-11-19 18:55:02 +0100 | <koz_> | I _love_ the expression 'to gross over'. |
2020-11-19 18:55:25 +0100 | wroathe_ | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
2020-11-19 18:56:02 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
2020-11-19 18:56:04 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 272 seconds) |
2020-11-19 18:56:36 +0100 | <monochrom> | In practice, I think people just gave up. |
2020-11-19 18:56:48 +0100 | <koz_> | In general, the folks that taught me algorithm-related stuff in CS had an attitude to implementation that was roughly 'ehh, it can be done somehow, who cares, now do more analysis'. |
2020-11-19 18:57:05 +0100 | acowley | (~acowley@c-68-83-22-43.hsd1.nj.comcast.net) |
2020-11-19 18:57:10 +0100 | <koz_> | (one was outright dismissive, the other just mentioned that these issues were resolvable but gave zero explanation how) |
2020-11-19 18:57:53 +0100 | <monochrom> | I have seen programming-contest-quality code libraries that don't use a log-time priority queue at all. Every extract-min and decrease-priority is linear brute-force search over an array. |
2020-11-19 18:57:58 +0100 | oerjan | (~oerjan@195.206.169.184) (Remote host closed the connection) |
2020-11-19 18:58:03 +0100 | wroathe_ | wroathe |
2020-11-19 18:58:20 +0100 | <monochrom> | Dijkstra himself also said he did that for his first demo, it was fast enough for him. |
2020-11-19 18:58:53 +0100 | <koz_> | monochrom: So wait, their priority queue essentially amounts to Vector (Int, a) or so? |
2020-11-19 19:00:02 +0100 | <monochrom> | I gross over details too. But I make a judgment: If I think an average student can think up how to code it up, I can gross over it; if it would be new and clever to them, I have to spell it out. |
2020-11-19 19:00:10 +0100 | <monochrom> | Yeah! |
2020-11-19 19:01:00 +0100 | <koz_> | Somewhat ironically, this makes me feel better about a recent Real Haskell Job call I had to make. |
2020-11-19 19:01:03 +0100 | <geekosaur> | considering the kinds of things your average student comes up with, you must have to spell things out a lot |
2020-11-19 19:01:22 +0100 | <monochrom> | And this is U of bloody Waterloo world class for-ACM-ICPC has-been-world-champion code library they bring on paper to the contests. |
2020-11-19 19:01:48 +0100 | <monochrom> | Fortunately, it's in C, so it is still fast. >:) |
2020-11-19 19:02:58 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-19 19:02:59 +0100 | <monochrom> | Oh, to be sure, "average student" still depends on which school we're talking about. |
2020-11-19 19:03:36 +0100 | enoq | (~textual@194-208-146-143.lampert.tv) |
2020-11-19 19:04:12 +0100 | <monochrom> | Suppose you pose the 1st-year-CS problem of "find the max of an array" for example. Actually, more honestly, a word problem that doesn't say outright "find max of array" but if you understand the wordy problem you see it's that. |
2020-11-19 19:04:42 +0100 | <monochrom> | In my school, the average students wouldn't have any difficulty. |
2020-11-19 19:04:56 +0100 | <monochrom> | In U of Waterloo, haha are you kidding, that's too easy. |
2020-11-19 19:06:18 +0100 | jneira | (02896ac0@gateway/web/cgi-irc/kiwiirc.com/ip.2.137.106.192) |
2020-11-19 19:06:44 +0100 | <monochrom> | So, that kind of word problems is the usual kind of problems you see during the warm-up practice stage of an ACM-ICPC-style programming contest. The warm-up practice stage being the whole point being familiarizing yourself with the computing environment, so let's solve a trivial problem so you can focus on learning how to use vi and gcc, say. |
2020-11-19 19:06:48 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:9217:95c7:973d:d0ad) |
2020-11-19 19:07:46 +0100 | <monochrom> | I overheard the conversation of a team from another school. <Coach> So, what do you think? <Contestant> No clue. |
2020-11-19 19:08:11 +0100 | <monochrom> | That's their contestant. So now imagine the average of that school. But compare to the average of Waterloo. |
2020-11-19 19:10:08 +0100 | <maerwald> | Man. Why not just get under the sun at the beach, instead of all this programming. |
2020-11-19 19:11:18 +0100 | foursaph | (~foursaph@dynamic-077-000-101-034.77.0.pool.telefonica.de) |
2020-11-19 19:11:25 +0100 | ski | . o O ( "The Myth of RAM, part I" by Emil Ernerfeldt in 2014-04-21 at <https://www.ilikebigbits.com/2014_04_21_myth_of_ram_1.html> ) |
2020-11-19 19:11:28 +0100 | <monochrom> | IKR? I saw a lot of people working hard for their 100-metre dash, or marathon, or something. |
2020-11-19 19:11:43 +0100 | <monochrom> | Why not just get a ride? |
2020-11-19 19:11:54 +0100 | <monochrom> | Why not just call uber? |
2020-11-19 19:11:58 +0100 | <koz_> | ski: Thanks! I was hoping someone did a teardown. |
2020-11-19 19:12:43 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
2020-11-19 19:13:22 +0100 | AWizzArd | (~code@gehrels.uberspace.de) (Changing host) |
2020-11-19 19:13:22 +0100 | AWizzArd | (~code@unaffiliated/awizzard) |
2020-11-19 19:13:34 +0100 | toxix | (~DTZUZU@207.81.171.116) |
2020-11-19 19:14:12 +0100 | ph88^ | (~ph88@2a02:8109:9e00:7e5c:f073:c081:c2ef:433b) |
2020-11-19 19:15:07 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2020-11-19 19:16:38 +0100 | jrm | (~jrm@freebsd/developer/jrm) (Ping timeout: 256 seconds) |
2020-11-19 19:16:50 +0100 | Yumasi | (~guillaume@2a01cb09b06b29ea0877e1bda345185b.ipv6.abo.wanadoo.fr) (Ping timeout: 264 seconds) |
2020-11-19 19:17:07 +0100 | <koz_> | @unmtl StateT s Maybe a |
2020-11-19 19:17:07 +0100 | <lambdabot> | s -> Maybe (a, s) |
2020-11-19 19:18:28 +0100 | Tracerneo1 | (~Tracerneo@193.56.252.12) |
2020-11-19 19:18:51 +0100 | neiluj | (~jco@91-167-203-101.subs.proxad.net) |
2020-11-19 19:18:51 +0100 | neiluj | (~jco@91-167-203-101.subs.proxad.net) (Changing host) |
2020-11-19 19:18:51 +0100 | neiluj | (~jco@unaffiliated/neiluj) |
2020-11-19 19:19:35 +0100 | chele | (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
2020-11-19 19:20:16 +0100 | <koz_> | :t guard |
2020-11-19 19:20:17 +0100 | <lambdabot> | Alternative f => Bool -> f () |
2020-11-19 19:21:11 +0100 | <koz_> | And of course 'guard' is from Control.Monad. That odd sock drawer of a module. |
2020-11-19 19:21:11 +0100 | <dolio> | I think people should really leave out the 'black hole' stuff from write-ups like this. |
2020-11-19 19:23:02 +0100 | <koz_> | Rod Downey famously claims that 'it's an open problem' is an 80% accurate heuristic for correct answers to complexity theory questions. At this point, I think 'Control.Monad' is an 80% accurate heuristic for correct answers to 'where on earth in base is this function?'-type questions. |
2020-11-19 19:23:58 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2020-11-19 19:24:13 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
2020-11-19 19:24:22 +0100 | <monochrom> | You have to narrow the scope to "combinators that are good for all Applicatives, Alternatives, Monads, or MonadPluses". But yeah. |
2020-11-19 19:24:27 +0100 | ph88^ | (~ph88@2a02:8109:9e00:7e5c:f073:c081:c2ef:433b) (Ping timeout: 272 seconds) |
2020-11-19 19:24:43 +0100 | <koz_> | monochrom: I dunno if I'm just special, but those are the kinds of things I need a lot, and can never find. |
2020-11-19 19:24:45 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 19:25:05 +0100 | conal | (~conal@64.71.133.70) (Client Quit) |
2020-11-19 19:25:21 +0100 | <monochrom> | It is historical. 2 decades ago, there was only Functor and Monad, and module-wise there was only Control.Monad, not even Data.Functor, so all the cool tools got into there. |
2020-11-19 19:25:58 +0100 | <monochrom> | I guess 2 decades ago the module name was just Monad, too. |
2020-11-19 19:26:01 +0100 | <ski> | (and before hierarchical, wasn't there just `Monad' ?) |
2020-11-19 19:26:06 +0100 | <monochrom> | Yeah that |
2020-11-19 19:26:37 +0100 | <koz_> | Oh, I get why it is that way. |
2020-11-19 19:26:44 +0100 | <koz_> | It's just amusing to me. |
2020-11-19 19:27:27 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 19:27:28 +0100 | conal | (~conal@64.71.133.70) (Client Quit) |
2020-11-19 19:27:31 +0100 | hackage | ivory-avr-atmega328p-registers 0.1.0.0 - Ivory register bindings for the Atmega328p https://hackage.haskell.org/package/ivory-avr-atmega328p-registers-0.1.0.0 (erdeszt) |
2020-11-19 19:28:49 +0100 | ulidtko | (~ulidtko@193.111.48.79) (Read error: Connection reset by peer) |
2020-11-19 19:29:36 +0100 | ishutin | (~Ishutin@92-249-179-45.pool.digikabel.hu) (Ping timeout: 240 seconds) |
2020-11-19 19:30:33 +0100 | ishutin | (~Ishutin@77-234-92-253.pool.digikabel.hu) |
2020-11-19 19:31:32 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 19:32:04 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
2020-11-19 19:32:59 +0100 | <monochrom> | I enjoy using history to explain why things suck today. Those who have learned from history are doomed to helplessly watching other people repeat it. |
2020-11-19 19:33:24 +0100 | alephu5[m] | (alephu5mat@gateway/shell/matrix.org/x-ldzorvnirgjegsey) |
2020-11-19 19:33:37 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 19:35:20 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Client Quit) |
2020-11-19 19:35:20 +0100 | avn | (~avn@78-56-108-78.static.zebra.lt) (Read error: Connection reset by peer) |
2020-11-19 19:35:29 +0100 | avn | (~avn@78-56-108-78.static.zebra.lt) |
2020-11-19 19:36:28 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Ping timeout: 256 seconds) |
2020-11-19 19:37:34 +0100 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Quit: leaving) |
2020-11-19 19:38:57 +0100 | <koz_> | monochrom: After all, everything is either history or applied history? :P |
2020-11-19 19:39:01 +0100 | alp | (~alp@2a01:e0a:58b:4920:6867:806e:6b2d:b0d) (Ping timeout: 272 seconds) |
2020-11-19 19:39:57 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 19:40:47 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Client Quit) |
2020-11-19 19:40:47 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 19:41:02 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 19:42:05 +0100 | kritzefitz | (~kritzefit@212.86.56.80) (Ping timeout: 240 seconds) |
2020-11-19 19:43:07 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 19:45:35 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Read error: Connection reset by peer) |
2020-11-19 19:45:58 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) |
2020-11-19 19:46:46 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Client Quit) |
2020-11-19 19:47:13 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) |
2020-11-19 19:47:31 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 19:48:24 +0100 | thc202 | (~thc202@unaffiliated/thc202) (Quit: thc202) |
2020-11-19 19:50:59 +0100 | <zincy__> | koz_: Are you by any chance from New Zealand? |
2020-11-19 19:51:10 +0100 | <koz_> | zincy__: I am, by chance, from there. |
2020-11-19 19:51:19 +0100 | <koz_> | Was the Rod Downey mention the giveaway? |
2020-11-19 19:52:14 +0100 | jespada | (~jespada@90.254.245.49) (Ping timeout: 265 seconds) |
2020-11-19 19:52:55 +0100 | <zincy__> | Juspay? |
2020-11-19 19:53:03 +0100 | <koz_> | zincy__: Contractor, but yes. |
2020-11-19 19:53:22 +0100 | <zincy__> | Yes we talked a bit about logic and discrete mathematics there |
2020-11-19 19:53:32 +0100 | <koz_> | Oh hi! |
2020-11-19 19:53:35 +0100 | <zincy__> | hehe |
2020-11-19 19:53:45 +0100 | <zincy__> | Hi |
2020-11-19 19:54:03 +0100 | <koz_> | Guess it figures Haskellers hang out here. |
2020-11-19 19:54:33 +0100 | <zincy__> | Yeah I saw the name and thought hmm that is a familiar name. |
2020-11-19 19:54:43 +0100 | <koz_> | I'm some variant of 'Koz' everywhere. |
2020-11-19 19:55:16 +0100 | jespada | (~jespada@90.254.245.49) |
2020-11-19 19:55:28 +0100 | zx__ | (~oracle@unaffiliated/oracle) |
2020-11-19 19:55:42 +0100 | SanchayanM | (~Sanchayan@223.226.123.235) (Quit: SanchayanM) |
2020-11-19 19:58:05 +0100 | kish` | (~oracle@unaffiliated/oracle) (Ping timeout: 240 seconds) |
2020-11-19 20:00:07 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
2020-11-19 20:01:28 +0100 | DavidEichmann | (~david@62.110.198.146.dyn.plus.net) (Remote host closed the connection) |
2020-11-19 20:01:50 +0100 | DavidEichmann | (~david@62.110.198.146.dyn.plus.net) |
2020-11-19 20:02:21 +0100 | knupfer | (~Thunderbi@200116b82cfb870024438394791f27e9.dip.versatel-1u1.de) |
2020-11-19 20:02:25 +0100 | Lord_of_Life | (~Lord@46.217.218.252) (Ping timeout: 240 seconds) |
2020-11-19 20:02:54 +0100 | Lord_of_Life | (~Lord@46.217.218.252) |
2020-11-19 20:02:54 +0100 | Lord_of_Life | (~Lord@46.217.218.252) (Changing host) |
2020-11-19 20:02:54 +0100 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) |
2020-11-19 20:03:32 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 20:03:37 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2020-11-19 20:04:14 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds) |
2020-11-19 20:04:24 +0100 | berberman_ | (~berberman@unaffiliated/berberman) (Ping timeout: 240 seconds) |
2020-11-19 20:04:28 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 272 seconds) |
2020-11-19 20:05:11 +0100 | buckworst | (~nate@125.161.129.195) |
2020-11-19 20:05:29 +0100 | kuribas | (~user@ptr-25vy0i8y4kl4v762twz.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3)) |
2020-11-19 20:06:27 +0100 | buckworst | (~nate@125.161.129.195) (Client Quit) |
2020-11-19 20:08:24 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
2020-11-19 20:09:31 +0100 | he9388 | (2fe3e53b@047-227-229-059.res.spectrum.com) (Remote host closed the connection) |
2020-11-19 20:11:26 +0100 | Rudd0 | (~Rudd0@185.189.115.108) (Ping timeout: 272 seconds) |
2020-11-19 20:13:16 +0100 | buckworst | (~nate@125.161.129.195) |
2020-11-19 20:13:42 +0100 | DavidEichmann | (~david@62.110.198.146.dyn.plus.net) (Remote host closed the connection) |
2020-11-19 20:14:00 +0100 | hackage | nonempty-vector 0.2.1.0 - Non-empty vectors https://hackage.haskell.org/package/nonempty-vector-0.2.1.0 (topos) |
2020-11-19 20:15:01 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 20:15:02 +0100 | kritzefitz | (~kritzefit@212.86.56.80) |
2020-11-19 20:17:16 +0100 | Tario | (~Tario@201.192.165.173) (Ping timeout: 256 seconds) |
2020-11-19 20:17:23 +0100 | bsima | (~bsima@simatime.com) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-11-19 20:18:00 +0100 | bsima | (~bsima@simatime.com) |
2020-11-19 20:18:36 +0100 | Tario | (~Tario@201.192.165.173) |
2020-11-19 20:19:13 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) |
2020-11-19 20:23:57 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) |
2020-11-19 20:30:09 +0100 | comerijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-11-19 20:30:26 +0100 | nbloomf_ | (~nbloomf@2600:1700:ad14:3020:c5d0:5105:4451:33e9) |
2020-11-19 20:31:04 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 246 seconds) |
2020-11-19 20:31:44 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2020-11-19 20:31:48 +0100 | st8less | (~st8less@2603:a060:11fd:0:744d:b66f:d608:4e8e) (Quit: WeeChat 2.9) |
2020-11-19 20:32:52 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:f4f3:bbb1:9462:91ce) (Ping timeout: 260 seconds) |
2020-11-19 20:34:04 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2020-11-19 20:35:23 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) |
2020-11-19 20:39:49 +0100 | Sarma | (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
2020-11-19 20:40:22 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 20:40:34 +0100 | dcoutts_ | (~duncan@33.14.75.194.dyn.plus.net) (Ping timeout: 272 seconds) |
2020-11-19 20:40:35 +0100 | dustypacer | (~pi@2600:6c50:80:2f4a:e9d0:6569:1cea:d1d4) (Remote host closed the connection) |
2020-11-19 20:41:01 +0100 | dustypacer | (~pi@2600:6c50:80:2f4a:e9d0:6569:1cea:d1d4) |
2020-11-19 20:41:42 +0100 | nbloomf_ | (~nbloomf@2600:1700:ad14:3020:c5d0:5105:4451:33e9) (Quit: Textual IRC Client: www.textualapp.com) |
2020-11-19 20:41:58 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff356dc4eeabe79b61ea.dip0.t-ipconnect.de) |
2020-11-19 20:44:18 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:7958:7d8e:4908:c843) |
2020-11-19 20:45:05 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 20:47:52 +0100 | comerijn | merijn |
2020-11-19 20:47:59 +0100 | oats | hafer |
2020-11-19 20:48:06 +0100 | EyalSK | (~EyalSK@bzq-84-109-128-227.red.bezeqint.net) |
2020-11-19 20:48:06 +0100 | EyalSK | (~EyalSK@bzq-84-109-128-227.red.bezeqint.net) (Client Quit) |
2020-11-19 20:49:57 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 20:51:57 +0100 | christo_ | (~chris@81.96.113.213) |
2020-11-19 20:51:57 +0100 | christo | (~chris@81.96.113.213) (Read error: Connection reset by peer) |
2020-11-19 20:52:06 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
2020-11-19 20:52:12 +0100 | waskell_ | (~quassel@d66-183-127-166.bchsia.telus.net) |
2020-11-19 20:52:41 +0100 | christo_ | (~chris@81.96.113.213) (Read error: Connection reset by peer) |
2020-11-19 20:52:57 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 20:54:36 +0100 | waskell | (~quassel@d66-183-127-166.bchsia.telus.net) (Ping timeout: 260 seconds) |
2020-11-19 20:54:43 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 20:55:31 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-19 20:57:17 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Quit: Connection closed) |
2020-11-19 20:57:39 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Client Quit) |
2020-11-19 21:04:23 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-19 21:06:29 +0100 | remby | (~rg@2607:fea8:2c40:307::1ef6) |
2020-11-19 21:06:51 +0100 | Zetagon | (~leo@c151-177-52-233.bredband.comhem.se) (Remote host closed the connection) |
2020-11-19 21:09:06 +0100 | neiluj | (~jco@unaffiliated/neiluj) (Quit: leaving) |
2020-11-19 21:10:05 +0100 | infinity0 | (~infinity0@freenet/developer/infinity0) (Remote host closed the connection) |
2020-11-19 21:10:12 +0100 | knupfer | (~Thunderbi@200116b82cfb870024438394791f27e9.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
2020-11-19 21:10:58 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 246 seconds) |
2020-11-19 21:11:47 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 21:12:09 +0100 | coot_ | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) |
2020-11-19 21:13:31 +0100 | hackage | pcg-random 0.1.3.7 - Haskell bindings to the PCG random number generator. https://hackage.haskell.org/package/pcg-random-0.1.3.7 (cchalmers) |
2020-11-19 21:13:56 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 256 seconds) |
2020-11-19 21:13:57 +0100 | coot_ | coot |
2020-11-19 21:19:12 +0100 | AlterEgo- | (~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving) |
2020-11-19 21:19:19 +0100 | buckwors1 | (~nate@180.251.220.35) |
2020-11-19 21:19:38 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection) |
2020-11-19 21:19:42 +0100 | waskell | (~quassel@d66-183-127-166.bchsia.telus.net) |
2020-11-19 21:19:43 +0100 | waskell_ | (~quassel@d66-183-127-166.bchsia.telus.net) (Ping timeout: 265 seconds) |
2020-11-19 21:20:17 +0100 | ClaudiusMaximus | (~claude@unaffiliated/claudiusmaximus) (Quit: ->) |
2020-11-19 21:20:25 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection) |
2020-11-19 21:21:22 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 21:21:25 +0100 | buckworst | (~nate@125.161.129.195) (Ping timeout: 240 seconds) |
2020-11-19 21:24:48 +0100 | Deide | (~Deide@217.155.19.23) |
2020-11-19 21:29:07 +0100 | <dminuoso> | dolio: The black hole stuff is what justifies O(sqrt(n)) for random access. Without it, you'd arrive at the notion that the maximum of information storable in a region of space is defined by its volume, not its surface. |
2020-11-19 21:29:19 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) |
2020-11-19 21:29:39 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
2020-11-19 21:31:27 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-19 21:31:32 +0100 | Franciman | (~francesco@host-82-56-223-169.retail.telecomitalia.it) (Quit: Leaving) |
2020-11-19 21:31:45 +0100 | andi- | (~andi-@NixOS/user/andi-) (Ping timeout: 272 seconds) |
2020-11-19 21:32:07 +0100 | <dolio> | It doesn't justify it for anything close to an approximation of practical situations, though. And I've heard doubt that the theoretical stuff actually means what people say it means. So it's both unnecessary and potentially discredits you. |
2020-11-19 21:33:01 +0100 | <dminuoso> | Well, it just so happens that the O(sqrt(n)) asymptotics nicely match what we observe in cache hierarchies, local storage, remote storage, etc.. |
2020-11-19 21:33:18 +0100 | <dolio> | Right, so you don't need to appeal to black hole stuff. |
2020-11-19 21:33:31 +0100 | hackage | phonetic-languages-permutations 0.1.0.0 - Commonly used versions of the phonetic-languages-common package https://hackage.haskell.org/package/phonetic-languages-permutations-0.1.0.0 (OleksandrZhabenko) |
2020-11-19 21:33:39 +0100 | <dolio> | So don't. |
2020-11-19 21:33:45 +0100 | <dminuoso> | What's the alternative. "Random access is O(sqrt(n)) but I wont tell you why?" |
2020-11-19 21:34:00 +0100 | <dolio> | They already explained why before talking about the black hole stuff. |
2020-11-19 21:34:26 +0100 | <monochrom> | In the interest of pruning dependencies you don't actually use, if your analysis just needs cache hierarchies, prune everything else. |
2020-11-19 21:35:53 +0100 | <dminuoso> | I guess it depends on the audience, really. |
2020-11-19 21:35:55 +0100 | <dolio> | The reason is that nobody actually knows how to effectively cool 3D stuff on the small scale, so memory is effectively planar. |
2020-11-19 21:36:07 +0100 | <dminuoso> | From the theoretical approach of studying real asymptotics, it seems suitable |
2020-11-19 21:36:26 +0100 | <dolio> | And even when you scale up to data centers, you build on the surface of the earth, so you don't actually scale arbitrarily in 3 dimensions. |
2020-11-19 21:36:28 +0100 | <dminuoso> | Fair, I guess that's a good reason |
2020-11-19 21:37:37 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff356dc4eeabe79b61ea.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2020-11-19 21:38:23 +0100 | <dminuoso> | I was just under the impression that complexity analysis didn't just care for "How does this function behave in some arbitrarily fixed region", but about the limiting factor in theory |
2020-11-19 21:39:30 +0100 | <dminuoso> | But your arguments about 2-dimensionality are still valid, as it's reasonable to assume that if we increase memory, we still will approximately only fill the surface of the earth |
2020-11-19 21:40:15 +0100 | <dminuoso> | But then we should take into account that there's large regions on the earth where we wont build data centers |
2020-11-19 21:40:30 +0100 | <dminuoso> | And that we have limited resources to even build memory |
2020-11-19 21:41:00 +0100 | hackage | phonetic-languages-permutations 0.1.1.0 - Commonly used versions of the phonetic-languages-common package https://hackage.haskell.org/package/phonetic-languages-permutations-0.1.1.0 (OleksandrZhabenko) |
2020-11-19 21:41:07 +0100 | Boomerang | (~Boomerang@xd520f68c.cust.hiper.dk) |
2020-11-19 21:41:29 +0100 | Aquazi | (uid312403@gateway/web/irccloud.com/x-sgcggzhikhhgebxn) (Quit: Connection closed for inactivity) |
2020-11-19 21:42:25 +0100 | invaser | (~Thunderbi@31.148.23.125) |
2020-11-19 21:42:48 +0100 | <dolio> | How is that going to inform a better asymptotic cost of memory access than √n? |
2020-11-19 21:43:08 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 21:43:34 +0100 | <dolio> | You don't need to address every possible nitpick. There just needs to be a reason to use one model over another. |
2020-11-19 21:45:03 +0100 | <dolio> | √n is actually better for a lot of things empirically, regardless of any theoretical justification. The latter only helps you understand why. |
2020-11-19 21:45:41 +0100 | andi- | (~andi-@NixOS/user/andi-) |
2020-11-19 21:47:11 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
2020-11-19 21:48:20 +0100 | nckx | jorts |
2020-11-19 21:49:48 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
2020-11-19 21:50:24 +0100 | borne | (~fritjof@200116b864eda200f1dc39039d201adf.dip.versatel-1u1.de) (Ping timeout: 240 seconds) |
2020-11-19 21:50:35 +0100 | <monochrom> | More meta-ly, a lot of programmers are unable to accept that we have and use models, not absolute truths; and even that some of those models are purely empirical, i.e., no one bothered to dig deeper for why the model fits observation. |
2020-11-19 21:51:08 +0100 | <monochrom> | Engineers have made peace with that for a long time, and it's why engineers are so successful. |
2020-11-19 21:51:42 +0100 | buckwors1 | (~nate@180.251.220.35) (Quit: WeeChat 2.9) |
2020-11-19 21:51:42 +0100 | <monochrom> | This is one of many aspects programmers still have a long way to go before we can legitimately call them "software engineers". |
2020-11-19 21:52:21 +0100 | <dolio> | And since no one is using black holes for memory (and won't for the forseeable future), that isn't a good explanation for why the model works anyway. |
2020-11-19 21:53:20 +0100 | <monochrom> | From the engineering point of view, a model is judged for merely this: For the scope of your application (possibly very niche and narrow), how much computation you need to get how much prediction accuracy. |
2020-11-19 21:53:36 +0100 | foursaph | (~foursaph@dynamic-077-000-101-034.77.0.pool.telefonica.de) (Ping timeout: 240 seconds) |
2020-11-19 21:54:01 +0100 | <monochrom> | (A scientist then dig deeper for why the model works so nicely, what is the deeper model behind it.) |
2020-11-19 21:54:11 +0100 | <merijn> | monochrom: Not if you're me |
2020-11-19 21:54:23 +0100 | jorts | nckx |
2020-11-19 21:54:41 +0100 | <merijn> | Then you just go "you guys all suck so hard at engineering I had to spend most of my phd doing the engineering to even investigate these models and now I can't tell you why it works and I blame you" :p |
2020-11-19 21:55:00 +0100 | hackage | phonetic-languages-simplified-common 0.1.0.0 - A simplified version of the phonetic-languages-functionality https://hackage.haskell.org/package/phonetic-languages-simplified-common-0.1.0.0 (OleksandrZhabenko) |
2020-11-19 21:55:36 +0100 | <monochrom> | The fact that programmers are so unhealthy OCD with absolute truths is one of many reasons why I say that programmers are in the same genre as priests. |
2020-11-19 21:55:37 +0100 | conal | (~conal@64.71.133.70) (Read error: Connection reset by peer) |
2020-11-19 21:55:48 +0100 | <alephu5[m]> | monochrom: Do you really think that programmers are more bound to theory than traditional engineers? That's not my experience of the industry at all |
2020-11-19 21:56:12 +0100 | <merijn> | alephu5[m]: His point is that they are, but the industry refuses to acknowledge it |
2020-11-19 21:56:19 +0100 | <merijn> | Which is why they keep building broken trash :p |
2020-11-19 21:56:33 +0100 | <aoei> | monochrom: lmao |
2020-11-19 21:56:34 +0100 | <monochrom> | I am saying that programmers are bound to theory in the wrong way. |
2020-11-19 21:56:38 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 21:56:55 +0100 | Sgeo_ | (~Sgeo@ool-18b982ad.dyn.optonline.net) |
2020-11-19 21:57:02 +0100 | <aoei> | monochrom: I was in academic science for a few years.. many of those people are also like that :P |
2020-11-19 21:58:01 +0100 | seanparsons | (~sean@cpc145088-gill21-2-0-cust281.20-1.cable.virginm.net) (Quit: ZNC 1.8.1 - https://znc.in) |
2020-11-19 21:58:06 +0100 | <merijn> | Most of the HPC/"empirical" side of CS is a joke, tbh >.> |
2020-11-19 21:58:32 +0100 | <monochrom> | You give a piece of theory to engineers, they take it as a model. It works? Cool. It doesn't work? They just look for another model. |
2020-11-19 21:59:06 +0100 | <aoei> | monochrom: smart folk |
2020-11-19 21:59:10 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 21:59:21 +0100 | <monochrom> | You give a piece of theory to programmers, they take it as a religion. It can only be absolutely true or absolutely heretic. |
2020-11-19 21:59:45 +0100 | Sgeo | (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 240 seconds) |
2020-11-19 21:59:45 +0100 | conal | (~conal@64.71.133.70) (Client Quit) |
2020-11-19 22:00:00 +0100 | <aoei> | i wonder if programmers is too broad and you mean a specific subset |
2020-11-19 22:00:16 +0100 | <dolio> | Well, it isn't just programmers, either. |
2020-11-19 22:00:17 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 22:00:22 +0100 | <merijn> | monochrom: Pfft, I belief in paraconsistent logics, I'm perfectly happy believing piece of theory to be simultaneously absolutely true *and* heretical :) |
2020-11-19 22:00:27 +0100 | seanparsons | (~sean@cpc145088-gill21-2-0-cust281.20-1.cable.virginm.net) |
2020-11-19 22:00:29 +0100 | <monochrom> | Modulo the programer in question actually has the intellectual capacity to properly read the piece of theory in the first place, of course. |
2020-11-19 22:00:30 +0100 | <alephu5[m]> | But if assumptions A, B and C imply a particular model that fails drastically, it's often useful to the pragmatist to know that the assumptions are wrong |
2020-11-19 22:00:42 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 22:00:42 +0100 | zx__ | (~oracle@unaffiliated/oracle) (Read error: Connection reset by peer) |
2020-11-19 22:00:44 +0100 | <davean> | Yah, and I mean thats also true for one side of it. On the mathematical side its either true of false, on the HW side it can be more varied. Both sides often want approximations. |
2020-11-19 22:01:39 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) |
2020-11-19 22:01:46 +0100 | kish` | (~oracle@unaffiliated/oracle) |
2020-11-19 22:02:26 +0100 | bitmagie | (~Thunderbi@200116b806fd8d007960b9f54c7c6d5e.dip.versatel-1u1.de) |
2020-11-19 22:03:03 +0100 | <dolio> | The usual "theory vs. practice" truism is really a nonsense way of thinking. Theories are useful when they can be applied to practice, and they should be informed and developed by practice. And practice can be assisted by a good/suitable theory. |
2020-11-19 22:03:46 +0100 | <dolio> | Learning a "theory" that never applies to practice is just kind of useless unless you enjoy the activity in itself. |
2020-11-19 22:04:09 +0100 | britva | (~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Quit: This computer has gone to sleep) |
2020-11-19 22:04:12 +0100 | <monochrom> | Yeah. Knuth said: The best theory is inspired by practice. The best practice is inspired by theory. (I forgot whether that's his order haha.) |
2020-11-19 22:04:19 +0100 | bitmagie | (~Thunderbi@200116b806fd8d007960b9f54c7c6d5e.dip.versatel-1u1.de) (Client Quit) |
2020-11-19 22:05:25 +0100 | borne | (~fritjof@200116b864eda200f1dc39039d201adf.dip.versatel-1u1.de) |
2020-11-19 22:06:00 +0100 | britva | (~britva@2a02:aa13:7240:2980:9169:d6ce:8b28:2e63) |
2020-11-19 22:06:46 +0100 | Lycurgus | (~niemand@cpe-45-46-142-188.buffalo.res.rr.com) |
2020-11-19 22:07:05 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 240 seconds) |
2020-11-19 22:07:07 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
2020-11-19 22:08:17 +0100 | <maerwald> | monochrom: you got that wrong... some priests are good people :) |
2020-11-19 22:08:58 +0100 | arahael | (~arahael@125-209-166-120.tpgi.com.au) (Ping timeout: 256 seconds) |
2020-11-19 22:10:04 +0100 | <alephu5[m]> | <dolio "Learning a "theory" that never a"> Isn't that philosophy? |
2020-11-19 22:11:06 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Quit: Leaving) |
2020-11-19 22:11:08 +0100 | arahael | (~arahael@14-203-208-142.tpgi.com.au) |
2020-11-19 22:11:16 +0100 | <davean> | maerwald: unlike any programmers |
2020-11-19 22:11:28 +0100 | <maerwald> | I didn't say thate :p |
2020-11-19 22:11:34 +0100 | <maerwald> | (but I thought it) |
2020-11-19 22:12:04 +0100 | <dolio> | alephu5[m]: Maybe. I don't put a lot of stock in philosophy. :) |
2020-11-19 22:12:19 +0100 | sand_dull | (~theuser@c-73-149-95-105.hsd1.ct.comcast.net) |
2020-11-19 22:13:40 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection) |
2020-11-19 22:15:06 +0100 | sand_dull | (~theuser@c-73-149-95-105.hsd1.ct.comcast.net) (Client Quit) |
2020-11-19 22:15:10 +0100 | Lycurgus | .oO( what part of perpetuating stupid lies about the nature of reality and man's relation to it is good?) |
2020-11-19 22:15:33 +0100 | sand_dull | (~theuser@c-73-149-95-105.hsd1.ct.comcast.net) |
2020-11-19 22:15:54 +0100 | Lycurgus | (~niemand@cpe-45-46-142-188.buffalo.res.rr.com) (Quit: Exeunt) |
2020-11-19 22:15:55 +0100 | glguy | wonders how far back he'd need to read to find Haskell in this |
2020-11-19 22:16:44 +0100 | son0p | (~son0p@181.136.122.143) |
2020-11-19 22:18:28 +0100 | <zincy__> | monochrom: Right, but don't most programmers implicitly accept they are using models? |
2020-11-19 22:18:56 +0100 | <zincy__> | A voltage is never exactly "high" or "low" ... |
2020-11-19 22:19:59 +0100 | <zincy__> | We dont even need electricity to build computers |
2020-11-19 22:20:05 +0100 | sand_dull | (~theuser@c-73-149-95-105.hsd1.ct.comcast.net) (Client Quit) |
2020-11-19 22:20:19 +0100 | <zincy__> | Surely an acceptance of these facts is an implicit agreement that we use models |
2020-11-19 22:20:21 +0100 | <dolio> | Good thing the model doesn't talk about voltages, then. |
2020-11-19 22:20:34 +0100 | neiluj | (~jco@91-167-203-101.subs.proxad.net) |
2020-11-19 22:20:34 +0100 | neiluj | (~jco@91-167-203-101.subs.proxad.net) (Changing host) |
2020-11-19 22:20:34 +0100 | neiluj | (~jco@unaffiliated/neiluj) |
2020-11-19 22:20:35 +0100 | sand_dull | (~theuser@c-73-149-95-105.hsd1.ct.comcast.net) |
2020-11-19 22:20:44 +0100 | <zincy__> | dolio: What do you mean |
2020-11-19 22:21:18 +0100 | <dolio> | If you're not using electricity to implement computation, it wouldn't make much sense for your model of computation to talk about voltages. |
2020-11-19 22:22:12 +0100 | <zincy__> | Yeah |
2020-11-19 22:22:47 +0100 | chaosmasttter | (~chaosmast@p200300c4a70b2a01441f1455f36b3658.dip0.t-ipconnect.de) (Quit: WeeChat 2.9) |
2020-11-19 22:24:10 +0100 | <zincy__> | What is it Marvin Minsky said, a computer is a a physical model of an abstract process. |
2020-11-19 22:25:10 +0100 | son0p | (~son0p@181.136.122.143) (Quit: Lost terminal) |
2020-11-19 22:25:34 +0100 | son0p | (~son0p@181.136.122.143) |
2020-11-19 22:25:35 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2020-11-19 22:25:55 +0100 | chkno | (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 22:26:29 +0100 | pavonia | (~user@unaffiliated/siracusa) |
2020-11-19 22:26:54 +0100 | zyxtant | (~zyextant@120.155.30.153) (Ping timeout: 265 seconds) |
2020-11-19 22:28:07 +0100 | gienah | (~mwright@gentoo/developer/gienah) (Quit: leaving) |
2020-11-19 22:28:44 +0100 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 240 seconds) |
2020-11-19 22:28:57 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2020-11-19 22:29:10 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-19 22:30:06 +0100 | knupfer | (~Thunderbi@200116b82cfb8700905b10fffed96eb6.dip.versatel-1u1.de) |
2020-11-19 22:30:07 +0100 | knupfer | (~Thunderbi@200116b82cfb8700905b10fffed96eb6.dip.versatel-1u1.de) (Client Quit) |
2020-11-19 22:30:20 +0100 | knupfer | (~Thunderbi@87.123.206.167) |
2020-11-19 22:34:14 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 22:34:16 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-19 22:35:24 +0100 | alp | (~alp@2a01:e0a:58b:4920:8196:f1ff:e993:87c3) |
2020-11-19 22:36:06 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) |
2020-11-19 22:39:20 +0100 | Bad_K4rMa | (~Bad_K4rMa@unaffiliated/rjphares) |
2020-11-19 22:40:41 +0100 | <Bad_K4rMa> | couple haskell books for sale cheap less than 24 hours left: https://www.ebay.com/usr/roph-rjp-nb5hus5uzh |
2020-11-19 22:41:36 +0100 | justan0theruser | (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 240 seconds) |
2020-11-19 22:42:24 +0100 | sand_dull | (~theuser@c-73-149-95-105.hsd1.ct.comcast.net) (Ping timeout: 256 seconds) |
2020-11-19 22:45:13 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Read error: Connection reset by peer) |
2020-11-19 22:45:38 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2020-11-19 22:47:15 +0100 | rprije | (~rprije@124.148.131.132) |
2020-11-19 22:47:20 +0100 | aidecoe | (~aidecoe@unaffiliated/aidecoe) |
2020-11-19 22:49:01 +0100 | benb | (52456307@82-69-99-7.dsl.in-addr.zen.co.uk) |
2020-11-19 22:49:56 +0100 | knupfer1 | (~Thunderbi@200116b82cfb8700286c2aae4538dae1.dip.versatel-1u1.de) |
2020-11-19 22:49:56 +0100 | knupfer | (~Thunderbi@87.123.206.167) (Read error: Connection reset by peer) |
2020-11-19 22:49:56 +0100 | knupfer1 | knupfer |
2020-11-19 22:53:42 +0100 | neiluj | (~jco@unaffiliated/neiluj) (Quit: leaving) |
2020-11-19 22:55:15 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-19 22:55:19 +0100 | dhouthoo | (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9) |
2020-11-19 22:56:03 +0100 | christo | (~chris@81.96.113.213) |
2020-11-19 22:56:53 +0100 | zerstroyer[m] | (zerstroyer@gateway/shell/matrix.org/x-thvxsfmerzqegbym) |
2020-11-19 22:59:54 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 256 seconds) |
2020-11-19 23:00:28 +0100 | christo | (~chris@81.96.113.213) (Ping timeout: 256 seconds) |
2020-11-19 23:02:28 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 260 seconds) |
2020-11-19 23:04:40 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:9217:95c7:973d:d0ad) (Quit: cosimone) |
2020-11-19 23:06:27 +0100 | falafel | (~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) |
2020-11-19 23:06:44 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving) |
2020-11-19 23:10:45 +0100 | hyperisco | (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 240 seconds) |
2020-11-19 23:14:25 +0100 | conal | (~conal@64.71.133.70) |
2020-11-19 23:16:16 +0100 | mananamenos | (~mananamen@84.122.202.215.dyn.user.ono.com) (Ping timeout: 246 seconds) |
2020-11-19 23:18:46 +0100 | britva | (~britva@2a02:aa13:7240:2980:9169:d6ce:8b28:2e63) (Quit: This computer has gone to sleep) |
2020-11-19 23:18:54 +0100 | cyphase | (~cyphase@unaffiliated/cyphase) (Ping timeout: 272 seconds) |
2020-11-19 23:19:25 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 264 seconds) |
2020-11-19 23:21:27 +0100 | Bad_K4rMa | (~Bad_K4rMa@unaffiliated/rjphares) (Ping timeout: 260 seconds) |
2020-11-19 23:21:39 +0100 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) |
2020-11-19 23:21:56 +0100 | Rudd0 | (~Rudd0@185.189.115.108) |
2020-11-19 23:22:22 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-19 23:22:55 +0100 | dcoutts_ | (~duncan@33.14.75.194.dyn.plus.net) |
2020-11-19 23:24:30 +0100 | magma | (~magma@host-87-20-128-180.retail.telecomitalia.it) |
2020-11-19 23:24:40 +0100 | magma | (~magma@host-87-20-128-180.retail.telecomitalia.it) (Read error: Connection reset by peer) |
2020-11-19 23:26:42 +0100 | knupfer | (~Thunderbi@200116b82cfb8700286c2aae4538dae1.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
2020-11-19 23:26:48 +0100 | cyphase | (~cyphase@unaffiliated/cyphase) |
2020-11-19 23:28:03 +0100 | britva | (~britva@2a02:aa13:7240:2980:9169:d6ce:8b28:2e63) |
2020-11-19 23:28:43 +0100 | Boomerang | (~Boomerang@xd520f68c.cust.hiper.dk) (Ping timeout: 260 seconds) |
2020-11-19 23:29:12 +0100 | hafer | didymos |
2020-11-19 23:31:26 +0100 | cads | (~cads@ip-64-72-99-232.lasvegas.net) |
2020-11-19 23:32:12 +0100 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds) |
2020-11-19 23:32:50 +0100 | britva | (~britva@2a02:aa13:7240:2980:9169:d6ce:8b28:2e63) (Client Quit) |
2020-11-19 23:33:08 +0100 | crdrost | (~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) (Quit: This computer has gone to sleep) |
2020-11-19 23:37:36 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
2020-11-19 23:44:00 +0100 | conal | (~conal@64.71.133.70) (Ping timeout: 260 seconds) |
2020-11-19 23:46:35 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:7958:7d8e:4908:c843) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-19 23:47:12 +0100 | DirefulSalt | (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
2020-11-19 23:47:19 +0100 | conal | (~conal@ip-66-115-176-195.creativelink.net) |
2020-11-19 23:47:43 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 256 seconds) |
2020-11-19 23:47:51 +0100 | DirefulSalt | (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection) |
2020-11-19 23:48:17 +0100 | DirefulSalt | (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
2020-11-19 23:48:24 +0100 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) |
2020-11-19 23:54:38 +0100 | p8m_ | (p8m@gateway/vpn/protonvpn/p8m) (Quit: birdd) |
2020-11-19 23:54:58 +0100 | p8m | (p8m@gateway/vpn/protonvpn/p8m) |
2020-11-19 23:56:00 +0100 | hackage | pandoc 2.11.2 - Conversion between markup formats https://hackage.haskell.org/package/pandoc-2.11.2 (JohnMacFarlane) |
2020-11-19 23:56:08 +0100 | xerox_ | (~xerox@unaffiliated/xerox) (Ping timeout: 260 seconds) |
2020-11-19 23:56:17 +0100 | <monochrom> | zincy__: Consider how many programmers simply insist that recursive calls must consume call stack space except for tail recursion under TCO. Especially being very unambiguously specific about "stack", "call stack", and "tail". |
2020-11-19 23:57:29 +0100 | <monochrom> | Here in #haskell we enjoy a pretty good proxy statistics based on the frequency of someone coming in to ask "so, does Haskell do TCO?" |
2020-11-19 23:57:46 +0100 | jwynn6 | (~jwynn6@050-088-122-078.res.spectrum.com) (Ping timeout: 265 seconds) |
2020-11-19 23:58:34 +0100 | <monochrom> | A clear sign that the askers took their models too religiously. |
2020-11-19 23:58:53 +0100 | Feuermagier | (~Feuermagi@213.178.26.41) |
2020-11-19 23:58:58 +0100 | crdrost | (~crdrost@2601:646:8280:85f0:90f7:1b03:f01f:afae) |
2020-11-19 23:59:19 +0100 | jwynn6 | (~jwynn6@050-088-122-078.res.spectrum.com) |