Logs on 2021-07-14 (liberachat/#haskell)
| 00:00:42 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 272 seconds) |
| 00:03:43 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds) |
| 00:04:27 | → | gentauro joins (~gentauro@user/gentauro) |
| 00:04:40 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 00:05:15 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 00:08:03 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal) |
| 00:08:13 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 00:09:47 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 00:12:45 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 255 seconds) |
| 00:13:04 | × | hseg quits (~gesh@185.120.126.10) (Quit: WeeChat 3.2) |
| 00:13:48 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 00:14:19 | × | silverwhitefish quits (~hidden@47.202.102.10) (Quit: One for all, all for One (2 Corinthians 5)) |
| 00:16:18 | × | falafel quits (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 272 seconds) |
| 00:16:48 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 268 seconds) |
| 00:26:26 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
| 00:27:25 | → | fryguybob joins (~fryguybob@cpe-74-65-31-113.rochester.res.rr.com) |
| 00:27:58 | → | silverwhitefish joins (~hidden@47.202.102.10) |
| 00:31:04 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 00:31:42 | × | Guest3034 quits (~mike@user/feetwind) (Quit: WeeChat 3.1) |
| 00:31:54 | → | feetwind joins (~mike@user/feetwind) |
| 00:33:16 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 00:38:47 | <hololeap> | every person has exactly two biological parents... is that a reasonable enough assumption? |
| 00:39:11 | → | falafel joins (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) |
| 00:40:46 | <geekosaur> | for genetics yes, for other aspects no |
| 00:41:11 | <geekosaur> | and the biological parents may be unrelated to the familial parents |
| 00:41:46 | <hololeap> | That's why I specified _biological_ parents |
| 00:42:09 | <hololeap> | I'd be interested in hearing of a case where someone didn't have exactly two biological parents |
| 00:42:15 | <hololeap> | cloning? |
| 00:42:43 | <hololeap> | someone = an individual of the homo-sapeins species |
| 00:43:32 | <geekosaur> | actually davean's earlier comment implied unexpected complexity |
| 00:44:35 | <hololeap> | I understand that it wouldn't necessarily make a nice binary tree all the way up, but I'm wondering if we can at least hold it as axiomatic that each individual has exactly two biological parents |
| 00:45:37 | <davean> | geekosaur: well, consider if you had an egg donated, but used the birthing mother's nucleus with some male's sperm. We're up to 3 now. And that differs mitocondrially |
| 00:45:44 | <davean> | geekosaur: Thats a simple case |
| 00:45:55 | <geekosaur> | was considering raising that case |
| 00:46:03 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 255 seconds) |
| 00:46:06 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 00:46:16 | <hololeap> | I would think the egg and sperm donors would be the two in that case |
| 00:46:42 | <davean> | hololeap: nope, the nucleous provide's materal DNS also |
| 00:46:57 | <davean> | You've got 3 clear DNA sources |
| 00:47:05 | <davean> | all providing seperate DNA |
| 00:47:19 | <hololeap> | I guess you could argue that the blood from the surrugate mother would be in the fetus as well |
| 00:47:31 | <davean> | No, no, I'm talking clearer than that here |
| 00:47:48 | <davean> | I wasn't even talking about a surrugate - though that can matter also of course |
| 00:47:53 | <davean> | also, can I remind you of chimeras? |
| 00:48:01 | <hololeap> | lol |
| 00:48:26 | <davean> | They happen |
| 00:48:43 | <davean> | ANYWAY, parents are complicated |
| 00:49:05 | <hololeap> | I'm definitely not trying to mock... but what do you mean by chimeras? |
| 00:49:22 | <davean> | hololeap: chimeras are where multiple zygotes merge and form one individual |
| 00:49:42 | <hololeap> | oh... ok. I thought you meant like a human-animal hybrid |
| 00:49:50 | <davean> | No, its a human-human hybrid |
| 00:49:56 | <davean> | So maybe you're you, but your liver is your unborn sister. |
| 00:49:57 | → | MQ-17J joins (~MQ-17J@8.21.10.15) |
| 00:50:15 | <davean> | Or maybe your unborn half brother |
| 00:50:16 | <hololeap> | No, I've never heard of that and that's really interesting |
| 00:50:46 | <davean> | Look, this is REALLY complicated. And some politicans got together and decided what data would go on the forms |
| 00:50:59 | <davean> | :) |
| 00:51:03 | <davean> | The best way to make a standard |
| 00:51:16 | <hololeap> | fair enough. I just wanted to find a model that would make sense, but it sounds like it can get really bizarre |
| 00:51:27 | <davean> | REALLY bizar |
| 00:51:52 | <davean> | You could have mitocondria from one person, male and female donated from 2 others, and be a chimera |
| 00:51:54 | <davean> | Who the fuck knows |
| 00:52:09 | <hololeap> | where can I read more about this? |
| 00:52:26 | <davean> | Uh, no idea |
| 00:52:35 | <davean> | https://en.wikipedia.org/wiki/Chimera_(genetics) has a section on human chimeras |
| 00:52:43 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 00:52:47 | <davean> | the first example has shown up in IVF |
| 00:53:13 | <davean> | uh, I only know about this because I had to descamble genetics databases for a genetics lab information management tool back in the day |
| 00:53:35 | <hololeap> | that's cool. you have first-hand evidence |
| 00:54:20 | <davean> | oh huh, wikipedia says, after I got out of this, there DID become human-animal chimeras |
| 00:54:23 | <davean> | well thats a thing |
| 00:54:38 | <davean> | So yah, your parents might even be different species I guess |
| 00:54:44 | <davean> | Thats even more complicated than I knew of! |
| 00:55:19 | <davean> | hololeap: oh this actually suggests a REALLY simple case I didn't even think of! Organ donation |
| 00:55:30 | <davean> | I mean not what people generally mean here, but in a medical sense it matters |
| 00:58:23 | <davean> | hololeap: https://www.statnews.com/2019/01/24/first-trial-of-three-person-ivf-for-infertility/ here is the origional case I listed, or a way it happens |
| 00:58:35 | × | lbseale quits (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer) |
| 00:58:49 | <davean> | I don't know how much you know about biology, I was guessing not much sine the initial example seemed to miss, but that could be how I said it |
| 00:59:07 | <davean> | basicly mitochondria are seperate "sub cells" with their own genetics |
| 00:59:28 | <davean> | seperate from what you generally think of as "your DNA" from your basic bio classes in HS |
| 00:59:57 | <davean> | and its purely matrolineal (under normal circumstances! One COULD swap them out from the father of course if done on purpose!) |
| 01:04:12 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 01:04:18 | × | Guest6176 quits (~Guest61@2001:ac8:27:20::a01e) (Quit: Client closed) |
| 01:05:18 | → | bitmapper joins (uid464869@id-464869.tooting.irccloud.com) |
| 01:13:37 | → | nate1 joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
| 01:15:11 | × | zeenk quits (~zeenk@2a02:2f04:a106:9600:82fb:aed9:ca9:38d3) (Quit: Konversation terminated!) |
| 01:15:15 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 01:16:05 | → | notzmv joins (~zmv@user/notzmv) |
| 01:18:11 | <hololeap> | I'm not that familiar with that level of human biology, mostly just the basic stuff that you mentioned from HS. I know a bit more about botany and I know that can get really bizarre as well |
| 01:18:34 | <yin[m]> | this is hilariously creepy https://www.youtube.com/watch?v=Kw0AEtrr7E0 |
| 01:19:05 | × | smichel17 quits (~smichel17@2601:193:8300:4b9::600) (Quit: smichel17) |
| 01:23:27 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 265 seconds) |
| 01:23:46 | → | norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) |
| 01:25:10 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 01:27:25 | <hololeap> | davean: I thought of organ donation after you mentioned the possibility of my liver being from a different zygote, and it ties into that whole philosophical dilemma of when a person stops being human after N bionic body replacements |
| 01:27:25 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds) |
| 01:28:04 | <davean> | stops being human? I'd think the question would be when they stop being the same human |
| 01:28:28 | <geekosaur> | "bionic" |
| 01:29:10 | × | xff0x quits (~xff0x@2001:1a81:5314:1800:204a:df94:d24b:de67) (Ping timeout: 246 seconds) |
| 01:29:32 | <hololeap> | there's a futurama episode that goes into this :) |
| 01:29:34 | <geekosaur> | kinda odd to consider a human in the context of the ship of Theseus |
| 01:30:07 | <davean> | geekosaur: I don't find it odd at all - or I find it odd to consider a person is the same person over any period of time thats non-negligable |
| 01:30:28 | <davean> | if someone doesn't change, they're not really worth considering much of a person, are they? |
| 01:30:53 | <davean> | if they don't act, or think like they did, how would you determin they're the same? |
| 01:31:02 | → | xff0x joins (~xff0x@2001:1a81:5355:ca00:f556:f8e3:c42f:ffef) |
| 01:31:08 | <geekosaur> | I'm actually on your side of that argument, but their body parts have continuity even though they have changed |
| 01:31:19 | <geekosaur> | (cells already do the ship of theseus thing) |
| 01:31:32 | <nshepperd> | a human is the squishy thing in the skull. the rest is just scaffolding |
| 01:32:46 | <hololeap> | I read about cases of people taking on their donors memories after getting an organ transplant... not sure if it's true or not, but interesting to consider nonetheless |
| 01:33:34 | × | nate1 quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds) |
| 01:34:50 | × | bontaq quits (~user@ool-18e47f8d.dyn.optonline.net) (Ping timeout: 272 seconds) |
| 01:35:10 | ← | shriekingnoise parts (~shrieking@186.137.144.80) (ERC (IRC client for Emacs 28.0.50)) |
| 01:36:29 | → | hughjfchen joins (~hughjfche@vmi556545.contaboserver.net) |
| 01:37:23 | × | son0p quits (~ff@181.136.122.143) (Remote host closed the connection) |
| 01:37:38 | <hololeap> | geekosaur: I'm reading about the ship of Thesus, and it seems like the quintessential thought experiment in regards to what I mentioned about bionic body replacement |
| 01:38:06 | <geekosaur> | probably what the futurama ep was riffing on |
| 01:38:29 | <hololeap> | yeah probably |
| 01:38:58 | → | nate1 joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
| 01:39:44 | <dexterfoo> | is attoparsec still a good choice (efficient) if i don't need any backtracking? |
| 01:40:38 | <hololeap> | dexterfoo: I think so, but megaparsec is supposed to have similar efficiency... someone else can probably go into more detail on this |
| 01:42:25 | <davean> | dexterfoo: attoparsec forces copying in its buffer |
| 01:42:45 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 255 seconds) |
| 01:43:42 | <davean> | For many cases you can get faster elsewhere. I've had to add functions to attoparsec to keep acceptable performance vs. other things, but I haven't done side-by-side benchmarks with other standard offerings lately. I'd suspect attoparsec losses though - it certainly loses in many cases against naive implimentations. |
| 01:44:01 | <davean> | I'm moving everything off attoparsec slowly |
| 01:45:01 | → | renzhi joins (~xp@2607:fa49:655f:a700::8b9f) |
| 01:45:30 | × | jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 256 seconds) |
| 01:45:43 | → | stevenxl joins (~stevenlei@66.63.167.105) |
| 01:46:18 | × | stevenxl quits (~stevenlei@66.63.167.105) (Client Quit) |
| 01:49:03 | <dexterfoo> | davean: to which library? |
| 01:50:05 | → | stevenxl joins (uid133530@id-133530.highgate.irccloud.com) |
| 01:50:15 | <davean> | I didn't imply to a specific library. I just ran the parse combinators against a 'machines' stream and removed the duplication of having a parser library for most of the stuff I was doing, because my core inefficiency was due to poor buffer management in attoparsec, but "more appropriate things" I have no reason to move to one specific thing to solve all my problems. |
| 01:51:00 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 01:51:57 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 276 seconds) |
| 01:55:16 | <hololeap> | dexterfoo: I think it would be a good idea to compare it to megaparsec at the very least. also check out megaparsec's github page because there are some benchmark results on there |
| 01:56:31 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 01:57:06 | <dexterfoo> | ok, but i am parsing streaming data with conduit, which has a Data.Conduit.Attoparsec module, but there is no megaparsec integration |
| 01:57:09 | × | nate1 quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds) |
| 01:59:41 | <davean> | A) ok, great B) why would you need to to make that explicitely? C) if you just want it to be easy, use what you have at hand? |
| 02:01:26 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 272 seconds) |
| 02:02:02 | → | nate1 joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
| 02:02:04 | <dexterfoo> | i am using attoparsec and it works and is easy, but i am wondering if there is a faster way |
| 02:03:37 | <stevenxl> | Hey folks. I have a newtype wrapper around a list of Ints, and I'd like a property test that if the list contains the number 1 in it, I get back the result `One`. |
| 02:03:42 | <davean> | Oh theres a definately a faster way |
| 02:03:49 | <stevenxl> | I wrote a quick script just to show what I mean: |
| 02:03:58 | <davean> | attoparsec can't be anywhere NEAR the fastest - parse theory tells us that, its the wrong structure |
| 02:04:01 | <stevenxl> | https://www.irccloud.com/pastebin/MPAt1waK/ |
| 02:04:26 | <stevenxl> | Of course, the problem is that the instance of `Arbitrary` that I have created will always add one to the head of the list. |
| 02:04:47 | <stevenxl> | I'd like to add it at the head, the tail, or somewhere in-between randomly. |
| 02:05:02 | <davean> | stevenxl: filter? |
| 02:05:19 | <stevenxl> | davean: Sorry. I'm not following you. |
| 02:05:20 | <Axman6> | generate a random number between 0 and length list and insert it at that location |
| 02:05:38 | <davean> | stevenxl: you can make sure 1 isn't in the list easily, you can also check if 1 is in the list easily, thus you can construct both cases |
| 02:05:49 | <davean> | you can also randomly sort the list |
| 02:05:59 | <stevenxl> | Axman6: Thanks. That's what I think I need! |
| 02:06:24 | <Axman6> | do { list <- arbitrary; idx <- choose (0,length list); pure $ ContainsOne (insert idx 1 list) } -- you might need to write insert |
| 02:06:45 | <stevenxl> | Axman6: perfect. |
| 02:06:49 | <Axman6> | and you'll probably need to look up the correct name for choose |
| 02:07:05 | <stevenxl> | Yup - I can look that up in the quickcheck docs / generator section. |
| 02:09:17 | → | Guest43 joins (~Guest43@187.83.249.216.dyn.smithville.net) |
| 02:11:34 | × | thonkpod quits (~thonkpod@user/thonkpod) (Ping timeout: 256 seconds) |
| 02:17:24 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 255 seconds) |
| 02:17:46 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 02:18:22 | × | td_ quits (~td@94.134.91.7) (Ping timeout: 256 seconds) |
| 02:19:08 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:19:08 | FinnElija | is now known as Guest2571 |
| 02:19:08 | × | Guest2571 quits (~finn_elij@user/finn-elija/x-0085643) (Killed (sodium.libera.chat (Nickname regained by services))) |
| 02:19:08 | finn_elija | is now known as FinnElija |
| 02:19:49 | → | td_ joins (~td@muedsl-82-207-238-063.citykom.de) |
| 02:22:42 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 02:26:14 | × | phma quits (phma@2001:5b0:211f:8638:196:5581:d6d8:1f7e) (Remote host closed the connection) |
| 02:26:43 | → | phma joins (~phma@2001:5b0:211f:8638:196:5581:d6d8:1f7e) |
| 02:34:03 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 255 seconds) |
| 02:36:40 | → | thonkpod joins (~thonkpod@user/thonkpod) |
| 02:38:56 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds) |
| 02:41:30 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 02:44:37 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 02:53:24 | × | MQ-17J quits (~MQ-17J@8.21.10.15) (Ping timeout: 255 seconds) |
| 02:57:00 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds) |
| 02:57:29 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 03:01:37 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 03:03:18 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 03:08:33 | × | FixedPointDude quits (~FixedPoin@204.237.49.106) (Quit: Client closed) |
| 03:09:57 | <dsal> | stevenxl: arbitrary = notOnes >>= \a -> notOnes >>= \b -> pure $ a <> [1] <> b |
| 03:10:28 | <Axman6> | notOnes could just be arbitrary |
| 03:10:42 | <Axman6> | all that's needed is that it contains a one, not that it contains only one one |
| 03:10:55 | <dsal> | Where notOnes = arbitrary `suchThat` (notElem 1) |
| 03:11:00 | <dsal> | Oh, then yeah |
| 03:11:37 | <Axman6> | concat <$> sequence [arbitrary, pure [1], arbitrary] |
| 03:12:03 | <dsal> | Yeah. That's a good one. |
| 03:12:19 | <dsal> | I'm on a phone with part of my brain missing. :) |
| 03:15:55 | × | hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8) |
| 03:16:08 | <Axman6> | It was a good team effort |
| 03:16:16 | → | favonia joins (~favonia@user/favonia) |
| 03:16:21 | × | nate1 quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds) |
| 03:17:54 | × | swistak quits (~swistak@185.21.216.141) (Ping timeout: 252 seconds) |
| 03:19:32 | <stevenxl> | Great team effort! |
| 03:19:35 | <stevenxl> | lol. Thank you all. |
| 03:21:55 | × | alx741 quits (~alx741@186.178.109.32) (Quit: alx741) |
| 03:21:56 | → | swistak joins (~swistak@185.21.216.141) |
| 03:24:49 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 03:25:22 | × | derelict quits (~derelict@user/derelict) (Ping timeout: 246 seconds) |
| 03:29:51 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds) |
| 03:30:24 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 03:30:34 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 03:33:40 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 03:34:31 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 03:34:55 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 03:35:15 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 03:37:57 | → | favonia joins (~favonia@user/favonia) |
| 03:40:16 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 03:40:45 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 03:41:03 | → | warnz joins (~warnz@2600:1700:77c0:5610:9856:f279:a598:9845) |
| 03:43:29 | → | cheater1__ joins (~Username@user/cheater) |
| 03:43:45 | × | cheater quits (~Username@user/cheater) (Ping timeout: 276 seconds) |
| 03:43:51 | cheater1__ | is now known as cheater |
| 03:45:36 | × | warnz quits (~warnz@2600:1700:77c0:5610:9856:f279:a598:9845) (Ping timeout: 255 seconds) |
| 03:47:30 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 03:50:06 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 255 seconds) |
| 03:51:46 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 258 seconds) |
| 03:54:46 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 03:55:30 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 03:57:50 | → | favonia joins (~favonia@user/favonia) |
| 04:08:14 | → | wei2912 joins (~wei2912@112.199.250.21) |
| 04:09:11 | → | img joins (~img@user/img) |
| 04:19:04 | → | anandprabhu joins (~anandprab@94.202.243.198) |
| 04:21:47 | × | isekaijin quits (~pyon@user/pyon) (Ping timeout: 255 seconds) |
| 04:22:34 | <Guest43> | so I know GHC doesn't remember type information at runtime, does that mean it turns everything like identity :: [Wrap1 a] -> [Wrap2 a] into a noop? |
| 04:24:05 | → | isekaijin joins (~pyon@user/pyon) |
| 04:24:29 | <Guest43> | specifically if a function performs no term-level operation, will GHC reliably recognize that? |
| 04:25:45 | × | anandprabhu quits (~anandprab@94.202.243.198) (Remote host closed the connection) |
| 04:28:48 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 04:29:13 | → | favonia joins (~favonia@user/favonia) |
| 04:30:16 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 272 seconds) |
| 04:48:34 | <Axman6> | I don't think so |
| 04:49:14 | <Axman6> | I know GHC has several RULES defined for removing id specifically if it's used somewhere where it would be a no-op (though these days coersions are probably where the preferred way to do that) |
| 04:53:06 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 04:53:50 | <Guest43> | i see; so use id/coerce if I can, but no guarantees it won't traverse the list anyway at runtime? |
| 04:55:21 | → | favonia joins (~favonia@user/favonia) |
| 04:55:48 | × | falafel quits (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 255 seconds) |
| 04:57:26 | <Axman6> | yeah, that's basically exactly the usecase (and most used example) of why the safe coersions stuff exists. worth reading the paper, it's very approachable |
| 04:58:13 | <Guest43> | cool thanks, and yeah i'll check it out |
| 05:00:27 | × | peterhil quits (~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi) (Ping timeout: 276 seconds) |
| 05:03:08 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 252 seconds) |
| 05:04:01 | → | beka joins (~beka@104-244-27-23.static.monkeybrains.net) |
| 05:04:04 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 05:04:33 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 05:04:35 | → | cheater joins (~Username@user/cheater) |
| 05:05:28 | → | ph88 joins (~ph88@2a02:8109:9e00:7e5c:500a:f04e:5614:56a9) |
| 05:06:04 | × | azeem quits (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it) (Ping timeout: 252 seconds) |
| 05:12:31 | × | smitop quits (~smitop@user/smitop) (Ping timeout: 268 seconds) |
| 05:12:54 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 05:15:19 | → | favonia joins (~favonia@user/favonia) |
| 05:18:57 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 05:23:29 | → | smitop joins (~smitop@user/smitop) |
| 05:23:46 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 258 seconds) |
| 05:24:50 | × | chris-the-slurpa quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 05:25:18 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving) |
| 05:25:32 | → | chris-the-slurpa joins (~chris@81.96.113.213) |
| 05:25:43 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 05:30:00 | × | chris-the-slurpa quits (~chris@81.96.113.213) (Ping timeout: 255 seconds) |
| 05:33:22 | → | wallymathieu joins (~wallymath@81-234-151-21-no94.tbcn.telia.com) |
| 05:35:40 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 05:35:52 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 05:36:11 | → | sheepduck joins (~sheepduck@user/sheepduck) |
| 05:40:07 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 246 seconds) |
| 05:42:35 | → | Pickchea joins (~private@user/pickchea) |
| 05:44:19 | → | mikoto-chan joins (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) |
| 05:46:50 | → | azeem joins (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) |
| 05:48:13 | × | xsperry quits (~as@user/xsperry) () |
| 05:48:41 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 258 seconds) |
| 05:52:01 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 05:52:40 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 265 seconds) |
| 05:55:32 | × | mikoto-chan quits (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) (Ping timeout: 245 seconds) |
| 05:56:08 | → | xsperry joins (~as@user/xsperry) |
| 05:58:48 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 05:59:05 | → | Obo joins (~roberto@70.pool90-171-81.dynamic.orange.es) |
| 05:59:48 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds) |
| 06:00:36 | → | berberman joins (~berberman@user/berberman) |
| 06:00:58 | → | jneira joins (~jneira@212.8.115.226) |
| 06:01:03 | × | berberman_ quits (~berberman@user/berberman) (Ping timeout: 255 seconds) |
| 06:03:43 | × | EvanR quits (~evan@mail.evanr.info) (Changing host) |
| 06:03:43 | → | EvanR joins (~evan@user/evanr) |
| 06:06:10 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 06:07:10 | × | paddymahoney quits (~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (Ping timeout: 265 seconds) |
| 06:13:15 | → | qbt joins (~edun@user/edun) |
| 06:17:19 | × | azeem quits (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Ping timeout: 265 seconds) |
| 06:19:06 | → | paddymahoney joins (~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) |
| 06:25:25 | → | azeem joins (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) |
| 06:28:53 | → | chele joins (~chele@user/chele) |
| 06:33:27 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 245 seconds) |
| 06:36:00 | → | mikoto-chan joins (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) |
| 06:47:35 | → | prite joins (~pritam@user/pritambaral) |
| 06:52:42 | → | anandprabhu joins (~anandprab@94.202.243.198) |
| 06:53:57 | → | fendor joins (~fendor@77.119.210.250.wireless.dyn.drei.com) |
| 06:54:19 | × | Guest2168 quits (~Guest21@187.83.249.216.dyn.smithville.net) (Ping timeout: 246 seconds) |
| 06:54:40 | × | Guest43 quits (~Guest43@187.83.249.216.dyn.smithville.net) (Ping timeout: 246 seconds) |
| 07:03:42 | → | dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be) |
| 07:04:44 | × | cjb quits (~cjb@user/cjb) (Quit: rcirc on GNU Emacs 28.0.50) |
| 07:07:16 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 258 seconds) |
| 07:07:33 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 07:08:01 | → | pesada joins (~agua@2804:18:4f:750a:1:0:192e:7017) |
| 07:10:27 | × | agua quits (~agua@2804:18:46:bafa:1:0:1551:7319) (Ping timeout: 276 seconds) |
| 07:12:15 | → | eight joins (~eight@user/eight) |
| 07:15:43 | → | acidjnk joins (~acidjnk@p200300d0c72b9557fc98475d99842c11.dip0.t-ipconnect.de) |
| 07:16:15 | → | acidjnk_new joins (~acidjnk@p200300d0c72b9557e15cb996b96a0953.dip0.t-ipconnect.de) |
| 07:17:06 | → | Gurkenglas_ joins (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) |
| 07:19:12 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:19:32 | × | beka quits (~beka@104-244-27-23.static.monkeybrains.net) (Ping timeout: 252 seconds) |
| 07:20:07 | × | acidjnk quits (~acidjnk@p200300d0c72b9557fc98475d99842c11.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 07:20:10 | → | epolanski joins (uid312403@id-312403.brockwell.irccloud.com) |
| 07:20:30 | × | shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit) |
| 07:24:12 | → | fef joins (~thedawn@user/thedawn) |
| 07:25:17 | × | prite quits (~pritam@user/pritambaral) (Ping timeout: 258 seconds) |
| 07:27:01 | × | norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Remote host closed the connection) |
| 07:28:33 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 07:31:29 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 07:45:09 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:48:51 | → | prite joins (~pritam@user/pritambaral) |
| 07:52:14 | × | bens quits (~bens@www.typius.com) (Ping timeout: 268 seconds) |
| 07:52:27 | → | bens joins (~bens@www.typius.com) |
| 07:53:44 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 07:55:19 | × | smitop quits (~smitop@user/smitop) (Ping timeout: 268 seconds) |
| 07:55:30 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 07:58:00 | → | nattiestnate joins (~nate@36.70.197.105) |
| 08:06:15 | → | hendursa1 joins (~weechat@user/hendursaga) |
| 08:06:56 | × | Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection) |
| 08:08:52 | × | hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 244 seconds) |
| 08:09:10 | → | michalz joins (~michalz@185.246.204.60) |
| 08:10:12 | → | smitop joins (~smitop@user/smitop) |
| 08:10:12 | → | arahael1 joins (~arahael@203-206-95-20.tpgi.com.au) |
| 08:10:39 | × | TheRAt quits (~TheRAt@user/therat) (Quit: :)) |
| 08:10:47 | × | sheepduck quits (~sheepduck@user/sheepduck) (Quit: Konversation terminated!) |
| 08:11:21 | → | Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) |
| 08:12:21 | × | arahael quits (~arahael@118.211.182.212) (Ping timeout: 265 seconds) |
| 08:16:48 | → | hegstal joins (~hegstal@2a02:c7f:7604:8a00:cd80:9697:e922:dc30) |
| 08:17:30 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 08:17:55 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 08:18:23 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 08:18:30 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Remote host closed the connection) |
| 08:18:42 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 08:19:15 | → | delYsid joins (~user@zidpc777.tugraz.at) |
| 08:21:57 | → | peterhil joins (~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi) |
| 08:22:45 | arahael1 | is now known as arahael |
| 08:23:27 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 245 seconds) |
| 08:23:38 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 08:23:59 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 08:24:00 | × | phma quits (~phma@2001:5b0:211f:8638:196:5581:d6d8:1f7e) (Read error: Connection reset by peer) |
| 08:24:13 | → | lavaman joins (~lavaman@98.38.249.169) |
| 08:25:41 | × | smitop quits (~smitop@user/smitop) (Ping timeout: 255 seconds) |
| 08:25:58 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 08:25:59 | → | zeenk joins (~zeenk@2a02:2f04:a106:9600:82fb:aed9:ca9:38d3) |
| 08:26:44 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds) |
| 08:27:12 | Lord_of_Life_ | is now known as Lord_of_Life |
| 08:28:18 | × | prite quits (~pritam@user/pritambaral) (Ping timeout: 265 seconds) |
| 08:28:28 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
| 08:29:37 | → | prite joins (~pritam@user/pritambaral) |
| 08:30:48 | → | phma joins (phma@2001:5b0:211b:8138:4237:c684:b0bd:87ec) |
| 08:32:55 | → | ubert joins (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) |
| 08:34:12 | → | martin02 joins (silas@hund.fs.lmu.de) |
| 08:35:03 | × | desophos quits (~desophos@2601:249:1680:a570:489c:f364:abf0:5de7) (Quit: Leaving) |
| 08:35:50 | × | _xor quits (~xor@74.215.46.133) (Quit: brb) |
| 08:37:12 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 255 seconds) |
| 08:37:56 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 08:39:59 | → | smitop joins (~smitop@user/smitop) |
| 08:43:54 | × | nattiestnate quits (~nate@36.70.197.105) (Quit: WeeChat 3.2) |
| 08:44:49 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 08:45:18 | × | Patternmaster quits (~georg@li1192-118.members.linode.com) (Remote host closed the connection) |
| 08:48:02 | × | stevenxl quits (uid133530@id-133530.highgate.irccloud.com) (Quit: Connection closed for inactivity) |
| 08:49:05 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 08:51:10 | → | jippiedoe joins (~david@2a02-a44c-e14e-1-1e76-24e-f48d-1c7a.fixed6.kpn.net) |
| 08:51:18 | → | Patternmaster joins (~georg@li1192-118.members.linode.com) |
| 08:53:04 | × | zaquest quits (~notzaques@5.128.210.178) (Remote host closed the connection) |
| 08:54:11 | → | zaquest joins (~notzaques@5.128.210.178) |
| 08:54:41 | → | lavaman joins (~lavaman@98.38.249.169) |
| 08:56:00 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 08:58:37 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 08:59:26 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 272 seconds) |
| 09:00:36 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds) |
| 09:01:47 | × | smitop quits (~smitop@user/smitop) (Ping timeout: 245 seconds) |
| 09:02:52 | → | smitop joins (~smitop@user/smitop) |
| 09:03:42 | × | juhp quits (~juhp@128.106.188.66) (Quit: juhp) |
| 09:03:56 | → | juhp joins (~juhp@128.106.188.66) |
| 09:05:54 | × | hgolden_ quits (~hgolden2@cpe-172-114-84-61.socal.res.rr.com) (Ping timeout: 252 seconds) |
| 09:07:54 | → | neceve joins (~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f) |
| 09:08:25 | ← | delYsid parts (~user@zidpc777.tugraz.at) (ERC (IRC client for Emacs 27.1.50)) |
| 09:13:10 | × | juhp quits (~juhp@128.106.188.66) (Quit: juhp) |
| 09:14:15 | → | __monty__ joins (~toonn@user/toonn) |
| 09:14:16 | × | bitmapper quits (uid464869@id-464869.tooting.irccloud.com) (Quit: Connection closed for inactivity) |
| 09:15:13 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 09:17:43 | → | jumper149 joins (~jumper149@80.240.31.34) |
| 09:24:23 | → | elf_fortrez joins (~elf_fortr@adsl-72-50-4-50.prtc.net) |
| 09:25:20 | × | fef quits (~thedawn@user/thedawn) (Ping timeout: 244 seconds) |
| 09:26:56 | × | ubert quits (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) (Quit: ubert) |
| 09:27:40 | → | Pickchea joins (~private@user/pickchea) |
| 09:33:23 | → | lavaman joins (~lavaman@98.38.249.169) |
| 09:34:07 | → | fef joins (~thedawn@user/thedawn) |
| 09:37:19 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 09:37:37 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 245 seconds) |
| 09:38:14 | × | mcglk quits (~mcglk@131.191.49.120) (Read error: Connection reset by peer) |
| 09:39:00 | → | hughjfchen joins (~hughjfche@vmi556545.contaboserver.net) |
| 09:39:16 | × | hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Remote host closed the connection) |
| 09:40:27 | → | hughjfchen joins (~hughjfche@vmi556545.contaboserver.net) |
| 09:40:36 | × | koolazer quits (~koo@user/koolazer) (Ping timeout: 272 seconds) |
| 09:43:42 | → | koolazer joins (~koo@user/koolazer) |
| 09:43:42 | × | haykam1 quits (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
| 09:43:55 | → | haykam1 joins (~haykam@static.100.2.21.65.clients.your-server.de) |
| 09:49:29 | → | ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) |
| 09:54:11 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 09:56:47 | × | wei2912 quits (~wei2912@112.199.250.21) (Quit: Lost terminal) |
| 10:05:52 | × | hnOsmium0001 quits (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity) |
| 10:10:42 | × | hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Remote host closed the connection) |
| 10:11:25 | → | hughjfchen joins (~hughjfche@vmi556545.contaboserver.net) |
| 10:12:18 | × | fef quits (~thedawn@user/thedawn) (Remote host closed the connection) |
| 10:12:43 | × | hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Client Quit) |
| 10:12:54 | → | fef joins (~thedawn@user/thedawn) |
| 10:13:07 | × | elf_fortrez quits (~elf_fortr@adsl-72-50-4-50.prtc.net) (Ping timeout: 246 seconds) |
| 10:15:36 | × | koolazer quits (~koo@user/koolazer) (Ping timeout: 265 seconds) |
| 10:15:46 | × | xsperry quits (~as@user/xsperry) (Remote host closed the connection) |
| 10:15:51 | × | wallymathieu quits (~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 10:18:31 | → | neurocyte4042 joins (~neurocyte@212.232.92.52) |
| 10:18:32 | × | neurocyte4042 quits (~neurocyte@212.232.92.52) (Changing host) |
| 10:18:32 | → | neurocyte4042 joins (~neurocyte@user/neurocyte) |
| 10:20:33 | neurocyte4042 | is now known as neurocyte |
| 10:23:37 | → | hughjfchen joins (~hughjfche@vmi556545.contaboserver.net) |
| 10:24:53 | × | hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Client Quit) |
| 10:35:12 | → | hughjfchen joins (~hughjfche@vmi556545.contaboserver.net) |
| 10:35:18 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 10:43:52 | × | prite quits (~pritam@user/pritambaral) (Ping timeout: 245 seconds) |
| 10:45:14 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:46:22 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 245 seconds) |
| 10:47:34 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 10:48:04 | → | prite joins (~pritam@user/pritambaral) |
| 10:48:57 | → | smichel17 joins (~smichel17@c-73-68-217-18.hsd1.ma.comcast.net) |
| 10:51:12 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 10:53:49 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds) |
| 10:57:27 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 11:02:02 | × | anandprabhu quits (~anandprab@94.202.243.198) (Read error: Connection reset by peer) |
| 11:03:01 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds) |
| 11:03:02 | × | oxide quits (~lambda@user/oxide) (Ping timeout: 245 seconds) |
| 11:05:00 | → | oxide joins (~lambda@user/oxide) |
| 11:07:31 | → | acidjnk_new3 joins (~acidjnk@p200300d0c72b9516e15cb996b96a0953.dip0.t-ipconnect.de) |
| 11:10:29 | → | Topsi joins (~Tobias@dyndsl-095-033-020-123.ewe-ip-backbone.de) |
| 11:10:31 | <yin[m]> | matrix down again. last message from 6h ago |
| 11:10:32 | × | acidjnk_new quits (~acidjnk@p200300d0c72b9557e15cb996b96a0953.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 11:16:43 | <tomsmeding> | yin[m]: on irc this was the last message https://ircbrowse.tomsmeding.com/browse/lchaskell?id=94477#trid94477 |
| 11:16:48 | → | koolazer joins (~koo@user/koolazer) |
| 11:17:59 | × | silverwhitefish quits (~hidden@47.202.102.10) (Quit: One for all, all for One (2 Corinthians 5)) |
| 11:18:56 | <Topsi> | If I have the constraint (MyClass a, MyClass b, a ~ b), will this translate to 2 class-dictionaries passed at runtime or 1? Assuming both are used. |
| 11:19:39 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 255 seconds) |
| 11:19:43 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
| 11:22:33 | zdleaf | is now known as zinc |
| 11:24:17 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 11:26:22 | → | Pickchea joins (~private@user/pickchea) |
| 11:33:53 | <tomsmeding> | Topsi: for a test with f :: (Show a, Show b, a ~ b) => a -> b -> String ; f x y = show x ++ show y, looking at the optimised Core only one dictionary is passed |
| 11:34:27 | <tomsmeding> | if you want some guarantees, either look at the core yourself for the function you're interested in, or ask in #ghc :p |
| 11:35:15 | <tomsmeding> | it does seem to take an additional actual argument for the equality constraint |
| 11:37:12 | <tomsmeding> | ah it looks like that additional argument is a coercion, which I expect shouldn't have any runtime representation? But I don't know |
| 11:38:22 | → | Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
| 11:40:49 | → | lavaman joins (~lavaman@98.38.249.169) |
| 11:43:02 | × | eight quits (~eight@user/eight) (Ping timeout: 245 seconds) |
| 11:43:22 | → | eight joins (~eight@user/eight) |
| 11:45:18 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 255 seconds) |
| 11:45:19 | × | azeem quits (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Read error: Connection reset by peer) |
| 11:48:53 | × | koolazer quits (~koo@user/koolazer) (Ping timeout: 265 seconds) |
| 11:52:41 | → | azeem joins (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) |
| 11:53:02 | × | Natch quits (~natch@c-e070e255.014-297-73746f25.bbcust.telenor.se) (Remote host closed the connection) |
| 11:57:24 | × | azeem quits (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Read error: Connection reset by peer) |
| 11:57:53 | <yin[m]> | tomsmeding: my bad |
| 11:58:25 | → | Natch joins (~natch@c-e070e255.014-297-73746f25.bbcust.telenor.se) |
| 12:00:44 | → | jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 12:01:08 | → | juhp joins (~juhp@128.106.188.66) |
| 12:04:54 | → | azeem joins (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) |
| 12:07:34 | <maerwald> | https://hackage.haskell.org/package/rio-0.1.20.0/docs/RIO-Process.html am I missing something or does this look over-engineered? |
| 12:11:07 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 265 seconds) |
| 12:12:13 | × | gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 244 seconds) |
| 12:12:52 | <hpc> | yeah, i would rather use System.Process |
| 12:13:13 | <Profpatsch> | looks that way |
| 12:13:18 | <Profpatsch> | caching PATH is a bad idea |
| 12:14:28 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 12:14:52 | <maerwald> | It took me 15 minutes just to figure out how to... well... spawn a process |
| 12:15:43 | <maerwald> | and then you have to shove the env vars into the RIO env |
| 12:15:49 | → | favonia joins (~favonia@user/favonia) |
| 12:20:47 | absence_ | is now known as absence |
| 12:21:54 | <absence> | in ghc 9, template haskell was changed so liftTyped returns Quote m => Code m a instead of Q (TExp a). this breaks the code "either fail liftTyped something" because Code doesn't have a MonadFail instance. what's the recommended way to deal with this? manually wrap the result of fail in Code, i.e. "either (Code . fail) liftTyped something", or does that have other consequences? |
| 12:24:35 | → | norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) |
| 12:24:40 | → | stevenxl joins (uid133530@id-133530.highgate.irccloud.com) |
| 12:25:23 | → | Pickchea joins (~private@user/pickchea) |
| 12:26:53 | → | Guest12 joins (~Guest12@static-72-73-22-17.clppva.fios.verizon.net) |
| 12:27:46 | → | lavaman joins (~lavaman@98.38.249.169) |
| 12:28:06 | × | jespada quits (~jespada@90.254.247.46) (Ping timeout: 256 seconds) |
| 12:28:25 | × | Guest12 quits (~Guest12@static-72-73-22-17.clppva.fios.verizon.net) (Client Quit) |
| 12:29:36 | → | jespada joins (~jespada@90.254.247.46) |
| 12:32:23 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 265 seconds) |
| 12:34:58 | × | fef quits (~thedawn@user/thedawn) (Remote host closed the connection) |
| 12:35:32 | → | fef joins (~thedawn@user/thedawn) |
| 12:36:12 | × | fef quits (~thedawn@user/thedawn) (Remote host closed the connection) |
| 12:36:49 | → | fef joins (~thedawn@user/thedawn) |
| 12:41:34 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 12:42:20 | × | jneira quits (~jneira@212.8.115.226) (Quit: Client closed) |
| 12:42:47 | × | ph88 quits (~ph88@2a02:8109:9e00:7e5c:500a:f04e:5614:56a9) (Remote host closed the connection) |
| 12:42:58 | → | jneira joins (~jneira@212.8.115.226) |
| 12:43:40 | → | ph88 joins (~ph88@2a02:8109:9e00:7e5c:9925:18b1:79f7:f242) |
| 12:47:31 | → | koolazer joins (~koo@user/koolazer) |
| 12:51:43 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 12:52:00 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 12:57:01 | × | jneira quits (~jneira@212.8.115.226) (Quit: Client closed) |
| 12:59:58 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 13:01:07 | → | alx741 joins (~alx741@186.178.109.32) |
| 13:01:29 | → | lavaman joins (~lavaman@98.38.249.169) |
| 13:04:12 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds) |
| 13:12:01 | → | thyriaen joins (~thyriaen@45.178.73.238) |
| 13:12:57 | → | drd joins (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) |
| 13:14:05 | <thyriaen> | howdy, friends i do not understand why this gets pattern matched on the Leaf rule, when it is not: https://paste.tomsmeding.com/plDEEwT7 |
| 13:15:18 | × | Gurkenglas_ quits (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 272 seconds) |
| 13:15:51 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 13:17:09 | <jippiedoe> | @thyriaen in `insert`, you only return the result of the recursive call (instead of wrapping it in the rest of the tree again) |
| 13:17:09 | <lambdabot> | Unknown command, try @list |
| 13:18:14 | <thyriaen> | jippiedoe, in the insert lm Leaf case ? |
| 13:18:26 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 13:18:40 | <jippiedoe> | in the insert lm Node case! |
| 13:19:06 | <thyriaen> | but i am inserting it again in that case |
| 13:19:21 | × | prite quits (~pritam@user/pritambaral) (Ping timeout: 268 seconds) |
| 13:19:28 | <thyriaen> | ohhh |
| 13:19:38 | <thyriaen> | im quite dumb i make the recursive call but dont put it in a tree |
| 13:19:39 | <thyriaen> | xD |
| 13:20:10 | → | prite joins (~pritam@user/pritambaral) |
| 13:20:15 | <thyriaen> | well now i know why the gardener left me |
| 13:20:32 | × | koolazer quits (~koo@user/koolazer) (Ping timeout: 245 seconds) |
| 13:21:19 | <tomsmeding> | thyriaen: sometimes you need a pair of eyes that haven't been staring at the code yet to see what's going wrong :) |
| 13:21:25 | <tomsmeding> | I can recommend rubber ducks |
| 13:21:59 | <thyriaen> | :p |
| 13:24:09 | × | hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1) |
| 13:24:29 | → | hendursaga joins (~weechat@user/hendursaga) |
| 13:26:27 | × | hendursaga quits (~weechat@user/hendursaga) (Client Quit) |
| 13:26:52 | → | hendursaga joins (~weechat@user/hendursaga) |
| 13:27:17 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 13:29:51 | × | thyriaen quits (~thyriaen@45.178.73.238) (Quit: Leaving) |
| 13:30:00 | → | silverwhitefish joins (~hidden@47.202.102.10) |
| 13:30:19 | → | chris_ joins (~chris@81.96.113.213) |
| 13:30:25 | × | haykam1 quits (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
| 13:30:38 | → | haykam1 joins (~haykam@static.100.2.21.65.clients.your-server.de) |
| 13:34:29 | × | peterhil quits (~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 13:35:19 | → | peterhil joins (~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi) |
| 13:36:00 | × | zgrep quits (~zgrep@user/zgrep) (Quit: It's a quitter's world.) |
| 13:37:32 | → | zgrep joins (~zgrep@user/zgrep) |
| 13:37:37 | × | acidjnk_new3 quits (~acidjnk@p200300d0c72b9516e15cb996b96a0953.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 13:47:56 | → | madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net) |
| 13:50:11 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
| 13:53:20 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 252 seconds) |
| 13:55:07 | × | michalz quits (~michalz@185.246.204.60) (Remote host closed the connection) |
| 13:56:33 | → | Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com) |
| 13:59:17 | × | drd quits (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 245 seconds) |
| 14:02:10 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 14:02:12 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 14:03:46 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 246 seconds) |
| 14:07:21 | allbery_b | is now known as geekosaur |
| 14:12:34 | × | Topsi quits (~Tobias@dyndsl-095-033-020-123.ewe-ip-backbone.de) (Quit: Leaving.) |
| 14:14:43 | → | pharmaz0ne joins (~pharmaz0n@92.40.194.74.threembb.co.uk) |
| 14:15:02 | × | pharmaz0ne quits (~pharmaz0n@92.40.194.74.threembb.co.uk) (Client Quit) |
| 14:15:04 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 14:17:04 | → | pharmaz0ne joins (~pharmaz0n@92.40.194.74.threembb.co.uk) |
| 14:17:05 | → | Atum_ joins (~IRC@user/atum/x-2392232) |
| 14:17:08 | × | Atum_ quits (~IRC@user/atum/x-2392232) (Client Quit) |
| 14:17:18 | → | Pickchea joins (~private@user/pickchea) |
| 14:17:43 | → | Atum_ joins (IRC@user/atum/x-2392232) |
| 14:21:58 | → | drd joins (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) |
| 14:22:07 | → | biberu joins (~biberu@user/biberu) |
| 14:24:34 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 14:28:49 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 14:30:11 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 255 seconds) |
| 14:39:06 | → | derelict joins (~derelict@user/derelict) |
| 14:39:19 | → | anandprabhu joins (~anandprab@94.202.243.198) |
| 14:41:17 | → | amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) |
| 14:42:39 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 14:43:01 | × | amahl quits (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 14:43:55 | → | amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) |
| 14:46:30 | × | madjestic quits (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 258 seconds) |
| 14:52:15 | × | HotblackDesiato quits (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Remote host closed the connection) |
| 14:52:32 | → | HotblackDesiato joins (~HotblackD@gateway/tor-sasl/hotblackdesiato) |
| 14:56:15 | → | koolazer joins (~koo@user/koolazer) |
| 14:59:35 | × | azeem quits (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Ping timeout: 268 seconds) |
| 15:01:23 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 15:02:07 | → | azeem joins (~azeem@176.201.40.210) |
| 15:03:48 | × | dajoer quits (~david@user/gvx) (Quit: leaving) |
| 15:04:01 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 15:04:37 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 15:05:32 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds) |
| 15:07:24 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 15:07:47 | × | azeem quits (~azeem@176.201.40.210) (Read error: Connection reset by peer) |
| 15:08:07 | → | azeem joins (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) |
| 15:08:22 | → | cheater1__ joins (~Username@user/cheater) |
| 15:08:40 | × | cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds) |
| 15:08:45 | cheater1__ | is now known as cheater |
| 15:13:04 | × | juhp quits (~juhp@128.106.188.66) (Quit: juhp) |
| 15:13:15 | → | juhp joins (~juhp@128.106.188.66) |
| 15:20:13 | × | chomwitt quits (~Pitsikoko@2a02:587:dc04:e00:12c3:7bff:fe6d:d374) (Ping timeout: 268 seconds) |
| 15:22:22 | × | Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt) |
| 15:26:34 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 15:29:06 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 15:31:33 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 15:32:03 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 15:33:04 | × | drd quits (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Quit: ZNC 1.8.2 - https://znc.in) |
| 15:33:39 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 258 seconds) |
| 15:34:14 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds) |
| 15:34:25 | × | koolazer quits (~koo@user/koolazer) (Ping timeout: 258 seconds) |
| 15:35:44 | → | drd joins (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) |
| 15:37:45 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 15:38:15 | → | lbseale joins (~lbseale@user/ep1ctetus) |
| 15:38:25 | <hololeap> | is caching PATH really that bad of an idea? it doesn't seem like something that would change very often |
| 15:39:22 | → | Guest21 joins (~Guest21@187.83.249.216.dyn.smithville.net) |
| 15:39:27 | <Clint> | where? |
| 15:39:45 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 15:40:02 | <hololeap> | https://hackage.haskell.org/package/rio-0.1.20.0/docs/RIO-Process.html |
| 15:40:17 | <Rembane> | hololeap: Assume that someone will mess it up for you. |
| 15:40:58 | <tomsmeding> | that's within one process, right? Normally environment variables don't change in one process unless you explicitly change it :) |
| 15:41:01 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 15:41:29 | <tomsmeding> | though I guess that "cache PATH lookups" refers to caching the location of particular binary names in the file system as looked up in the PATH, which is a different story altogether |
| 15:42:28 | → | hnOsmium0001 joins (uid453710@id-453710.stonehaven.irccloud.com) |
| 15:42:58 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 15:49:29 | × | lbseale quits (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer) |
| 15:50:39 | <Profpatsch> | It introduces a caching layer, which is always a bad idea |
| 15:50:58 | <Profpatsch> | They probably implement their own lookup logic |
| 15:51:41 | <Profpatsch> | Granted, environment variables *probably* don’t change in most programs |
| 15:53:23 | <Profpatsch> | but now you have to have a state that you need to carry around and a lot of logic around something |
| 15:53:31 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 15:55:19 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 15:55:44 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 15:57:29 | <[exa]> | hololeap: PATH lists in some certain environments (I'd even say nix) are pretty fat, if you save say 100 calls of stat(2) for one execve(2) it usually starts paying off |
| 15:57:53 | × | qbt quits (~edun@user/edun) (Quit: WeeChat 3.2) |
| 15:58:09 | → | qbt joins (~edun@user/edun) |
| 15:58:44 | <[exa]> | Profpatsch: feel free remove your L1&L2 cache and reiterate on the caches as bad ideas |
| 15:59:08 | <ephemient> | (ba)sh caches PATH lookups, but has a (re)hash command to manipulate it because it can be wrong |
| 15:59:58 | × | Guest21 quits (~Guest21@187.83.249.216.dyn.smithville.net) (Ping timeout: 246 seconds) |
| 16:00:52 | → | lavaman joins (~lavaman@98.38.249.169) |
| 16:01:29 | → | mcglk joins (~mcglk@131.191.49.120) |
| 16:01:41 | <tomsmeding> | caching is sometimes good, sometimes _REALLY_ good, but certainly not always good |
| 16:01:48 | <EvanR> | a caching layer is great when it's never wrong |
| 16:02:18 | <tomsmeding> | and pays off in comparison to the required maintenance effort |
| 16:02:39 | <tomsmeding> | it's an optimisation, and any optimisation is a tradeoff :) |
| 16:03:06 | <EvanR> | L* cache, my maintenance effort is zero and it's never wrong xD |
| 16:03:19 | <EvanR> | HTTP caching, maintenance effort high and is never right! |
| 16:03:44 | → | alan41 joins (~alan@83-245-249-101-nat-p.elisa-mobile.fi) |
| 16:03:48 | <tomsmeding> | and yet, if you'd turn off http caching in your browser, many websites would get a lot slower |
| 16:04:06 | <davean> | Uh, if your HTTP cache is wrong, the upstream site fucked up |
| 16:04:08 | tomsmeding | doubts "never right" |
| 16:04:18 | <tomsmeding> | davean: which happens |
| 16:04:26 | <davean> | HTTP has a plenty expressive caching semantics |
| 16:04:28 | <tomsmeding> | but not enough to warrant "never right" :) |
| 16:04:34 | × | alan41 quits (~alan@83-245-249-101-nat-p.elisa-mobile.fi) (Client Quit) |
| 16:04:35 | → | xsperry joins (~as@user/xsperry) |
| 16:04:36 | <EvanR> | when it's your (my) upstream site, that explains it |
| 16:05:07 | <EvanR> | anyway web tech gives caching a bad name |
| 16:05:07 | × | pharmaz0ne quits (~pharmaz0n@92.40.194.74.threembb.co.uk) (Read error: Connection reset by peer) |
| 16:05:31 | <tomsmeding> | build tools also do, because of the rare instances when they're wrong |
| 16:05:34 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds) |
| 16:06:41 | <EvanR> | I am still perplexed that caching schemes are allowed to be wrong |
| 16:06:43 | <tomsmeding> | some regular in this channel (I forget who) has complained multiple times about weird behaviour because cabal thought some build product could be cached when it should've been recompiled |
| 16:07:04 | <EvanR> | even if rarely, that would be unacceptable for the memory system's cache |
| 16:07:09 | <tomsmeding> | EvanR: is there a caching scheme that is _intentionally_ allowed to be wrong? |
| 16:07:26 | <tomsmeding> | oh right, bash |
| 16:07:32 | × | jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.1) |
| 16:07:35 | <EvanR> | in the sense that the wrongness is observable |
| 16:08:00 | → | cheater1__ joins (~Username@user/cheater) |
| 16:08:12 | × | cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds) |
| 16:08:12 | cheater1__ | is now known as cheater |
| 16:08:14 | <EvanR> | whether because you went outside the bounds of unwritten rules of engagement, or just there are no rules here and everyone is doing whatever |
| 16:09:10 | <davean> | You can only have a correct cache in regards to semantics |
| 16:09:12 | <EvanR> | lets put it this way, if you hear someone complaining about their build systems cache being wrong, no one ever calls that a bug |
| 16:09:25 | <EvanR> | it's a problem with the user |
| 16:09:34 | <tomsmeding> | does no one? |
| 16:09:37 | <EvanR> | i called that 'allowed to be wrong' |
| 16:09:49 | <tomsmeding> | I have the exact opposite experience :p |
| 16:09:50 | <davean> | Uh, no people always call that a bug |
| 16:10:12 | <EvanR> | ok, the take away here is I have nothing whatsoever to add |
| 16:10:25 | <EvanR> | just take the opposite of what i say, and we're good i guess |
| 16:10:29 | <davean> | I guess |
| 16:10:31 | <tomsmeding> | the _real_ take away is "software engineering is hard" :p |
| 16:10:48 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 16:10:54 | → | pfurla joins (~pfurla@216.131.82.58) |
| 16:11:05 | <EvanR> | you see no difference whatsoever between the track record of memory system cache and other caching systems? xD |
| 16:11:24 | <tomsmeding> | it's just that if there is a bug in the memory system cache, everything blows up |
| 16:11:28 | <EvanR> | it seems like one is allowed to be wrong |
| 16:11:29 | <davean> | The memory system cache is wrong sometimes. |
| 16:11:43 | <tomsmeding> | that doesn't mean that a bug in cabal's caching scheme wouldn't be a bug |
| 16:11:57 | <EvanR> | an actual bug, yeah |
| 16:12:17 | <EvanR> | if you just don't know how to use cabal... |
| 16:12:37 | <davean> | compilers (mostly) know how to use the memory cache |
| 16:12:41 | → | abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
| 16:12:45 | <davean> | but this is actually a point of great debate |
| 16:12:53 | <davean> | I'm surpised you're unfamiliar with it |
| 16:13:03 | <davean> | memory ordering is a HUGE deal in compiler code generation |
| 16:13:14 | × | ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection) |
| 16:13:19 | <EvanR> | I'm totally unfamiliar with that, in any detail |
| 16:13:54 | × | pfurla_ quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 272 seconds) |
| 16:14:43 | <EvanR> | so compilers don't treat the cache as a 'would be nice' bonus effect, but actively try to whisper it and get as much performance as possible? |
| 16:15:12 | <EvanR> | that sounds like hell for cache designers |
| 16:15:14 | → | elf_fortrez joins (~elf_fortr@adsl-72-50-4-118.prtc.net) |
| 16:15:38 | <davean> | Its not "would be nice" its a "can be incorrect under ..." |
| 16:15:45 | <davean> | and then they also give it specific commands |
| 16:15:50 | <davean> | evictions, prefetches ... |
| 16:16:18 | <davean> | and compilers know the cache can get bad results and try to avoid it |
| 16:16:26 | <davean> | you can write to a memory location, but read an old value for example |
| 16:16:39 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 16:16:51 | <EvanR> | really... I thought that was a serious security problem a while back and had to be fixed |
| 16:17:07 | → | jneira[m] joins (~jneira@214.red-176-83-92.dynamicip.rima-tde.net) |
| 16:17:09 | <davean> | No, the security problem was making decisions based on memory *you weren't allowed to read* |
| 16:17:13 | <davean> | which also interacted with the cache |
| 16:17:16 | <davean> | but also with speculation |
| 16:17:19 | <davean> | etc |
| 16:17:38 | <EvanR> | oof |
| 16:17:39 | <davean> | The concept of the cache giving wrong results generally falls under the term "memory ordering" |
| 16:18:12 | <davean> | https://en.wikipedia.org/wiki/Memory_ordering |
| 16:18:19 | <davean> | but also in multicore consistency, etc |
| 16:18:31 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 16:18:32 | → | cheater1__ joins (~Username@user/cheater) |
| 16:18:34 | cheater1__ | is now known as cheater |
| 16:18:50 | <davean> | If you use the CPU cache correctly you get correct results - if you use HTTP caching correctly you get correct result |
| 16:19:00 | <davean> | theres no mysteries here - other than what the x86 cache actually does! |
| 16:19:05 | <davean> | Its a bit unknown on x86 |
| 16:19:15 | <davean> | ARM for example actually has something of a specification |
| 16:19:44 | <davean> | Mind you that wikipedia article focuses more on the instruction pipeline |
| 16:20:13 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds) |
| 16:20:30 | <davean> | Both HTTP and the CPU cache directly tie back to https://en.wikipedia.org/wiki/Consistency_model |
| 16:20:53 | <EvanR> | can we has a type system that guarantees correct use of cache |
| 16:21:08 | <davean> | uh ... |
| 16:21:16 | × | jippiedoe quits (~david@2a02-a44c-e14e-1-1e76-24e-f48d-1c7a.fixed6.kpn.net) (Ping timeout: 268 seconds) |
| 16:21:24 | <davean> | Not for x86 |
| 16:21:35 | <davean> | because we don't know the semantics for x86 so we'd have nothing to type against |
| 16:21:39 | <davean> | for ARM or something? |
| 16:21:50 | × | anandprabhu quits (~anandprab@94.202.243.198) (Quit: Leaving) |
| 16:22:01 | <davean> | sure, but you'd not like the type system, because it would dictact what came before and after for variable distances. |
| 16:22:19 | <davean> | Your types would be like some form of hoare triples I guess ... |
| 16:22:31 | <EvanR> | cool |
| 16:22:41 | <davean> | The compiler deals with this for you though |
| 16:22:43 | <davean> | thats its job |
| 16:22:47 | <Profpatsch> | [exa]: reductio ad absurdum |
| 16:22:58 | <davean> | its job is to be a compitent CPU user, like yours is to be a compitent cabal user |
| 16:23:02 | <EvanR> | it could maybe be a type system for use in a compiler |
| 16:23:26 | <davean> | EvanR: I think this is a better place for something like a model checker |
| 16:23:54 | <davean> | which, wait, is what we actually use currently |
| 16:23:58 | <davean> | so I guess thats a boring statement |
| 16:25:46 | <davean> | Well I'm kinda getting bored of giving a "how computers work - the basics" lecture, so I think I'll wander away |
| 16:26:53 | <davean> | I will say though if you want to do any performance optimisation in your future, I'd spend a few hours reading about this stuff, it only takes a few hours |
| 16:27:17 | <davean> | Computers are actually really simple |
| 16:27:32 | <davean> | You could learn enough to build one in a day |
| 16:27:58 | <hololeap> | what would be the recommended way to bind a python library to a haskell interface? |
| 16:28:22 | <lechner> | Hi, is yesod still a suitable foundation for a website these days? Thanks! |
| 16:28:30 | <EvanR> | all that aside, would be cool if websites showed the latest version, according to timestamps xD |
| 16:28:51 | × | jneira[m] quits (~jneira@214.red-176-83-92.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 16:29:11 | <EvanR> | sorry for boring! |
| 16:29:24 | <davean> | EvanR: its cool, and they CAN |
| 16:29:27 | <davean> | EvanR: if they don't, its by choice |
| 16:29:42 | × | Brianmancer quits (~Neuromanc@user/briandamag) (Ping timeout: 255 seconds) |
| 16:30:30 | <davean> | (For a trivial version: You put an ETag on the root page, you stick your resource at hashs, and set the hashes to cache forever since they're content addressed) |
| 16:31:11 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 16:32:28 | <davean> | EvanR: the HTTP cache semantics are layed out in the RFC, and seperate CDN style caches from user's browser caches, and CDNs can do semi-consistent invalidations |
| 16:32:35 | <davean> | so this is ENTIRELY on the website in question |
| 16:34:03 | <davean> | EvanR: I you ever run a website you care to actually get performant and correct, I'd be happy to talk about all the various options with you |
| 16:34:15 | → | hexfive joins (~eric@50.35.83.177) |
| 16:34:34 | <davean> | I'll point out a site like reddit doesn't even SERVE fresh content. |
| 16:34:39 | <davean> | never mind have the cache |
| 16:34:42 | <davean> | its just too expensive |
| 16:34:53 | <davean> | the content is updated by background tasks |
| 16:35:02 | → | jneira[m] joins (~jneira@214.red-176-83-92.dynamicip.rima-tde.net) |
| 16:35:56 | <davean> | EvanR: Oh, you've probable seen the cleaner version of the above scheme - images like /.../img.jpg?12df22f2432fc22 |
| 16:36:13 | <davean> | That last piece after the question mark is a cache buster, which has the hash of the content |
| 16:36:38 | <davean> | so you force your way through the cache whenever the content updates, but keep the nice base names |
| 16:36:41 | <EvanR> | the poor timestamps, so unappreciated xD |
| 16:37:02 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 16:37:14 | <EvanR> | anyway! |
| 16:41:24 | × | Atum_ quits (IRC@user/atum/x-2392232) (Ping timeout: 255 seconds) |
| 16:41:40 | → | Gurkenglas_ joins (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) |
| 16:43:10 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 16:43:22 | → | cheater1__ joins (~Username@user/cheater) |
| 16:43:39 | × | derelict quits (~derelict@user/derelict) (Ping timeout: 255 seconds) |
| 16:43:40 | × | cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds) |
| 16:43:40 | → | Vajb joins (~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01) |
| 16:43:40 | × | Vajb quits (~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01) (Read error: Connection reset by peer) |
| 16:43:45 | cheater1__ | is now known as cheater |
| 16:43:48 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) |
| 16:44:41 | × | jolly quits (~jolly@208.180.97.158) (Quit: Connection closed) |
| 16:44:42 | × | drd quits (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 268 seconds) |
| 16:45:00 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds) |
| 16:46:42 | × | s_ quits (~s@50.34.81.185) (Quit: Leaving) |
| 16:47:47 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 16:48:25 | × | qbt quits (~edun@user/edun) (Quit: WeeChat 3.2) |
| 16:48:51 | × | jneira[m] quits (~jneira@214.red-176-83-92.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 16:49:44 | × | chele quits (~chele@user/chele) (Read error: Connection reset by peer) |
| 16:50:19 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 258 seconds) |
| 16:52:21 | → | qbt joins (~edun@user/edun) |
| 16:53:52 | → | MQ-17J joins (~MQ-17J@8.21.10.15) |
| 16:53:56 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 16:58:06 | → | chomwitt joins (~Pitsikoko@ppp-94-67-202-202.home.otenet.gr) |
| 17:03:21 | → | drd joins (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) |
| 17:03:29 | → | arkanoid joins (~arkanoid@2-238-151-49.ip244.fastwebnet.it) |
| 17:03:35 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 17:03:44 | <arkanoid> | hello |
| 17:03:49 | → | Vajb joins (~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01) |
| 17:07:27 | <arkanoid> | I'm not an haskell programmer, just a newcomer to FP that's reading book about category theory for programmers. The book give a lot of examples and talks about haskell, but there's a phrase that just triggered my curiosity: it says that Haskell standard library comes with proofs of correctness. Is that true? |
| 17:10:53 | ← | Profpatsch parts (~Profpatsc@static.88-198-193-255.clients.your-server.de) (WeeChat 3.1) |
| 17:11:29 | <hololeap> | arkanoid: is it the Milewski one? |
| 17:11:50 | <monochrom> | The answer is no. |
| 17:12:03 | <davean> | Uh, theres a liquid haskell covered base I think? Maybe? |
| 17:12:08 | <davean> | Certainly not the standard library! |
| 17:12:27 | <davean> | https://hackage.haskell.org/package/liquid-base I think? |
| 17:12:36 | <davean> | I've certainly never looked into it |
| 17:14:19 | → | Atum_ joins (IRC@user/atum/x-2392232) |
| 17:15:05 | → | Pickchea joins (~private@user/pickchea) |
| 17:15:20 | <sm> | lechner: certainly |
| 17:17:02 | <hololeap> | arkanoid: I think he means that the type system provides a proof of correctness, but the type system can't do _every_ kind of validation |
| 17:17:20 | <hololeap> | for instance, reverse :: [a] -> [a] |
| 17:17:42 | <hololeap> | the type system does nothing to prove that this function works the way it's intended to |
| 17:17:51 | <davean> | Well you can never do every kinda of validation, correctness is with respect to a specification |
| 17:19:07 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 17:19:11 | <davean> | arkanoid: do you have more around the quote? |
| 17:19:39 | <hololeap> | davean: https://github.com/hmemcpy/milewski-ctfp-pdf/releases/download/v19-eb86347/category-theory-for-programmers--eb86347.pdf |
| 17:19:43 | <hololeap> | top of page 20 |
| 17:19:43 | → | koolazer joins (~koo@user/koolazer) |
| 17:20:24 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 17:20:39 | <davean> | hum |
| 17:21:20 | <davean> | No, I don't think he means the liquid haskell one there, and I think that claim is bullshit. |
| 17:21:27 | → | P1RATEZ joins (piratez@user/p1ratez) |
| 17:21:27 | <davean> | Though possibly technically correct in a sense |
| 17:21:46 | <davean> | Though the liquid-haskell one might be of interest |
| 17:22:21 | × | cheater quits (~Username@user/cheater) (Ping timeout: 255 seconds) |
| 17:22:30 | → | cheater joins (~Username@user/cheater) |
| 17:23:37 | × | fef quits (~thedawn@user/thedawn) (Remote host closed the connection) |
| 17:24:40 | <davean> | The types are a proof of some sort of correctness, but often not valid proofs |
| 17:24:55 | <davean> | and don't cover all the stuff you should care about |
| 17:25:06 | <davean> | Sure, they help |
| 17:25:38 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 17:27:40 | <davean> | The standard library more provides your axioms |
| 17:29:38 | × | cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds) |
| 17:29:58 | → | cheater joins (~Username@user/cheater) |
| 17:33:30 | × | P1RATEZ quits (piratez@user/p1ratez) (Ping timeout: 265 seconds) |
| 17:34:20 | → | Guest27 joins (~Guest27@187.83.249.216.dyn.smithville.net) |
| 17:35:35 | → | Deide joins (~Deide@217.155.19.23) |
| 17:35:35 | × | Deide quits (~Deide@217.155.19.23) (Changing host) |
| 17:35:35 | → | Deide joins (~Deide@user/deide) |
| 17:37:11 | <arkanoid> | hololeap: yes is by Mr Milewski |
| 17:40:39 | <arkanoid> | thanks for all the answers. Yes I do understand how that sentence might raise more than one eyebrow, but the author is clearly trying to make things easier and put things into categories (ba dum tss) |
| 17:45:19 | × | elf_fortrez quits (~elf_fortr@adsl-72-50-4-118.prtc.net) (Ping timeout: 246 seconds) |
| 17:45:38 | <monochrom> | I would s/not valid/weakened/ |
| 17:46:06 | → | hexreel joins (~hr@69.233.98.238) |
| 17:46:14 | × | chris_ quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 17:46:54 | <monochrom> | Also, while we're at curry-howard, types are claims, terms are proofs. |
| 17:47:37 | <monochrom> | In Haskell, types are weakened claims, not invalid claims. This is a case of PEBKAC again. |
| 17:48:19 | → | ubert joins (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) |
| 17:49:51 | → | chris_ joins (~chris@81.96.113.213) |
| 17:51:04 | → | pfurla_ joins (~pfurla@ool-182ed2e2.dyn.optonline.net) |
| 17:52:56 | <EvanR> | something tells me this is a different sort of 'weak' |
| 17:53:26 | <EvanR> | by weak you mean comes with more caveats? |
| 17:54:03 | → | ubikium joins (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net) |
| 17:54:04 | × | koolazer quits (~koo@user/koolazer) (Ping timeout: 246 seconds) |
| 17:54:05 | <monochrom> | Yes. A "if it terminates" premise. |
| 17:54:06 | × | pfurla quits (~pfurla@216.131.82.58) (Ping timeout: 268 seconds) |
| 17:54:27 | × | ubikium quits (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net) (Client Quit) |
| 17:56:26 | <monochrom> | Meta-ly, I have not read Milewski's book closely, I do not know whether he actually wrote that. |
| 17:57:02 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 17:57:46 | × | Atum_ quits (IRC@user/atum/x-2392232) (Quit: Atum_) |
| 18:01:17 | → | Atum_ joins (IRC@user/atum/x-2392232) |
| 18:01:31 | × | chris_ quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 18:02:00 | × | Obo quits (~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 258 seconds) |
| 18:02:51 | × | Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection) |
| 18:03:13 | × | euandreh quits (~euandreh@2804:14c:33:9fe5:50a8:9802:856c:54ce) (Quit: WeeChat 3.2) |
| 18:03:54 | → | Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) |
| 18:05:35 | × | haykam1 quits (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
| 18:05:48 | → | haykam2 joins (~haykam@static.100.2.21.65.clients.your-server.de) |
| 18:06:34 | × | Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection) |
| 18:06:56 | → | Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) |
| 18:07:21 | × | MidAutumnMoon9 quits (~MidAutumn@user/midautumnmoon) (Ping timeout: 255 seconds) |
| 18:11:35 | × | cheater quits (~Username@user/cheater) (Ping timeout: 255 seconds) |
| 18:12:07 | → | cheater joins (~Username@user/cheater) |
| 18:12:27 | <davean> | monochrom: they're not valid in the sense they're based on unsafePerformIO, unsafeCoerce, and prim-ops without axinomial specifications |
| 18:12:56 | <davean> | 'base' is unbased, they have to be the axioms |
| 18:13:11 | → | chris_ joins (~chris@81.96.113.213) |
| 18:14:19 | → | MidAutumnMoon9 joins (~MidAutumn@user/midautumnmoon) |
| 18:18:18 | × | hexreel quits (~hr@69.233.98.238) (Quit: nyaa~) |
| 18:20:05 | → | Obo joins (~roberto@70.pool90-171-81.dynamic.orange.es) |
| 18:22:04 | × | Vajb quits (~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01) (Read error: Connection reset by peer) |
| 18:22:50 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) |
| 18:23:44 | × | epolanski quits (uid312403@id-312403.brockwell.irccloud.com) (Quit: Connection closed for inactivity) |
| 18:24:42 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 18:25:17 | × | ptrcmd quits (~ptrcmd@user/ptrcmd) (Quit: leaving) |
| 18:25:47 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Remote host closed the connection) |
| 18:26:44 | → | cheater1__ joins (~Username@user/cheater) |
| 18:26:45 | <tomsmeding> | it's quite based! Indeed, it's based on Falso http://sigtbd.csail.mit.edu/pubs/2016/paper9.pdf |
| 18:26:54 | × | cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds) |
| 18:26:57 | cheater1__ | is now known as cheater |
| 18:30:33 | × | jneira_ quits (~jneira_@28.red-80-28-169.staticip.rima-tde.net) (Quit: Connection closed) |
| 18:31:43 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
| 18:33:06 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 252 seconds) |
| 18:35:25 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 18:42:06 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 272 seconds) |
| 18:42:28 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 18:47:41 | → | jolly joins (~jolly@208.180.97.158) |
| 18:49:00 | × | Guest27 quits (~Guest27@187.83.249.216.dyn.smithville.net) (Quit: Client closed) |
| 18:53:09 | → | burnsidesLlama joins (~burnsides@dhcp168-025.wadham.ox.ac.uk) |
| 19:03:22 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Read error: Connection reset by peer) |
| 19:03:36 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 19:03:46 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 19:06:02 | × | prite quits (~pritam@user/pritambaral) (Ping timeout: 255 seconds) |
| 19:06:46 | <burnsidesLlama> | Hi, I'm thinking about a general definition for 'partial sums' on [a], which is a family of functions of type [a] -> [b], generalising functions such as [1,2,3] -> [0, 0+1, 0+1+2, 0+1+2+3]. The idea I'm following writing partial sums as "foldr f e . tails" or "foldr f e . inits", depending on the 'direction' of summation. I asked the question 'which choice is more natural? inits or tails?' and it seems the answer i |
| 19:06:46 | <burnsidesLlama> | s that they are both natural, and in some sense 'dual' to each other. The most precise I have made this is that "forall xs :: [a], zipWith (++) (inits xs) (tails xs) = repeat xs". Is there a rigorous notion of duality here? Are there other places where a similar idea of duality shows up? I am new to irc, please let me know if I've done something inappropriate. |
| 19:07:29 | → | koolazer joins (~koo@user/koolazer) |
| 19:08:01 | → | falafel joins (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) |
| 19:08:14 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 265 seconds) |
| 19:09:26 | <dminuoso> | burnsidesLlama: Shouldn't those definitions rather be some `fmap (foldr f e) . tails` or `fmap (foldr f e) . inits` ? |
| 19:09:42 | × | qbt quits (~edun@user/edun) (Quit: WeeChat 3.2) |
| 19:09:42 | × | azeem quits (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Read error: Connection reset by peer) |
| 19:09:47 | <burnsidesLlama> | Yes! I meant the lifted versions |
| 19:09:54 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 19:10:32 | → | azeem joins (~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) |
| 19:10:57 | → | cheater1__ joins (~Username@user/cheater) |
| 19:11:11 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 19:11:20 | cheater1__ | is now known as cheater |
| 19:11:33 | <dminuoso> | burnsidesLlama: At any rate. tails seems like a far better choice |
| 19:12:01 | <dminuoso> | Well. "better" is a poor qualifier |
| 19:12:20 | <dminuoso> | tails has better asymptotics |
| 19:13:19 | × | drd quits (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 268 seconds) |
| 19:14:10 | × | zeenk quits (~zeenk@2a02:2f04:a106:9600:82fb:aed9:ca9:38d3) (Quit: Konversation terminated!) |
| 19:14:39 | <burnsidesLlama> | I don't tails has better asymptotics. inits returns initial segments in increasing length order. It can be implemented as "inits [] = [], inits (x:xs) = [] : map (x:) (inits xs)" |
| 19:15:18 | <zzz> | hlint: Unnecessary hiding, why not romove it? |
| 19:15:20 | zzz | removes it |
| 19:15:50 | <zzz> | ghc: Error: Ambiguous occurrence |
| 19:16:07 | <dminuoso> | burnsidesLlama: Mmm. So it seems my information is just out-of-date here |
| 19:16:22 | <dminuoso> | You cant implement inits naively if you ever expect fusion to occur. |
| 19:16:37 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Read error: Connection reset by peer) |
| 19:16:40 | <dminuoso> | Which is why the current version is implemented as: inits = map toListSB . scanl' snocSB emptySB |
| 19:16:55 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 19:18:24 | → | jippiedoe joins (~david@77-171-152-62.fixed.kpn.net) |
| 19:19:14 | <[exa]> | burnsidesLlama: maybe bad question, but why not instead generalize the easier "flipped" direction, i.e., [1,2,3] -> [0, 1+0, 2+1+0, 3+2+1+0] |
| 19:19:49 | <burnsidesLlama> | dminuoso I wasn't looking at the source earlier. What do you mean 'if you ever expect fusion to occur?', the source says something technical about consumers and producers |
| 19:20:19 | <[exa]> | burnsidesLlama: ah I re-read your question now. :D |
| 19:20:27 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 19:21:03 | <dminuoso> | burnsidesLlama: See https://gitlab.haskell.org/ghc/ghc/-/issues/9345 |
| 19:21:12 | <[exa]> | burnsidesLlama: you can easily convert this "flipped" one to the other, but IMO not vice versa because the "unflipped" way requires some way of counting stuff. |
| 19:21:21 | → | drd joins (~drd@93-39-151-19.ip76.fastwebnet.it) |
| 19:21:24 | → | qbt joins (~edun@user/edun) |
| 19:21:40 | <dminuoso> | [exa]: This one doesnt work for infinite lists. :( |
| 19:22:28 | → | cheater1__ joins (~Username@user/cheater) |
| 19:22:32 | → | favonia joins (~favonia@user/favonia) |
| 19:22:35 | <burnsidesLlama> | irc question, how do you reference someone's name like you two have been doing? |
| 19:22:38 | × | cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds) |
| 19:22:41 | cheater1__ | is now known as cheater |
| 19:22:54 | <zzz> | burnsidesLlama: depends on your client, most have autocomplete |
| 19:22:59 | <EvanR> | i type the first few letters and hit tab |
| 19:23:14 | <burnsidesLlama> | EvanR: This works for me :) |
| 19:24:13 | <dminuoso> | burnsidesLlama: So in simplified terms, GHC employs an optimization called short cut fusion |
| 19:24:39 | <dminuoso> | As an example, by law it's obvious that `fmap f . fmap g = fmap (f . g)` |
| 19:24:40 | × | qbt quits (~edun@user/edun) (Client Quit) |
| 19:24:53 | <burnsidesLlama> | [exa]: I suspect the flipped direction is natural for 'snoc' lists. I think there are four functions of the style of init and tails, which come in two pairs. One pair is natural for cons lists, and one is natural for snoc lists. I think the snoc list ones are 'tails' in increasing length order, and 'inits' in decreasing length order |
| 19:24:54 | <dminuoso> | The latter generally performs better, because it avoids the intermediate data structure |
| 19:25:12 | × | MQ-17J quits (~MQ-17J@8.21.10.15) (Ping timeout: 255 seconds) |
| 19:25:38 | <dminuoso> | And short cut fusion gives GHC a way of avoiding intermediate data structures behind the scenes. |
| 19:25:50 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds) |
| 19:26:10 | <burnsidesLlama> | dminuoso: So GHC automatically applies fusion laws of various kinds for optimisation (e.g. fold fusion, the map fusion you just mentioned)? |
| 19:27:12 | <dminuoso> | It only does so under particular circumstances |
| 19:27:28 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 19:27:57 | <dminuoso> | A particular example is that sum [0...10] does not actually require a list data type in the first place. |
| 19:28:33 | <dminuoso> | For that to work, the list has to be constructed specially in a way that this fusion can fire |
| 19:28:46 | → | cfricke joins (~cfricke@user/cfricke) |
| 19:29:04 | <dminuoso> | It roughly works like this: |
| 19:29:10 | → | qbt joins (~edun@user/edun) |
| 19:29:18 | <dminuoso> | build :: forall a . (forall b . (a -> b -> b) -> b -> b) -> [a] |
| 19:29:56 | <dminuoso> | This is a way to construct lists, if you notice closely, it's a sort of "turned around foldr" |
| 19:29:58 | <dminuoso> | % :t foldr |
| 19:29:59 | <yahb> | dminuoso: forall {t :: * -> *} {a} {b}. Foldable t => (a -> b -> b) -> b -> t a -> b |
| 19:30:34 | <dminuoso> | So GHC comes with special rewrite rules, that if you foldr right after build, they cancel each other out - and you dont have any intermedaite cons cells |
| 19:30:52 | × | koolazer quits (~koo@user/koolazer) (Ping timeout: 272 seconds) |
| 19:30:58 | × | qbt quits (~edun@user/edun) (Client Quit) |
| 19:31:24 | × | norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Ping timeout: 252 seconds) |
| 19:31:49 | <dminuoso> | Instead what you end up with is just a loop |
| 19:33:22 | → | qbt joins (~edun@user/edun) |
| 19:34:50 | × | cheater quits (~Username@user/cheater) (Ping timeout: 255 seconds) |
| 19:35:01 | → | cheater joins (~Username@user/cheater) |
| 19:35:24 | × | qbt quits (~edun@user/edun) (Client Quit) |
| 19:36:50 | <burnsidesLlama> | dminuoso: I don't understand the type signature of build. Why is it not build :: ((a -> [a] -> [a]) -> [a] -> [a]) -> [a]? What are the foralls doing? |
| 19:37:09 | × | alinab_ quits (sid468903@id-468903.brockwell.irccloud.com) () |
| 19:37:21 | → | alinab_ joins (sid468903@id-468903.brockwell.irccloud.com) |
| 19:37:43 | → | norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) |
| 19:37:50 | <dminuoso> | build g = g (:) [] |
| 19:37:51 | alinab_ | is now known as alinab |
| 19:37:57 | → | qbt joins (~edun@user/edun) |
| 19:38:25 | <burnsidesLlama> | Related question, how does build build lists? E.g. how might we write sum using build and fold? |
| 19:41:05 | → | burnside_ joins (~burnsides@dhcp168-025.wadham.ox.ac.uk) |
| 19:41:05 | × | burnsidesLlama quits (~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 19:41:38 | → | burnsidesLlama joins (~burnsides@dhcp168-025.wadham.ox.ac.uk) |
| 19:41:38 | <burnsidesLlama> | https://wiki.haskell.org/Correctness_of_short_cut_fusion seems like it has the answers for my fusion related questions. Thanks :) |
| 19:41:38 | × | burnside_ quits (~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 19:42:12 | × | qbt quits (~edun@user/edun) (Ping timeout: 245 seconds) |
| 19:42:47 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 19:42:48 | × | burnsidesLlama quits (~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 19:42:54 | → | burnsidesLlama joins (~burnsides@dhcp168-025.wadham.ox.ac.uk) |
| 19:43:01 | → | P1RATEZ joins (piratez@user/p1ratez) |
| 19:43:33 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 19:43:52 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 19:44:01 | × | eight quits (~eight@user/eight) (Quit: leaving) |
| 19:44:58 | <dminuoso> | burnsidesLlama: Try and understand how this works: |
| 19:45:04 | <dminuoso> | % foldr (:) [] [1,2,3] |
| 19:45:05 | <yahb> | dminuoso: [1,2,3] |
| 19:45:12 | <dminuoso> | If you do, you should be able to grok `build` |
| 19:45:43 | × | Obo quits (~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 268 seconds) |
| 19:45:44 | <dminuoso> | (The key idea is simply, that a list can be thought of as an arbitrary fold with (:) and [] plucked in) |
| 19:46:25 | → | qbt joins (~edun@user/edun) |
| 19:46:30 | <burnsidesLlama> | Yes, we are replacing the (:) and [] in a list expression with (:) and [] respectively |
| 19:46:54 | <dminuoso> | Sure, and now imagine it doesnt even matter whether the original is a list or not. |
| 19:47:25 | <dminuoso> | Could be a tree for all we know |
| 19:48:12 | → | Guest9 joins (~Guest9@43.250.157.35) |
| 19:48:15 | <dminuoso> | let x = \f z -> foldr f z t in ... |
| 19:48:26 | <dminuoso> | burnsidesLlama: So this is just a foldr partially applied to some structure already |
| 19:48:47 | × | qbt quits (~edun@user/edun) (Read error: Connection reset by peer) |
| 19:48:56 | <dminuoso> | And `build` just finalizes such a partially applied foldr by providing (:) and [] to the remaining arguments. |
| 19:49:10 | → | qbt joins (~edun@user/edun) |
| 19:50:07 | <burnsidesLlama> | in the 'let x = ...' line, do you mean foldr for lists? Or a fold for possibly another kind of ADT |
| 19:50:25 | × | qbt quits (~edun@user/edun) (Read error: Connection reset by peer) |
| 19:50:25 | × | burnsidesLlama quits (~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 19:50:41 | → | burnsidesLlama joins (~burnsides@dhcp168-025.wadham.ox.ac.uk) |
| 19:50:48 | × | burnsidesLlama quits (~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 19:51:04 | <dminuoso> | Maybe this is a red herring, mmm. |
| 19:51:06 | → | burnsidesLlama joins (~burnsides@dhcp168-025.wadham.ox.ac.uk) |
| 19:51:41 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 19:51:49 | <dminuoso> | burnsidesLlama: Could be anything. |
| 19:52:39 | → | cheater1__ joins (~Username@user/cheater) |
| 19:52:47 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 19:52:51 | → | qbt joins (~edun@user/edun) |
| 19:52:52 | cheater1__ | is now known as cheater |
| 19:53:22 | <burnsidesLlama> | are you saying we can make lists out of anything using build? this doesn't seem right |
| 19:54:05 | × | qbt quits (~edun@user/edun) (Client Quit) |
| 19:54:22 | → | qbt joins (~edun@user/edun) |
| 19:54:23 | tomsmeding | . o O ( https://hackage.haskell.org/package/base-4.14.0.0/docs/src/Data.Foldable.html#toList ) |
| 19:54:50 | <dminuoso> | burnsidesLlama: Let's for the sake of simplicity say it has to be a foldable at least. |
| 19:55:16 | <dminuoso> | Or.. no. This really is a red herring |
| 19:55:25 | <burnsidesLlama> | I'm not familiar with foldable, could we be even more concrete? E.g. by taking a binary tree type |
| 19:56:36 | <dminuoso> | burnsidesLlama: The idea is roughly the same as church encoding a list. A list can be fully characterized by its fold. |
| 19:56:42 | <dminuoso> | (its right fold) |
| 19:57:03 | <dminuoso> | % :t foldr |
| 19:57:03 | <yahb> | dminuoso: forall {t :: * -> *} {a} {b}. Foldable t => (a -> b -> b) -> b -> t a -> b |
| 19:57:38 | <dminuoso> | burnsidesLlama: One way to understand Foldable, is that Foldable is anything that you can turn into a list. |
| 19:57:51 | → | dunj3 joins (~dunj3@2001:16b8:30fc:7f00:fd96:42cd:9d60:7ae7) |
| 19:58:20 | <dminuoso> | So if we partially apply foldr in its 3rd argument already to some foldable thing, then the remaining thing fully characterizes the list |
| 19:58:21 | <burnsidesLlama> | And I imagine a Foldable instance must supply a canonical translation (which is injective?) into a list |
| 19:58:24 | <dminuoso> | Consider: |
| 19:58:32 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 19:58:37 | <dminuoso> | % x = \f z -> foldr f z [1,2,3,4,5,6] |
| 19:58:37 | <yahb> | dminuoso: |
| 19:58:45 | <dminuoso> | % :t x |
| 19:58:45 | <yahb> | dminuoso: forall {a} {b}. Num a => (a -> b -> b) -> b -> b |
| 19:58:46 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 19:58:51 | <dminuoso> | Im going to claim that `x` is fully equivalent to [1,2,3,4,5,6] |
| 19:59:11 | <dminuoso> | burnsidesLlama: Remember that question, we will get to it shortly |
| 19:59:34 | <dminuoso> | burnsidesLlama: Let's test my claim these things are even isomorphic. |
| 19:59:53 | × | qbt quits (~edun@user/edun) (Quit: WeeChat 3.2) |
| 20:00:04 | <dminuoso> | Can we turn `x` back into a proper Haskell list? |
| 20:00:06 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 20:00:12 | → | qbt joins (~edun@user/edun) |
| 20:00:44 | <burnsidesLlama> | by doing build x |
| 20:00:47 | <dminuoso> | heh |
| 20:00:50 | <dminuoso> | Right. |
| 20:00:56 | <dminuoso> | Or just manually doing `x (:) []` |
| 20:00:58 | <dminuoso> | % x (:) [] |
| 20:00:59 | <yahb> | dminuoso: [1,2,3,4,5,6] |
| 20:01:41 | <dminuoso> | 21:58:21 burnsidesLlama | And I imagine a Foldable instance must supply a canonical translation (which is injective?) into a list |
| 20:01:49 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 246 seconds) |
| 20:02:06 | → | cheater1__ joins (~Username@user/cheater) |
| 20:02:10 | → | lavaman joins (~lavaman@98.38.249.169) |
| 20:02:19 | <dminuoso> | Yes and no. While strictly speaking we could allow for an instance author to write `toList` (and it would semantically be legit), instead we demand you supply an (equivalent) foldr or foldMap instead. |
| 20:02:22 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 20:02:29 | cheater1__ | is now known as cheater |
| 20:02:42 | <dminuoso> | foldr has the same power as toList, but its more flexible |
| 20:03:03 | <dminuoso> | It's more flexible because you can - should you want - avoid the actual intermediate cons cells in the list |
| 20:03:20 | <dminuoso> | So here comes the clue: |
| 20:03:32 | <dminuoso> | `build` turns a foldr-encoded list into a proper list |
| 20:03:36 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 268 seconds) |
| 20:03:54 | <dminuoso> | and foldr goes from a proper list to something else again |
| 20:04:14 | <dminuoso> | build is equipped with special fusion rules that essentially say: |
| 20:04:34 | <dminuoso> | With some luck: foldr k z (build g) = g k z |
| 20:05:14 | → | jumper149 joins (~jumper149@80.240.31.34) |
| 20:05:15 | × | juhp quits (~juhp@128.106.188.66) (Ping timeout: 255 seconds) |
| 20:05:44 | <burnsidesLlama> | is it saying: "if we are building a list out of g, only to destroy it, then we can directly compute the result"? |
| 20:05:50 | <dminuoso> | Yes. |
| 20:05:52 | <dminuoso> | With some luck. |
| 20:06:17 | <dminuoso> | You're still at the merci of the inliner and the magic whistles of the GHC simplifier - so there's no actual guarantee. |
| 20:06:32 | → | Obo joins (~roberto@70.pool90-171-81.dynamic.orange.es) |
| 20:06:32 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 20:06:36 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 255 seconds) |
| 20:07:05 | <burnsidesLlama> | that sounds mysterious and/or ominous |
| 20:07:10 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 20:07:13 | <burnsidesLlama> | one last question, then i need to go to sleep |
| 20:07:42 | <burnsidesLlama> | how is this kind of 'deforestation' related to deforesting a function of the form 'fold . unfold'? |
| 20:08:08 | → | juhp joins (~juhp@128.106.188.66) |
| 20:09:25 | <dminuoso> | burnsidesLlama: https://www.cs.ox.ac.uk/ralf.hinze/publications/IFL10.pdf |
| 20:09:50 | → | ph88^ joins (~ph88@2a02:8109:9e00:2b48:9925:18b1:79f7:f242) |
| 20:10:07 | <dminuoso> | This optimization I described above is called foldr/build fusion in GHC slang. |
| 20:10:14 | <dminuoso> | There's an equivalent dual optimizatoin called unfold/destroy |
| 20:11:43 | <burnsidesLlama> | thank you! :) |
| 20:12:12 | × | ph88 quits (~ph88@2a02:8109:9e00:7e5c:9925:18b1:79f7:f242) (Ping timeout: 245 seconds) |
| 20:12:23 | <dminuoso> | % :t unfoldr |
| 20:12:24 | <yahb> | dminuoso: forall {t} {a}. (t -> Maybe (a, t)) -> t -> [a] |
| 20:12:25 | <dminuoso> | % :t destroy |
| 20:12:25 | <yahb> | dminuoso: forall {a} {t1} {t2}. (([a] -> Maybe (a, [a])) -> t1 -> t2) -> t1 -> t2 |
| 20:12:48 | <dminuoso> | % destroy unfoldr [1..5] |
| 20:12:48 | <yahb> | dminuoso: [1,2,3,4,5] |
| 20:13:14 | × | juhp quits (~juhp@128.106.188.66) (Quit: juhp) |
| 20:13:23 | <dminuoso> | Please dont ask me why we have foldr/build fusion. I expect other folks to be more knowledgable here. |
| 20:13:28 | → | juhp joins (~juhp@128.106.188.66) |
| 20:13:50 | <dminuoso> | burnsidesLlama: By the way, as an interesting side note: |
| 20:14:00 | <dminuoso> | Recall my example of: fmap f . fmap g = fmap (f . g) ? |
| 20:14:29 | <dminuoso> | It would be nice if GHC could observe this law, and always transform the former into the latter. But it cant, GHC is not even aware of any class laws. |
| 20:14:37 | <dminuoso> | (It wouldn't even know if they are satisfied) |
| 20:15:11 | <dminuoso> | However, there's tricks to tie GHCs hands and gain this optimization in a guaranteed manner |
| 20:18:02 | × | norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Ping timeout: 245 seconds) |
| 20:18:24 | × | Guest9 quits (~Guest9@43.250.157.35) (Quit: Connection closed) |
| 20:19:03 | <burnsidesLlama> | Making GHC aware of class laws seems like something type-level programming can address. I can't think of how exactly yet. It is like embedding a proof assistant able to work with user-defined axioms into the compiler. |
| 20:19:25 | × | Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: Connection reset by peer) |
| 20:19:42 | → | Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) |
| 20:19:49 | → | Atum__ joins (IRC@user/atum/x-2392232) |
| 20:19:50 | <Hecate> | burnsidesLlama: LiquidHaskell |
| 20:19:56 | <Hecate> | (I think?) |
| 20:20:09 | <dminuoso> | burnsidesLlama: Well, we can get away with something far more trivial in Haskell |
| 20:20:17 | <Hecate> | Ryan Scott wrote a paper about it as well |
| 20:20:50 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal) |
| 20:21:03 | <dminuoso> | % newtype F f a = F { runF :: forall b. (a -> b) -> f b } |
| 20:21:04 | <yahb> | dminuoso: |
| 20:21:05 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 20:21:50 | <dminuoso> | burnsidesLlama: ^- here. This is just a newtype wrapper where we represent a functor as partially applied to fmap, sort of how the argument to `build` is a foldr partially applied to something list like. |
| 20:22:11 | × | Atum_ quits (IRC@user/atum/x-2392232) (Ping timeout: 265 seconds) |
| 20:22:15 | <dminuoso> | % someList = F (`fmap` [1,2,3,4,5]) |
| 20:22:15 | <yahb> | dminuoso: |
| 20:22:43 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 20:22:44 | <dminuoso> | % instance Functor (F f) where fmap f m = F (\k -> runF m (k . f)) |
| 20:22:44 | <yahb> | dminuoso: |
| 20:22:49 | → | cheater1__ joins (~Username@user/cheater) |
| 20:22:52 | cheater1__ | is now known as cheater |
| 20:23:43 | <dminuoso> | Here. So we can turn say a list into this `F` representation, then do a bunch of `fmap f . fmap g . fmap h . fmap i . fmap j` on it, and then go back again - and tadaa - its fused. |
| 20:23:51 | <dminuoso> | It will go over the list only once |
| 20:24:47 | <tomsmeding> | because the actual 'fmap' on the list is only executed once: when the original function (`fmap` [1,2,3,4,5]) is executed; all the other fmaps translate to function composition, of which ghc does know that it can fuse |
| 20:24:52 | → | ptrcmd joins (~ptrcmd@user/ptrcmd) |
| 20:25:45 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection) |
| 20:25:58 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) |
| 20:26:33 | <dminuoso> | % lowerF (F f) = f id |
| 20:26:33 | <yahb> | dminuoso: |
| 20:26:40 | <dminuoso> | % lowerF . fmap (+1) . fmap (*20) . fmap (/5) $ someList |
| 20:26:40 | <yahb> | dminuoso: [5.0,9.0,13.0,17.0,21.0] |
| 20:28:12 | <dminuoso> | We can then also write ourselves some: |
| 20:28:36 | <dminuoso> | % liftF a = F (`fmap` a) |
| 20:28:36 | <yahb> | dminuoso: |
| 20:28:41 | <burnsidesLlama> | in the definition of F, is runF missing an argument? the call in the instance declaration to runF m (k . f) seems to need two arguments rather than one |
| 20:28:47 | <dminuoso> | % lowerF . fmap (+1) . fmap (*20) . fmap (/5) .liftF $ [1,2,3,4,5,6] |
| 20:28:47 | <yahb> | dminuoso: [5.0,9.0,13.0,17.0,21.0,25.0] |
| 20:29:05 | <dminuoso> | Then all we have to do is wrap this large fmap composition between `lowerF` and `liftF`, and we get fusion for free. |
| 20:29:23 | <dminuoso> | Nothing else even knows about this F representation! At runtime its even gone because its a newtype |
| 20:29:51 | × | P1RATEZ quits (piratez@user/p1ratez) (Remote host closed the connection) |
| 20:29:54 | <dminuoso> | burnsidesLlama: No. This is field-syntax for newtype |
| 20:29:59 | <dminuoso> | % :t runF |
| 20:29:59 | <yahb> | dminuoso: forall {f :: * -> *} {a}. F f a -> forall b. (a -> b) -> f b |
| 20:30:27 | → | beka joins (~beka@104.193.170-244.PUBLIC.monkeybrains.net) |
| 20:30:52 | <tomsmeding> | 'runF m' is the field, which has type (forall b. (a -> b) -> f b), of the record m |
| 20:31:00 | <dminuoso> | Correkt |
| 20:33:12 | <burnsidesLlama> | I'll need time to digest what's been said :), bye for now. |
| 20:33:12 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
| 20:33:12 | × | amirouche quits (~amirouche@user/amirouche) (Read error: Connection reset by peer) |
| 20:34:29 | × | chexum quits (~chexum@gateway/tor-sasl/chexum) (Quit: -) |
| 20:34:42 | smichel17 | is now known as smichel |
| 20:36:18 | → | chexum joins (~chexum@gateway/tor-sasl/chexum) |
| 20:37:40 | → | analognoise joins (~analognoi@83.136.182.93) |
| 20:38:02 | × | cheater quits (~Username@user/cheater) (Ping timeout: 245 seconds) |
| 20:38:25 | → | cheater joins (~Username@user/cheater) |
| 20:38:33 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 20:38:44 | → | Guest239 joins (~Guest23@50.47.115.102) |
| 20:38:55 | × | finsternis quits (~X@23.226.237.192) (Remote host closed the connection) |
| 20:38:58 | → | favonia joins (~favonia@user/favonia) |
| 20:39:21 | → | amirouche joins (~amirouche@user/amirouche) |
| 20:39:41 | × | burnsidesLlama quits (~burnsides@dhcp168-025.wadham.ox.ac.uk) (Remote host closed the connection) |
| 20:40:07 | → | burnsidesLlama joins (~burnsides@dhcp168-025.wadham.ox.ac.uk) |
| 20:44:09 | <Guest239> | Does anyone know how to make autocompletion and automatic refactoring to work for Haskell in Spacemacs? |
| 20:44:55 | × | burnsidesLlama quits (~burnsides@dhcp168-025.wadham.ox.ac.uk) (Ping timeout: 268 seconds) |
| 20:45:03 | → | Topsi joins (~Tobias@dyndsl-095-033-020-123.ewe-ip-backbone.de) |
| 20:46:16 | × | beka quits (~beka@104.193.170-244.PUBLIC.monkeybrains.net) (Ping timeout: 246 seconds) |
| 20:47:03 | smichel | is now known as smichel17 |
| 20:47:28 | × | silverwhitefish quits (~hidden@47.202.102.10) (Quit: One for all, all for One (2 Corinthians 5)) |
| 20:48:54 | × | MidAutumnMoon9 quits (~MidAutumn@user/midautumnmoon) (Ping timeout: 255 seconds) |
| 20:49:14 | × | amahl quits (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 268 seconds) |
| 20:50:35 | → | jess joins (~jess@libera/staff/jess) |
| 20:50:54 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 20:51:50 | × | jippiedoe quits (~david@77-171-152-62.fixed.kpn.net) (Quit: Leaving) |
| 20:51:53 | → | jneira_ joins (~jneira_@28.red-80-28-169.staticip.rima-tde.net) |
| 20:52:09 | <Guest239> | In spacemacs the Haskell layer is able to suggest refactorings but is unable to apply them with SPC m r r. How can I fix this? |
| 20:56:01 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 20:56:05 | → | cheater1__ joins (~Username@user/cheater) |
| 20:56:08 | cheater1__ | is now known as cheater |
| 20:56:20 | → | MidAutumnMoon9 joins (~MidAutumn@user/midautumnmoon) |
| 20:58:32 | × | ph88^ quits (~ph88@2a02:8109:9e00:2b48:9925:18b1:79f7:f242) (Ping timeout: 255 seconds) |
| 21:01:10 | → | DNH joins (~DNH@2a02:8108:1100:16d8:4c45:cc63:abad:ed54) |
| 21:01:12 | × | DNH quits (~DNH@2a02:8108:1100:16d8:4c45:cc63:abad:ed54) (Client Quit) |
| 21:01:20 | × | ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec) |
| 21:03:42 | × | falafel quits (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 258 seconds) |
| 21:04:14 | × | cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds) |
| 21:04:34 | → | cheater joins (~Username@user/cheater) |
| 21:05:15 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 21:05:51 | → | spruit11_ joins (~quassel@2a02:a467:ccd6:1:4852:6669:da0c:37fe) |
| 21:06:42 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 21:09:20 | × | spruit11 quits (~quassel@2a02:a467:ccd6:1:f403:cf1e:97b5:1c9b) (Ping timeout: 255 seconds) |
| 21:10:32 | → | burnsidesLlama joins (~burnsides@dhcp168-025.wadham.ox.ac.uk) |
| 21:11:03 | → | zebrag joins (~chris@user/zebrag) |
| 21:11:34 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 21:11:58 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 21:13:12 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 21:13:37 | → | Atum_ joins (IRC@user/atum/x-2392232) |
| 21:15:21 | × | smichel17 quits (~smichel17@c-73-68-217-18.hsd1.ma.comcast.net) (Ping timeout: 265 seconds) |
| 21:15:23 | × | burnsidesLlama quits (~burnsides@dhcp168-025.wadham.ox.ac.uk) (Remote host closed the connection) |
| 21:15:27 | × | zebrag quits (~chris@user/zebrag) (Ping timeout: 255 seconds) |
| 21:15:52 | → | burnsidesLlama joins (~burnsides@dhcp168-025.wadham.ox.ac.uk) |
| 21:16:38 | × | Atum__ quits (IRC@user/atum/x-2392232) (Ping timeout: 272 seconds) |
| 21:16:47 | × | neceve quits (~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f) (Ping timeout: 245 seconds) |
| 21:17:34 | → | zebrag joins (~chris@user/zebrag) |
| 21:17:38 | × | zebrag quits (~chris@user/zebrag) (Client Quit) |
| 21:18:01 | → | zebrag joins (~chris@user/zebrag) |
| 21:19:09 | → | koolazer joins (~koo@user/koolazer) |
| 21:20:16 | → | silverwhitefish joins (~hidden@47.202.102.10) |
| 21:20:30 | × | mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 21:20:41 | × | burnsidesLlama quits (~burnsides@dhcp168-025.wadham.ox.ac.uk) (Ping timeout: 268 seconds) |
| 21:20:58 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 21:21:49 | → | mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
| 21:22:41 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 21:29:51 | × | Obo quits (~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 265 seconds) |
| 21:32:17 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 255 seconds) |
| 21:33:11 | × | mikoto-chan quits (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) (Ping timeout: 255 seconds) |
| 21:36:57 | → | agua joins (~agua@2804:14c:8793:8e2f:d158:60e:567f:c699) |
| 21:40:39 | × | pesada quits (~agua@2804:18:4f:750a:1:0:192e:7017) (Ping timeout: 255 seconds) |
| 21:41:24 | → | acidjnk_new3 joins (~acidjnk@p200300d0c72b9516b9158842f1cb7e92.dip0.t-ipconnect.de) |
| 21:42:53 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 21:45:36 | × | cheater quits (~Username@user/cheater) (Ping timeout: 255 seconds) |
| 21:45:45 | → | cheater joins (~Username@user/cheater) |
| 21:46:21 | → | cfricke joins (~cfricke@user/cfricke) |
| 21:47:15 | × | dunj3 quits (~dunj3@2001:16b8:30fc:7f00:fd96:42cd:9d60:7ae7) (Remote host closed the connection) |
| 21:47:39 | → | Franciman joins (~francesco@openglass.it) |
| 21:47:53 | <Franciman> | Hi all, if I want to learn about ghc internals |
| 21:48:00 | <Franciman> | do you know a good source? |
| 21:48:08 | <maerwald> | Franciman: ghc devs |
| 21:48:20 | <Franciman> | hi maerwald |
| 21:48:21 | <Franciman> | thanks |
| 21:49:04 | × | dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2) |
| 21:50:02 | <geekosaur> | there's some decent docs on the ghc wiki https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/#the-ghc-commentary |
| 21:53:42 | → | lbseale joins (~lbseale@user/ep1ctetus) |
| 21:54:25 | <Franciman> | ty |
| 21:58:02 | × | mei quits (~mei@user/mei) (Read error: Connection reset by peer) |
| 22:02:12 | <lbseale> | I'm trying to write generics for the first time, and I'm stuck on trying to get the name of a record field, here is my code and error message: https://paste.tomsmeding.com/u3dLcpZN ... I don't understand how to use selName |
| 22:02:37 | × | ubert quits (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 22:03:08 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:03:57 | → | benin0369 joins (~benin@183.82.176.17) |
| 22:05:42 | × | Topsi quits (~Tobias@dyndsl-095-033-020-123.ewe-ip-backbone.de) (Ping timeout: 268 seconds) |
| 22:06:55 | → | pavonia joins (~user@user/siracusa) |
| 22:14:24 | × | cheater quits (~Username@user/cheater) (Ping timeout: 255 seconds) |
| 22:14:38 | → | cheater joins (~Username@user/cheater) |
| 22:14:57 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection) |
| 22:15:11 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) |
| 22:17:06 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds) |
| 22:18:25 | <EvanR> | lbseale: it may be s vs s0 in the error message indicates it doesn't know you're talking about the same s |
| 22:19:09 | <lbseale> | EvanR yeah that's my theory as well, so how do I get it to know about s ? |
| 22:19:21 | <EvanR> | when you use s below, that's a "new" s. You can get the original s in scope using ScopedTypeVars and forall in the type signature |
| 22:19:32 | <lbseale> | aHA |
| 22:19:37 | → | finsternis joins (~X@23.226.237.192) |
| 22:20:18 | <lbseale> | that fixed it! thanks so much |
| 22:20:22 | <EvanR> | nice |
| 22:23:06 | → | falafel joins (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) |
| 22:24:13 | × | abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection) |
| 22:29:47 | × | jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.2) |
| 22:30:41 | → | ph88^ joins (~ph88@2a02:8109:9e00:7e5c:9925:18b1:79f7:f242) |
| 22:30:43 | × | cheater quits (~Username@user/cheater) (Ping timeout: 258 seconds) |
| 22:31:14 | → | cheater joins (~Username@user/cheater) |
| 22:33:38 | × | lbseale quits (~lbseale@user/ep1ctetus) (Quit: Client closed) |
| 22:34:54 | → | lbseale joins (~lbseale@user/ep1ctetus) |
| 22:43:38 | → | lavaman joins (~lavaman@98.38.249.169) |
| 22:44:06 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 255 seconds) |
| 22:44:11 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 22:44:30 | → | zebrag joins (~chris@user/zebrag) |
| 22:45:57 | × | Guest239 quits (~Guest23@50.47.115.102) (Quit: Client closed) |
| 22:46:28 | × | Atum_ quits (IRC@user/atum/x-2392232) (Quit: Atum_) |
| 22:46:32 | × | hpc quits (~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 255 seconds) |
| 22:46:48 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds) |
| 22:48:09 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 265 seconds) |
| 22:48:26 | → | hpc joins (~juzz@ip98-169-35-13.dc.dc.cox.net) |
| 22:48:57 | × | fendor quits (~fendor@77.119.210.250.wireless.dyn.drei.com) (Remote host closed the connection) |
| 22:49:21 | → | pesada joins (~agua@2804:18:4f:750a:1:0:192e:7017) |
| 22:49:47 | × | justache quits (~justache@user/justache) (Excess Flood) |
| 22:50:32 | → | justache joins (~justache@user/justache) |
| 22:51:47 | × | agua quits (~agua@2804:14c:8793:8e2f:d158:60e:567f:c699) (Ping timeout: 245 seconds) |
| 22:52:01 | → | cheater1__ joins (~Username@user/cheater) |
| 22:52:16 | × | cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds) |
| 22:52:16 | → | Atum_ joins (IRC@user/atum/x-2392232) |
| 22:52:24 | cheater1__ | is now known as cheater |
| 22:53:54 | → | favonia joins (~favonia@user/favonia) |
| 22:53:57 | × | chomwitt quits (~Pitsikoko@ppp-94-67-202-202.home.otenet.gr) (Remote host closed the connection) |
| 22:54:05 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Remote host closed the connection) |
| 22:55:19 | → | PungentCheese joins (~PungentCh@x527179fa.dyn.telefonica.de) |
| 22:56:19 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:59:54 | × | Atum_ quits (IRC@user/atum/x-2392232) (Quit: Atum_) |
| 23:13:01 | → | agua joins (~agua@2804:14c:8793:8e2f:d158:60e:567f:c699) |
| 23:16:46 | × | pesada quits (~agua@2804:18:4f:750a:1:0:192e:7017) (Ping timeout: 246 seconds) |
| 23:19:06 | × | favonia quits (~favonia@user/favonia) (Remote host closed the connection) |
| 23:19:56 | → | favonia joins (~favonia@user/favonia) |
| 23:20:41 | → | ubikium joins (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net) |
| 23:22:29 | → | dajoer joins (~david@user/gvx) |
| 23:27:13 | × | falafel quits (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Remote host closed the connection) |
| 23:27:31 | → | falafel joins (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) |
| 23:28:19 | × | acidjnk_new3 quits (~acidjnk@p200300d0c72b9516b9158842f1cb7e92.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 23:30:02 | × | chexum quits (~chexum@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 23:30:26 | → | chexum joins (~chexum@gateway/tor-sasl/chexum) |
| 23:36:29 | <lechner> | Hi, should a cabal project be able to 'import' local files in the same folder? |
| 23:38:57 | × | Solarion quits (~solarion@mail.digitasaru.net) (Remote host closed the connection) |
| 23:39:33 | <sclv> | what on earth do you mean? |
| 23:39:52 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 246 seconds) |
| 23:40:10 | <pavonia> | You can import non-exposed modules, if you mean that |
| 23:40:17 | → | waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) |
| 23:40:28 | <lechner> | search path, except with cabal: https://stackoverflow.com/questions/30327770/add-local-files-to-haskell-libraries-search-path |
| 23:40:34 | × | drd quits (~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 246 seconds) |
| 23:41:18 | <lechner> | do i have to specify -i in my .cabal? |
| 23:41:50 | <monochrom> | Uh, manual control of -i is best done when using GHC directly without cabal. |
| 23:42:18 | <monochrom> | You know, you would do yourself a great service if you set your DNS (say) to block stackoverflow. |
| 23:42:19 | <lechner> | can cabal find it another way? |
| 23:42:46 | <monochrom> | Because I have had students who consult stackoverflow for answering my questions and they were dead wrong. |
| 23:43:04 | <sclv> | search path for modules? |
| 23:43:11 | <sclv> | like for haskell files? |
| 23:43:22 | <sclv> | you can set that in the cabal file itself |
| 23:43:36 | <lechner> | just splitting my sources. json generics to be exact |
| 23:43:45 | <monochrom> | There is a way to tell cabal to honour local code but the local code needs also to be in cabalized package form. |
| 23:43:51 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) |
| 23:43:59 | <monochrom> | For more details please read the cabal user guide. |
| 23:44:24 | <monochrom> | Or if you can find a blog that quickstarts you that's cool, but I pretty much doubt blogger quality too. |
| 23:45:31 | <lechner> | other-modules? https://cabal.readthedocs.io/en/3.4/developing-packages.html#modules-included-in-the-package |
| 23:48:27 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 255 seconds) |
| 23:49:43 | × | chexum quits (~chexum@gateway/tor-sasl/chexum) (Ping timeout: 244 seconds) |
| 23:50:15 | × | cheater quits (~Username@user/cheater) (Ping timeout: 255 seconds) |
| 23:50:36 | → | cheater joins (~Username@user/cheater) |
| 23:51:14 | → | pesada joins (~agua@2804:18:4f:750a:1:0:192e:7017) |
| 23:52:41 | → | chexum joins (~chexum@gateway/tor-sasl/chexum) |
| 23:53:00 | × | agua quits (~agua@2804:14c:8793:8e2f:d158:60e:567f:c699) (Read error: Connection reset by peer) |
| 23:53:04 | → | Core6260 joins (~agua@2804:14c:8793:8e2f:d158:60e:567f:c699) |
| 23:53:46 | → | Null_A joins (~null_a@2601:645:8700:2290:3dcd:98af:2801:58da) |
| 23:54:10 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 23:54:20 | × | spruit11_ quits (~quassel@2a02:a467:ccd6:1:4852:6669:da0c:37fe) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 23:54:37 | → | spruit11 joins (~quassel@2a02:a467:ccd6:1:4852:6669:da0c:37fe) |
| 23:55:50 | × | pesada quits (~agua@2804:18:4f:750a:1:0:192e:7017) (Ping timeout: 255 seconds) |
| 23:57:38 | × | Core6260 quits (~agua@2804:14c:8793:8e2f:d158:60e:567f:c699) (Ping timeout: 255 seconds) |
All times are in UTC on 2021-07-14.