2021/07/14

2021-07-14 00:00:19 +0200 <hseg> for this to happen, we must have a ~ (α -> β), b ~ (φ α -> φ β)
2021-07-14 00:00:31 +0200 <hseg> ( ~ is type equality)
2021-07-14 00:01:20 +0200hgolden(uid507415@id-507415.highgate.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-14 00:01:38 +0200 <hseg> I then make a couple of bookkeeping renamings, to avoid having α, β, φ in the resulting type
2021-07-14 00:01:51 +0200 <hseg> (so read {} from left to right)
2021-07-14 00:02:43 +0200 <hseg> the multiline {} decompose the desired equality more and more, producing assignments for some of the variables
2021-07-14 00:05:14 +0200 <mariohesles> Say I want to implement a library for defining social relationships, so a function in this library might be something like getPaternalGrandfather :: Person -> Person; I want to have references to each `Person`s children and parents within a given value. What would be a "Haskell-y" way of doing this? I'm thinking of doing something like the following `data Person = P UID Name Sex Parents Children deriving (Eq, Show)`, where `type UID =
2021-07-14 00:05:14 +0200 <mariohesles> Int`, `type Name = String`, `data Sex = Female | Male deriving (Eq, Show), `type Parents = [UID]` and `type Children = [UID]`, but it feels wrong. I would have to have a database of all Persons and would have to refer to this database to do anything interesting. Is this bad?
2021-07-14 00:05:42 +0200ph88(~ph88@2a02:8109:9e00:7e5c:146a:5c4b:109:2ce4)
2021-07-14 00:08:38 +0200 <hololeap> is what bad? having a database or needing it to do anything interesting?
2021-07-14 00:08:51 +0200 <hololeap> those both sound like pretty reasonable things to me
2021-07-14 00:09:11 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-07-14 00:09:45 +0200 <hololeap> it's a pretty simple schema that would fit well inside an SQL database, so it's not going to need the full expressiveness of haskell. there's nothing wrong with that.
2021-07-14 00:09:59 +0200 <hseg> mariohesles: you mean you feel the encoding should be closer to the relationship graph?
2021-07-14 00:10:30 +0200 <hseg> otoh, being closer to the graph is nicer conceptually, but as hololeap points out, it'll be harder to serialize
2021-07-14 00:10:57 +0200 <hseg> and grippingly, it can potentially entail retaining huge objects in memory
2021-07-14 00:12:47 +0200 <FixedPointDude> yeah the graphiest thing that jumps out to me is: an Ancestry is a tree of Person, and every Person contains an Ancestry
2021-07-14 00:13:03 +0200 <FixedPointDude> data Person = Person Ancestry
2021-07-14 00:13:04 +0200 <FixedPointDude> data Ancestry = Empty | Tree [Person]
2021-07-14 00:13:35 +0200ph88(~ph88@2a02:8109:9e00:7e5c:146a:5c4b:109:2ce4) (Quit: Leaving)
2021-07-14 00:13:47 +0200 <FixedPointDude> well the Empty is redundant
2021-07-14 00:15:57 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 245 seconds)
2021-07-14 00:16:05 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
2021-07-14 00:16:38 +0200Guest6135(~Guest61@2001:ac8:27:20::a01e) (Quit: Client closed)
2021-07-14 00:16:58 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-14 00:19:47 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 00:21:48 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-07-14 00:23:22 +0200vk3wtf(~doc@124.168.198.139)
2021-07-14 00:23:45 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-07-14 00:31:18 +0200Guest6176(~Guest61@2001:ac8:27:20::a01e)
2021-07-14 00:31:29 +0200Lycurgus(~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
2021-07-14 00:34:10 +0200neceve(~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f) (Ping timeout: 246 seconds)
2021-07-14 00:35:12 +0200 <dsal> mariohesles: modeling this is going to be ridiculously hard. Are you sure every person is only either Male or Female and only has one paternal grandfather?
2021-07-14 00:36:33 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-07-14 00:39:24 +0200gentauro(~gentauro@user/gentauro) (Ping timeout: 272 seconds)
2021-07-14 00:39:24 +0200sm2n(~sm2n@user/sm2n) (Ping timeout: 272 seconds)
2021-07-14 00:39:38 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Read error: Connection reset by peer)
2021-07-14 00:39:45 +0200rostero(uid236576@id-236576.tooting.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-14 00:40:01 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-07-14 00:43:12 +0200dextaa(~DV@aftr-37-201-214-197.unity-media.net) (Ping timeout: 255 seconds)
2021-07-14 00:43:16 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 246 seconds)
2021-07-14 00:44:11 +0200Gurkenglas_(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-07-14 00:45:10 +0200warnz(~warnz@2600:1700:77c0:5610:9856:f279:a598:9845)
2021-07-14 00:45:19 +0200dextaa(~DV@37.201.214.197)
2021-07-14 00:46:34 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
2021-07-14 00:46:53 +0200pavonia_(~user@user/siracusa)
2021-07-14 00:48:16 +0200pavonia(~user@user/siracusa) (Ping timeout: 272 seconds)
2021-07-14 00:48:19 +0200pavonia_pavonia
2021-07-14 00:50:07 +0200shapr(~user@pool-108-28-144-11.washdc.fios.verizon.net) (Ping timeout: 245 seconds)
2021-07-14 00:50:24 +0200Gurkenglas_(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 255 seconds)
2021-07-14 00:50:25 +0200 <mariohesles> dsal for the purpose of the library, yes, assume that there are only two sexes and everyone has exactly two real parents
2021-07-14 00:50:49 +0200 <davean> mariohesles: haha, I worked with genetics lab data, parents are complicated.
2021-07-14 00:51:18 +0200 <mariohesles> hseg yes I do feel the encoding could be closer to the graph itself
2021-07-14 00:52:20 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2021-07-14 00:52:36 +0200 <dsal> A person may have multiple arbitrary relationships with multiple people. It's going to be easiest to just do a plain graph and perhaps have common named edges, but there are people for whom their father and grandfather are the same person, or have multiple fathers to traverse for grandparents.
2021-07-14 00:52:47 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2021-07-14 00:57:45 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-14 00:58:35 +0200fryguybob(~fryguybob@cpe-74-65-31-113.rochester.res.rr.com) (Ping timeout: 252 seconds)
2021-07-14 00:59:18 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2021-07-14 01:03:08 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
2021-07-14 01:03:41 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2021-07-14 01:04:16 +0200acidjnk(~acidjnk@p200300d0c72b9557fc98475d99842c11.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2021-07-14 01:04:28 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-07-14 01:05:20 +0200ph88(~ph88@2a02:8109:9e00:7e5c:b510:a429:9a65:bf36)
2021-07-14 01:07:20 +0200derelict(~derelict@user/derelict)
2021-07-14 01:07:25 +0200ph88(~ph88@2a02:8109:9e00:7e5c:b510:a429:9a65:bf36) (Client Quit)
2021-07-14 01:13:22 +0200juhp(~juhp@128.106.188.66) (Quit: juhp)
2021-07-14 01:13:35 +0200juhp(~juhp@128.106.188.66)
2021-07-14 01:20:09 +0200warnz(~warnz@2600:1700:77c0:5610:9856:f279:a598:9845) (Remote host closed the connection)
2021-07-14 01:22:56 +0200o1lo01ol_(~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Remote host closed the connection)
2021-07-14 01:28:51 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (ERC (IRC client for Emacs 28.0.50))
2021-07-14 01:31:37 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-07-14 01:32:23 +0200warnz(~warnz@2600:1700:77c0:5610:9856:f279:a598:9845)
2021-07-14 01:32:29 +0200warnz(~warnz@2600:1700:77c0:5610:9856:f279:a598:9845) (Remote host closed the connection)
2021-07-14 01:34:34 +0200Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
2021-07-14 01:34:40 +0200warnz(~warnz@2600:1700:77c0:5610:9856:f279:a598:9845)
2021-07-14 01:35:09 +0200machinedgod(~machinedg@24.105.81.50)
2021-07-14 01:39:25 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-07-14 01:40:17 +0200warnz(~warnz@2600:1700:77c0:5610:9856:f279:a598:9845) (Remote host closed the connection)
2021-07-14 01:41:24 +0200zebrag(~chris@user/zebrag) (Ping timeout: 256 seconds)
2021-07-14 01:42:20 +0200zebrag(~chris@user/zebrag)
2021-07-14 01:44:35 +0200jess(~jess@libera/staff/jess) ()
2021-07-14 01:46:01 +0200smtnet3(~asdfasdfa@202.36.244.25) (Quit: Leaving)
2021-07-14 01:46:38 +0200dajoer(~david@user/gvx)
2021-07-14 01:47:58 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 01:51:41 +0200dre(~dre@2001:8003:c932:c301:b299:b352:c4c4:74a1) (Quit: Leaving)
2021-07-14 01:52:03 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 01:52:59 +0200cjb(~cjb@user/cjb)
2021-07-14 01:55:45 +0200Atum__(IRC@user/atum/x-2392232) (Quit: Atum__)
2021-07-14 02:00:42 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 272 seconds)
2021-07-14 02:03:43 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds)
2021-07-14 02:04:27 +0200gentauro(~gentauro@user/gentauro)
2021-07-14 02:04:40 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-07-14 02:05:15 +0200ec(~ec@gateway/tor-sasl/ec)
2021-07-14 02:08:03 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal)
2021-07-14 02:08:13 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt)
2021-07-14 02:09:47 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-07-14 02:12:45 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 255 seconds)
2021-07-14 02:13:04 +0200hseg(~gesh@185.120.126.10) (Quit: WeeChat 3.2)
2021-07-14 02:13:48 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 02:14:19 +0200silverwhitefish(~hidden@47.202.102.10) (Quit: One for all, all for One (2 Corinthians 5))
2021-07-14 02:16:18 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
2021-07-14 02:16:48 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 268 seconds)
2021-07-14 02:26:26 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2021-07-14 02:27:25 +0200fryguybob(~fryguybob@cpe-74-65-31-113.rochester.res.rr.com)
2021-07-14 02:27:58 +0200silverwhitefish(~hidden@47.202.102.10)
2021-07-14 02:31:04 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 02:31:42 +0200Guest3034(~mike@user/feetwind) (Quit: WeeChat 3.1)
2021-07-14 02:31:54 +0200feetwind(~mike@user/feetwind)
2021-07-14 02:33:16 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 02:38:47 +0200 <hololeap> every person has exactly two biological parents... is that a reasonable enough assumption?
2021-07-14 02:39:11 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-07-14 02:40:46 +0200 <geekosaur> for genetics yes, for other aspects no
2021-07-14 02:41:11 +0200 <geekosaur> and the biological parents may be unrelated to the familial parents
2021-07-14 02:41:46 +0200 <hololeap> That's why I specified _biological_ parents
2021-07-14 02:42:09 +0200 <hololeap> I'd be interested in hearing of a case where someone didn't have exactly two biological parents
2021-07-14 02:42:15 +0200 <hololeap> cloning?
2021-07-14 02:42:43 +0200 <hololeap> someone = an individual of the homo-sapeins species
2021-07-14 02:43:32 +0200 <geekosaur> actually davean's earlier comment implied unexpected complexity
2021-07-14 02:44:35 +0200 <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
2021-07-14 02:45:37 +0200 <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
2021-07-14 02:45:44 +0200 <davean> geekosaur: Thats a simple case
2021-07-14 02:45:55 +0200 <geekosaur> was considering raising that case
2021-07-14 02:46:03 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 255 seconds)
2021-07-14 02:46:06 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 02:46:16 +0200 <hololeap> I would think the egg and sperm donors would be the two in that case
2021-07-14 02:46:42 +0200 <davean> hololeap: nope, the nucleous provide's materal DNS also
2021-07-14 02:46:57 +0200 <davean> You've got 3 clear DNA sources
2021-07-14 02:47:05 +0200 <davean> all providing seperate DNA
2021-07-14 02:47:19 +0200 <hololeap> I guess you could argue that the blood from the surrugate mother would be in the fetus as well
2021-07-14 02:47:31 +0200 <davean> No, no, I'm talking clearer than that here
2021-07-14 02:47:48 +0200 <davean> I wasn't even talking about a surrugate - though that can matter also of course
2021-07-14 02:47:53 +0200 <davean> also, can I remind you of chimeras?
2021-07-14 02:48:01 +0200 <hololeap> lol
2021-07-14 02:48:26 +0200 <davean> They happen
2021-07-14 02:48:43 +0200 <davean> ANYWAY, parents are complicated
2021-07-14 02:49:05 +0200 <hololeap> I'm definitely not trying to mock... but what do you mean by chimeras?
2021-07-14 02:49:22 +0200 <davean> hololeap: chimeras are where multiple zygotes merge and form one individual
2021-07-14 02:49:42 +0200 <hololeap> oh... ok. I thought you meant like a human-animal hybrid
2021-07-14 02:49:50 +0200 <davean> No, its a human-human hybrid
2021-07-14 02:49:56 +0200 <davean> So maybe you're you, but your liver is your unborn sister.
2021-07-14 02:49:57 +0200MQ-17J(~MQ-17J@8.21.10.15)
2021-07-14 02:50:15 +0200 <davean> Or maybe your unborn half brother
2021-07-14 02:50:16 +0200 <hololeap> No, I've never heard of that and that's really interesting
2021-07-14 02:50:46 +0200 <davean> Look, this is REALLY complicated. And some politicans got together and decided what data would go on the forms
2021-07-14 02:50:59 +0200 <davean> :)
2021-07-14 02:51:03 +0200 <davean> The best way to make a standard
2021-07-14 02:51:16 +0200 <hololeap> fair enough. I just wanted to find a model that would make sense, but it sounds like it can get really bizarre
2021-07-14 02:51:27 +0200 <davean> REALLY bizar
2021-07-14 02:51:52 +0200 <davean> You could have mitocondria from one person, male and female donated from 2 others, and be a chimera
2021-07-14 02:51:54 +0200 <davean> Who the fuck knows
2021-07-14 02:52:09 +0200 <hololeap> where can I read more about this?
2021-07-14 02:52:26 +0200 <davean> Uh, no idea
2021-07-14 02:52:35 +0200 <davean> https://en.wikipedia.org/wiki/Chimera_(genetics) has a section on human chimeras
2021-07-14 02:52:43 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 02:52:47 +0200 <davean> the first example has shown up in IVF
2021-07-14 02:53:13 +0200 <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
2021-07-14 02:53:35 +0200 <hololeap> that's cool. you have first-hand evidence
2021-07-14 02:54:20 +0200 <davean> oh huh, wikipedia says, after I got out of this, there DID become human-animal chimeras
2021-07-14 02:54:23 +0200 <davean> well thats a thing
2021-07-14 02:54:38 +0200 <davean> So yah, your parents might even be different species I guess
2021-07-14 02:54:44 +0200 <davean> Thats even more complicated than I knew of!
2021-07-14 02:55:19 +0200 <davean> hololeap: oh this actually suggests a REALLY simple case I didn't even think of! Organ donation
2021-07-14 02:55:30 +0200 <davean> I mean not what people generally mean here, but in a medical sense it matters
2021-07-14 02:58:23 +0200 <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
2021-07-14 02:58:35 +0200lbseale(~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
2021-07-14 02:58:49 +0200 <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
2021-07-14 02:59:07 +0200 <davean> basicly mitochondria are seperate "sub cells" with their own genetics
2021-07-14 02:59:28 +0200 <davean> seperate from what you generally think of as "your DNA" from your basic bio classes in HS
2021-07-14 02:59:57 +0200 <davean> and its purely matrolineal (under normal circumstances! One COULD swap them out from the father of course if done on purpose!)
2021-07-14 03:04:12 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 03:04:18 +0200Guest6176(~Guest61@2001:ac8:27:20::a01e) (Quit: Client closed)
2021-07-14 03:05:18 +0200bitmapper(uid464869@id-464869.tooting.irccloud.com)
2021-07-14 03:13:37 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2021-07-14 03:15:11 +0200zeenk(~zeenk@2a02:2f04:a106:9600:82fb:aed9:ca9:38d3) (Quit: Konversation terminated!)
2021-07-14 03:15:15 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 03:16:05 +0200notzmv(~zmv@user/notzmv)
2021-07-14 03:18:11 +0200 <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
2021-07-14 03:18:34 +0200 <yin[m]> this is hilariously creepy https://www.youtube.com/watch?v=Kw0AEtrr7E0
2021-07-14 03:19:05 +0200smichel17(~smichel17@2601:193:8300:4b9::600) (Quit: smichel17)
2021-07-14 03:23:27 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 265 seconds)
2021-07-14 03:23:46 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
2021-07-14 03:25:10 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 03:27:25 +0200 <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
2021-07-14 03:27:25 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds)
2021-07-14 03:28:04 +0200 <davean> stops being human? I'd think the question would be when they stop being the same human
2021-07-14 03:28:28 +0200 <geekosaur> "bionic"
2021-07-14 03:29:10 +0200xff0x(~xff0x@2001:1a81:5314:1800:204a:df94:d24b:de67) (Ping timeout: 246 seconds)
2021-07-14 03:29:32 +0200 <hololeap> there's a futurama episode that goes into this :)
2021-07-14 03:29:34 +0200 <geekosaur> kinda odd to consider a human in the context of the ship of Theseus
2021-07-14 03:30:07 +0200 <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
2021-07-14 03:30:28 +0200 <davean> if someone doesn't change, they're not really worth considering much of a person, are they?
2021-07-14 03:30:53 +0200 <davean> if they don't act, or think like they did, how would you determin they're the same?
2021-07-14 03:31:02 +0200xff0x(~xff0x@2001:1a81:5355:ca00:f556:f8e3:c42f:ffef)
2021-07-14 03:31:08 +0200 <geekosaur> I'm actually on your side of that argument, but their body parts have continuity even though they have changed
2021-07-14 03:31:19 +0200 <geekosaur> (cells already do the ship of theseus thing)
2021-07-14 03:31:32 +0200 <nshepperd> a human is the squishy thing in the skull. the rest is just scaffolding
2021-07-14 03:32:46 +0200 <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
2021-07-14 03:33:34 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
2021-07-14 03:34:50 +0200bontaq(~user@ool-18e47f8d.dyn.optonline.net) (Ping timeout: 272 seconds)
2021-07-14 03:35:10 +0200shriekingnoise(~shrieking@186.137.144.80) (ERC (IRC client for Emacs 28.0.50))
2021-07-14 03:36:29 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2021-07-14 03:37:23 +0200son0p(~ff@181.136.122.143) (Remote host closed the connection)
2021-07-14 03:37:38 +0200 <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
2021-07-14 03:38:06 +0200 <geekosaur> probably what the futurama ep was riffing on
2021-07-14 03:38:29 +0200 <hololeap> yeah probably
2021-07-14 03:38:58 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2021-07-14 03:39:44 +0200 <dexterfoo> is attoparsec still a good choice (efficient) if i don't need any backtracking?
2021-07-14 03:40:38 +0200 <hololeap> dexterfoo: I think so, but megaparsec is supposed to have similar efficiency... someone else can probably go into more detail on this
2021-07-14 03:42:25 +0200 <davean> dexterfoo: attoparsec forces copying in its buffer
2021-07-14 03:42:45 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 255 seconds)
2021-07-14 03:43:42 +0200 <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.
2021-07-14 03:44:01 +0200 <davean> I'm moving everything off attoparsec slowly
2021-07-14 03:45:01 +0200renzhi(~xp@2607:fa49:655f:a700::8b9f)
2021-07-14 03:45:30 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 256 seconds)
2021-07-14 03:45:43 +0200stevenxl(~stevenlei@66.63.167.105)
2021-07-14 03:46:18 +0200stevenxl(~stevenlei@66.63.167.105) (Client Quit)
2021-07-14 03:49:03 +0200 <dexterfoo> davean: to which library?
2021-07-14 03:50:05 +0200stevenxl(uid133530@id-133530.highgate.irccloud.com)
2021-07-14 03:50:15 +0200 <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.
2021-07-14 03:51:00 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 03:51:57 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 276 seconds)
2021-07-14 03:55:16 +0200 <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
2021-07-14 03:56:31 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt)
2021-07-14 03:57:06 +0200 <dexterfoo> ok, but i am parsing streaming data with conduit, which has a Data.Conduit.Attoparsec module, but there is no megaparsec integration
2021-07-14 03:57:09 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds)
2021-07-14 03:59:41 +0200 <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?
2021-07-14 04:01:26 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 272 seconds)
2021-07-14 04:02:02 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2021-07-14 04:02:04 +0200 <dexterfoo> i am using attoparsec and it works and is easy, but i am wondering if there is a faster way
2021-07-14 04:03:37 +0200 <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`.
2021-07-14 04:03:42 +0200 <davean> Oh theres a definately a faster way
2021-07-14 04:03:49 +0200 <stevenxl> I wrote a quick script just to show what I mean:
2021-07-14 04:03:58 +0200 <davean> attoparsec can't be anywhere NEAR the fastest - parse theory tells us that, its the wrong structure
2021-07-14 04:04:01 +0200 <stevenxl> https://www.irccloud.com/pastebin/MPAt1waK/
2021-07-14 04:04:26 +0200 <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.
2021-07-14 04:04:47 +0200 <stevenxl> I'd like to add it at the head, the tail, or somewhere in-between randomly.
2021-07-14 04:05:02 +0200 <davean> stevenxl: filter?
2021-07-14 04:05:19 +0200 <stevenxl> davean: Sorry. I'm not following you.
2021-07-14 04:05:20 +0200 <Axman6> generate a random number between 0 and length list and insert it at that location
2021-07-14 04:05:38 +0200 <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
2021-07-14 04:05:49 +0200 <davean> you can also randomly sort the list
2021-07-14 04:05:59 +0200 <stevenxl> Axman6: Thanks. That's what I think I need!
2021-07-14 04:06:24 +0200 <Axman6> do { list <- arbitrary; idx <- choose (0,length list); pure $ ContainsOne (insert idx 1 list) } -- you might need to write insert
2021-07-14 04:06:45 +0200 <stevenxl> Axman6: perfect.
2021-07-14 04:06:49 +0200 <Axman6> and you'll probably need to look up the correct name for choose
2021-07-14 04:07:05 +0200 <stevenxl> Yup - I can look that up in the quickcheck docs / generator section.
2021-07-14 04:09:17 +0200Guest43(~Guest43@187.83.249.216.dyn.smithville.net)
2021-07-14 04:11:34 +0200thonkpod(~thonkpod@user/thonkpod) (Ping timeout: 256 seconds)
2021-07-14 04:17:24 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 255 seconds)
2021-07-14 04:17:46 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 04:18:22 +0200td_(~td@94.134.91.7) (Ping timeout: 256 seconds)
2021-07-14 04:19:08 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-07-14 04:19:08 +0200FinnElijaGuest2571
2021-07-14 04:19:08 +0200Guest2571(~finn_elij@user/finn-elija/x-0085643) (Killed (sodium.libera.chat (Nickname regained by services)))
2021-07-14 04:19:08 +0200finn_elijaFinnElija
2021-07-14 04:19:49 +0200td_(~td@muedsl-82-207-238-063.citykom.de)
2021-07-14 04:22:42 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 04:26:14 +0200phma(phma@2001:5b0:211f:8638:196:5581:d6d8:1f7e) (Remote host closed the connection)
2021-07-14 04:26:43 +0200phma(~phma@2001:5b0:211f:8638:196:5581:d6d8:1f7e)
2021-07-14 04:34:03 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 255 seconds)
2021-07-14 04:36:40 +0200thonkpod(~thonkpod@user/thonkpod)
2021-07-14 04:38:56 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds)
2021-07-14 04:41:30 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-07-14 04:44:37 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-07-14 04:53:24 +0200MQ-17J(~MQ-17J@8.21.10.15) (Ping timeout: 255 seconds)
2021-07-14 04:57:00 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds)
2021-07-14 04:57:29 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 05:01:37 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 05:03:18 +0200favonia(~favonia@user/favonia) (Ping timeout: 255 seconds)
2021-07-14 05:08:33 +0200FixedPointDude(~FixedPoin@204.237.49.106) (Quit: Client closed)
2021-07-14 05:09:57 +0200 <dsal> stevenxl: arbitrary = notOnes >>= \a -> notOnes >>= \b -> pure $ a <> [1] <> b
2021-07-14 05:10:28 +0200 <Axman6> notOnes could just be arbitrary
2021-07-14 05:10:42 +0200 <Axman6> all that's needed is that it contains a one, not that it contains only one one
2021-07-14 05:10:55 +0200 <dsal> Where notOnes = arbitrary `suchThat` (notElem 1)
2021-07-14 05:11:00 +0200 <dsal> Oh, then yeah
2021-07-14 05:11:37 +0200 <Axman6> concat <$> sequence [arbitrary, pure [1], arbitrary]
2021-07-14 05:12:03 +0200 <dsal> Yeah. That's a good one.
2021-07-14 05:12:19 +0200 <dsal> I'm on a phone with part of my brain missing. :)
2021-07-14 05:15:55 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8)
2021-07-14 05:16:08 +0200 <Axman6> It was a good team effort
2021-07-14 05:16:16 +0200favonia(~favonia@user/favonia)
2021-07-14 05:16:21 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds)
2021-07-14 05:17:54 +0200swistak(~swistak@185.21.216.141) (Ping timeout: 252 seconds)
2021-07-14 05:19:32 +0200 <stevenxl> Great team effort!
2021-07-14 05:19:35 +0200 <stevenxl> lol. Thank you all.
2021-07-14 05:21:55 +0200alx741(~alx741@186.178.109.32) (Quit: alx741)
2021-07-14 05:21:56 +0200swistak(~swistak@185.21.216.141)
2021-07-14 05:24:49 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 05:25:22 +0200derelict(~derelict@user/derelict) (Ping timeout: 246 seconds)
2021-07-14 05:29:51 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds)
2021-07-14 05:30:24 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 05:30:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-07-14 05:33:40 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 05:34:31 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-07-14 05:34:55 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-07-14 05:35:15 +0200favonia(~favonia@user/favonia) (Ping timeout: 255 seconds)
2021-07-14 05:37:57 +0200favonia(~favonia@user/favonia)
2021-07-14 05:40:16 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-07-14 05:40:45 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-07-14 05:41:03 +0200warnz(~warnz@2600:1700:77c0:5610:9856:f279:a598:9845)
2021-07-14 05:43:29 +0200cheater1__(~Username@user/cheater)
2021-07-14 05:43:45 +0200cheater(~Username@user/cheater) (Ping timeout: 276 seconds)
2021-07-14 05:43:51 +0200cheater1__cheater
2021-07-14 05:45:36 +0200warnz(~warnz@2600:1700:77c0:5610:9856:f279:a598:9845) (Ping timeout: 255 seconds)
2021-07-14 05:47:30 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt)
2021-07-14 05:50:06 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 255 seconds)
2021-07-14 05:51:46 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 258 seconds)
2021-07-14 05:54:46 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-07-14 05:55:30 +0200favonia(~favonia@user/favonia) (Ping timeout: 255 seconds)
2021-07-14 05:57:50 +0200favonia(~favonia@user/favonia)
2021-07-14 06:08:14 +0200wei2912(~wei2912@112.199.250.21)
2021-07-14 06:09:11 +0200img(~img@user/img)
2021-07-14 06:19:04 +0200anandprabhu(~anandprab@94.202.243.198)
2021-07-14 06:21:47 +0200isekaijin(~pyon@user/pyon) (Ping timeout: 255 seconds)
2021-07-14 06:22:34 +0200 <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?
2021-07-14 06:24:05 +0200isekaijin(~pyon@user/pyon)
2021-07-14 06:24:29 +0200 <Guest43> specifically if a function performs no term-level operation, will GHC reliably recognize that?
2021-07-14 06:25:45 +0200anandprabhu(~anandprab@94.202.243.198) (Remote host closed the connection)
2021-07-14 06:28:48 +0200favonia(~favonia@user/favonia) (Ping timeout: 255 seconds)
2021-07-14 06:29:13 +0200favonia(~favonia@user/favonia)
2021-07-14 06:30:16 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
2021-07-14 06:48:34 +0200 <Axman6> I don't think so
2021-07-14 06:49:14 +0200 <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)
2021-07-14 06:53:06 +0200favonia(~favonia@user/favonia) (Ping timeout: 255 seconds)
2021-07-14 06:53:50 +0200 <Guest43> i see; so use id/coerce if I can, but no guarantees it won't traverse the list anyway at runtime?
2021-07-14 06:55:21 +0200favonia(~favonia@user/favonia)
2021-07-14 06:55:48 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 255 seconds)
2021-07-14 06:57:26 +0200 <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
2021-07-14 06:58:13 +0200 <Guest43> cool thanks, and yeah i'll check it out
2021-07-14 07:00:27 +0200peterhil(~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi) (Ping timeout: 276 seconds)
2021-07-14 07:03:08 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 252 seconds)
2021-07-14 07:04:01 +0200beka(~beka@104-244-27-23.static.monkeybrains.net)
2021-07-14 07:04:04 +0200cheater(~Username@user/cheater) (Ping timeout: 246 seconds)
2021-07-14 07:04:33 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-07-14 07:04:35 +0200cheater(~Username@user/cheater)
2021-07-14 07:05:28 +0200ph88(~ph88@2a02:8109:9e00:7e5c:500a:f04e:5614:56a9)
2021-07-14 07:06:04 +0200azeem(~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it) (Ping timeout: 252 seconds)
2021-07-14 07:12:31 +0200smitop(~smitop@user/smitop) (Ping timeout: 268 seconds)
2021-07-14 07:12:54 +0200favonia(~favonia@user/favonia) (Ping timeout: 255 seconds)
2021-07-14 07:15:19 +0200favonia(~favonia@user/favonia)
2021-07-14 07:18:57 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-07-14 07:23:29 +0200smitop(~smitop@user/smitop)
2021-07-14 07:23:46 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 258 seconds)
2021-07-14 07:24:50 +0200chris-the-slurpa(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-14 07:25:18 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-07-14 07:25:32 +0200chris-the-slurpa(~chris@81.96.113.213)
2021-07-14 07:25:43 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 07:30:00 +0200chris-the-slurpa(~chris@81.96.113.213) (Ping timeout: 255 seconds)
2021-07-14 07:33:22 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com)
2021-07-14 07:35:40 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 07:35:52 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt)
2021-07-14 07:36:11 +0200sheepduck(~sheepduck@user/sheepduck)
2021-07-14 07:40:07 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 246 seconds)
2021-07-14 07:42:35 +0200Pickchea(~private@user/pickchea)
2021-07-14 07:44:19 +0200mikoto-chan(~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be)
2021-07-14 07:46:50 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it)
2021-07-14 07:48:13 +0200xsperry(~as@user/xsperry) ()
2021-07-14 07:48:41 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 258 seconds)
2021-07-14 07:52:01 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 07:52:40 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 265 seconds)
2021-07-14 07:55:32 +0200mikoto-chan(~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) (Ping timeout: 245 seconds)
2021-07-14 07:56:08 +0200xsperry(~as@user/xsperry)
2021-07-14 07:58:48 +0200favonia(~favonia@user/favonia) (Ping timeout: 255 seconds)
2021-07-14 07:59:05 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-07-14 07:59:48 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-07-14 08:00:36 +0200berberman(~berberman@user/berberman)
2021-07-14 08:00:58 +0200jneira(~jneira@212.8.115.226)
2021-07-14 08:01:03 +0200berberman_(~berberman@user/berberman) (Ping timeout: 255 seconds)
2021-07-14 08:03:43 +0200EvanR(~evan@mail.evanr.info) (Changing host)
2021-07-14 08:03:43 +0200EvanR(~evan@user/evanr)
2021-07-14 08:06:10 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-07-14 08:07:10 +0200paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (Ping timeout: 265 seconds)
2021-07-14 08:13:15 +0200qbt(~edun@user/edun)
2021-07-14 08:17:19 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Ping timeout: 265 seconds)
2021-07-14 08:19:06 +0200paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com)
2021-07-14 08:25:25 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it)
2021-07-14 08:28:53 +0200chele(~chele@user/chele)
2021-07-14 08:33:27 +0200Pickchea(~private@user/pickchea) (Ping timeout: 245 seconds)
2021-07-14 08:36:00 +0200mikoto-chan(~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be)
2021-07-14 08:47:35 +0200prite(~pritam@user/pritambaral)
2021-07-14 08:52:42 +0200anandprabhu(~anandprab@94.202.243.198)
2021-07-14 08:53:57 +0200fendor(~fendor@77.119.210.250.wireless.dyn.drei.com)
2021-07-14 08:54:19 +0200Guest2168(~Guest21@187.83.249.216.dyn.smithville.net) (Ping timeout: 246 seconds)
2021-07-14 08:54:40 +0200Guest43(~Guest43@187.83.249.216.dyn.smithville.net) (Ping timeout: 246 seconds)
2021-07-14 09:03:42 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-07-14 09:04:44 +0200cjb(~cjb@user/cjb) (Quit: rcirc on GNU Emacs 28.0.50)
2021-07-14 09:07:16 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 258 seconds)
2021-07-14 09:07:33 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 09:08:01 +0200pesada(~agua@2804:18:4f:750a:1:0:192e:7017)
2021-07-14 09:10:27 +0200agua(~agua@2804:18:46:bafa:1:0:1551:7319) (Ping timeout: 276 seconds)
2021-07-14 09:12:15 +0200eight(~eight@user/eight)
2021-07-14 09:15:43 +0200acidjnk(~acidjnk@p200300d0c72b9557fc98475d99842c11.dip0.t-ipconnect.de)
2021-07-14 09:16:15 +0200acidjnk_new(~acidjnk@p200300d0c72b9557e15cb996b96a0953.dip0.t-ipconnect.de)
2021-07-14 09:17:06 +0200Gurkenglas_(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-07-14 09:19:12 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-07-14 09:19:32 +0200beka(~beka@104-244-27-23.static.monkeybrains.net) (Ping timeout: 252 seconds)
2021-07-14 09:20:07 +0200acidjnk(~acidjnk@p200300d0c72b9557fc98475d99842c11.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-07-14 09:20:10 +0200epolanski(uid312403@id-312403.brockwell.irccloud.com)
2021-07-14 09:20:30 +0200shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-07-14 09:24:12 +0200fef(~thedawn@user/thedawn)
2021-07-14 09:25:17 +0200prite(~pritam@user/pritambaral) (Ping timeout: 258 seconds)
2021-07-14 09:27:01 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Remote host closed the connection)
2021-07-14 09:28:33 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-07-14 09:31:29 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-07-14 09:45:09 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 09:48:51 +0200prite(~pritam@user/pritambaral)
2021-07-14 09:52:14 +0200bens(~bens@www.typius.com) (Ping timeout: 268 seconds)
2021-07-14 09:52:27 +0200bens(~bens@www.typius.com)
2021-07-14 09:53:44 +0200gehmehgeh(~user@user/gehmehgeh)
2021-07-14 09:55:19 +0200smitop(~smitop@user/smitop) (Ping timeout: 268 seconds)
2021-07-14 09:55:30 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 09:58:00 +0200nattiestnate(~nate@36.70.197.105)
2021-07-14 10:06:15 +0200hendursa1(~weechat@user/hendursaga)
2021-07-14 10:06:56 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
2021-07-14 10:08:52 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 244 seconds)
2021-07-14 10:09:10 +0200michalz(~michalz@185.246.204.60)
2021-07-14 10:10:12 +0200smitop(~smitop@user/smitop)
2021-07-14 10:10:12 +0200arahael1(~arahael@203-206-95-20.tpgi.com.au)
2021-07-14 10:10:39 +0200TheRAt(~TheRAt@user/therat) (Quit: :))
2021-07-14 10:10:47 +0200sheepduck(~sheepduck@user/sheepduck) (Quit: Konversation terminated!)
2021-07-14 10:11:21 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
2021-07-14 10:12:21 +0200arahael(~arahael@118.211.182.212) (Ping timeout: 265 seconds)
2021-07-14 10:16:48 +0200hegstal(~hegstal@2a02:c7f:7604:8a00:cd80:9697:e922:dc30)
2021-07-14 10:17:30 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-07-14 10:17:55 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-07-14 10:18:23 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt)
2021-07-14 10:18:30 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Remote host closed the connection)
2021-07-14 10:18:42 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt)
2021-07-14 10:19:15 +0200delYsid(~user@zidpc777.tugraz.at)
2021-07-14 10:21:57 +0200peterhil(~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi)
2021-07-14 10:22:45 +0200arahael1arahael
2021-07-14 10:23:27 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 245 seconds)
2021-07-14 10:23:38 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-07-14 10:23:59 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 10:24:00 +0200phma(~phma@2001:5b0:211f:8638:196:5581:d6d8:1f7e) (Read error: Connection reset by peer)
2021-07-14 10:24:13 +0200lavaman(~lavaman@98.38.249.169)
2021-07-14 10:25:41 +0200smitop(~smitop@user/smitop) (Ping timeout: 255 seconds)
2021-07-14 10:25:58 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-07-14 10:25:59 +0200zeenk(~zeenk@2a02:2f04:a106:9600:82fb:aed9:ca9:38d3)
2021-07-14 10:26:44 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds)
2021-07-14 10:27:12 +0200Lord_of_Life_Lord_of_Life
2021-07-14 10:28:18 +0200prite(~pritam@user/pritambaral) (Ping timeout: 265 seconds)
2021-07-14 10:28:28 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-07-14 10:29:37 +0200prite(~pritam@user/pritambaral)
2021-07-14 10:30:48 +0200phma(phma@2001:5b0:211b:8138:4237:c684:b0bd:87ec)
2021-07-14 10:32:55 +0200ubert(~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de)
2021-07-14 10:34:12 +0200martin02(silas@hund.fs.lmu.de)
2021-07-14 10:35:03 +0200desophos(~desophos@2601:249:1680:a570:489c:f364:abf0:5de7) (Quit: Leaving)
2021-07-14 10:35:50 +0200_xor(~xor@74.215.46.133) (Quit: brb)
2021-07-14 10:37:12 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 255 seconds)
2021-07-14 10:37:56 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 10:39:59 +0200smitop(~smitop@user/smitop)
2021-07-14 10:43:54 +0200nattiestnate(~nate@36.70.197.105) (Quit: WeeChat 3.2)
2021-07-14 10:44:49 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-07-14 10:45:18 +0200Patternmaster(~georg@li1192-118.members.linode.com) (Remote host closed the connection)
2021-07-14 10:48:02 +0200stevenxl(uid133530@id-133530.highgate.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-14 10:49:05 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-07-14 10:51:10 +0200jippiedoe(~david@2a02-a44c-e14e-1-1e76-24e-f48d-1c7a.fixed6.kpn.net)
2021-07-14 10:51:18 +0200Patternmaster(~georg@li1192-118.members.linode.com)
2021-07-14 10:53:04 +0200zaquest(~notzaques@5.128.210.178) (Remote host closed the connection)
2021-07-14 10:54:11 +0200zaquest(~notzaques@5.128.210.178)
2021-07-14 10:54:41 +0200lavaman(~lavaman@98.38.249.169)
2021-07-14 10:56:00 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 10:58:37 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2021-07-14 10:59:26 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
2021-07-14 11:00:36 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds)
2021-07-14 11:01:47 +0200smitop(~smitop@user/smitop) (Ping timeout: 245 seconds)
2021-07-14 11:02:52 +0200smitop(~smitop@user/smitop)
2021-07-14 11:03:42 +0200juhp(~juhp@128.106.188.66) (Quit: juhp)
2021-07-14 11:03:56 +0200juhp(~juhp@128.106.188.66)
2021-07-14 11:05:54 +0200hgolden_(~hgolden2@cpe-172-114-84-61.socal.res.rr.com) (Ping timeout: 252 seconds)
2021-07-14 11:07:54 +0200neceve(~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f)
2021-07-14 11:08:25 +0200delYsid(~user@zidpc777.tugraz.at) (ERC (IRC client for Emacs 27.1.50))
2021-07-14 11:13:10 +0200juhp(~juhp@128.106.188.66) (Quit: juhp)
2021-07-14 11:14:15 +0200__monty__(~toonn@user/toonn)
2021-07-14 11:14:16 +0200bitmapper(uid464869@id-464869.tooting.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-14 11:15:13 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-07-14 11:17:43 +0200jumper149(~jumper149@80.240.31.34)
2021-07-14 11:24:23 +0200elf_fortrez(~elf_fortr@adsl-72-50-4-50.prtc.net)
2021-07-14 11:25:20 +0200fef(~thedawn@user/thedawn) (Ping timeout: 244 seconds)
2021-07-14 11:26:56 +0200ubert(~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) (Quit: ubert)
2021-07-14 11:27:40 +0200Pickchea(~private@user/pickchea)
2021-07-14 11:33:23 +0200lavaman(~lavaman@98.38.249.169)
2021-07-14 11:34:07 +0200fef(~thedawn@user/thedawn)
2021-07-14 11:37:19 +0200mc47(~mc47@xmonad/TheMC47)
2021-07-14 11:37:37 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
2021-07-14 11:38:14 +0200mcglk(~mcglk@131.191.49.120) (Read error: Connection reset by peer)
2021-07-14 11:39:00 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2021-07-14 11:39:16 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Remote host closed the connection)
2021-07-14 11:40:27 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2021-07-14 11:40:36 +0200koolazer(~koo@user/koolazer) (Ping timeout: 272 seconds)
2021-07-14 11:43:42 +0200koolazer(~koo@user/koolazer)
2021-07-14 11:43:42 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-07-14 11:43:55 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de)
2021-07-14 11:49:29 +0200ubert(~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
2021-07-14 11:54:11 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2021-07-14 11:56:47 +0200wei2912(~wei2912@112.199.250.21) (Quit: Lost terminal)
2021-07-14 12:05:52 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-14 12:10:42 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Remote host closed the connection)
2021-07-14 12:11:25 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2021-07-14 12:12:18 +0200fef(~thedawn@user/thedawn) (Remote host closed the connection)
2021-07-14 12:12:43 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Client Quit)
2021-07-14 12:12:54 +0200fef(~thedawn@user/thedawn)
2021-07-14 12:13:07 +0200elf_fortrez(~elf_fortr@adsl-72-50-4-50.prtc.net) (Ping timeout: 246 seconds)
2021-07-14 12:15:36 +0200koolazer(~koo@user/koolazer) (Ping timeout: 265 seconds)
2021-07-14 12:15:46 +0200xsperry(~as@user/xsperry) (Remote host closed the connection)
2021-07-14 12:15:51 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-07-14 12:18:31 +0200neurocyte4042(~neurocyte@212.232.92.52)
2021-07-14 12:18:32 +0200neurocyte4042(~neurocyte@212.232.92.52) (Changing host)
2021-07-14 12:18:32 +0200neurocyte4042(~neurocyte@user/neurocyte)
2021-07-14 12:20:33 +0200neurocyte4042neurocyte
2021-07-14 12:23:37 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2021-07-14 12:24:53 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Client Quit)
2021-07-14 12:35:12 +0200hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2021-07-14 12:35:18 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-07-14 12:43:52 +0200prite(~pritam@user/pritambaral) (Ping timeout: 245 seconds)
2021-07-14 12:45:14 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 12:46:22 +0200Pickchea(~private@user/pickchea) (Ping timeout: 245 seconds)
2021-07-14 12:47:34 +0200jakalx(~jakalx@base.jakalx.net) ()
2021-07-14 12:48:04 +0200prite(~pritam@user/pritambaral)
2021-07-14 12:48:57 +0200smichel17(~smichel17@c-73-68-217-18.hsd1.ma.comcast.net)
2021-07-14 12:51:12 +0200jakalx(~jakalx@base.jakalx.net)
2021-07-14 12:53:49 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds)
2021-07-14 12:57:27 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 13:02:02 +0200anandprabhu(~anandprab@94.202.243.198) (Read error: Connection reset by peer)
2021-07-14 13:03:01 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds)
2021-07-14 13:03:02 +0200oxide(~lambda@user/oxide) (Ping timeout: 245 seconds)
2021-07-14 13:05:00 +0200oxide(~lambda@user/oxide)
2021-07-14 13:07:31 +0200acidjnk_new3(~acidjnk@p200300d0c72b9516e15cb996b96a0953.dip0.t-ipconnect.de)
2021-07-14 13:10:29 +0200Topsi(~Tobias@dyndsl-095-033-020-123.ewe-ip-backbone.de)
2021-07-14 13:10:31 +0200 <yin[m]> matrix down again. last message from 6h ago
2021-07-14 13:10:32 +0200acidjnk_new(~acidjnk@p200300d0c72b9557e15cb996b96a0953.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-07-14 13:16:43 +0200 <tomsmeding> yin[m]: on irc this was the last message https://ircbrowse.tomsmeding.com/browse/lchaskell?id=94477#trid94477
2021-07-14 13:16:48 +0200koolazer(~koo@user/koolazer)
2021-07-14 13:17:59 +0200silverwhitefish(~hidden@47.202.102.10) (Quit: One for all, all for One (2 Corinthians 5))
2021-07-14 13:18:56 +0200 <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.
2021-07-14 13:19:39 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 255 seconds)
2021-07-14 13:19:43 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-07-14 13:22:33 +0200zdleafzinc
2021-07-14 13:24:17 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 13:26:22 +0200Pickchea(~private@user/pickchea)
2021-07-14 13:33:53 +0200 <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
2021-07-14 13:34:27 +0200 <tomsmeding> if you want some guarantees, either look at the core yourself for the function you're interested in, or ask in #ghc :p
2021-07-14 13:35:15 +0200 <tomsmeding> it does seem to take an additional actual argument for the equality constraint
2021-07-14 13:37:12 +0200 <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
2021-07-14 13:38:22 +0200Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2021-07-14 13:40:49 +0200lavaman(~lavaman@98.38.249.169)
2021-07-14 13:43:02 +0200eight(~eight@user/eight) (Ping timeout: 245 seconds)
2021-07-14 13:43:22 +0200eight(~eight@user/eight)
2021-07-14 13:45:18 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 255 seconds)
2021-07-14 13:45:19 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Read error: Connection reset by peer)
2021-07-14 13:48:53 +0200koolazer(~koo@user/koolazer) (Ping timeout: 265 seconds)
2021-07-14 13:52:41 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it)
2021-07-14 13:53:02 +0200Natch(~natch@c-e070e255.014-297-73746f25.bbcust.telenor.se) (Remote host closed the connection)
2021-07-14 13:57:24 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Read error: Connection reset by peer)
2021-07-14 13:57:53 +0200 <yin[m]> tomsmeding: my bad
2021-07-14 13:58:25 +0200Natch(~natch@c-e070e255.014-297-73746f25.bbcust.telenor.se)
2021-07-14 14:00:44 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2021-07-14 14:01:08 +0200juhp(~juhp@128.106.188.66)
2021-07-14 14:04:54 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it)
2021-07-14 14:07:34 +0200 <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?
2021-07-14 14:11:07 +0200Pickchea(~private@user/pickchea) (Ping timeout: 265 seconds)
2021-07-14 14:12:13 +0200gehmehgeh(~user@user/gehmehgeh) (Ping timeout: 244 seconds)
2021-07-14 14:12:52 +0200 <hpc> yeah, i would rather use System.Process
2021-07-14 14:13:13 +0200 <Profpatsch> looks that way
2021-07-14 14:13:18 +0200 <Profpatsch> caching PATH is a bad idea
2021-07-14 14:14:28 +0200gehmehgeh(~user@user/gehmehgeh)
2021-07-14 14:14:52 +0200 <maerwald> It took me 15 minutes just to figure out how to... well... spawn a process
2021-07-14 14:15:43 +0200 <maerwald> and then you have to shove the env vars into the RIO env
2021-07-14 14:15:49 +0200favonia(~favonia@user/favonia)
2021-07-14 14:20:47 +0200absence_absence
2021-07-14 14:21:54 +0200 <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?
2021-07-14 14:24:35 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
2021-07-14 14:24:40 +0200stevenxl(uid133530@id-133530.highgate.irccloud.com)
2021-07-14 14:25:23 +0200Pickchea(~private@user/pickchea)
2021-07-14 14:26:53 +0200Guest12(~Guest12@static-72-73-22-17.clppva.fios.verizon.net)
2021-07-14 14:27:46 +0200lavaman(~lavaman@98.38.249.169)
2021-07-14 14:28:06 +0200jespada(~jespada@90.254.247.46) (Ping timeout: 256 seconds)
2021-07-14 14:28:25 +0200Guest12(~Guest12@static-72-73-22-17.clppva.fios.verizon.net) (Client Quit)
2021-07-14 14:29:36 +0200jespada(~jespada@90.254.247.46)
2021-07-14 14:32:23 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-07-14 14:34:58 +0200fef(~thedawn@user/thedawn) (Remote host closed the connection)
2021-07-14 14:35:32 +0200fef(~thedawn@user/thedawn)
2021-07-14 14:36:12 +0200fef(~thedawn@user/thedawn) (Remote host closed the connection)
2021-07-14 14:36:49 +0200fef(~thedawn@user/thedawn)
2021-07-14 14:41:34 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-07-14 14:42:20 +0200jneira(~jneira@212.8.115.226) (Quit: Client closed)
2021-07-14 14:42:47 +0200ph88(~ph88@2a02:8109:9e00:7e5c:500a:f04e:5614:56a9) (Remote host closed the connection)
2021-07-14 14:42:58 +0200jneira(~jneira@212.8.115.226)
2021-07-14 14:43:40 +0200ph88(~ph88@2a02:8109:9e00:7e5c:9925:18b1:79f7:f242)
2021-07-14 14:47:31 +0200koolazer(~koo@user/koolazer)
2021-07-14 14:51:43 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-07-14 14:52:00 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-07-14 14:57:01 +0200jneira(~jneira@212.8.115.226) (Quit: Client closed)
2021-07-14 14:59:58 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 15:01:07 +0200alx741(~alx741@186.178.109.32)
2021-07-14 15:01:29 +0200lavaman(~lavaman@98.38.249.169)
2021-07-14 15:04:12 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2021-07-14 15:12:01 +0200thyriaen(~thyriaen@45.178.73.238)
2021-07-14 15:12:57 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-14 15:14:05 +0200 <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
2021-07-14 15:15:18 +0200Gurkenglas_(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 272 seconds)
2021-07-14 15:15:51 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 15:17:09 +0200 <jippiedoe> @thyriaen in `insert`, you only return the result of the recursive call (instead of wrapping it in the rest of the tree again)
2021-07-14 15:17:09 +0200 <lambdabot> Unknown command, try @list
2021-07-14 15:18:14 +0200 <thyriaen> jippiedoe, in the insert lm Leaf case ?
2021-07-14 15:18:26 +0200Sgeo(~Sgeo@user/sgeo)
2021-07-14 15:18:40 +0200 <jippiedoe> in the insert lm Node case!
2021-07-14 15:19:06 +0200 <thyriaen> but i am inserting it again in that case
2021-07-14 15:19:21 +0200prite(~pritam@user/pritambaral) (Ping timeout: 268 seconds)
2021-07-14 15:19:28 +0200 <thyriaen> ohhh
2021-07-14 15:19:38 +0200 <thyriaen> im quite dumb i make the recursive call but dont put it in a tree
2021-07-14 15:19:39 +0200 <thyriaen> xD
2021-07-14 15:20:10 +0200prite(~pritam@user/pritambaral)
2021-07-14 15:20:15 +0200 <thyriaen> well now i know why the gardener left me
2021-07-14 15:20:32 +0200koolazer(~koo@user/koolazer) (Ping timeout: 245 seconds)
2021-07-14 15:21:19 +0200 <tomsmeding> thyriaen: sometimes you need a pair of eyes that haven't been staring at the code yet to see what's going wrong :)
2021-07-14 15:21:25 +0200 <tomsmeding> I can recommend rubber ducks
2021-07-14 15:21:59 +0200 <thyriaen> :p
2021-07-14 15:24:09 +0200hendursa1(~weechat@user/hendursaga) (Quit: hendursa1)
2021-07-14 15:24:29 +0200hendursaga(~weechat@user/hendursaga)
2021-07-14 15:26:27 +0200hendursaga(~weechat@user/hendursaga) (Client Quit)
2021-07-14 15:26:52 +0200hendursaga(~weechat@user/hendursaga)
2021-07-14 15:27:17 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-07-14 15:29:51 +0200thyriaen(~thyriaen@45.178.73.238) (Quit: Leaving)
2021-07-14 15:30:00 +0200silverwhitefish(~hidden@47.202.102.10)
2021-07-14 15:30:19 +0200chris_(~chris@81.96.113.213)
2021-07-14 15:30:25 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-07-14 15:30:38 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de)
2021-07-14 15:34:29 +0200peterhil(~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-07-14 15:35:19 +0200peterhil(~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi)
2021-07-14 15:36:00 +0200zgrep(~zgrep@user/zgrep) (Quit: It's a quitter's world.)
2021-07-14 15:37:32 +0200zgrep(~zgrep@user/zgrep)
2021-07-14 15:37:37 +0200acidjnk_new3(~acidjnk@p200300d0c72b9516e15cb996b96a0953.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-07-14 15:47:56 +0200madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-07-14 15:50:11 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-07-14 15:53:20 +0200Pickchea(~private@user/pickchea) (Ping timeout: 252 seconds)
2021-07-14 15:55:07 +0200michalz(~michalz@185.246.204.60) (Remote host closed the connection)
2021-07-14 15:56:33 +0200Lycurgus(~juan@cpe-45-46-140-49.buffalo.res.rr.com)
2021-07-14 15:59:17 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 245 seconds)
2021-07-14 16:02:10 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-07-14 16:02:12 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-07-14 16:03:46 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 246 seconds)
2021-07-14 16:07:21 +0200allbery_bgeekosaur
2021-07-14 16:12:34 +0200Topsi(~Tobias@dyndsl-095-033-020-123.ewe-ip-backbone.de) (Quit: Leaving.)
2021-07-14 16:14:43 +0200pharmaz0ne(~pharmaz0n@92.40.194.74.threembb.co.uk)
2021-07-14 16:15:02 +0200pharmaz0ne(~pharmaz0n@92.40.194.74.threembb.co.uk) (Client Quit)
2021-07-14 16:15:04 +0200biberu(~biberu@user/biberu) (Read error: Connection reset by peer)
2021-07-14 16:17:04 +0200pharmaz0ne(~pharmaz0n@92.40.194.74.threembb.co.uk)
2021-07-14 16:17:05 +0200Atum_(~IRC@user/atum/x-2392232)
2021-07-14 16:17:08 +0200Atum_(~IRC@user/atum/x-2392232) (Client Quit)
2021-07-14 16:17:18 +0200Pickchea(~private@user/pickchea)
2021-07-14 16:17:43 +0200Atum_(IRC@user/atum/x-2392232)
2021-07-14 16:21:58 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-14 16:22:07 +0200biberu(~biberu@user/biberu)
2021-07-14 16:24:34 +0200jakalx(~jakalx@base.jakalx.net) ()
2021-07-14 16:28:49 +0200jakalx(~jakalx@base.jakalx.net)
2021-07-14 16:30:11 +0200Pickchea(~private@user/pickchea) (Ping timeout: 255 seconds)
2021-07-14 16:39:06 +0200derelict(~derelict@user/derelict)
2021-07-14 16:39:19 +0200anandprabhu(~anandprab@94.202.243.198)
2021-07-14 16:41:17 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
2021-07-14 16:42:39 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 16:43:01 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-07-14 16:43:55 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
2021-07-14 16:46:30 +0200madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 258 seconds)
2021-07-14 16:52:15 +0200HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato) (Remote host closed the connection)
2021-07-14 16:52:32 +0200HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato)
2021-07-14 16:56:15 +0200koolazer(~koo@user/koolazer)
2021-07-14 16:59:35 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Ping timeout: 268 seconds)
2021-07-14 17:01:23 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 17:02:07 +0200azeem(~azeem@176.201.40.210)
2021-07-14 17:03:48 +0200dajoer(~david@user/gvx) (Quit: leaving)
2021-07-14 17:04:01 +0200ec(~ec@gateway/tor-sasl/ec)
2021-07-14 17:04:37 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-07-14 17:05:32 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds)
2021-07-14 17:07:24 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-07-14 17:07:47 +0200azeem(~azeem@176.201.40.210) (Read error: Connection reset by peer)
2021-07-14 17:08:07 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it)
2021-07-14 17:08:22 +0200cheater1__(~Username@user/cheater)
2021-07-14 17:08:40 +0200cheater(~Username@user/cheater) (Ping timeout: 272 seconds)
2021-07-14 17:08:45 +0200cheater1__cheater
2021-07-14 17:13:04 +0200juhp(~juhp@128.106.188.66) (Quit: juhp)
2021-07-14 17:13:15 +0200juhp(~juhp@128.106.188.66)
2021-07-14 17:20:13 +0200chomwitt(~Pitsikoko@2a02:587:dc04:e00:12c3:7bff:fe6d:d374) (Ping timeout: 268 seconds)
2021-07-14 17:22:22 +0200Lycurgus(~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
2021-07-14 17:26:34 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 17:29:06 +0200jakalx(~jakalx@base.jakalx.net) ()
2021-07-14 17:31:33 +0200jakalx(~jakalx@base.jakalx.net)
2021-07-14 17:32:03 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 17:33:04 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Quit: ZNC 1.8.2 - https://znc.in)
2021-07-14 17:33:39 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 258 seconds)
2021-07-14 17:34:14 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds)
2021-07-14 17:34:25 +0200koolazer(~koo@user/koolazer) (Ping timeout: 258 seconds)
2021-07-14 17:35:44 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-14 17:37:45 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 17:38:15 +0200lbseale(~lbseale@user/ep1ctetus)
2021-07-14 17:38:25 +0200 <hololeap> is caching PATH really that bad of an idea? it doesn't seem like something that would change very often
2021-07-14 17:39:22 +0200Guest21(~Guest21@187.83.249.216.dyn.smithville.net)
2021-07-14 17:39:27 +0200 <Clint> where?
2021-07-14 17:39:45 +0200ec(~ec@gateway/tor-sasl/ec)
2021-07-14 17:40:02 +0200 <hololeap> https://hackage.haskell.org/package/rio-0.1.20.0/docs/RIO-Process.html
2021-07-14 17:40:17 +0200 <Rembane> hololeap: Assume that someone will mess it up for you.
2021-07-14 17:40:58 +0200 <tomsmeding> that's within one process, right? Normally environment variables don't change in one process unless you explicitly change it :)
2021-07-14 17:41:01 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 17:41:29 +0200 <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
2021-07-14 17:42:28 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-07-14 17:42:58 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-07-14 17:49:29 +0200lbseale(~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
2021-07-14 17:50:39 +0200 <Profpatsch> It introduces a caching layer, which is always a bad idea
2021-07-14 17:50:58 +0200 <Profpatsch> They probably implement their own lookup logic
2021-07-14 17:51:41 +0200 <Profpatsch> Granted, environment variables *probably* don’t change in most programs
2021-07-14 17:53:23 +0200 <Profpatsch> but now you have to have a state that you need to carry around and a lot of logic around something
2021-07-14 17:53:31 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-07-14 17:55:19 +0200ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2021-07-14 17:55:44 +0200ec(~ec@gateway/tor-sasl/ec)
2021-07-14 17:57:29 +0200 <[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
2021-07-14 17:57:53 +0200qbt(~edun@user/edun) (Quit: WeeChat 3.2)
2021-07-14 17:58:09 +0200qbt(~edun@user/edun)
2021-07-14 17:58:44 +0200 <[exa]> Profpatsch: feel free remove your L1&L2 cache and reiterate on the caches as bad ideas
2021-07-14 17:59:08 +0200 <ephemient> (ba)sh caches PATH lookups, but has a (re)hash command to manipulate it because it can be wrong
2021-07-14 17:59:58 +0200Guest21(~Guest21@187.83.249.216.dyn.smithville.net) (Ping timeout: 246 seconds)
2021-07-14 18:00:52 +0200lavaman(~lavaman@98.38.249.169)
2021-07-14 18:01:29 +0200mcglk(~mcglk@131.191.49.120)
2021-07-14 18:01:41 +0200 <tomsmeding> caching is sometimes good, sometimes _REALLY_ good, but certainly not always good
2021-07-14 18:01:48 +0200 <EvanR> a caching layer is great when it's never wrong
2021-07-14 18:02:18 +0200 <tomsmeding> and pays off in comparison to the required maintenance effort
2021-07-14 18:02:39 +0200 <tomsmeding> it's an optimisation, and any optimisation is a tradeoff :)
2021-07-14 18:03:06 +0200 <EvanR> L* cache, my maintenance effort is zero and it's never wrong xD
2021-07-14 18:03:19 +0200 <EvanR> HTTP caching, maintenance effort high and is never right!
2021-07-14 18:03:44 +0200alan41(~alan@83-245-249-101-nat-p.elisa-mobile.fi)
2021-07-14 18:03:48 +0200 <tomsmeding> and yet, if you'd turn off http caching in your browser, many websites would get a lot slower
2021-07-14 18:04:06 +0200 <davean> Uh, if your HTTP cache is wrong, the upstream site fucked up
2021-07-14 18:04:08 +0200tomsmedingdoubts "never right"
2021-07-14 18:04:18 +0200 <tomsmeding> davean: which happens
2021-07-14 18:04:26 +0200 <davean> HTTP has a plenty expressive caching semantics
2021-07-14 18:04:28 +0200 <tomsmeding> but not enough to warrant "never right" :)
2021-07-14 18:04:34 +0200alan41(~alan@83-245-249-101-nat-p.elisa-mobile.fi) (Client Quit)
2021-07-14 18:04:35 +0200xsperry(~as@user/xsperry)
2021-07-14 18:04:36 +0200 <EvanR> when it's your (my) upstream site, that explains it
2021-07-14 18:05:07 +0200 <EvanR> anyway web tech gives caching a bad name
2021-07-14 18:05:07 +0200pharmaz0ne(~pharmaz0n@92.40.194.74.threembb.co.uk) (Read error: Connection reset by peer)
2021-07-14 18:05:31 +0200 <tomsmeding> build tools also do, because of the rare instances when they're wrong
2021-07-14 18:05:34 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
2021-07-14 18:06:41 +0200 <EvanR> I am still perplexed that caching schemes are allowed to be wrong
2021-07-14 18:06:43 +0200 <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
2021-07-14 18:07:04 +0200 <EvanR> even if rarely, that would be unacceptable for the memory system's cache
2021-07-14 18:07:09 +0200 <tomsmeding> EvanR: is there a caching scheme that is _intentionally_ allowed to be wrong?
2021-07-14 18:07:26 +0200 <tomsmeding> oh right, bash
2021-07-14 18:07:32 +0200jumper149(~jumper149@80.240.31.34) (Quit: WeeChat 3.1)
2021-07-14 18:07:35 +0200 <EvanR> in the sense that the wrongness is observable
2021-07-14 18:08:00 +0200cheater1__(~Username@user/cheater)
2021-07-14 18:08:12 +0200cheater(~Username@user/cheater) (Ping timeout: 272 seconds)
2021-07-14 18:08:12 +0200cheater1__cheater
2021-07-14 18:08:14 +0200 <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
2021-07-14 18:09:10 +0200 <davean> You can only have a correct cache in regards to semantics
2021-07-14 18:09:12 +0200 <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
2021-07-14 18:09:25 +0200 <EvanR> it's a problem with the user
2021-07-14 18:09:34 +0200 <tomsmeding> does no one?
2021-07-14 18:09:37 +0200 <EvanR> i called that 'allowed to be wrong'
2021-07-14 18:09:49 +0200 <tomsmeding> I have the exact opposite experience :p
2021-07-14 18:09:50 +0200 <davean> Uh, no people always call that a bug
2021-07-14 18:10:12 +0200 <EvanR> ok, the take away here is I have nothing whatsoever to add
2021-07-14 18:10:25 +0200 <EvanR> just take the opposite of what i say, and we're good i guess
2021-07-14 18:10:29 +0200 <davean> I guess
2021-07-14 18:10:31 +0200 <tomsmeding> the _real_ take away is "software engineering is hard" :p
2021-07-14 18:10:48 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 18:10:54 +0200pfurla(~pfurla@216.131.82.58)
2021-07-14 18:11:05 +0200 <EvanR> you see no difference whatsoever between the track record of memory system cache and other caching systems? xD
2021-07-14 18:11:24 +0200 <tomsmeding> it's just that if there is a bug in the memory system cache, everything blows up
2021-07-14 18:11:28 +0200 <EvanR> it seems like one is allowed to be wrong
2021-07-14 18:11:29 +0200 <davean> The memory system cache is wrong sometimes.
2021-07-14 18:11:43 +0200 <tomsmeding> that doesn't mean that a bug in cabal's caching scheme wouldn't be a bug
2021-07-14 18:11:57 +0200 <EvanR> an actual bug, yeah
2021-07-14 18:12:17 +0200 <EvanR> if you just don't know how to use cabal...
2021-07-14 18:12:37 +0200 <davean> compilers (mostly) know how to use the memory cache
2021-07-14 18:12:41 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2021-07-14 18:12:45 +0200 <davean> but this is actually a point of great debate
2021-07-14 18:12:53 +0200 <davean> I'm surpised you're unfamiliar with it
2021-07-14 18:13:03 +0200 <davean> memory ordering is a HUGE deal in compiler code generation
2021-07-14 18:13:14 +0200ubert(~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
2021-07-14 18:13:19 +0200 <EvanR> I'm totally unfamiliar with that, in any detail
2021-07-14 18:13:54 +0200pfurla_(~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 272 seconds)
2021-07-14 18:14:43 +0200 <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?
2021-07-14 18:15:12 +0200 <EvanR> that sounds like hell for cache designers
2021-07-14 18:15:14 +0200elf_fortrez(~elf_fortr@adsl-72-50-4-118.prtc.net)
2021-07-14 18:15:38 +0200 <davean> Its not "would be nice" its a "can be incorrect under ..."
2021-07-14 18:15:45 +0200 <davean> and then they also give it specific commands
2021-07-14 18:15:50 +0200 <davean> evictions, prefetches ...
2021-07-14 18:16:18 +0200 <davean> and compilers know the cache can get bad results and try to avoid it
2021-07-14 18:16:26 +0200 <davean> you can write to a memory location, but read an old value for example
2021-07-14 18:16:39 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-07-14 18:16:51 +0200 <EvanR> really... I thought that was a serious security problem a while back and had to be fixed
2021-07-14 18:17:07 +0200jneira[m](~jneira@214.red-176-83-92.dynamicip.rima-tde.net)
2021-07-14 18:17:09 +0200 <davean> No, the security problem was making decisions based on memory *you weren't allowed to read*
2021-07-14 18:17:13 +0200 <davean> which also interacted with the cache
2021-07-14 18:17:16 +0200 <davean> but also with speculation
2021-07-14 18:17:19 +0200 <davean> etc
2021-07-14 18:17:38 +0200 <EvanR> oof
2021-07-14 18:17:39 +0200 <davean> The concept of the cache giving wrong results generally falls under the term "memory ordering"
2021-07-14 18:18:12 +0200 <davean> https://en.wikipedia.org/wiki/Memory_ordering
2021-07-14 18:18:19 +0200 <davean> but also in multicore consistency, etc
2021-07-14 18:18:31 +0200cheater(~Username@user/cheater) (Ping timeout: 268 seconds)
2021-07-14 18:18:32 +0200cheater1__(~Username@user/cheater)
2021-07-14 18:18:34 +0200cheater1__cheater
2021-07-14 18:18:50 +0200 <davean> If you use the CPU cache correctly you get correct results - if you use HTTP caching correctly you get correct result
2021-07-14 18:19:00 +0200 <davean> theres no mysteries here - other than what the x86 cache actually does!
2021-07-14 18:19:05 +0200 <davean> Its a bit unknown on x86
2021-07-14 18:19:15 +0200 <davean> ARM for example actually has something of a specification
2021-07-14 18:19:44 +0200 <davean> Mind you that wikipedia article focuses more on the instruction pipeline
2021-07-14 18:20:13 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 244 seconds)
2021-07-14 18:20:30 +0200 <davean> Both HTTP and the CPU cache directly tie back to https://en.wikipedia.org/wiki/Consistency_model
2021-07-14 18:20:53 +0200 <EvanR> can we has a type system that guarantees correct use of cache
2021-07-14 18:21:08 +0200 <davean> uh ...
2021-07-14 18:21:16 +0200jippiedoe(~david@2a02-a44c-e14e-1-1e76-24e-f48d-1c7a.fixed6.kpn.net) (Ping timeout: 268 seconds)
2021-07-14 18:21:24 +0200 <davean> Not for x86
2021-07-14 18:21:35 +0200 <davean> because we don't know the semantics for x86 so we'd have nothing to type against
2021-07-14 18:21:39 +0200 <davean> for ARM or something?
2021-07-14 18:21:50 +0200anandprabhu(~anandprab@94.202.243.198) (Quit: Leaving)
2021-07-14 18:22:01 +0200 <davean> sure, but you'd not like the type system, because it would dictact what came before and after for variable distances.
2021-07-14 18:22:19 +0200 <davean> Your types would be like some form of hoare triples I guess ...
2021-07-14 18:22:31 +0200 <EvanR> cool
2021-07-14 18:22:41 +0200 <davean> The compiler deals with this for you though
2021-07-14 18:22:43 +0200 <davean> thats its job
2021-07-14 18:22:47 +0200 <Profpatsch> [exa]: reductio ad absurdum
2021-07-14 18:22:58 +0200 <davean> its job is to be a compitent CPU user, like yours is to be a compitent cabal user
2021-07-14 18:23:02 +0200 <EvanR> it could maybe be a type system for use in a compiler
2021-07-14 18:23:26 +0200 <davean> EvanR: I think this is a better place for something like a model checker
2021-07-14 18:23:54 +0200 <davean> which, wait, is what we actually use currently
2021-07-14 18:23:58 +0200 <davean> so I guess thats a boring statement
2021-07-14 18:25:46 +0200 <davean> Well I'm kinda getting bored of giving a "how computers work - the basics" lecture, so I think I'll wander away
2021-07-14 18:26:53 +0200 <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
2021-07-14 18:27:17 +0200 <davean> Computers are actually really simple
2021-07-14 18:27:32 +0200 <davean> You could learn enough to build one in a day
2021-07-14 18:27:58 +0200 <hololeap> what would be the recommended way to bind a python library to a haskell interface?
2021-07-14 18:28:22 +0200 <lechner> Hi, is yesod still a suitable foundation for a website these days? Thanks!
2021-07-14 18:28:30 +0200 <EvanR> all that aside, would be cool if websites showed the latest version, according to timestamps xD
2021-07-14 18:28:51 +0200jneira[m](~jneira@214.red-176-83-92.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-07-14 18:29:11 +0200 <EvanR> sorry for boring!
2021-07-14 18:29:24 +0200 <davean> EvanR: its cool, and they CAN
2021-07-14 18:29:27 +0200 <davean> EvanR: if they don't, its by choice
2021-07-14 18:29:42 +0200Brianmancer(~Neuromanc@user/briandamag) (Ping timeout: 255 seconds)
2021-07-14 18:30:30 +0200 <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)
2021-07-14 18:31:11 +0200ec(~ec@gateway/tor-sasl/ec)
2021-07-14 18:32:28 +0200 <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
2021-07-14 18:32:35 +0200 <davean> so this is ENTIRELY on the website in question
2021-07-14 18:34:03 +0200 <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
2021-07-14 18:34:15 +0200hexfive(~eric@50.35.83.177)
2021-07-14 18:34:34 +0200 <davean> I'll point out a site like reddit doesn't even SERVE fresh content.
2021-07-14 18:34:39 +0200 <davean> never mind have the cache
2021-07-14 18:34:42 +0200 <davean> its just too expensive
2021-07-14 18:34:53 +0200 <davean> the content is updated by background tasks
2021-07-14 18:35:02 +0200jneira[m](~jneira@214.red-176-83-92.dynamicip.rima-tde.net)
2021-07-14 18:35:56 +0200 <davean> EvanR: Oh, you've probable seen the cleaner version of the above scheme - images like /.../img.jpg?12df22f2432fc22
2021-07-14 18:36:13 +0200 <davean> That last piece after the question mark is a cache buster, which has the hash of the content
2021-07-14 18:36:38 +0200 <davean> so you force your way through the cache whenever the content updates, but keep the nice base names
2021-07-14 18:36:41 +0200 <EvanR> the poor timestamps, so unappreciated xD
2021-07-14 18:37:02 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 18:37:14 +0200 <EvanR> anyway!
2021-07-14 18:41:24 +0200Atum_(IRC@user/atum/x-2392232) (Ping timeout: 255 seconds)
2021-07-14 18:41:40 +0200Gurkenglas_(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-07-14 18:43:10 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-07-14 18:43:22 +0200cheater1__(~Username@user/cheater)
2021-07-14 18:43:39 +0200derelict(~derelict@user/derelict) (Ping timeout: 255 seconds)
2021-07-14 18:43:40 +0200cheater(~Username@user/cheater) (Ping timeout: 272 seconds)
2021-07-14 18:43:40 +0200Vajb(~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01)
2021-07-14 18:43:40 +0200Vajb(~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01) (Read error: Connection reset by peer)
2021-07-14 18:43:45 +0200cheater1__cheater
2021-07-14 18:43:48 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-14 18:44:41 +0200jolly(~jolly@208.180.97.158) (Quit: Connection closed)
2021-07-14 18:44:42 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 268 seconds)
2021-07-14 18:45:00 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds)
2021-07-14 18:46:42 +0200s_(~s@50.34.81.185) (Quit: Leaving)
2021-07-14 18:47:47 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 18:48:25 +0200qbt(~edun@user/edun) (Quit: WeeChat 3.2)
2021-07-14 18:48:51 +0200jneira[m](~jneira@214.red-176-83-92.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-07-14 18:49:44 +0200chele(~chele@user/chele) (Read error: Connection reset by peer)
2021-07-14 18:50:19 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 258 seconds)
2021-07-14 18:52:21 +0200qbt(~edun@user/edun)
2021-07-14 18:53:52 +0200MQ-17J(~MQ-17J@8.21.10.15)
2021-07-14 18:53:56 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-07-14 18:58:06 +0200chomwitt(~Pitsikoko@ppp-94-67-202-202.home.otenet.gr)
2021-07-14 19:03:21 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
2021-07-14 19:03:29 +0200arkanoid(~arkanoid@2-238-151-49.ip244.fastwebnet.it)
2021-07-14 19:03:35 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-07-14 19:03:44 +0200 <arkanoid> hello
2021-07-14 19:03:49 +0200Vajb(~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01)
2021-07-14 19:07:27 +0200 <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?
2021-07-14 19:10:53 +0200Profpatsch(~Profpatsc@static.88-198-193-255.clients.your-server.de) (WeeChat 3.1)
2021-07-14 19:11:29 +0200 <hololeap> arkanoid: is it the Milewski one?
2021-07-14 19:11:50 +0200 <monochrom> The answer is no.
2021-07-14 19:12:03 +0200 <davean> Uh, theres a liquid haskell covered base I think? Maybe?
2021-07-14 19:12:08 +0200 <davean> Certainly not the standard library!
2021-07-14 19:12:27 +0200 <davean> https://hackage.haskell.org/package/liquid-base I think?
2021-07-14 19:12:36 +0200 <davean> I've certainly never looked into it
2021-07-14 19:14:19 +0200Atum_(IRC@user/atum/x-2392232)
2021-07-14 19:15:05 +0200Pickchea(~private@user/pickchea)
2021-07-14 19:15:20 +0200 <sm> lechner: certainly
2021-07-14 19:17:02 +0200 <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
2021-07-14 19:17:20 +0200 <hololeap> for instance, reverse :: [a] -> [a]
2021-07-14 19:17:42 +0200 <hololeap> the type system does nothing to prove that this function works the way it's intended to
2021-07-14 19:17:51 +0200 <davean> Well you can never do every kinda of validation, correctness is with respect to a specification
2021-07-14 19:19:07 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-07-14 19:19:11 +0200 <davean> arkanoid: do you have more around the quote?
2021-07-14 19:19:39 +0200 <hololeap> davean: https://github.com/hmemcpy/milewski-ctfp-pdf/releases/download/v19-eb86347/category-theory-for-pro…
2021-07-14 19:19:43 +0200 <hololeap> top of page 20
2021-07-14 19:19:43 +0200koolazer(~koo@user/koolazer)
2021-07-14 19:20:24 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 19:20:39 +0200 <davean> hum
2021-07-14 19:21:20 +0200 <davean> No, I don't think he means the liquid haskell one there, and I think that claim is bullshit.
2021-07-14 19:21:27 +0200P1RATEZ(piratez@user/p1ratez)
2021-07-14 19:21:27 +0200 <davean> Though possibly technically correct in a sense
2021-07-14 19:21:46 +0200 <davean> Though the liquid-haskell one might be of interest
2021-07-14 19:22:21 +0200cheater(~Username@user/cheater) (Ping timeout: 255 seconds)
2021-07-14 19:22:30 +0200cheater(~Username@user/cheater)
2021-07-14 19:23:37 +0200fef(~thedawn@user/thedawn) (Remote host closed the connection)
2021-07-14 19:24:40 +0200 <davean> The types are a proof of some sort of correctness, but often not valid proofs
2021-07-14 19:24:55 +0200 <davean> and don't cover all the stuff you should care about
2021-07-14 19:25:06 +0200 <davean> Sure, they help
2021-07-14 19:25:38 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-07-14 19:27:40 +0200 <davean> The standard library more provides your axioms
2021-07-14 19:29:38 +0200cheater(~Username@user/cheater) (Ping timeout: 265 seconds)
2021-07-14 19:29:58 +0200cheater(~Username@user/cheater)
2021-07-14 19:33:30 +0200P1RATEZ(piratez@user/p1ratez) (Ping timeout: 265 seconds)
2021-07-14 19:34:20 +0200Guest27(~Guest27@187.83.249.216.dyn.smithville.net)
2021-07-14 19:35:35 +0200Deide(~Deide@217.155.19.23)
2021-07-14 19:35:35 +0200Deide(~Deide@217.155.19.23) (Changing host)
2021-07-14 19:35:35 +0200Deide(~Deide@user/deide)
2021-07-14 19:37:11 +0200 <arkanoid> hololeap: yes is by Mr Milewski
2021-07-14 19:40:39 +0200 <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)
2021-07-14 19:45:19 +0200elf_fortrez(~elf_fortr@adsl-72-50-4-118.prtc.net) (Ping timeout: 246 seconds)
2021-07-14 19:45:38 +0200 <monochrom> I would s/not valid/weakened/
2021-07-14 19:46:06 +0200hexreel(~hr@69.233.98.238)
2021-07-14 19:46:14 +0200chris_(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-14 19:46:54 +0200 <monochrom> Also, while we're at curry-howard, types are claims, terms are proofs.
2021-07-14 19:47:37 +0200 <monochrom> In Haskell, types are weakened claims, not invalid claims. This is a case of PEBKAC again.
2021-07-14 19:48:19 +0200ubert(~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de)
2021-07-14 19:49:51 +0200chris_(~chris@81.96.113.213)
2021-07-14 19:51:04 +0200pfurla_(~pfurla@ool-182ed2e2.dyn.optonline.net)
2021-07-14 19:52:56 +0200 <EvanR> something tells me this is a different sort of 'weak'
2021-07-14 19:53:26 +0200 <EvanR> by weak you mean comes with more caveats?
2021-07-14 19:54:03 +0200ubikium(~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net)
2021-07-14 19:54:04 +0200koolazer(~koo@user/koolazer) (Ping timeout: 246 seconds)
2021-07-14 19:54:05 +0200 <monochrom> Yes. A "if it terminates" premise.
2021-07-14 19:54:06 +0200pfurla(~pfurla@216.131.82.58) (Ping timeout: 268 seconds)
2021-07-14 19:54:27 +0200ubikium(~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net) (Client Quit)
2021-07-14 19:56:26 +0200 <monochrom> Meta-ly, I have not read Milewski's book closely, I do not know whether he actually wrote that.
2021-07-14 19:57:02 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 19:57:46 +0200Atum_(IRC@user/atum/x-2392232) (Quit: Atum_)
2021-07-14 20:01:17 +0200Atum_(IRC@user/atum/x-2392232)
2021-07-14 20:01:31 +0200chris_(~chris@81.96.113.213) (Remote host closed the connection)
2021-07-14 20:02:00 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 258 seconds)
2021-07-14 20:02:51 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
2021-07-14 20:03:13 +0200euandreh(~euandreh@2804:14c:33:9fe5:50a8:9802:856c:54ce) (Quit: WeeChat 3.2)
2021-07-14 20:03:54 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
2021-07-14 20:05:35 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-07-14 20:05:48 +0200haykam2(~haykam@static.100.2.21.65.clients.your-server.de)
2021-07-14 20:06:34 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
2021-07-14 20:06:56 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
2021-07-14 20:07:21 +0200MidAutumnMoon9(~MidAutumn@user/midautumnmoon) (Ping timeout: 255 seconds)
2021-07-14 20:11:35 +0200cheater(~Username@user/cheater) (Ping timeout: 255 seconds)
2021-07-14 20:12:07 +0200cheater(~Username@user/cheater)
2021-07-14 20:12:27 +0200 <davean> monochrom: they're not valid in the sense they're based on unsafePerformIO, unsafeCoerce, and prim-ops without axinomial specifications
2021-07-14 20:12:56 +0200 <davean> 'base' is unbased, they have to be the axioms
2021-07-14 20:13:11 +0200chris_(~chris@81.96.113.213)
2021-07-14 20:14:19 +0200MidAutumnMoon9(~MidAutumn@user/midautumnmoon)
2021-07-14 20:18:18 +0200hexreel(~hr@69.233.98.238) (Quit: nyaa~)
2021-07-14 20:20:05 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-07-14 20:22:04 +0200Vajb(~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01) (Read error: Connection reset by peer)
2021-07-14 20:22:50 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-14 20:23:44 +0200epolanski(uid312403@id-312403.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
2021-07-14 20:24:42 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-07-14 20:25:17 +0200ptrcmd(~ptrcmd@user/ptrcmd) (Quit: leaving)
2021-07-14 20:25:47 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Remote host closed the connection)
2021-07-14 20:26:44 +0200cheater1__(~Username@user/cheater)
2021-07-14 20:26:45 +0200 <tomsmeding> it's quite based! Indeed, it's based on Falso http://sigtbd.csail.mit.edu/pubs/2016/paper9.pdf
2021-07-14 20:26:54 +0200cheater(~Username@user/cheater) (Ping timeout: 272 seconds)
2021-07-14 20:26:57 +0200cheater1__cheater
2021-07-14 20:30:33 +0200jneira_(~jneira_@28.red-80-28-169.staticip.rima-tde.net) (Quit: Connection closed)
2021-07-14 20:31:43 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-07-14 20:33:06 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 252 seconds)
2021-07-14 20:35:25 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 20:42:06 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 272 seconds)
2021-07-14 20:42:28 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 20:47:41 +0200jolly(~jolly@208.180.97.158)
2021-07-14 20:49:00 +0200Guest27(~Guest27@187.83.249.216.dyn.smithville.net) (Quit: Client closed)
2021-07-14 20:53:09 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk)
2021-07-14 21:03:22 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Read error: Connection reset by peer)
2021-07-14 21:03:36 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt)
2021-07-14 21:03:46 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 21:06:02 +0200prite(~pritam@user/pritambaral) (Ping timeout: 255 seconds)
2021-07-14 21:06:46 +0200 <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
2021-07-14 21:06:46 +0200 <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.
2021-07-14 21:07:29 +0200koolazer(~koo@user/koolazer)
2021-07-14 21:08:01 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-07-14 21:08:14 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 265 seconds)
2021-07-14 21:09:26 +0200 <dminuoso> burnsidesLlama: Shouldn't those definitions rather be some `fmap (foldr f e) . tails` or `fmap (foldr f e) . inits` ?
2021-07-14 21:09:42 +0200qbt(~edun@user/edun) (Quit: WeeChat 3.2)
2021-07-14 21:09:42 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it) (Read error: Connection reset by peer)
2021-07-14 21:09:47 +0200 <burnsidesLlama> Yes! I meant the lifted versions
2021-07-14 21:09:54 +0200favonia(~favonia@user/favonia) (Ping timeout: 255 seconds)
2021-07-14 21:10:32 +0200azeem(~azeem@dynamic-adsl-84-220-239-177.clienti.tiscali.it)
2021-07-14 21:10:57 +0200cheater1__(~Username@user/cheater)
2021-07-14 21:11:11 +0200cheater(~Username@user/cheater) (Ping timeout: 268 seconds)
2021-07-14 21:11:20 +0200cheater1__cheater
2021-07-14 21:11:33 +0200 <dminuoso> burnsidesLlama: At any rate. tails seems like a far better choice
2021-07-14 21:12:01 +0200 <dminuoso> Well. "better" is a poor qualifier
2021-07-14 21:12:20 +0200 <dminuoso> tails has better asymptotics
2021-07-14 21:13:19 +0200drd(~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 268 seconds)
2021-07-14 21:14:10 +0200zeenk(~zeenk@2a02:2f04:a106:9600:82fb:aed9:ca9:38d3) (Quit: Konversation terminated!)
2021-07-14 21:14:39 +0200 <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)"
2021-07-14 21:15:18 +0200 <zzz> hlint: Unnecessary hiding, why not romove it?
2021-07-14 21:15:20 +0200zzzremoves it
2021-07-14 21:15:50 +0200 <zzz> ghc: Error: Ambiguous occurrence
2021-07-14 21:16:07 +0200 <dminuoso> burnsidesLlama: Mmm. So it seems my information is just out-of-date here
2021-07-14 21:16:22 +0200 <dminuoso> You cant implement inits naively if you ever expect fusion to occur.
2021-07-14 21:16:37 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Read error: Connection reset by peer)
2021-07-14 21:16:40 +0200 <dminuoso> Which is why the current version is implemented as: inits = map toListSB . scanl' snocSB emptySB
2021-07-14 21:16:55 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-07-14 21:18:24 +0200jippiedoe(~david@77-171-152-62.fixed.kpn.net)
2021-07-14 21:19:14 +0200 <[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]
2021-07-14 21:19:49 +0200 <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
2021-07-14 21:20:19 +0200 <[exa]> burnsidesLlama: ah I re-read your question now. :D
2021-07-14 21:20:27 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 21:21:03 +0200 <dminuoso> burnsidesLlama: See https://gitlab.haskell.org/ghc/ghc/-/issues/9345
2021-07-14 21:21:12 +0200 <[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.
2021-07-14 21:21:21 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-07-14 21:21:24 +0200qbt(~edun@user/edun)
2021-07-14 21:21:40 +0200 <dminuoso> [exa]: This one doesnt work for infinite lists. :(
2021-07-14 21:22:28 +0200cheater1__(~Username@user/cheater)
2021-07-14 21:22:32 +0200favonia(~favonia@user/favonia)
2021-07-14 21:22:35 +0200 <burnsidesLlama> irc question, how do you reference someone's name like you two have been doing?
2021-07-14 21:22:38 +0200cheater(~Username@user/cheater) (Ping timeout: 272 seconds)
2021-07-14 21:22:41 +0200cheater1__cheater
2021-07-14 21:22:54 +0200 <zzz> burnsidesLlama: depends on your client, most have autocomplete
2021-07-14 21:22:59 +0200 <EvanR> i type the first few letters and hit tab
2021-07-14 21:23:14 +0200 <burnsidesLlama> EvanR: This works for me :)
2021-07-14 21:24:13 +0200 <dminuoso> burnsidesLlama: So in simplified terms, GHC employs an optimization called short cut fusion
2021-07-14 21:24:39 +0200 <dminuoso> As an example, by law it's obvious that `fmap f . fmap g = fmap (f . g)`
2021-07-14 21:24:40 +0200qbt(~edun@user/edun) (Client Quit)
2021-07-14 21:24:53 +0200 <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
2021-07-14 21:24:54 +0200 <dminuoso> The latter generally performs better, because it avoids the intermediate data structure
2021-07-14 21:25:12 +0200MQ-17J(~MQ-17J@8.21.10.15) (Ping timeout: 255 seconds)
2021-07-14 21:25:38 +0200 <dminuoso> And short cut fusion gives GHC a way of avoiding intermediate data structures behind the scenes.
2021-07-14 21:25:50 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds)
2021-07-14 21:26:10 +0200 <burnsidesLlama> dminuoso: So GHC automatically applies fusion laws of various kinds for optimisation (e.g. fold fusion, the map fusion you just mentioned)?
2021-07-14 21:27:12 +0200 <dminuoso> It only does so under particular circumstances
2021-07-14 21:27:28 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 21:27:57 +0200 <dminuoso> A particular example is that sum [0...10] does not actually require a list data type in the first place.
2021-07-14 21:28:33 +0200 <dminuoso> For that to work, the list has to be constructed specially in a way that this fusion can fire
2021-07-14 21:28:46 +0200cfricke(~cfricke@user/cfricke)
2021-07-14 21:29:04 +0200 <dminuoso> It roughly works like this:
2021-07-14 21:29:10 +0200qbt(~edun@user/edun)
2021-07-14 21:29:18 +0200 <dminuoso> build :: forall a . (forall b . (a -> b -> b) -> b -> b) -> [a]
2021-07-14 21:29:56 +0200 <dminuoso> This is a way to construct lists, if you notice closely, it's a sort of "turned around foldr"
2021-07-14 21:29:58 +0200 <dminuoso> % :t foldr
2021-07-14 21:29:59 +0200 <yahb> dminuoso: forall {t :: * -> *} {a} {b}. Foldable t => (a -> b -> b) -> b -> t a -> b
2021-07-14 21:30:34 +0200 <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
2021-07-14 21:30:52 +0200koolazer(~koo@user/koolazer) (Ping timeout: 272 seconds)
2021-07-14 21:30:58 +0200qbt(~edun@user/edun) (Client Quit)
2021-07-14 21:31:24 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Ping timeout: 252 seconds)
2021-07-14 21:31:49 +0200 <dminuoso> Instead what you end up with is just a loop
2021-07-14 21:33:22 +0200qbt(~edun@user/edun)
2021-07-14 21:34:50 +0200cheater(~Username@user/cheater) (Ping timeout: 255 seconds)
2021-07-14 21:35:01 +0200cheater(~Username@user/cheater)
2021-07-14 21:35:24 +0200qbt(~edun@user/edun) (Client Quit)
2021-07-14 21:36:50 +0200 <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?
2021-07-14 21:37:09 +0200alinab_(sid468903@id-468903.brockwell.irccloud.com) ()
2021-07-14 21:37:21 +0200alinab_(sid468903@id-468903.brockwell.irccloud.com)
2021-07-14 21:37:43 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
2021-07-14 21:37:50 +0200 <dminuoso> build g = g (:) []
2021-07-14 21:37:51 +0200alinab_alinab
2021-07-14 21:37:57 +0200qbt(~edun@user/edun)
2021-07-14 21:38:25 +0200 <burnsidesLlama> Related question, how does build build lists? E.g. how might we write sum using build and fold?
2021-07-14 21:41:05 +0200burnside_(~burnsides@dhcp168-025.wadham.ox.ac.uk)
2021-07-14 21:41:05 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-07-14 21:41:38 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk)
2021-07-14 21:41:38 +0200 <burnsidesLlama> https://wiki.haskell.org/Correctness_of_short_cut_fusion seems like it has the answers for my fusion related questions. Thanks :)
2021-07-14 21:41:38 +0200burnside_(~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-07-14 21:42:12 +0200qbt(~edun@user/edun) (Ping timeout: 245 seconds)
2021-07-14 21:42:47 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 21:42:48 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-07-14 21:42:54 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk)
2021-07-14 21:43:01 +0200P1RATEZ(piratez@user/p1ratez)
2021-07-14 21:43:33 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 21:43:52 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 21:44:01 +0200eight(~eight@user/eight) (Quit: leaving)
2021-07-14 21:44:58 +0200 <dminuoso> burnsidesLlama: Try and understand how this works:
2021-07-14 21:45:04 +0200 <dminuoso> % foldr (:) [] [1,2,3]
2021-07-14 21:45:05 +0200 <yahb> dminuoso: [1,2,3]
2021-07-14 21:45:12 +0200 <dminuoso> If you do, you should be able to grok `build`
2021-07-14 21:45:43 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 268 seconds)
2021-07-14 21:45:44 +0200 <dminuoso> (The key idea is simply, that a list can be thought of as an arbitrary fold with (:) and [] plucked in)
2021-07-14 21:46:25 +0200qbt(~edun@user/edun)
2021-07-14 21:46:30 +0200 <burnsidesLlama> Yes, we are replacing the (:) and [] in a list expression with (:) and [] respectively
2021-07-14 21:46:54 +0200 <dminuoso> Sure, and now imagine it doesnt even matter whether the original is a list or not.
2021-07-14 21:47:25 +0200 <dminuoso> Could be a tree for all we know
2021-07-14 21:48:12 +0200Guest9(~Guest9@43.250.157.35)
2021-07-14 21:48:15 +0200 <dminuoso> let x = \f z -> foldr f z t in ...
2021-07-14 21:48:26 +0200 <dminuoso> burnsidesLlama: So this is just a foldr partially applied to some structure already
2021-07-14 21:48:47 +0200qbt(~edun@user/edun) (Read error: Connection reset by peer)
2021-07-14 21:48:56 +0200 <dminuoso> And `build` just finalizes such a partially applied foldr by providing (:) and [] to the remaining arguments.
2021-07-14 21:49:10 +0200qbt(~edun@user/edun)
2021-07-14 21:50:07 +0200 <burnsidesLlama> in the 'let x = ...' line, do you mean foldr for lists? Or a fold for possibly another kind of ADT
2021-07-14 21:50:25 +0200qbt(~edun@user/edun) (Read error: Connection reset by peer)
2021-07-14 21:50:25 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-07-14 21:50:41 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk)
2021-07-14 21:50:48 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-07-14 21:51:04 +0200 <dminuoso> Maybe this is a red herring, mmm.
2021-07-14 21:51:06 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk)
2021-07-14 21:51:41 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-07-14 21:51:49 +0200 <dminuoso> burnsidesLlama: Could be anything.
2021-07-14 21:52:39 +0200cheater1__(~Username@user/cheater)
2021-07-14 21:52:47 +0200cheater(~Username@user/cheater) (Ping timeout: 268 seconds)
2021-07-14 21:52:51 +0200qbt(~edun@user/edun)
2021-07-14 21:52:52 +0200cheater1__cheater
2021-07-14 21:53:22 +0200 <burnsidesLlama> are you saying we can make lists out of anything using build? this doesn't seem right
2021-07-14 21:54:05 +0200qbt(~edun@user/edun) (Client Quit)
2021-07-14 21:54:22 +0200qbt(~edun@user/edun)
2021-07-14 21:54:23 +0200tomsmeding. o O ( https://hackage.haskell.org/package/base-4.14.0.0/docs/src/Data.Foldable.html#toList )
2021-07-14 21:54:50 +0200 <dminuoso> burnsidesLlama: Let's for the sake of simplicity say it has to be a foldable at least.
2021-07-14 21:55:16 +0200 <dminuoso> Or.. no. This really is a red herring
2021-07-14 21:55:25 +0200 <burnsidesLlama> I'm not familiar with foldable, could we be even more concrete? E.g. by taking a binary tree type
2021-07-14 21:56:36 +0200 <dminuoso> burnsidesLlama: The idea is roughly the same as church encoding a list. A list can be fully characterized by its fold.
2021-07-14 21:56:42 +0200 <dminuoso> (its right fold)
2021-07-14 21:57:03 +0200 <dminuoso> % :t foldr
2021-07-14 21:57:03 +0200 <yahb> dminuoso: forall {t :: * -> *} {a} {b}. Foldable t => (a -> b -> b) -> b -> t a -> b
2021-07-14 21:57:38 +0200 <dminuoso> burnsidesLlama: One way to understand Foldable, is that Foldable is anything that you can turn into a list.
2021-07-14 21:57:51 +0200dunj3(~dunj3@2001:16b8:30fc:7f00:fd96:42cd:9d60:7ae7)
2021-07-14 21:58:20 +0200 <dminuoso> So if we partially apply foldr in its 3rd argument already to some foldable thing, then the remaining thing fully characterizes the list
2021-07-14 21:58:21 +0200 <burnsidesLlama> And I imagine a Foldable instance must supply a canonical translation (which is injective?) into a list
2021-07-14 21:58:24 +0200 <dminuoso> Consider:
2021-07-14 21:58:32 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt)
2021-07-14 21:58:37 +0200 <dminuoso> % x = \f z -> foldr f z [1,2,3,4,5,6]
2021-07-14 21:58:37 +0200 <yahb> dminuoso:
2021-07-14 21:58:45 +0200 <dminuoso> % :t x
2021-07-14 21:58:45 +0200 <yahb> dminuoso: forall {a} {b}. Num a => (a -> b -> b) -> b -> b
2021-07-14 21:58:46 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 21:58:51 +0200 <dminuoso> Im going to claim that `x` is fully equivalent to [1,2,3,4,5,6]
2021-07-14 21:59:11 +0200 <dminuoso> burnsidesLlama: Remember that question, we will get to it shortly
2021-07-14 21:59:34 +0200 <dminuoso> burnsidesLlama: Let's test my claim these things are even isomorphic.
2021-07-14 21:59:53 +0200qbt(~edun@user/edun) (Quit: WeeChat 3.2)
2021-07-14 22:00:04 +0200 <dminuoso> Can we turn `x` back into a proper Haskell list?
2021-07-14 22:00:06 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 22:00:12 +0200qbt(~edun@user/edun)
2021-07-14 22:00:44 +0200 <burnsidesLlama> by doing build x
2021-07-14 22:00:47 +0200 <dminuoso> heh
2021-07-14 22:00:50 +0200 <dminuoso> Right.
2021-07-14 22:00:56 +0200 <dminuoso> Or just manually doing `x (:) []`
2021-07-14 22:00:58 +0200 <dminuoso> % x (:) []
2021-07-14 22:00:59 +0200 <yahb> dminuoso: [1,2,3,4,5,6]
2021-07-14 22:01:41 +0200 <dminuoso> 21:58:21 burnsidesLlama | And I imagine a Foldable instance must supply a canonical translation (which is injective?) into a list
2021-07-14 22:01:49 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 246 seconds)
2021-07-14 22:02:06 +0200cheater1__(~Username@user/cheater)
2021-07-14 22:02:10 +0200lavaman(~lavaman@98.38.249.169)
2021-07-14 22:02:19 +0200 <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.
2021-07-14 22:02:22 +0200cheater(~Username@user/cheater) (Ping timeout: 268 seconds)
2021-07-14 22:02:29 +0200cheater1__cheater
2021-07-14 22:02:42 +0200 <dminuoso> foldr has the same power as toList, but its more flexible
2021-07-14 22:03:03 +0200 <dminuoso> It's more flexible because you can - should you want - avoid the actual intermediate cons cells in the list
2021-07-14 22:03:20 +0200 <dminuoso> So here comes the clue:
2021-07-14 22:03:32 +0200 <dminuoso> `build` turns a foldr-encoded list into a proper list
2021-07-14 22:03:36 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt) (Ping timeout: 268 seconds)
2021-07-14 22:03:54 +0200 <dminuoso> and foldr goes from a proper list to something else again
2021-07-14 22:04:14 +0200 <dminuoso> build is equipped with special fusion rules that essentially say:
2021-07-14 22:04:34 +0200 <dminuoso> With some luck: foldr k z (build g) = g k z
2021-07-14 22:05:14 +0200jumper149(~jumper149@80.240.31.34)
2021-07-14 22:05:15 +0200juhp(~juhp@128.106.188.66) (Ping timeout: 255 seconds)
2021-07-14 22:05:44 +0200 <burnsidesLlama> is it saying: "if we are building a list out of g, only to destroy it, then we can directly compute the result"?
2021-07-14 22:05:50 +0200 <dminuoso> Yes.
2021-07-14 22:05:52 +0200 <dminuoso> With some luck.
2021-07-14 22:06:17 +0200 <dminuoso> You're still at the merci of the inliner and the magic whistles of the GHC simplifier - so there's no actual guarantee.
2021-07-14 22:06:32 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-07-14 22:06:32 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-07-14 22:06:36 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 255 seconds)
2021-07-14 22:07:05 +0200 <burnsidesLlama> that sounds mysterious and/or ominous
2021-07-14 22:07:10 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-07-14 22:07:13 +0200 <burnsidesLlama> one last question, then i need to go to sleep
2021-07-14 22:07:42 +0200 <burnsidesLlama> how is this kind of 'deforestation' related to deforesting a function of the form 'fold . unfold'?
2021-07-14 22:08:08 +0200juhp(~juhp@128.106.188.66)
2021-07-14 22:09:25 +0200 <dminuoso> burnsidesLlama: https://www.cs.ox.ac.uk/ralf.hinze/publications/IFL10.pdf
2021-07-14 22:09:50 +0200ph88^(~ph88@2a02:8109:9e00:2b48:9925:18b1:79f7:f242)
2021-07-14 22:10:07 +0200 <dminuoso> This optimization I described above is called foldr/build fusion in GHC slang.
2021-07-14 22:10:14 +0200 <dminuoso> There's an equivalent dual optimizatoin called unfold/destroy
2021-07-14 22:11:43 +0200 <burnsidesLlama> thank you! :)
2021-07-14 22:12:12 +0200ph88(~ph88@2a02:8109:9e00:7e5c:9925:18b1:79f7:f242) (Ping timeout: 245 seconds)
2021-07-14 22:12:23 +0200 <dminuoso> % :t unfoldr
2021-07-14 22:12:24 +0200 <yahb> dminuoso: forall {t} {a}. (t -> Maybe (a, t)) -> t -> [a]
2021-07-14 22:12:25 +0200 <dminuoso> % :t destroy
2021-07-14 22:12:25 +0200 <yahb> dminuoso: forall {a} {t1} {t2}. (([a] -> Maybe (a, [a])) -> t1 -> t2) -> t1 -> t2
2021-07-14 22:12:48 +0200 <dminuoso> % destroy unfoldr [1..5]
2021-07-14 22:12:48 +0200 <yahb> dminuoso: [1,2,3,4,5]
2021-07-14 22:13:14 +0200juhp(~juhp@128.106.188.66) (Quit: juhp)
2021-07-14 22:13:23 +0200 <dminuoso> Please dont ask me why we have foldr/build fusion. I expect other folks to be more knowledgable here.
2021-07-14 22:13:28 +0200juhp(~juhp@128.106.188.66)
2021-07-14 22:13:50 +0200 <dminuoso> burnsidesLlama: By the way, as an interesting side note:
2021-07-14 22:14:00 +0200 <dminuoso> Recall my example of: fmap f . fmap g = fmap (f . g) ?
2021-07-14 22:14:29 +0200 <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.
2021-07-14 22:14:37 +0200 <dminuoso> (It wouldn't even know if they are satisfied)
2021-07-14 22:15:11 +0200 <dminuoso> However, there's tricks to tie GHCs hands and gain this optimization in a guaranteed manner
2021-07-14 22:18:02 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Ping timeout: 245 seconds)
2021-07-14 22:18:24 +0200Guest9(~Guest9@43.250.157.35) (Quit: Connection closed)
2021-07-14 22:19:03 +0200 <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.
2021-07-14 22:19:25 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: Connection reset by peer)
2021-07-14 22:19:42 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
2021-07-14 22:19:49 +0200Atum__(IRC@user/atum/x-2392232)
2021-07-14 22:19:50 +0200 <Hecate> burnsidesLlama: LiquidHaskell
2021-07-14 22:19:56 +0200 <Hecate> (I think?)
2021-07-14 22:20:09 +0200 <dminuoso> burnsidesLlama: Well, we can get away with something far more trivial in Haskell
2021-07-14 22:20:17 +0200 <Hecate> Ryan Scott wrote a paper about it as well
2021-07-14 22:20:50 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal)
2021-07-14 22:21:03 +0200 <dminuoso> % newtype F f a = F { runF :: forall b. (a -> b) -> f b }
2021-07-14 22:21:04 +0200 <yahb> dminuoso:
2021-07-14 22:21:05 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-07-14 22:21:50 +0200 <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.
2021-07-14 22:22:11 +0200Atum_(IRC@user/atum/x-2392232) (Ping timeout: 265 seconds)
2021-07-14 22:22:15 +0200 <dminuoso> % someList = F (`fmap` [1,2,3,4,5])
2021-07-14 22:22:15 +0200 <yahb> dminuoso:
2021-07-14 22:22:43 +0200cheater(~Username@user/cheater) (Ping timeout: 268 seconds)
2021-07-14 22:22:44 +0200 <dminuoso> % instance Functor (F f) where fmap f m = F (\k -> runF m (k . f))
2021-07-14 22:22:44 +0200 <yahb> dminuoso:
2021-07-14 22:22:49 +0200cheater1__(~Username@user/cheater)
2021-07-14 22:22:52 +0200cheater1__cheater
2021-07-14 22:23:43 +0200 <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.
2021-07-14 22:23:51 +0200 <dminuoso> It will go over the list only once
2021-07-14 22:24:47 +0200 <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
2021-07-14 22:24:52 +0200ptrcmd(~ptrcmd@user/ptrcmd)
2021-07-14 22:25:45 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
2021-07-14 22:25:58 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-07-14 22:26:33 +0200 <dminuoso> % lowerF (F f) = f id
2021-07-14 22:26:33 +0200 <yahb> dminuoso:
2021-07-14 22:26:40 +0200 <dminuoso> % lowerF . fmap (+1) . fmap (*20) . fmap (/5) $ someList
2021-07-14 22:26:40 +0200 <yahb> dminuoso: [5.0,9.0,13.0,17.0,21.0]
2021-07-14 22:28:12 +0200 <dminuoso> We can then also write ourselves some:
2021-07-14 22:28:36 +0200 <dminuoso> % liftF a = F (`fmap` a)
2021-07-14 22:28:36 +0200 <yahb> dminuoso:
2021-07-14 22:28:41 +0200 <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
2021-07-14 22:28:47 +0200 <dminuoso> % lowerF . fmap (+1) . fmap (*20) . fmap (/5) .liftF $ [1,2,3,4,5,6]
2021-07-14 22:28:47 +0200 <yahb> dminuoso: [5.0,9.0,13.0,17.0,21.0,25.0]
2021-07-14 22:29:05 +0200 <dminuoso> Then all we have to do is wrap this large fmap composition between `lowerF` and `liftF`, and we get fusion for free.
2021-07-14 22:29:23 +0200 <dminuoso> Nothing else even knows about this F representation! At runtime its even gone because its a newtype
2021-07-14 22:29:51 +0200P1RATEZ(piratez@user/p1ratez) (Remote host closed the connection)
2021-07-14 22:29:54 +0200 <dminuoso> burnsidesLlama: No. This is field-syntax for newtype
2021-07-14 22:29:59 +0200 <dminuoso> % :t runF
2021-07-14 22:29:59 +0200 <yahb> dminuoso: forall {f :: * -> *} {a}. F f a -> forall b. (a -> b) -> f b
2021-07-14 22:30:27 +0200beka(~beka@104.193.170-244.PUBLIC.monkeybrains.net)
2021-07-14 22:30:52 +0200 <tomsmeding> 'runF m' is the field, which has type (forall b. (a -> b) -> f b), of the record m
2021-07-14 22:31:00 +0200 <dminuoso> Correkt
2021-07-14 22:33:12 +0200 <burnsidesLlama> I'll need time to digest what's been said :), bye for now.
2021-07-14 22:33:12 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-07-14 22:33:12 +0200amirouche(~amirouche@user/amirouche) (Read error: Connection reset by peer)
2021-07-14 22:34:29 +0200chexum(~chexum@gateway/tor-sasl/chexum) (Quit: -)
2021-07-14 22:34:42 +0200smichel17smichel
2021-07-14 22:36:18 +0200chexum(~chexum@gateway/tor-sasl/chexum)
2021-07-14 22:37:40 +0200analognoise(~analognoi@83.136.182.93)
2021-07-14 22:38:02 +0200cheater(~Username@user/cheater) (Ping timeout: 245 seconds)
2021-07-14 22:38:25 +0200cheater(~Username@user/cheater)
2021-07-14 22:38:33 +0200favonia(~favonia@user/favonia) (Ping timeout: 255 seconds)
2021-07-14 22:38:44 +0200Guest239(~Guest23@50.47.115.102)
2021-07-14 22:38:55 +0200finsternis(~X@23.226.237.192) (Remote host closed the connection)
2021-07-14 22:38:58 +0200favonia(~favonia@user/favonia)
2021-07-14 22:39:21 +0200amirouche(~amirouche@user/amirouche)
2021-07-14 22:39:41 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-14 22:40:07 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk)
2021-07-14 22:44:09 +0200 <Guest239> Does anyone know how to make autocompletion and automatic refactoring to work for Haskell in Spacemacs?
2021-07-14 22:44:55 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
2021-07-14 22:45:03 +0200Topsi(~Tobias@dyndsl-095-033-020-123.ewe-ip-backbone.de)
2021-07-14 22:46:16 +0200beka(~beka@104.193.170-244.PUBLIC.monkeybrains.net) (Ping timeout: 246 seconds)
2021-07-14 22:47:03 +0200smichelsmichel17
2021-07-14 22:47:28 +0200silverwhitefish(~hidden@47.202.102.10) (Quit: One for all, all for One (2 Corinthians 5))
2021-07-14 22:48:54 +0200MidAutumnMoon9(~MidAutumn@user/midautumnmoon) (Ping timeout: 255 seconds)
2021-07-14 22:49:14 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 268 seconds)
2021-07-14 22:50:35 +0200jess(~jess@libera/staff/jess)
2021-07-14 22:50:54 +0200o1lo01ol1o(~o1lo01ol1@bl11-109-140.dsl.telepac.pt)
2021-07-14 22:51:50 +0200jippiedoe(~david@77-171-152-62.fixed.kpn.net) (Quit: Leaving)
2021-07-14 22:51:53 +0200jneira_(~jneira_@28.red-80-28-169.staticip.rima-tde.net)
2021-07-14 22:52:09 +0200 <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?
2021-07-14 22:56:01 +0200cheater(~Username@user/cheater) (Ping timeout: 268 seconds)
2021-07-14 22:56:05 +0200cheater1__(~Username@user/cheater)
2021-07-14 22:56:08 +0200cheater1__cheater
2021-07-14 22:56:20 +0200MidAutumnMoon9(~MidAutumn@user/midautumnmoon)
2021-07-14 22:58:32 +0200ph88^(~ph88@2a02:8109:9e00:2b48:9925:18b1:79f7:f242) (Ping timeout: 255 seconds)
2021-07-14 23:01:10 +0200DNH(~DNH@2a02:8108:1100:16d8:4c45:cc63:abad:ed54)
2021-07-14 23:01:12 +0200DNH(~DNH@2a02:8108:1100:16d8:4c45:cc63:abad:ed54) (Client Quit)
2021-07-14 23:01:20 +0200ec(~ec@gateway/tor-sasl/ec) (Quit: ec)
2021-07-14 23:03:42 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 258 seconds)
2021-07-14 23:04:14 +0200cheater(~Username@user/cheater) (Ping timeout: 265 seconds)
2021-07-14 23:04:34 +0200cheater(~Username@user/cheater)
2021-07-14 23:05:15 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-07-14 23:05:51 +0200spruit11_(~quassel@2a02:a467:ccd6:1:4852:6669:da0c:37fe)
2021-07-14 23:06:42 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 23:09:20 +0200spruit11(~quassel@2a02:a467:ccd6:1:f403:cf1e:97b5:1c9b) (Ping timeout: 255 seconds)
2021-07-14 23:10:32 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk)
2021-07-14 23:11:03 +0200zebrag(~chris@user/zebrag)
2021-07-14 23:11:34 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-07-14 23:11:58 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-07-14 23:13:12 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-07-14 23:13:37 +0200Atum_(IRC@user/atum/x-2392232)
2021-07-14 23:15:21 +0200smichel17(~smichel17@c-73-68-217-18.hsd1.ma.comcast.net) (Ping timeout: 265 seconds)
2021-07-14 23:15:23 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk) (Remote host closed the connection)
2021-07-14 23:15:27 +0200zebrag(~chris@user/zebrag) (Ping timeout: 255 seconds)
2021-07-14 23:15:52 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk)
2021-07-14 23:16:38 +0200Atum__(IRC@user/atum/x-2392232) (Ping timeout: 272 seconds)
2021-07-14 23:16:47 +0200neceve(~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f) (Ping timeout: 245 seconds)
2021-07-14 23:17:34 +0200zebrag(~chris@user/zebrag)
2021-07-14 23:17:38 +0200zebrag(~chris@user/zebrag) (Client Quit)
2021-07-14 23:18:01 +0200zebrag(~chris@user/zebrag)
2021-07-14 23:19:09 +0200koolazer(~koo@user/koolazer)
2021-07-14 23:20:16 +0200silverwhitefish(~hidden@47.202.102.10)
2021-07-14 23:20:30 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
2021-07-14 23:20:41 +0200burnsidesLlama(~burnsides@dhcp168-025.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
2021-07-14 23:20:58 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-07-14 23:21:49 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-07-14 23:22:41 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-07-14 23:29:51 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 265 seconds)
2021-07-14 23:32:17 +0200cfricke(~cfricke@user/cfricke) (Ping timeout: 255 seconds)
2021-07-14 23:33:11 +0200mikoto-chan(~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) (Ping timeout: 255 seconds)
2021-07-14 23:36:57 +0200agua(~agua@2804:14c:8793:8e2f:d158:60e:567f:c699)
2021-07-14 23:40:39 +0200pesada(~agua@2804:18:4f:750a:1:0:192e:7017) (Ping timeout: 255 seconds)
2021-07-14 23:41:24 +0200acidjnk_new3(~acidjnk@p200300d0c72b9516b9158842f1cb7e92.dip0.t-ipconnect.de)
2021-07-14 23:42:53 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-07-14 23:45:36 +0200cheater(~Username@user/cheater) (Ping timeout: 255 seconds)
2021-07-14 23:45:45 +0200cheater(~Username@user/cheater)
2021-07-14 23:46:21 +0200cfricke(~cfricke@user/cfricke)
2021-07-14 23:47:15 +0200dunj3(~dunj3@2001:16b8:30fc:7f00:fd96:42cd:9d60:7ae7) (Remote host closed the connection)
2021-07-14 23:47:39 +0200Franciman(~francesco@openglass.it)
2021-07-14 23:47:53 +0200 <Franciman> Hi all, if I want to learn about ghc internals
2021-07-14 23:48:00 +0200 <Franciman> do you know a good source?
2021-07-14 23:48:08 +0200 <maerwald> Franciman: ghc devs
2021-07-14 23:48:20 +0200 <Franciman> hi maerwald
2021-07-14 23:48:21 +0200 <Franciman> thanks
2021-07-14 23:49:04 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2)
2021-07-14 23:50:02 +0200 <geekosaur> there's some decent docs on the ghc wiki https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/#the-ghc-commentary
2021-07-14 23:53:42 +0200lbseale(~lbseale@user/ep1ctetus)
2021-07-14 23:54:25 +0200 <Franciman> ty
2021-07-14 23:58:02 +0200mei(~mei@user/mei) (Read error: Connection reset by peer)