Home liberachat/#haskell: Logs Calendar

Logs on 2021-12-10 (liberachat/#haskell)

00:00:17 <dsal> The work is parallelized, but they have to agree on timing. It's kind of a hard problem and doesn't work super reliably.
00:00:26 <hpc> sometimes it's more efficient to just have one really long finger
00:01:09 <hpc> https://theinfosphere.org/images/thumb/b/be/Farnsworth-finglonger1.jpg/225px-Farnsworth-finglonger1.jpg
00:01:18 <dsal> My head already showed me that picture.
00:01:26 × CiaoSen quits (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
00:01:30 <monochrom> One really long finger is great for glissando on a piano :)
00:01:40 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
00:01:59 × jeetelongname quits (~jeet@eduroam-public-20.nat.port.ac.uk) (Remote host closed the connection)
00:02:21 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
00:04:09 × Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
00:07:11 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
00:08:25 × genieliu quits (~genieliu@111.193.167.10) (Ping timeout: 250 seconds)
00:11:53 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 250 seconds)
00:13:13 user0 joins (~aj@154.0.137.32)
00:14:20 × dsrt^ quits (~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Ping timeout: 265 seconds)
00:18:07 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection)
00:19:15 × Morrow quits (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
00:21:29 burnsidesLlama joins (~burnsides@dhcp168-015.wadham.ox.ac.uk)
00:21:51 × jgeerds quits (~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 250 seconds)
00:21:57 × k60`` quits (~user@static.100.218.46.78.clients.your-server.de) (Ping timeout: 252 seconds)
00:22:24 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
00:26:13 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
00:26:37 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
00:28:30 Erutuon joins (~Erutuon@user/erutuon)
00:33:08 × ServerStatsDisco quits (~serversta@2001:470:69fc:105::1a) (Quit: Client limit exceeded: 20000)
00:34:23 × puke quits (~puke@user/puke) (Quit: puke)
00:40:37 neverfindme joins (~hayden@72.92.246.5)
00:41:09 × Pickchea quits (~private@user/pickchea) (Ping timeout: 250 seconds)
00:41:34 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
00:45:37 mvk joins (~mvk@2607:fea8:5cdd:f000::9788)
00:47:55 puke joins (~puke@user/puke)
00:49:06 <dsal> Kind of annoyed that moving this code into a different module has such a large impact on performance. I need fancier whole program optimization.
00:49:20 ServerStatsDisco joins (~serversta@2001:470:69fc:105::1a)
00:49:50 lavaman joins (~lavaman@98.38.249.169)
00:56:05 × acidjnk_new quits (~acidjnk@pd9e0bdc0.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
00:56:07 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26) (Remote host closed the connection)
00:58:13 dsrt^ joins (~dsrt@wsip-98-188-240-142.mc.at.cox.net)
00:58:17 k60`` joins (~user@static.100.218.46.78.clients.your-server.de)
00:59:18 <int-e> . o O ( if you want performance you have to get inline )
00:59:34 <int-e> bad pun, but also kind of true, sadly
01:00:42 × k60`` quits (~user@static.100.218.46.78.clients.your-server.de) (Remote host closed the connection)
01:02:22 <dsal> I've found just moving a bit of code into a function has had quite noticeable impact even in the same module regardless of how hard I tell it to inline. I'm guessing it didn't notice it could fuse.
01:04:51 × pfurla quits (~pfurla@2804:14d:5c81:4104:25b5:2708:65a9:4e7d) (Quit: gone to sleep. ZZZzzz…)
01:06:42 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
01:06:43 <johnw> dsal: https://hackage.haskell.org/package/inspection-testing is a nice way to defend against that kind of performance regression
01:07:27 pfurla joins (~pfurla@201.17.118.230)
01:08:09 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:08:09 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
01:08:09 wroathe joins (~wroathe@user/wroathe)
01:08:12 <dsal> Oh neat.
01:08:44 <dsal> I think this was a case where it could actually do the right thing, but wasn't because of what I thought might be a tiny difference that ended up being some unexpected overhead.
01:09:02 <dsal> Basically, I made my `Thing` a `Thing a` with a conversion function attached and that had a huge impact.
01:09:14 <johnw> yes, things like creating a non-saturated function have ruined my day in a similar way before
01:11:05 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds)
01:12:55 × mvk quits (~mvk@2607:fea8:5cdd:f000::9788) (Ping timeout: 252 seconds)
01:13:40 Guest66 joins (~textual@98.13.6.21)
01:15:40 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26)
01:18:39 × neverfindme quits (~hayden@72.92.246.5) (Quit: Leaving)
01:22:25 doyougnu joins (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
01:28:35 × InternetCitizen quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 250 seconds)
01:33:02 jkaye joins (~jkaye@2601:281:8300:7530:1cce:ad41:7c5b:4355)
01:33:08 InternetCitizen joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
01:35:04 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26) (Remote host closed the connection)
01:37:05 Morrow joins (~quassel@bzq-110-168-31-106.red.bezeqint.net)
01:44:08 × retroid_ quits (~retro@05412d78.skybroadband.com) (Ping timeout: 268 seconds)
01:45:34 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
01:48:47 × user0 quits (~aj@154.0.137.32) (Quit: Leaving.)
01:49:36 user0 joins (~aj@154.0.137.32)
01:51:08 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26)
01:51:36 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
01:51:37 × user0 quits (~aj@154.0.137.32) (Client Quit)
01:53:32 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
01:55:50 × bollu quits (uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
01:58:09 k60`` joins (~user@static.100.218.46.78.clients.your-server.de)
01:59:00 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:01:15 user0 joins (~aj@154.0.137.32)
02:01:28 mvk joins (~mvk@2607:fea8:5cdd:f000::9788)
02:02:59 × user0 quits (~aj@154.0.137.32) (Client Quit)
02:08:00 × burnsidesLlama quits (~burnsides@dhcp168-015.wadham.ox.ac.uk) (Remote host closed the connection)
02:09:00 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
02:11:29 × xff0x quits (~xff0x@2001:1a81:5338:9c00:9209:5fa4:fe4c:a1bd) (Ping timeout: 250 seconds)
02:13:16 xff0x joins (~xff0x@2001:1a81:537e:3f00:97ca:7ac8:9d9f:cfb2)
02:14:22 k60``` joins (~user@94.25.169.9)
02:14:54 × InternetCitizen quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 260 seconds)
02:16:32 × k60`` quits (~user@static.100.218.46.78.clients.your-server.de) (Ping timeout: 256 seconds)
02:22:09 lavaman joins (~lavaman@98.38.249.169)
02:23:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
02:26:44 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
02:32:13 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds)
02:32:14 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
02:32:14 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
02:32:14 wroathe joins (~wroathe@user/wroathe)
02:32:49 genieliu joins (~genieliu@103.37.140.38)
02:33:32 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
02:43:02 ubert1 joins (~Thunderbi@p200300ecdf0ba2c03cbcafca2ab2631d.dip0.t-ipconnect.de)
02:44:34 × ubert quits (~Thunderbi@p200300ecdf0ba2f664fe176011d10d59.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
02:44:34 ubert1 is now known as ubert
02:45:12 emf joins (~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com)
02:46:42 ub1 joins (~Thunderbi@p200300ecdf0ba2c0b11d357caa48ef17.dip0.t-ipconnect.de)
02:48:16 × ub quits (~Thunderbi@p200300ecdf0ba2f69d45b59a7f50dcfc.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
02:48:59 ub1 is now known as ub
02:49:01 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 240 seconds)
02:54:11 alex[m]1 joins (~alexchete@2001:470:69fc:105::1:1001)
02:54:11 ManofLetters[m] joins (~manoflett@2001:470:69fc:105::3be)
02:54:23 fendor[m] joins (~fendormat@2001:470:69fc:105::fcbd)
02:54:23 DemiMarieObenour joins (~alwayscur@2001:470:69fc:105::4886)
02:54:37 ilkecan[m] joins (~ilkecanma@2001:470:69fc:105::1:79b)
02:54:49 maerwald[m] joins (~maerwaldm@2001:470:69fc:105::1ee)
02:54:49 jinsun_ joins (~jinsun@user/jinsun)
02:54:49 surgeon[m] joins (~surge9nma@2001:470:69fc:105::f585)
02:54:49 tomku[m] joins (~tomkumozi@2001:470:69fc:105::1:2fcb)
02:55:04 fcortesi joins (~fcortesi@2001:470:69fc:105::f3a9)
02:55:04 utk joins (~utk@2001:470:69fc:105::1:2fe0)
02:57:23 lavaman joins (~lavaman@98.38.249.169)
02:57:39 × xff0x quits (~xff0x@2001:1a81:537e:3f00:97ca:7ac8:9d9f:cfb2) (Ping timeout: 250 seconds)
02:58:28 xff0x joins (~xff0x@2001:1a81:537e:3f00:d6d6:fa6f:b314:a474)
03:01:52 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
03:02:10 × emf quits (~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com) (Quit: emf)
03:02:50 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
03:02:55 × jkaye quits (~jkaye@2601:281:8300:7530:1cce:ad41:7c5b:4355) (Ping timeout: 252 seconds)
03:03:08 emf joins (~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com)
03:08:27 jeetelongname joins (~jeet@eduroam-public-20.nat.port.ac.uk)
03:09:45 × std_mutex[m] quits (~stdmutexm@2001:470:69fc:105::1:4534) (Quit: Client limit exceeded: 20000)
03:10:03 <jackdk> in 2017, ocharles wrote an article that can be summarised as "here's a recipe to make MonadFoo classes that are usable by both mtl and effect systems, by making a class whose only method is a `liftFoo :: Free (Coyoneda SomeGADTOfOperations) a -> m a`: https://blog.ocharles.org.uk/posts/2017-08-23-extensible-effects-and-transformers.html
03:10:15 std_mutex[m] joins (~stdmutexm@2001:470:69fc:105::1:4534)
03:10:43 × nunggu quits (~q@gateway/tor-sasl/nunggu) (Quit: nunggu)
03:12:05 <jackdk> I'm trying to extend it to support things like `local`, in that I have constructors of the GADT like `Reconfigure :: Foo -> MyGADT a -> MyGADT a`. But then the straightfoward lifting goes away, because you want to expose operations like `reconfigure :: MonadFoo m => Foo -> m a -> m a`, at which point I get stuck on that `m a` in negative position. Has anyone here successfully extended this technique in this way?
03:15:07 × pfurla quits (~pfurla@201.17.118.230) (Quit: gone to sleep. ZZZzzz…)
03:16:47 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:16:47 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:16:47 finn_elija is now known as FinnElija
03:18:18 × nfd quits (~nfd@user/nfd) (Ping timeout: 256 seconds)
03:18:27 × emf quits (~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com) (Quit: emf)
03:20:14 × k60``` quits (~user@94.25.169.9) (Ping timeout: 260 seconds)
03:20:29 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
03:21:26 <jackdk> I could change the GADT constructor to be `Reconfigure :: MonadFoo m => Foo -> m a -> MyGADT a` but I suspect that's gonna play poorly at the use site.
03:30:13 × td_ quits (~td@muedsl-82-207-238-085.citykom.de) (Ping timeout: 240 seconds)
03:32:03 td_ joins (~td@94.134.91.156)
03:34:15 justsomeguy joins (~justsomeg@user/justsomeguy)
03:35:11 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 252 seconds)
03:38:06 × Kevin578 quits (~Kevin578@pool-96-237-112-198.bstnma.fios.verizon.net) (Read error: Connection reset by peer)
03:39:20 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
03:42:10 × doyougnu quits (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 260 seconds)
03:42:58 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
03:44:12 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
03:48:41 kimjetwav joins (~user@2607:fea8:2363:8f00:5d2f:a515:1834:3924)
03:51:44 k60``` joins (~user@94.25.169.9)
03:52:52 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
03:54:49 nfd joins (~nfd@user/nfd)
03:59:29 <jackdk> yeah this is bad - if i put an `m a` into the GADT like that I can't prove that it's the same `m` that I want to interpret into
04:02:30 × k60``` quits (~user@94.25.169.9) (Ping timeout: 256 seconds)
04:04:24 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
04:04:24 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
04:04:24 wroathe joins (~wroathe@user/wroathe)
04:07:30 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
04:07:39 <Axman6> isn;t this one of the reasons why effects in polysemy are also passed the effects it's running with? (being very loose with my language, I'm sure)
04:09:18 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
04:10:25 <jackdk> I expect so, because this is a "bracket-ish" operation. spoiler: since AWST is a clumsy monad transformer and rightfully departing in amazonka-2.0, I'm trying to build a replacement internally that I will opensource once it's proven. I'm digging around to see if I can make something that's a good base for both mtl and effect systems in the ocharles style, but it isn't looking good so far
04:13:30 <jackdk> I suppose you can implement things like `within :: MonadAmazonka m => Region -> m a -> m a` outside of the GADT by (in MTL) using `local` since you know you have a reader inside your `AmazonkaT`, but the best I can think of in `freer-simple` is to interpret the stuff you want to run in some other region separately, which feels pretty awkward
04:16:27 Topsi joins (~Tobias@dyndsl-095-033-020-172.ewe-ip-backbone.de)
04:17:10 <jackdk> Axman6: I particularly welcome your thoughts since I know you used to do a bunch of amazonkoid stuff
04:18:27 × dsrt^ quits (~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Ping timeout: 250 seconds)
04:18:34 × genieliu quits (~genieliu@103.37.140.38) (Ping timeout: 260 seconds)
04:19:01 × zebrag quits (~chris@user/zebrag) (Ping timeout: 240 seconds)
04:19:54 zebrag joins (~chris@user/zebrag)
04:21:18 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
04:27:06 <Axman6> it feels like the missing thing is some constraint that you have some reader/state which you can change the Region in, but I have no idea how to fix that
04:29:38 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:30:32 × jeetelongname quits (~jeet@eduroam-public-20.nat.port.ac.uk) (Ping timeout: 240 seconds)
04:31:04 <Axman6> can liftWithin :: Region -> Free (Coyodneda Foo) a -> m a also be a part of the interface?
04:31:48 <Axman6> feels like a bad hack
04:32:50 <Axman6> something like liftLocal :: (Env -> Env) -> Free (Coyodneda Foo) a -> m a might be useful I guess
04:33:44 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 268 seconds)
04:34:09 k60``` joins (~user@94.25.169.9)
04:35:49 <jackdk> yeah because I don't want to tie myself to amazonka's Env at the abstract GADT definition stage
04:36:19 <jackdk> I considered storing Free (Coyo Foo) a in the GADT but then you can do Amazonka operations AND NOTHING ELSE
04:36:41 <Axman6> having m a -> m a feels wrong to me, since this only applies to your Free thing
04:37:20 <Axman6> feels like reading isovector's posts on the design of polysemy might be useful, even if it doesn't contain the answer
04:38:13 <jackdk> indeed. similar problem if you try a higher rank type: `Within :: Region -> (forall m . MonadFoo m => m a) -> Foo a` lets us choose what `m` is, but at the cost of telling library clients they can't do anything inside that region which isn't only a MonadFoo
04:39:06 × k60``` quits (~user@94.25.169.9) (Ping timeout: 260 seconds)
04:39:15 Codaraxis joins (~Codaraxis@user/codaraxis)
04:41:00 <jackdk> I've read some of isovector's writing, and it seems like there are only a few contenders: freer-simple if you don't want too much galaxybrain, polysemy if you're willing to use GHC plugins and go all in on galactic haskell, fused-effects if you really really want performance, and eff might be a thing later when the delimited continuation primops appear in widely-used GHCs
04:41:36 <jackdk> and not many of them let you write `bracket`-ish things
04:42:00 <jackdk> so I'm thinking I may as well abandon this, just write a really good MTL-style lib for now, and let the effects world catch up?
04:42:59 × xff0x quits (~xff0x@2001:1a81:537e:3f00:d6d6:fa6f:b314:a474) (Ping timeout: 268 seconds)
04:43:42 xff0x joins (~xff0x@2001:1a81:537e:3f00:9578:51b0:7e3f:b293)
04:47:03 genieliu joins (~genieliu@103.37.140.38)
04:48:33 Codaraxis_ joins (~Codaraxis@user/codaraxis)
04:48:55 user0 joins (~aj@154.0.137.32)
04:51:11 × Codaraxis quits (~Codaraxis@user/codaraxis) (Ping timeout: 250 seconds)
04:51:24 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Remote host closed the connection)
04:51:49 Codaraxis_ joins (~Codaraxis@user/codaraxis)
04:55:26 dsrt^ joins (~dsrt@wsip-98-188-240-142.mc.at.cox.net)
04:55:52 Axma33016 joins (~Axman6@user/axman6)
04:58:02 × Axman6 quits (~Axman6@user/axman6) (Ping timeout: 260 seconds)
05:01:32 user01 joins (~aj@154.0.137.32)
05:01:43 × user0 quits (~aj@154.0.137.32) (Ping timeout: 252 seconds)
05:02:20 <user01> tesr
05:03:37 <jackdk> received user01
05:03:55 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
05:08:12 × fryguybob quits (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (Remote host closed the connection)
05:08:36 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
05:11:28 awjchen joins (~awjchen@node-1w7jr9y54rj7c0bzal2n5rlib.ipv6.telus.net)
05:13:02 × xff0x quits (~xff0x@2001:1a81:537e:3f00:9578:51b0:7e3f:b293) (Ping timeout: 240 seconds)
05:13:12 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 268 seconds)
05:13:53 xff0x joins (~xff0x@2001:1a81:537e:3f00:d5b4:3c9d:ec95:16b3)
05:17:54 Axma33016 is now known as Axman6
05:18:26 × dsrt^ quits (~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Ping timeout: 256 seconds)
05:27:00 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
05:28:00 × hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Quit: Konversation terminated!)
05:29:52 lavaman joins (~lavaman@98.38.249.169)
05:29:57 × genieliu quits (~genieliu@103.37.140.38) (Ping timeout: 252 seconds)
05:30:55 hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
05:30:56 Topsi1 joins (~Tobias@dyndsl-095-033-094-234.ewe-ip-backbone.de)
05:31:25 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 252 seconds)
05:31:25 × Topsi quits (~Tobias@dyndsl-095-033-020-172.ewe-ip-backbone.de) (Ping timeout: 252 seconds)
05:34:21 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
05:37:49 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
05:39:27 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
05:39:54 × kimjetwav quits (~user@2607:fea8:2363:8f00:5d2f:a515:1834:3924) (Remote host closed the connection)
05:40:15 kimjetwav joins (~user@2607:fea8:2363:8f00:b66e:c3b4:4ab3:f161)
05:45:13 awjchen parts (~awjchen@node-1w7jr9y54rj7c0bzal2n5rlib.ipv6.telus.net) ()
05:45:28 <Axman6> Sadly, there was no SYN
05:46:50 × ddb quits (~ddb@ipv6two.tilde.club) (Quit: WeeChat 3.3)
05:53:52 deadmarshal joins (~deadmarsh@95.38.116.82)
05:58:43 genieliu joins (~genieliu@103.37.140.38)
05:59:00 <jackdk> you mean ACK
06:00:18 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
06:00:44 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:01:33 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
06:03:55 × mikoto-chan quits (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Quit: mikoto-chan)
06:05:17 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 250 seconds)
06:07:27 <Axman6> Nah, you SYNACK'd
06:07:37 <Axman6> uh, right, yes
06:07:51 <Axman6> no wonder all my TCP connections were going backwards
06:08:18 <Axman6> I guess we live in a world where we do not ACK our SYNs
06:09:04 <int-e> RST RST RST
06:09:40 retroid_ joins (~retro@05412d78.skybroadband.com)
06:15:00 Codaraxis joins (~Codaraxis@user/codaraxis)
06:15:24 <int-e> > unwords $ map (\x -> printf "%.2f" (190 - x/20)) [3738,3728,3693,3672,3602,3581,3580,3576,3546,3539]
06:15:26 <lambdabot> "3.10 3.60 5.35 6.40 9.90 10.95 11.00 11.20 12.70 13.05"
06:17:05 lavaman joins (~lavaman@98.38.249.169)
06:17:11 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
06:17:22 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
06:21:39 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 268 seconds)
06:21:49 × Techcable quits (~Techcable@168.235.93.147) (Ping timeout: 240 seconds)
06:22:02 <xerox> when cyphase decided do it I did end up off the list but there am I back again in the int-e official scoring :D
06:22:12 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
06:24:02 <cyphase> \o/
06:24:20 <cyphase> had to get it in before 24hrs had passed at least
06:26:59 <int-e> xerox: Heh, I don't make the order though.
06:28:29 chomwitt joins (~chomwitt@2a02:587:dc0d:3700:12c3:7bff:fe6d:d374)
06:29:42 × deadmarshal quits (~deadmarsh@95.38.116.82) (Ping timeout: 260 seconds)
06:31:55 <xerox> int-e: anything fun from your take on it today?
06:33:46 <int-e> too much cut&paste
06:34:10 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
06:34:51 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 252 seconds)
06:36:26 k60``` joins (~user@94.25.169.9)
06:38:54 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 268 seconds)
06:41:22 × k60``` quits (~user@94.25.169.9) (Ping timeout: 268 seconds)
06:43:37 × genieliu quits (~genieliu@103.37.140.38) (Ping timeout: 250 seconds)
06:43:50 hololeap joins (~hololeap@user/hololeap)
06:46:46 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
06:48:06 hololeap joins (~hololeap@user/hololeap)
06:54:12 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
06:55:30 genieliu joins (~genieliu@103.37.140.24)
06:57:54 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
07:00:15 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:02:36 deadmarshal joins (~deadmarsh@95.38.116.82)
07:05:22 michalz joins (~michalz@185.246.204.61)
07:05:26 × genieliu quits (~genieliu@103.37.140.24) (Ping timeout: 268 seconds)
07:06:18 curiousgay joins (~curiousga@77-120-141-90.kha.volia.net)
07:07:02 × deadmarshal quits (~deadmarsh@95.38.116.82) (Ping timeout: 260 seconds)
07:08:49 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
07:09:01 × dwt_ quits (~dwt_@c-98-200-58-177.hsd1.tx.comcast.net) (Ping timeout: 240 seconds)
07:09:33 genieliu joins (~genieliu@103.37.140.38)
07:09:50 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:10:49 deadmarshal joins (~deadmarsh@95.38.116.82)
07:14:05 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 252 seconds)
07:19:36 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
07:27:08 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
07:29:30 pfurla joins (~pfurla@2804:14d:5c81:4104:25b5:2708:65a9:4e7d)
07:31:31 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 250 seconds)
07:32:02 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
07:32:17 chexum joins (~quassel@gateway/tor-sasl/chexum)
07:33:05 lortabac joins (~lortabac@2a01:e0a:541:b8f0:9c45:ef7f:f3cf:1dd6)
07:33:47 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
07:34:15 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
07:34:45 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
07:36:04 hololeap joins (~hololeap@user/hololeap)
07:38:11 × hololeap quits (~hololeap@user/hololeap) (Client Quit)
07:38:26 hololeap joins (~hololeap@user/hololeap)
07:39:59 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
07:41:37 waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
07:41:51 mncheck joins (~mncheck@193.224.205.254)
07:42:18 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:42:39 bollu joins (uid233390@id-233390.helmsley.irccloud.com)
07:43:24 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
07:43:43 featurebug joins (~Username@49.205.122.91)
07:44:42 jakalx parts (~jakalx@base.jakalx.net) ()
07:44:50 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 260 seconds)
07:51:24 gehmehgeh joins (~user@user/gehmehgeh)
07:56:03 × x88x88x quits (~x88x88x@149.28.53.172) (Remote host closed the connection)
07:56:21 × kennyd quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
07:58:05 × mvk quits (~mvk@2607:fea8:5cdd:f000::9788) (Ping timeout: 252 seconds)
07:58:37 x88x88x joins (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb)
08:00:21 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26) (Remote host closed the connection)
08:00:45 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
08:01:59 × featurebug quits (~Username@49.205.122.91) (Quit: Going offline, see ya! (www.adiirc.com))
08:02:59 × curiousgay quits (~curiousga@77-120-141-90.kha.volia.net) (Quit: Leaving)
08:03:15 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds)
08:05:52 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 268 seconds)
08:05:55 × x88x88x quits (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) (Remote host closed the connection)
08:06:06 vpan joins (~0@212.117.1.172)
08:07:03 user01 parts (~aj@154.0.137.32) ()
08:10:37 x88x88x joins (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb)
08:14:17 jakalx joins (~jakalx@base.jakalx.net)
08:18:17 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
08:22:51 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 250 seconds)
08:23:23 Techcable joins (~Techcable@168.235.93.147)
08:23:44 dwt_ joins (~dwt_@c-98-198-103-176.hsd1.tx.comcast.net)
08:25:04 chele joins (~chele@user/chele)
08:27:16 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:28:01 Pickchea joins (~private@user/pickchea)
08:36:10 × deadmarshal quits (~deadmarsh@95.38.116.82) (Ping timeout: 260 seconds)
08:41:21 deadmarshal joins (~deadmarsh@95.38.116.82)
08:44:23 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
08:44:52 notzmv joins (~zmv@user/notzmv)
08:51:44 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
08:55:35 acidjnk_new joins (~acidjnk@p200300d0c7271e96496b0bacdae081f8.dip0.t-ipconnect.de)
08:56:42 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 260 seconds)
08:59:05 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:00:05 cfricke joins (~cfricke@user/cfricke)
09:00:20 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
09:00:46 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26)
09:01:09 k60``` joins (~user@94.25.169.9)
09:06:12 <aplainzetakind> How do I silence a warning at a particular location in code?
09:06:17 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26) (Ping timeout: 252 seconds)
09:06:28 <dminuoso> You cant.
09:06:36 <aplainzetakind> :(
09:06:46 <dminuoso> best you can do is set {-# OPTIONS_GHC -fno-warn-foo #-} module wide
09:06:50 <dminuoso> Or via .cabal file
09:07:17 <dminuoso> There was an issue about it in GHC about 10 years ago that was bikeshedded fairly quickly
09:08:10 <aplainzetakind> OPTIONS_GHC will do then.
09:08:11 <aplainzetakind> Thanks.
09:08:31 <aplainzetakind> And incomplete-patterns misfires sometimes right?
09:09:00 <dminuoso> aplainzetakind: With lower your guards it have substantially smaller false negatives
09:09:12 <dminuoso> So it depends a bit on your GHC version
09:09:25 <dminuoso> If you're still running on relatively old versions, you dont have LYG implemented yet.
09:09:49 <dminuoso> And back then, the incomplete patterns was horribly broken - few things have produced as many bug reports as that.
09:10:09 <aplainzetakind> I'm on 8.10
09:10:28 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
09:10:30 <dminuoso> It was a gradual process, I think you'll have to ask the GHC folks how far it was in 8.10
09:10:47 <dminuoso> If memory serves right, it's largely implemented in 9.x
09:10:59 <aplainzetakind> OK then. I'll shut it up too.
09:17:34 allbery_b joins (~geekosaur@xmonad/geekosaur)
09:17:34 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
09:17:37 allbery_b is now known as geekosaur
09:19:15 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 268 seconds)
09:23:55 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
09:29:22 × genieliu quits (~genieliu@103.37.140.38) (Ping timeout: 260 seconds)
09:32:57 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
09:34:03 genieliu joins (~genieliu@103.37.140.24)
09:35:03 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
09:36:42 × mstruebing quits (~maex@2001:41d0:8:93c7::1) (Read error: Connection reset by peer)
09:37:32 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 240 seconds)
09:38:03 × deadmarshal quits (~deadmarsh@95.38.116.82) (Ping timeout: 250 seconds)
09:38:37 × vgtw quits (~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) (Ping timeout: 240 seconds)
09:42:54 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
09:43:33 deadmarshal joins (~deadmarsh@95.38.116.82)
09:47:47 × deadmarshal quits (~deadmarsh@95.38.116.82) (Ping timeout: 250 seconds)
09:48:18 teo joins (~teo@user/teo)
09:48:37 CiaoSen joins (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
09:49:09 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
09:49:58 vgtw joins (~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se)
09:53:01 × ptrcmd quits (~ptrcmd@user/ptrcmd) (Remote host closed the connection)
09:54:23 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 268 seconds)
10:00:29 son0p joins (~ff@2800:484:1d81:b700:d40b:900:b387:320)
10:02:51 deadmarshal joins (~deadmarsh@95.38.116.82)
10:04:45 cosimone joins (~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3)
10:05:16 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
10:05:50 × puke quits (~puke@user/puke) (Read error: Connection reset by peer)
10:06:04 puke joins (~puke@user/puke)
10:06:25 × k60``` quits (~user@94.25.169.9) (Ping timeout: 250 seconds)
10:07:01 <dminuoso> Mmm, is there a combinator like `IO a -> (a -> IO b) -> (SomeException -> IO b) -> IO b` in base that Im not seeing?
10:08:09 <merijn> catch? :p
10:08:12 <merijn> :t catch
10:08:13 <lambdabot> Exception e => IO a -> (e -> IO a) -> IO a
10:08:21 <merijn> I mean, you need 1 extra step
10:08:30 <merijn> But that seems fairbairn threshold-y :p
10:09:00 <dminuoso> Mmm
10:09:43 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 252 seconds)
10:10:27 <dminuoso> I mean I know I can do `f a h e = fmap (either id id) $ (Left <$> a) `catch` (fmap Right . h)
10:10:30 <dminuoso> Or some such
10:10:39 <dminuoso> merijn: Is it, really?
10:10:50 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
10:11:14 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
10:11:50 <dminuoso> The naive attempt at doing `f =<< x `catch` f` is not the same.
10:12:11 <dminuoso> I want to catch an exception on `x`, but on if it comes from `f`, and then simply *not* proceed.
10:12:23 <dminuoso> The IO exception version of `maybe`, if you want
10:12:34 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
10:12:40 <merijn> only if it comes from 'f'?
10:12:52 <dminuoso> Sorry, not if it comes from `f`
10:13:15 <merijn> I mean... "\x f h -> (x `catch` h) >>= f"?
10:13:27 <dminuoso> merijn: Yeah still not the same.
10:13:32 <merijn> oh, wait, yeah
10:13:42 <int-e> ((Left <$> a) `catch` (fmap Right . e)) >>= either h pure
10:13:45 <dminuoso> You have to do the above and fiddle an Either through
10:13:47 <dminuoso> yeah
10:14:11 <dminuoso> Naively it seems this would be a very useful or desirable thing
10:14:37 <int-e> so yeah, icky enough to warrant a definition... but maybe too specialized to warrant inclusion in base
10:15:13 <int-e> (I realize it's perfect for CPS style programming, but I think many people don't find CPS natural at all)
10:16:11 <dminuoso> % exception e h a = ((Left <$> a) `catch` (fmap Right . e)) >>= either h pure
10:16:11 <yahb> dminuoso:
10:16:13 <dminuoso> % :t exception
10:16:13 <yahb> dminuoso: Exception e => (e -> IO b) -> (a -> IO b) -> IO a -> IO b
10:17:34 <int-e> % :t handle
10:17:34 <yahb> int-e: Exception e => (e -> IO a) -> IO a -> IO a
10:17:36 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
10:17:38 <int-e> % :t catch
10:17:38 <yahb> int-e: Exception e => IO a -> (e -> IO a) -> IO a
10:17:42 <int-e> :-/
10:18:37 zaquest joins (~notzaques@5.130.79.72)
10:18:49 <dminuoso> You could even define handle/catch in terms of exception, as `handle h = exception h pure`
10:19:03 <dminuoso> int-e: It seems to fit more in line with `either`, `maybe` and those operators.
10:19:34 <dminuoso> Im not sure this about CPS programming.
10:20:06 <dminuoso> In some traditional languages you could have an exception handler that simply uses a return() or throws an exception itself to shortcircuit the rest of the function. But we cant do this in Haskell
10:20:26 <int-e> dminuoso: you're providing a continuation for the exception case and another one for the successful case
10:20:30 <dminuoso> Think its the other way around, you have to use CPS to get the effect of `exception` without its existance
10:21:20 <int-e> `catch` happens to be what the RTS implements
10:21:21 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
10:21:35 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
10:21:42 <dminuoso> int-e: Do you think its more idiomatic to do something like `r <- handle (const (pure Nothing)) e; case r of Nothing -> closeSocket ...; Just x -> proceed ...`?
10:22:13 <dminuoso> Given how with Maybe equivalent we'd just write `maybe closeSocket proceed x` instead
10:22:36 <dminuoso> That "CPS" style seems in line with what we usually write
10:22:44 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
10:22:48 gehmehgeh joins (~user@user/gehmehgeh)
10:22:52 <dminuoso> Oh, and I was missing some `Just <$> e` in that
10:23:53 <int-e> dminuoso: I have no opinion... superficially, `closeSocket` sounds like a job for `bracket`
10:24:19 <int-e> well, I have an opinion which is that exception handling is unidiomatic no matter how you do it :P
10:24:32 <dminuoso> int-e: Sure. I mean specifically Im using websockets, and I want to close the socket with a particular error code.
10:25:01 <dminuoso> And a file not exist exception on the very first IO action would produce something akin to a 404, whereas further file not exist exceptions would be something akin to 500
10:25:42 mc47 joins (~mc47@xmonad/TheMC47)
10:25:50 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 260 seconds)
10:27:05 × Pickchea quits (~private@user/pickchea) (Ping timeout: 268 seconds)
10:27:17 <dminuoso> So for bracket to work here, Id have to catch the first file not exist exception, and rethrow as some `FirstFileNotFoundException`
10:28:54 <int-e> did I mention that I was being superficial
10:29:02 × genieliu quits (~genieliu@103.37.140.24) (Ping timeout: 240 seconds)
10:29:47 <dminuoso> Fair enough. :)
10:32:50 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 260 seconds)
10:36:25 <int-e> dminuoso: Oh, actually... in that `exception`, should `e :: e -> IO b` be run as an exception handler (async exceptions blocked) or as ordinary code? because we seem to differ on that...
10:37:26 <dminuoso> int-e: exception handler with async exceptions blocked.
10:37:39 <int-e> (basically, if you want to cope with async exceptions, `handle (const (pure Nothing))` is almost never going to be the right thing)
10:38:04 <dminuoso> I adopt the unliftio/safe-exceptions mind model that async exceptions should, in general, never be blocked.
10:38:07 <dminuoso> Or recovered from.
10:38:32 <int-e> but you are in a resource cleanup scenario, aren't you?
10:38:59 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
10:40:16 <dminuoso> So what I have is that some client opens a websocket at /foo/1, and my software will deserialize the file files/1.json, and do something with it. But on the occasion that file does not exist, I want to reject the websocket from the get go. to avoid a toctou race, I will simply use eitherDecodeFileStrict' from aeson
10:41:10 <int-e> Oh maybe not. You don't need more than `catch` in that case because the handler should just rethrow the exception (so there's no return type to worry about; execution doesn't continue)
10:41:15 ProfSimm joins (~ProfSimm@87.227.196.109)
10:41:20 <dminuoso> handler pid pending = do { f =<< decode pid; handle f =<< acceptRequest pending }
10:41:26 <dminuoso> something along these lines
10:41:52 <dminuoso> Uh, hold on
10:42:03 <dminuoso> handler pid pending = do { f <- process =<< decode pid; handle f =<< acceptRequest pending }
10:42:11 <dminuoso> Now the key is, `process` will also access the file system
10:42:19 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
10:42:51 <dminuoso> And depending on whether decode or whether process throws a file not exist exception, I want the socket closed differently
10:43:10 <dminuoso> (or rather I mean, the pending request will be rejected differently)
10:43:21 <dminuoso> but this distinction is not relevant
10:43:44 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 268 seconds)
10:43:57 × vgtw quits (~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) (Quit: ZNC - https://znc.in)
10:44:12 mmhat joins (~mmh@55d44db9.access.ecotel.net)
10:51:04 jonathanx joins (~jonathan@dyn-2-sc.cdg.chalmers.se)
10:51:23 vgtw joins (~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se)
10:53:05 <int-e> dminuoso: this is kind of horrible, but perhaps the least invasive approach with respect to exception handling would be to track how far you've progressed in a mutable variable (IOVar)?
10:53:57 × vgtw quits (~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) (Client Quit)
10:55:18 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
10:55:55 <dminuoso> int-e: Mmm, that seems a bit overkill too
10:55:57 <dminuoso> https://gist.github.com/dminuoso/66872130a9312fb7106afc1662c90124
10:56:05 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:56:11 <dminuoso> So this is quickly written sketch (not tested yet, might be typos in there)
10:56:13 <dminuoso> of my intent
10:59:01 <dminuoso> Guess the surprising thing is that all our exception recovery join the branches back together
10:59:21 <dminuoso> both the exception and happy branch
10:59:43 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 250 seconds)
11:00:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
11:01:24 <int-e> except when the exception is rethrown (which a bunch of things actually do)
11:02:28 × pfurla quits (~pfurla@2804:14d:5c81:4104:25b5:2708:65a9:4e7d) (Quit: gone to sleep. ZZZzzz…)
11:04:21 <vpan> https://cabal.readthedocs.io/en/3.6/intro.html#similar-systems says there are 5000 packages on hackage, while https://hackage.haskell.org/packages/browse reports 16248. Assuming 16k is the correct number of packages currently on hackage, 3x looks like a significant understatement. Should this be fixed or am I the only one bothered by that? :)
11:05:07 Pickchea joins (~private@user/pickchea)
11:08:51 × phma quits (~phma@host-67-44-209-94.hnremote.net) (Read error: Connection reset by peer)
11:10:02 phma joins (phma@2001:5b0:2172:c188:a9eb:c095:74b0:11cc)
11:10:05 <int-e> % :t let f a h e = join (fmap h a `catch` (fmap pure . e)) in f
11:10:05 <yahb> int-e: Exception e => IO a1 -> (a1 -> IO a2) -> (e -> IO a2) -> IO a2
11:11:11 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
11:12:01 <int-e> dminuoso: ^^ no clue whether this is better in any objective way, but it's free of Either
11:12:43 × CiaoSen quits (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
11:16:25 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 268 seconds)
11:16:28 lavaman joins (~lavaman@98.38.249.169)
11:18:53 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
11:20:54 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
11:24:07 __monty__ joins (~toonn@user/toonn)
11:24:52 k60``` joins (~user@94.25.169.9)
11:29:24 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
11:34:18 × sprout quits (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95) (Ping timeout: 268 seconds)
11:34:19 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:38:24 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 276 seconds)
11:39:02 gehmehgeh joins (~user@user/gehmehgeh)
11:41:10 sprout joins (~quassel@2a02:a467:ccd6:1:2835:2428:a8d4:1d95)
11:42:08 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
11:44:37 × Codaraxis quits (~Codaraxis@user/codaraxis) (Remote host closed the connection)
11:45:22 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:46:37 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 268 seconds)
11:48:24 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
11:57:18 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
12:01:32 × jonathanx quits (~jonathan@dyn-2-sc.cdg.chalmers.se) (Ping timeout: 240 seconds)
12:02:45 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
12:03:10 __monty__ joins (~toonn@user/toonn)
12:09:09 × sweater quits (~sweater@206.81.18.26) (Remote host closed the connection)
12:09:29 sweater joins (~sweater@206.81.18.26)
12:12:54 abrantesasf joins (~abrantesa@187.36.170.211)
12:13:48 × sweater quits (~sweater@206.81.18.26) (Client Quit)
12:13:59 sweater joins (~sweater@206.81.18.26)
12:14:29 × sweater quits (~sweater@206.81.18.26) (Client Quit)
12:14:42 sweater joins (~sweater@206.81.18.26)
12:18:47 Jing joins (~hedgehog@2604:a840:3::1001)
12:20:23 alx741 joins (~alx741@186.178.108.192)
12:21:10 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
12:22:25 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
12:27:52 vgtw joins (~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se)
12:31:52 xkuru joins (~xkuru@user/xkuru)
12:36:23 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
12:36:44 jgeerds joins (~jgeerds@55d4ac73.access.ecotel.net)
12:37:51 × alx741 quits (~alx741@186.178.108.192) (Ping timeout: 252 seconds)
12:40:53 × k60``` quits (~user@94.25.169.9) (Ping timeout: 268 seconds)
12:41:53 dsrt^ joins (~dsrt@wsip-98-188-240-142.mc.at.cox.net)
12:47:37 × ProfSimm quits (~ProfSimm@87.227.196.109) (Quit: Client closed)
12:48:48 × mncheck quits (~mncheck@193.224.205.254) (Remote host closed the connection)
12:53:15 × deadmarshal quits (~deadmarsh@95.38.116.82) (Ping timeout: 252 seconds)
12:53:46 deadmarshal joins (~deadmarsh@95.38.116.82)
12:53:51 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:00:26 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
13:01:11 genieliu joins (~genieliu@111.193.167.10)
13:02:10 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 260 seconds)
13:03:13 × jgeerds quits (~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 250 seconds)
13:06:37 xkuru joins (~xkuru@user/xkuru)
13:08:38 × xff0x quits (~xff0x@2001:1a81:537e:3f00:d5b4:3c9d:ec95:16b3) (Ping timeout: 268 seconds)
13:09:01 × genieliu quits (~genieliu@111.193.167.10) (Ping timeout: 252 seconds)
13:09:16 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
13:09:41 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
13:10:05 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 265 seconds)
13:11:59 genieliu joins (~genieliu@111.193.167.10)
13:14:06 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
13:15:05 xff0x joins (~xff0x@2001:1a81:537e:3f00:d5b4:3c9d:ec95:16b3)
13:17:18 k60``` joins (~user@94.25.169.9)
13:17:21 lavaman joins (~lavaman@98.38.249.169)
13:19:36 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
13:21:46 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
13:23:28 × Morrow quits (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
13:24:17 <dminuoso> int-e: You were absolutely right. My head was stuck in CPS.
13:24:21 <dminuoso> For no good reason.
13:24:38 slowButPresent joins (~slowButPr@user/slowbutpresent)
13:24:57 <dminuoso> All I needed was `getManifest :: Int -> IO Manifest; getManifest pid = handle noSuchFile ...`
13:25:06 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
13:28:46 × deadmarshal quits (~deadmarsh@95.38.116.82) (Ping timeout: 260 seconds)
13:31:35 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving)
13:31:38 DNH joins (~DNH@2a02:8108:1100:16d8:e582:2d42:b0b2:720b)
13:33:09 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
13:33:11 geekosaur joins (~geekosaur@xmonad/geekosaur)
13:37:44 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
13:38:30 alx741 joins (~alx741@186.178.108.192)
13:38:35 ddb joins (~ddb@ipv6two.tilde.club)
13:39:50 deadmarshal joins (~deadmarsh@95.38.116.82)
13:40:35 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3)
13:40:56 shriekingnoise joins (~shrieking@186.137.144.80)
13:40:58 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
13:47:08 × genieliu quits (~genieliu@111.193.167.10) (Quit: Lost terminal)
13:47:08 jakalx joins (~jakalx@base.jakalx.net)
13:47:45 pfurla joins (~pfurla@2804:14d:5c81:4104:654d:199b:4253:3c19)
13:48:10 sluigi joins (~sluigi@18.31.9.184)
13:49:38 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
13:51:26 <raehik> What's the difference between Proxy# and Proxy? I know of the words "boxing/unboxing", but I don't really know what they mean
13:51:42 <raehik> I can see that Proxy# is more like Void, it can't be constructed on the Value level
13:52:31 cosimone` joins (~user@93-47-230-227.ip115.fastwebnet.it)
13:52:40 × cosimone quits (~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3) (Quit: ERC (IRC client for Emacs 27.1))
13:54:01 max22- joins (~maxime@2a01cb0883359800d7eef028cd7b4d10.ipv6.abo.wanadoo.fr)
13:56:59 timCF joins (~timCF@m91-129-100-224.cust.tele2.ee)
13:57:43 emf joins (~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com)
13:57:58 <timCF> Hello! Does anyone know what's the purpose of irrefutable patterns in Haskell? I think I do understand how it works, but I don't understand why it's needed and what are good use cases for this
13:58:38 × max22- quits (~maxime@2a01cb0883359800d7eef028cd7b4d10.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
14:01:05 × xsperry quits (~xs@user/xsperry) (Remote host closed the connection)
14:01:57 × sluigi quits (~sluigi@18.31.9.184) (Ping timeout: 256 seconds)
14:02:54 × emf quits (~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com) (Ping timeout: 268 seconds)
14:03:07 × sayola quits (~vekto@dslb-092-072-095-186.092.072.pools.vodafone-ip.de) (Read error: Connection reset by peer)
14:03:34 <boxscape> raehik: proxy# is a value of type Proxy#. It's just an alternative to Proxy that has zero runtime cost
14:03:59 <geekosaur> timCF, they're lazy patterns instead of strict
14:04:02 emf joins (~emf@2620:10d:c091:480::1:ff4b)
14:04:40 <timCF> geekosaur: I thought data and functions in Haskell are lazy by default anyway?
14:05:10 <timCF> I mean not only functions, any expressions (like pattern matching)
14:06:00 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26)
14:06:09 <geekosaur> pattern matching is strict by default at top level (but not in let). *something* has to be strict or no evaluation would ever happen at all
14:06:33 jkaye joins (~jkaye@2601:281:8300:7530:bc2d:ca62:1f76:4faa)
14:06:40 <boxscape> e.g. `f (x, y) = ()` is strict in its argument, i.e. if `x` is bottom, then so is `f x`.
14:07:02 × acidjnk_new quits (~acidjnk@p200300d0c7271e96496b0bacdae081f8.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
14:07:27 <timCF> got it, thanks!
14:08:12 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
14:10:15 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26) (Ping timeout: 252 seconds)
14:12:39 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
14:14:12 × timCF quits (~timCF@m91-129-100-224.cust.tele2.ee) (Quit: leaving)
14:15:41 × abrantesasf quits (~abrantesa@187.36.170.211) (Remote host closed the connection)
14:18:04 abrantesasf joins (~abrantesa@187.36.170.211)
14:19:29 × dsrt^ quits (~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Ping timeout: 250 seconds)
14:23:23 ub1 joins (~Thunderbi@p548c998b.dip0.t-ipconnect.de)
14:23:24 ubert1 joins (~Thunderbi@p200300ecdf1abb7bed76e28c4fd34537.dip0.t-ipconnect.de)
14:23:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
14:24:46 × ub quits (~Thunderbi@p200300ecdf0ba2c0b11d357caa48ef17.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
14:25:14 × ubert quits (~Thunderbi@p200300ecdf0ba2c03cbcafca2ab2631d.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
14:25:14 ub1 is now known as ubert
14:31:31 neverfindme joins (~hayden@158.123.160.43)
14:34:37 × abrantesasf quits (~abrantesa@187.36.170.211) (Read error: Connection reset by peer)
14:34:37 × Jing quits (~hedgehog@2604:a840:3::1001) (Remote host closed the connection)
14:36:40 × chele quits (~chele@user/chele) (Quit: Leaving)
14:38:52 Jing joins (~hedgehog@2604:a840:3::1001)
14:39:22 kupi joins (uid212005@id-212005.hampstead.irccloud.com)
14:40:05 fryguybob joins (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com)
14:43:22 abrantesasf joins (~abrantesa@187.36.170.211)
14:43:42 × abrantesasf quits (~abrantesa@187.36.170.211) (Remote host closed the connection)
14:48:16 dsrt^ joins (~dsrt@wsip-98-188-240-142.mc.at.cox.net)
14:50:32 × vpan quits (~0@212.117.1.172) (Ping timeout: 240 seconds)
14:55:42 max22- joins (~maxime@2a01cb0883359800942e2037ffd67664.ipv6.abo.wanadoo.fr)
15:01:22 × Jing quits (~hedgehog@2604:a840:3::1001) (Remote host closed the connection)
15:01:24 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
15:01:24 maplike joins (~maplike@31.209.100.216)
15:01:42 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:9c45:ef7f:f3cf:1dd6) (Quit: WeeChat 2.8)
15:01:57 Jing joins (~hedgehog@2604:a840:3::1001)
15:04:26 × pfurla quits (~pfurla@2804:14d:5c81:4104:654d:199b:4253:3c19) (Quit: gone to sleep. ZZZzzz…)
15:05:56 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
15:06:53 xsperry joins (~xs@user/xsperry)
15:08:11 mimmy joins (~mimmy@184.94.118.194)
15:08:57 <raehik> boxscape: sry for delay, thank you. I will keep it in mind when I need to do type ferrying from now, I only knew about Proxy
15:09:05 <maplike> can someone show a canonical or just concise (very short yet illustrative) example, that is not _factorial_, of first solving with corecursion/recursion, then ana/cata and then hylo?
15:10:02 × alx741 quits (~alx741@186.178.108.192) (Ping timeout: 260 seconds)
15:14:24 <xerox> is there a cabal command to list all possible targets?
15:15:09 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
15:17:01 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
15:21:35 <yushyin> something like that would be nice, but there is a target syntax for specific modules/files and listing _all_ wouldn't be that useful i guess?
15:22:57 alx741 joins (~alx741@186.178.109.174)
15:24:01 Sgeo joins (~Sgeo@user/sgeo)
15:24:32 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
15:26:48 nickdaly-away is now known as nickdaly
15:26:53 × ph88 quits (~ph88@ip5f5af068.dynamic.kabel-deutschland.de) (Quit: Leaving)
15:27:44 fr33domlover joins (~fr33@2.55.41.192)
15:28:14 × alx741 quits (~alx741@186.178.109.174) (Ping timeout: 260 seconds)
15:28:29 InternetCitizen joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
15:31:02 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
15:31:42 × EvanR quits (~evan@user/evanr) (Remote host closed the connection)
15:31:59 EvanR joins (~evan@2600:1700:ba69:10:1e6b:60f7:fab1:30bf)
15:32:17 × EvanR quits (~evan@2600:1700:ba69:10:1e6b:60f7:fab1:30bf) (Changing host)
15:32:17 EvanR joins (~evan@user/evanr)
15:32:43 mimmy_ joins (~mimmy@66.115.145.34)
15:33:07 × euandreh quits (~euandreh@2804:14c:33:9fe5:9808:86a6:acca:9c5) (Ping timeout: 252 seconds)
15:33:32 × mimmy quits (~mimmy@184.94.118.194) (Ping timeout: 240 seconds)
15:34:39 Guest|14 joins (~Guest|14@201-43-221-14.dsl.telesp.net.br)
15:34:49 doyougnu joins (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
15:34:54 × Guest|14 quits (~Guest|14@201-43-221-14.dsl.telesp.net.br) (Client Quit)
15:35:02 euandreh joins (~euandreh@2804:14c:33:9fe5:f0cf:5664:8ee5:8e87)
15:37:43 × mimmy_ quits (~mimmy@66.115.145.34) (Ping timeout: 250 seconds)
15:39:02 mimmy_ joins (~mimmy@184.94.118.194)
15:40:47 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
15:41:51 alx741 joins (~alx741@157.100.93.160)
15:41:56 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
15:45:40 <boxscape> raehik: there's also something to be said about using `proxy a` instead of either `Proxy a` or `Proxy# a` - that allows the caller of the function to supply any (lifted) type. You lose out on the zero runtime cost though (unless you introduce levity polymorphism I think... but that's probably not worth it)
15:48:19 × neverfindme quits (~hayden@158.123.160.43) (Ping timeout: 250 seconds)
15:49:00 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26)
15:51:26 neverfindme joins (~hayden@158.123.160.43)
15:51:26 × neverfindme quits (~hayden@158.123.160.43) (Remote host closed the connection)
15:51:43 neverfindme joins (~hayden@158.123.160.43)
15:59:20 zincy_ joins (~zincy@host86-151-99-97.range86-151.btcentralplus.com)
15:59:48 abrantesasf joins (~abrantesa@187.36.170.211)
16:00:14 ptrcmd joins (~ptrcmd@user/ptrcmd)
16:03:09 × zincy_ quits (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection)
16:05:35 <oats> https://www.youtube.com/watch?v=nY1BCv3xn24
16:05:42 <oats> this is a really fascinating talk
16:14:23 <oats> I don't think I've ever seen a non-fascinating talk from George Wilson
16:14:38 timCF joins (~timCF@m91-129-100-224.cust.tele2.ee)
16:19:10 × dsrt^ quits (~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Ping timeout: 256 seconds)
16:19:14 <timCF> Hello! I'm leaning "singletons" design patterns from tutorial made by jle` where he is using a lot of "strange" syntax like `data Door :: DoorState -> Type where; UnsafeMkDoor :: { doorMaterial :: String } -> Door s` in examples. I'm thinking what's the point of using "data" expression where clearly could be used parametrized "newtype" which is more efficient for free, optimized by GHC (I guess) and have
16:19:20 <timCF> free stuff like "coerce"?
16:20:07 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
16:20:33 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:20:58 darchite` joins (~user@2a00:23c6:3584:df00:7dec:bf13:8fa:748c)
16:22:06 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:22:58 × ubert1 quits (~Thunderbi@p200300ecdf1abb7bed76e28c4fd34537.dip0.t-ipconnect.de) (Remote host closed the connection)
16:23:59 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
16:26:59 <geekosaur> GADTs are not normal "data" types
16:28:20 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26) (Remote host closed the connection)
16:28:22 <geekosaur> in particular, that describes a type which is "tagged" by a type "s"
16:28:50 <geekosaur> (I think you could do that particular case with a non-GADT, but it would still need to be a "data" to accomplish that tagging)
16:29:26 <timCF> geekosaur: I mean why not `newtype Door (a :: DoorState) = Door String`?
16:29:36 <geekosaur> and part of the point of the tagging is you do not want to simply coerce values
16:29:49 <geekosaur> it's not a Door String, it's a Door DoorState
16:29:54 lortabac joins (~lortabac@2a01:e0a:541:b8f0:7701:94ac:10aa:c878)
16:30:25 <timCF> geekosaur: and then in somewhere in code `let door = Door @'Open "Oak"`
16:30:31 <geekosaur> and you do *not* want to be able to cheaply coerce to different DoorState values, since the point of DoorState is to keep you from changing the state under the wrong conditions
16:30:51 <geekosaur> jle`'s stuff should explain this, I've been through it a few times
16:31:31 dsrt^ joins (~dsrt@wsip-98-188-240-142.mc.at.cox.net)
16:32:06 <geekosaur> I'm not great with type level stuff but the DoorState examples at least made sense to me
16:34:46 <timCF> geekosaur: Yes, examples totally make sense, I'm just trying to understand reasoning behind of using "data" instead of "newtype" in examples. Newtypes also could have phantom type and kind parameters like data.
16:36:01 PotatoHatsue joins (~berberman@2001:470:69fc:105::b488)
16:38:10 <geekosaur> usually you have more than one parameter
16:38:53 <geekosaur> and you keep showing simpler ways to do things. but the whole point of this is to *not* be simple, but to force you to jump through the right hoops that maintain invariants
16:39:25 <geekosaur> you wouldn't need to do this with type level stuff at all otherwise
16:43:12 lbseale joins (~ep1ctetus@user/ep1ctetus)
16:43:52 × oats quits (~thomas@user/oats) (Quit: until later, my friends)
16:44:09 <timCF> I guess, I have to try stuff like `newtype Door (a :: DoorState) = UnsafeMkDoor { doorMaterial :: String }` instead of similar "data" expression and see why it's not working on actual examples
16:44:35 oats joins (~thomas@user/oats)
16:45:38 <timCF> If it's even there is "coerce" for newtypes - I just don't use it, and use proper type-level computations instead, not sure will it be any difference then
16:47:03 × cosimone` quits (~user@93-47-230-227.ip115.fastwebnet.it) (Ping timeout: 250 seconds)
16:47:18 smartin joins (~Thunderbi@88.135.18.171)
16:47:30 cosimone` joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
16:47:45 × oats quits (~thomas@user/oats) (Client Quit)
16:48:03 oats joins (~thomas@user/oats)
16:50:45 × oats quits (~thomas@user/oats) (Client Quit)
16:51:14 oats joins (~thomas@user/oats)
16:51:28 × oats quits (~thomas@user/oats) (Remote host closed the connection)
16:51:51 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
16:51:52 oats joins (~thomas@user/oats)
16:53:11 × oats quits (~thomas@user/oats) (Client Quit)
16:54:10 <Franciman> see you!
16:54:12 Franciman parts (~Franciman@mx1.fracta.dev) (WeeChat 3.3)
16:54:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
16:55:57 oats joins (~thomas@user/oats)
16:56:48 × cosimone` quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 268 seconds)
16:57:04 jakalx joins (~jakalx@base.jakalx.net)
16:59:10 <oats> https://nitter.net/GabriellaG439/status/1465908026662010882
17:01:07 × emf quits (~emf@2620:10d:c091:480::1:ff4b) (Ping timeout: 252 seconds)
17:01:17 <geekosaur> timCF, if it lets you openj a door without unlocking it first, it's failing to maintain the invariant in jle`'s example
17:01:48 × dsrt^ quits (~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Remote host closed the connection)
17:04:02 × abrantesasf quits (~abrantesa@187.36.170.211) (Remote host closed the connection)
17:04:11 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
17:04:11 lavaman joins (~lavaman@98.38.249.169)
17:06:00 <jle`> timCF: i don't think in this case there's any reason to not use a newtype in this case, it's not really a GADT, it's just using GADT syntax
17:06:32 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:06:52 <jle`> timCF: i think the idea was to be more "general", in many real cases you might have more than one field
17:07:52 <timCF> geekosaur: jle`: thanks for reply! Yes, I'm using product types for sure, but 50% of my types are usually just newtypes, which I want to continue to use with singletons as well.
17:08:41 <geekosaur> I mentioned the multiple fields thing earlier
17:08:57 <jle`> yup yeah, there is no reason to use data over newtype in that case. i think maybe i originally wrote the tutorial with a data type with multiple fields and removed a field to simplify it
17:09:09 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
17:11:01 <sprout> https://github.com/egel-lang/aoc-2021/blob/main/day10/task2.eg <- day 10 task 2 of advent of code in egel
17:12:05 <timCF> jle`: thanks for tutorial as well! I've used phantom kind parameters for a while, but always had a trouble in lifting/unlifting stuff between type, kind and value levels.. Usually used type class approach, but it's very ugly to use
17:12:45 <jle`> np!
17:13:19 <jle`> i think i have to update the tutorial for the major version bump of singletons that happened last year
17:13:31 <jle`> where Sing is now an injective type family instead of a data family
17:13:40 <jle`> two years ago?
17:13:58 <jle`> the ecosystem marches on
17:14:42 × shriekingnoise quits (~shrieking@186.137.144.80) (Remote host closed the connection)
17:16:58 shriekingnoise joins (~shrieking@186.137.144.80)
17:17:47 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
17:17:50 × phma quits (phma@2001:5b0:2172:c188:a9eb:c095:74b0:11cc) (Read error: Connection reset by peer)
17:17:51 burnsidesLlama joins (~burnsides@dhcp168-019.wadham.ox.ac.uk)
17:18:10 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26)
17:19:15 phma joins (phma@2001:5b0:210f:6be8:16f7:aafd:70ba:5696)
17:19:39 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
17:21:03 Pickchea joins (~private@user/pickchea)
17:22:28 × alx741 quits (~alx741@157.100.93.160) (Quit: alx741)
17:23:38 alx741 joins (~alx741@181.199.42.79)
17:24:22 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
17:27:38 × xff0x quits (~xff0x@2001:1a81:537e:3f00:d5b4:3c9d:ec95:16b3) (Ping timeout: 268 seconds)
17:27:48 × k60``` quits (~user@94.25.169.9) (Remote host closed the connection)
17:28:04 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:7701:94ac:10aa:c878) (Quit: WeeChat 2.8)
17:28:25 xff0x joins (~xff0x@2001:1a81:537e:3f00:6b1a:2a67:475e:9b5f)
17:29:05 k60``` joins (~user@static.100.218.46.78.clients.your-server.de)
17:30:07 nvmd joins (~nvmd@user/nvmd)
17:32:23 × Guest66 quits (~textual@98.13.6.21) (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:32:58 CiaoSen joins (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
17:34:22 Guest66 joins (~textual@98.13.6.21)
17:35:07 × Guest66 quits (~textual@98.13.6.21) (Client Quit)
17:36:13 × turlando quits (~turlando@user/turlando) (Ping timeout: 240 seconds)
17:37:07 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
17:37:07 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
17:37:07 turlando joins (~turlando@user/turlando)
17:37:30 × CiaoSen quits (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
17:38:26 <dsal> This code is very satisfying: repair chunk = fix missing ""
17:39:50 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:40:26 <monochrom> hahaha nice
17:40:28 <xerox> how'd you coerce fix into that
17:41:04 <dsal> It's just regular fix.
17:41:12 <geekosaur> > fix _ ""
17:41:16 <lambdabot> error:
17:41:16 <lambdabot> • Found hole: _ :: ([Char] -> t) -> [Char] -> t
17:41:16 <lambdabot> Where: ‘t’ is a rigid type variable bound by
17:41:25 <xerox> I mean into doing your bidding
17:41:35 <monochrom> Convert your vanilla recursive function into using fix.
17:41:39 <dsal> Missing tries to parse the input and if it fails, the error says what was missing and it shoves it in there.
17:42:37 <dsal> It's not better or worse in this particular situation. It just reads nicely.
17:43:00 <xerox> alright, just getting the recursive call as an arg
17:43:08 <xerox> it does read awfully nice
17:43:19 <dsal> I just couldn't have something called repair that didn't call fix.
17:43:38 <EvanR> wreck-it ralph would be proud
17:44:18 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
17:48:12 × kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
17:48:37 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26) (Remote host closed the connection)
17:49:15 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
17:50:28 dsrt^ joins (~dsrt@wsip-98-188-240-142.mc.at.cox.net)
17:54:37 × neverfindme quits (~hayden@158.123.160.43) (Quit: Leaving)
17:58:47 econo joins (uid147250@user/econo)
17:59:21 zer0bitz joins (~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi)
18:05:29 × fr33domlover quits (~fr33@2.55.41.192) (Ping timeout: 250 seconds)
18:05:52 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
18:09:26 neverfindme joins (~hayden@158.123.160.43)
18:10:34 × neverfindme quits (~hayden@158.123.160.43) (Remote host closed the connection)
18:11:42 × darkstardevx quits (~darkstard@50.39.115.145) (Read error: Connection reset by peer)
18:11:49 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
18:15:20 Akiva joins (~Akiva@user/Akiva)
18:16:59 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
18:20:14 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
18:20:21 × ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 245 seconds)
18:21:41 <sprout> dsal: +1
18:25:09 jgeerds joins (~jgeerds@55d4ac73.access.ecotel.net)
18:29:46 × doyougnu quits (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 260 seconds)
18:31:46 × mimmy_ quits (~mimmy@184.94.118.194) (Ping timeout: 268 seconds)
18:34:43 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 250 seconds)
18:39:14 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26)
18:40:11 × Megant quits (megant@user/megant) (Ping timeout: 256 seconds)
18:40:54 mimmy_ joins (~mimmy@184.94.118.194)
18:41:37 Megant joins (megant@user/megant)
18:49:15 × dsrt^ quits (~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Ping timeout: 250 seconds)
18:51:51 × InternetCitizen quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 252 seconds)
18:53:18 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Read error: Connection reset by peer)
18:53:44 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
19:01:21 emf joins (~emf@2620:10d:c091:480::1:a9a4)
19:01:51 mvk joins (~mvk@2607:fea8:5cdd:f000::9788)
19:03:14 × max22- quits (~maxime@2a01cb0883359800942e2037ffd67664.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
19:03:36 <xerox> @src foldM
19:03:37 <lambdabot> foldM _ a [] = return a
19:03:37 <lambdabot> foldM f a (x:xs) = f a x >>= \fax -> foldM f fax xs
19:04:00 <xerox> still using fax'es
19:06:38 ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net)
19:08:20 <sshine> heh
19:08:21 <sshine> what?
19:08:37 <sshine> oh.
19:09:09 <monochrom> Want me to fax you a category theory paper? Just tell me your phone number! >:)
19:11:52 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
19:13:46 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
19:14:17 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
19:15:21 dsrt^ joins (~dsrt@wsip-98-188-240-142.mc.at.cox.net)
19:16:47 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
19:24:34 darkstarx joins (~darkstard@50.39.115.145)
19:25:40 × darkstarx quits (~darkstard@50.39.115.145) (Remote host closed the connection)
19:26:03 darkstarx joins (~darkstard@50.39.115.145)
19:26:05 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:27:13 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
19:27:30 Morrow joins (~quassel@bzq-110-168-31-106.red.bezeqint.net)
19:31:36 × darchite` quits (~user@2a00:23c6:3584:df00:7dec:bf13:8fa:748c) (Remote host closed the connection)
19:37:37 pfurla joins (~pfurla@201.17.118.230)
19:43:46 fossdd joins (~fossdd@sourcehut/user/fossdd)
19:47:30 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
19:48:10 beka joins (~beka@104.193.170.240)
19:49:37 max22- joins (~maxime@2a01cb0883359800b0bf91f12c0fefae.ipv6.abo.wanadoo.fr)
19:50:12 Erutuon joins (~Erutuon@user/erutuon)
19:52:09 × fossdd quits (~fossdd@sourcehut/user/fossdd) (Remote host closed the connection)
19:55:17 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:59:21 × jgeerds quits (~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 268 seconds)
19:59:49 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
20:01:45 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
20:04:39 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
20:05:30 × juhp quits (~juhp@128.106.188.82) (Ping timeout: 268 seconds)
20:06:11 Codaraxis joins (~Codaraxis@user/codaraxis)
20:07:15 juhp joins (~juhp@128.106.188.82)
20:07:15 × alx741 quits (~alx741@181.199.42.79) (Read error: Connection reset by peer)
20:08:00 alx741 joins (~alx741@157.100.93.160)
20:10:53 × meinside quits (uid24933@id-24933.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
20:14:36 × alx741 quits (~alx741@157.100.93.160) (Read error: Connection reset by peer)
20:15:22 × pfurla quits (~pfurla@201.17.118.230) (Quit: gone to sleep. ZZZzzz…)
20:17:29 superstar64 joins (~superstar@2600:1700:ed80:50a0:d250:99ff:fe2c:53c4)
20:17:58 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.3)
20:19:54 × mimmy_ quits (~mimmy@184.94.118.194) (Ping timeout: 260 seconds)
20:20:10 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:21:08 pfurla joins (~pfurla@2804:14d:5c81:4104:654d:199b:4253:3c19)
20:23:27 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26) (Remote host closed the connection)
20:28:33 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f80d:43f5:ddf4:fb26)
20:28:35 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
20:31:31 alx741 joins (~alx741@157.100.93.160)
20:33:05 × darkstarx quits (~darkstard@50.39.115.145) (Read error: Connection reset by peer)
20:35:57 darkstarx joins (~darkstard@50.39.115.145)
20:36:53 × darkstarx quits (~darkstard@50.39.115.145) (Remote host closed the connection)
20:37:18 darkstarx joins (~darkstard@50.39.115.145)
20:38:08 doyougnu joins (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
20:40:36 × pfurla quits (~pfurla@2804:14d:5c81:4104:654d:199b:4253:3c19) (Quit: gone to sleep. ZZZzzz…)
20:45:03 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
20:48:03 acidjnk_new joins (~acidjnk@p200300d0c7271e2134fbc39073c29133.dip0.t-ipconnect.de)
20:48:17 lavaman joins (~lavaman@98.38.249.169)
20:48:59 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:52:24 jgeerds joins (~jgeerds@55d4ac73.access.ecotel.net)
20:54:59 farmfrmjakestate joins (~farmfromj@user/farmfrmjakestate)
20:55:16 × DNH quits (~DNH@2a02:8108:1100:16d8:e582:2d42:b0b2:720b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:57:12 CiaoSen joins (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
20:57:52 × farmfrmjakestate quits (~farmfromj@user/farmfrmjakestate) (Client Quit)
21:00:12 namkeleser joins (~namkelese@101.179.128.103)
21:00:46 justsomeguy joins (~justsomeg@user/justsomeguy)
21:02:08 × smartin quits (~Thunderbi@88.135.18.171) (Read error: Connection reset by peer)
21:02:30 smartin joins (~Thunderbi@88.135.18.171)
21:03:01 azimut joins (~azimut@gateway/tor-sasl/azimut)
21:04:48 pavonia joins (~user@user/siracusa)
21:12:51 Feuermagier_ joins (~Feuermagi@138.199.36.189)
21:14:44 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
21:15:13 × Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 252 seconds)
21:15:28 Feuermagier joins (~Feuermagi@user/feuermagier)
21:15:50 × michalz quits (~michalz@185.246.204.61) (Remote host closed the connection)
21:16:21 mimmy_ joins (~mimmy@2607:fea8:6e0:7f90:21fa:58d6:189b:bd7a)
21:17:18 × burnsidesLlama quits (~burnsides@dhcp168-019.wadham.ox.ac.uk) (Remote host closed the connection)
21:17:39 × Feuermagier_ quits (~Feuermagi@138.199.36.189) (Ping timeout: 268 seconds)
21:20:54 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
21:22:14 × superstar64 quits (~superstar@2600:1700:ed80:50a0:d250:99ff:fe2c:53c4) (Quit: Leaving)
21:22:44 mimmy joins (~mimmy@cpef81d0f857c83-cmf81d0f857c80.cpe.net.cable.rogers.com)
21:23:23 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3)
21:24:02 × shailangsa quits (~shailangs@host86-161-220-126.range86-161.btcentralplus.com) (Ping timeout: 256 seconds)
21:25:04 × mimmy_ quits (~mimmy@2607:fea8:6e0:7f90:21fa:58d6:189b:bd7a) (Ping timeout: 268 seconds)
21:25:40 × Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 268 seconds)
21:27:09 earendel joins (uid498179@user/earendel)
21:28:07 × doyougnu quits (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Remote host closed the connection)
21:28:45 <maplike> can someone give or point to a simple yet illustrative example (_other than factorial_) showing the path starting from corecursion/recursion, to the ana/cata version and then using hylo?
21:29:12 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
21:30:10 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:31:19 doyougnu joins (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
21:31:31 vicfred joins (~vicfred@user/vicfred)
21:32:06 DNH joins (~DNH@2a02:8108:1100:16d8:e582:2d42:b0b2:720b)
21:34:44 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
21:36:26 gehmehgeh joins (~user@user/gehmehgeh)
21:37:13 × lagash quits (lagash@lagash.shelltalk.net) (Ping timeout: 252 seconds)
21:37:14 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
21:37:24 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
21:40:12 Feuermagier joins (~Feuermagi@user/feuermagier)
21:40:26 × Topsi1 quits (~Tobias@dyndsl-095-033-094-234.ewe-ip-backbone.de) (Read error: Connection reset by peer)
21:42:17 <sshine> maplike, I implemented an anamorphism in C# once: https://stackoverflow.com/questions/30844688/what-is-an-anamorphism-and-how-does-one-look-like-in-c/30857439#30857439 -- there are two examples, one being the collatz tree from XKCD, and the other being a family tree.
21:42:32 InternetCitizen joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
21:42:58 × xff0x quits (~xff0x@2001:1a81:537e:3f00:6b1a:2a67:475e:9b5f) (Ping timeout: 260 seconds)
21:43:38 xff0x joins (~xff0x@2001:1a81:537e:3f00:56c7:e8a2:3a14:4d05)
21:44:47 <sshine> I think I even called the accumulating function over trees "water" :-P
21:46:21 pfurla joins (~pfurla@2804:14d:5c81:4104:654d:199b:4253:3c19)
21:47:44 zardoz joins (~bc8147f2@cerf.good1.com)
21:47:59 <maplike> sshine, that looks interesting thank you!
21:48:28 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
21:48:56 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
21:49:03 <maplike> I was think more of "here's how to implement somethinf (not factorial!, but equally short) using recursion, here it is with ana and cata, and then a hylo verion 1-liner
21:49:06 <sshine> maplike, hmm, for hylo... I guess the wikipedia article suggests that fib(n) is a tree-isomorphic hylo. but maybe there are more involved examples.
21:49:18 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3)
21:51:28 <maplike> ... in Haskell, rather than how to implement ana and cata, or what they mean. fib(n) as tree-isomorphic hylo might be a good one to try
21:51:33 <sshine> https://hackage.haskell.org/package/pointless-haskell-0.0.9/docs/Generics-Pointless-Examples-Examples.html :P
21:51:35 × smartin quits (~Thunderbi@88.135.18.171) (Ping timeout: 268 seconds)
21:52:24 <maplike> OK< that has fibHylo
21:52:47 <sshine> well... some of those seem a little hard to read.
21:53:31 <maplike> the perl bits?
21:53:34 <sshine> maplike, the idea, as far as I understand, is that the trivial fib(n) = fib(n-1) + fib(n-2) implementation *is* a hylomorphism.
21:54:16 <sshine> maplike, because the call tree becomes the tree data structure that the anamorphism part would construct, and the catamorphism then destroys by traversal.
21:54:23 <maplike> seems more like 2 anas
21:54:36 burnsidesLlama joins (~burnsides@dhcp168-019.wadham.ox.ac.uk)
21:54:46 <sshine> maplike, nah, building a tree is unfolding, reducing the tree to a single number is folding.
21:55:03 <maplike> yes, if you think in terms of trees, I see that
21:55:22 <maerwald[m]> fibPF = (zero \/ (one \/ add)) . (bang -|- (bang -|- fibPF >< fibPF)) . (id -|- aux) . ((==0)?)
21:55:39 <maerwald[m]> F... off? :)
21:55:42 <sshine> but then the more efficient fib(n) that remembers the last two steps, is instead a hylomorphism for which the call tree is isomorphic to lists.
21:55:54 <sshine> maerwald[m], that's how you code Haskall, right?
21:56:14 <maerwald[m]> That's how you commit a crime
21:56:47 <maplike> but at least you _can_ do it :D
21:57:28 <maplike> sshine, that is the sort of insight and intuition I'm after
21:57:45 <maplike> it even sort of makes sense
21:58:24 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
21:58:41 <maerwald[m]> That's why haskell is nr. 2 on most disliked functional languages :p
22:00:39 <sshine> maplike, one sec, I think I have an example of something.
22:00:54 <maplike> still here
22:01:18 <monochrom> Now I"m curious. Which are the other most disliked languages? For example nr.1 and nr.3?
22:01:26 × burnsidesLlama quits (~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
22:01:43 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:02:25 <sshine> monochrom, it's not actually true (according to StackOverflow's survey). probably because not enough people actually use it and come to dislike it.
22:02:29 <sshine> https://appetiser.com.au/blog/the-most-loved-and-hated-programming-languages-according-to-developers/#The%20Most%20Disliked%20Programming%20Languages
22:02:48 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:03:04 <sshine> 1. VBA, 2. Objective-C, 3. Assembly, 4. C, 5. PHP, 6. Erlang, 7. Ruby, 8. R, 9. C++, 10. Java.
22:03:30 <monochrom> Ah thanks. Haha but what about "bad press is still better than no press"? >:)
22:03:43 <sshine> I just don't get why anyone would hate on Erlang. I mean, how many people accidentally stumble into an Erlang job and feel forced to stay? I totally get why people would hate PHP because it's sort of the mud from which so many of us are born.
22:04:05 <monochrom> VBA is very disliked but at least everyone still has to brag/lie "I know VBA" on their CVs.
22:04:09 shailangsa joins (~shailangs@host86-186-127-128.range86-186.btcentralplus.com)
22:04:40 <monochrom> Whereas no one bothers to lie "I know Haskell".
22:04:44 <sshine> I'd like about knowing VBA if I knew VBA. but at this point I'd just refuse to even confirm or deny.
22:05:37 <sshine> lying about knowing Haskell is probably among the bloopers out there. like lying about speaking Chinese, and then your interviewer speaks fluent Chinese. (that happened to me, and I was only 6 months in, haha.)
22:06:07 <monochrom> Yeah Erlang being up there is weird.
22:06:50 <maplike> I thought everybody loved Ruby when it first came out
22:06:50 <sshine> yeah. for Erlang, I feel like dislike is more like discomfort... knowing you have an awesome VM with a deprecated syntax, I'd feel more sorry than dislike. and probably enjoy it more than most other languages.
22:07:12 <sshine> maplike, Ruby is Perl.
22:08:54 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Ping timeout: 276 seconds)
22:09:13 × mimmy quits (~mimmy@cpef81d0f857c83-cmf81d0f857c80.cpe.net.cable.rogers.com) (Ping timeout: 250 seconds)
22:09:25 <monochrom> I don't think factorial fibonacci etc are good ways to learn catamorphism and anamorphism.
22:09:37 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
22:09:41 <monochrom> Instead, initial algebras and final coalgebras.
22:09:59 <sshine> maplike, so... I guess you could take any greedy algorithm implemented as a recursive function and regard it as a hylomorphism. e.g. the coin change problem.
22:10:16 <earendel> no zebras?
22:10:26 <sshine> cozebras
22:10:45 <monochrom> Good examples of initial algebras are ADTs like "data IntList = Nil | Cons Int IntList" and "data IntTree = Leaf Int | Branch IntTree IntTree".
22:11:10 <zardoz> heh, every single time I join (and that is rare), maerwald craps on haskell. he'd be banned in a different channel 1000 times already
22:11:54 <geekosaur> thing is, maerwald maintains the primary way of *getting* haskell
22:12:08 <monochrom> Unfortunately, or fortunately, he gave us ghcup. He has more than earned his stay.
22:13:09 <geekosaur> also he's not the only one who thinks pointfree is fairly ugly
22:13:26 <zardoz> as if that is the only thing he complains about
22:14:08 <zardoz> monochrom, so if he didn't write that, he'd be banned?
22:14:22 <maplike> sshine: what's the simplest example?
22:14:38 <monochrom> Maybe after more incidents.
22:14:40 <earendel> that fibonacci examples where meant as a joke.
22:14:45 <geekosaur> he's also not the only one who thinks laziness by default has problems. he's provided examples of that
22:14:49 <maplike> in terms of the unfold part
22:15:55 <lbseale> I know VBA but I wouldn't want to put it on my resume, I don't want anyone asking me to write anything in it
22:15:57 <earendel> like lazyloading?
22:15:57 <sshine> maplike, the simplest example of what?
22:16:47 <earendel> i knew if conversation nevers stops its on haskell
22:16:54 <earendel> :p
22:16:59 <sshine> maplike, https://rosettacode.org/wiki/Count_the_coins#Haskell -- here's a function that generates a tree-like call-stack. you could build it as an anamorphism that generates the tree, and a catamorphism that collapses it.
22:17:17 <maplike> so, if we have a recursive solution based on a greedy algorithm,
22:17:25 <earendel> a tree-like stack? who would want that?!
22:17:42 <sshine> earendel, someone looking for an example of a non-trivial hylomorphism? :-P
22:18:28 <maplike> that's a good example for my purposes
22:18:30 <earendel> sshine: i would need a trivial one. for starters. also ana/cata
22:18:41 <earendel> and cozebra
22:19:54 <monochrom> A singly linked list is a very degenerate tree.
22:20:32 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
22:20:39 <sshine> but is it retarded?
22:20:48 <earendel> but stack is 1 dimension .. push and pop.. no?
22:20:58 <maplike> fyi https://stackoverflow.com/a/69651010
22:23:45 <sshine> maplike, ah yes. so this is for counting the number of distinct ways to give change. the related problem was finding a solution that involved the fewest coins.
22:24:17 <sshine> where does the Algebra type constructor come from?
22:24:38 <monochrom> Scrolling dow you'll find "type Algebra f a = f a -> a"
22:24:46 <sshine> oh, they're just type aliases. thanks.
22:24:54 <maplike> line 6
22:25:04 <monochrom> Or scrolling up, I forgot.
22:25:55 <sshine> maplike, the example might be a little confusing with the use of type aliases and arrow operators.
22:26:51 <maplike> everybody pretends they don't use Arrows, but they seem to appear quite often.The VBS of abstractions?!
22:26:55 <maplike> *VBA
22:27:00 <monochrom> hee hee
22:27:11 myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net)
22:27:59 <hpc> Arrow is to bash as Category is to sh
22:28:13 <hpc> "this script is definitely posix"
22:28:38 <hpc> if it didn't have arr it would be a great type class
22:28:39 <monochrom> Technicality: >>> and <<< no longer require Arrow. They are from Category now.
22:28:40 <geekosaur> I think the most commonly used parts are >>> <<< (reframings of composition) and first, second are just tuple twiddling
22:28:43 × beka quits (~beka@104.193.170.240) (Ping timeout: 250 seconds)
22:29:27 <monochrom> In this case, <<< is (.), >>> is flip(.). THE END.
22:29:35 <maplike> I ended up using `&&&` last time I came here :D
22:29:56 <geekosaur> % :t (&&&) @(->)
22:29:57 <yahb> geekosaur: (b -> c) -> (b -> c') -> b -> (c, c')
22:30:07 <geekosaur> more tuple twiddling :)
22:30:26 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:30:28 <maplike> here as in freenode :)
22:30:34 <geekosaur> I mostly avoid tuples so have little use for most of Arrow
22:30:41 lavaman joins (~lavaman@98.38.249.169)
22:30:48 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:30:51 lagash joins (lagash@lagash.shelltalk.net)
22:31:01 lavaman joins (~lavaman@98.38.249.169)
22:31:09 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:31:10 <sshine> I only ever use arrow operators for tuples :P for functions I suppose the most sophisticated I do is applicative.
22:31:10 × max22- quits (~maxime@2a01cb0883359800b0bf91f12c0fefae.ipv6.abo.wanadoo.fr) (Quit: Leaving)
22:31:24 lavaman joins (~lavaman@98.38.249.169)
22:31:31 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:31:45 lavaman joins (~lavaman@98.38.249.169)
22:31:52 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:32:08 lavaman joins (~lavaman@98.38.249.169)
22:32:16 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:32:30 lavaman joins (~lavaman@98.38.249.169)
22:32:38 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:32:54 lavaman joins (~lavaman@98.38.249.169)
22:33:02 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:33:16 lavaman joins (~lavaman@98.38.249.169)
22:33:23 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:33:38 lavaman joins (~lavaman@98.38.249.169)
22:33:46 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:34:00 lavaman joins (~lavaman@98.38.249.169)
22:34:08 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:34:21 lavaman joins (~lavaman@98.38.249.169)
22:34:29 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:34:32 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
22:34:44 lavaman joins (~lavaman@98.38.249.169)
22:34:51 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:35:04 lavaman joins (~lavaman@98.38.249.169)
22:35:12 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:35:27 lavaman joins (~lavaman@98.38.249.169)
22:35:34 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:35:50 lavaman joins (~lavaman@98.38.249.169)
22:35:57 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:36:10 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds)
22:36:11 lavaman joins (~lavaman@98.38.249.169)
22:36:19 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:36:33 lavaman joins (~lavaman@98.38.249.169)
22:36:41 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:36:56 lavaman joins (~lavaman@98.38.249.169)
22:37:03 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:37:18 lavaman joins (~lavaman@98.38.249.169)
22:37:25 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:37:39 lavaman joins (~lavaman@98.38.249.169)
22:37:46 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:38:00 lavaman joins (~lavaman@98.38.249.169)
22:38:08 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:38:23 lavaman joins (~lavaman@98.38.249.169)
22:38:31 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:38:32 × CiaoSen quits (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
22:38:48 lavaman joins (~lavaman@98.38.249.169)
22:38:51 × mc47 quits (~mc47@xmonad/TheMC47) (Quit: Leaving)
22:38:55 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:39:09 lavaman joins (~lavaman@98.38.249.169)
22:39:17 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:39:27 <maerwald[m]> sshine: wrong link
22:39:31 lavaman joins (~lavaman@98.38.249.169)
22:39:39 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:39:39 ChanServ sets mode +o geekosaur
22:39:43 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:39:50 geekosaur sets mode +b lavaman!*@*
22:39:52 <maerwald[m]> https://scalac.io/ranking/functional-programming-languages-sentiment-ranking/
22:40:17 geekosaur sets mode -o geekosaur
22:40:26 CiaoSen joins (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
22:40:32 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
22:40:42 <sshine> maerwald[m], makes sense! Haskell wouldn't be hated based on popularity, because people don't get pressured into using it.
22:41:05 <maerwald[m]> Only purescript ranks worse. My hunch is that the reason is that both haskell and purescript constantly break stuff
22:42:00 mimmy joins (~mimmy@2607:fea8:6e0:7f90:2cc0:59c:7081:31f2)
22:43:08 <sshine> ...and that they're actually languages people come into contact with.
22:43:48 <sshine> who has anything bad to say about Idris? that's like saying something about the cryptocurrency you bought for Ethereum that you traded for Bitcoin... at that point, you only have yourself to blame if things don't work out. :-D
22:44:14 <perro> it was called mazacoin and it's still a sore spot for some poeple
22:44:36 <perro> are the differences significant?
22:45:21 <monochrom> People can still hate something they themselves chose.
22:45:55 <sshine> I think what's interesting about the "most negative" scale is actually the least negative ones: Kotlin, Elm, Elixir. they're significantly lower than all the others at >~10%.
22:48:10 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
22:48:31 <monochrom> In the case of Haskell I would attribute to tooling.
22:49:18 <sshine> and learning curve
22:49:25 <monochrom> To be sure, none of us has data to support or refute any guess :)
22:49:51 <sshine> I happen to have divine insight, but I can't prove it.
22:50:10 <monochrom> I think of learning curve as a minor factor because, like, PHP and Python are not in the scope of the comparison, but OCaml is.
22:50:34 <perro> soemthing like elm goes out of its way to be easy
22:50:41 <dolio> Who was answering the poll?
22:50:48 <perro> elixir does a similar job, and people are probablye xposed to it via phoenix which is very on the rails
22:51:03 <sshine> dolio, it's based on analysing how people mention the languages, I think.
22:51:04 <monochrom> Although, if you mean "learning curve for when to leverage or kill laziness" then yeah, but then I can still smugly blame it on profiling tools :)
22:51:05 burnsidesLlama joins (~burnsides@dhcp168-019.wadham.ox.ac.uk)
22:51:15 <sshine> dolio, so something like scanning social media, I guess?
22:51:15 <dolio> What people?
22:52:05 × alx741 quits (~alx741@157.100.93.160) (Read error: Connection reset by peer)
22:52:23 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 252 seconds)
22:52:37 <monochrom> I think the page describes the methodology, but I didn't read it.
22:53:12 <monochrom> And yeah I should go back to my Giry monad study instead of slashdotting this :)
22:53:23 <maerwald[m]> 10% hate factor for clojure seems to be a methodology error
22:53:27 <maerwald[m]> I don't but it
22:53:34 <sshine> monochrom, right :) also, negative incentive towards Haskell (13.90%) vs. Rust (12.16%) is pretty close. having recently started to use Rust, I would have to say that being compared with that onboarding experience isn't bad at all.
22:53:36 <maerwald[m]> It should be 80%
22:54:01 <monochrom> Oh, I happen to know what I would hate about Rust. :)
22:54:05 <maerwald[m]> Even clojure experts hate it
22:54:37 <earendel> why would you be interested in such trivia?
22:54:48 <maerwald[m]> Rust has better tooling, but nightly also constantly breaks stuff
22:54:50 <sshine> maerwald[m], maybe the people who hate clojure are too ironic for their ranking algorithm to pick up.
22:55:04 ChanServ sets mode +o litharge
22:55:04 <ystael> I used to be a clojure expert kinda ... the things I hated about it weren't its fault, they were its nature, so my fault for using it
22:55:04 litharge sets mode -bo lavaman!*@* litharge
22:55:08 <maerwald[m]> I believe breaking changes is the primary factor for hate
22:55:20 lavaman joins (~lavaman@98.38.249.169)
22:55:27 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:55:30 <maerwald[m]> Clojure doesn't bresk anything. There's no such thing as API in clojure
22:55:35 <geekosaur> sigh
22:55:41 lavaman joins (~lavaman@98.38.249.169)
22:55:45 ChanServ sets mode +o geekosaur
22:55:48 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:55:59 <earendel> second to being badly or never fucked at all?
22:56:01 lavaman joins (~lavaman@98.38.249.169)
22:56:02 geekosaur sets mode +b *!*@98.38.249.169
22:56:04 <monochrom> Rust's borrow system is great for mundane industrial code, but I happened to choose a bad way to learn and practice Rust. I tried "let me code up a Haskellish recursive ADT in Rust". That didn't end well. It did give me much insight heh.
22:56:09 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:56:24 geekosaur sets mode -o geekosaur
22:56:31 <perro> I get pretty far along in an applicaiton swith rust and realized how much time I'd spent doing trivial shit
22:56:33 <maerwald[m]> You can though
22:57:09 <perro> it's hard to get a feel for how something like lifetimes work iwithin a codebase without doing it
22:57:33 <maerwald[m]> RefCell everything
22:57:52 <maerwald[m]> I'm only half joking
22:58:28 <earendel> i don't know.. better than having unchecked memcpy in openssh source in 2021
22:59:33 <earendel> .. also please don't act as if you were afraid of rust being a gamechanger.
22:59:49 <sshine> afraid?
22:59:53 <maerwald[m]> Yes, one has to remember that "memory safety" in rust doesn't mean "your program never crashes", but "your program crashes safely... woll, unless. .."
23:00:26 <maerwald[m]> Unless you use C libraries or unsafe code
23:01:14 <sshine> do Haskell programs crash safely if you use C libraries or unsafe code? :)
23:01:33 <earendel> maewald: everyone does. you don't?
23:01:33 × jkaye quits (~jkaye@2601:281:8300:7530:bc2d:ca62:1f76:4faa) (Ping timeout: 252 seconds)
23:01:48 <sshine> I log in as root.
23:02:12 <monochrom> Does Coq crash if you use C libraries...
23:02:16 <maerwald[m]> Haskell may not even crash if you have memory unsoundness
23:02:29 <sshine> monochrom, not if it fails to compile, which it always does. -_-
23:02:37 <monochrom> heh
23:03:38 <earendel> rust could at best spare like 2/3 of the usual vulnerability .. ppl say. which is a lot of course.
23:04:26 slice joins (~slice@user/slice)
23:04:54 <sshine> also, throw more type errors to scare careless programmers away. :-D
23:05:29 Minnozz joins (~minnozz@salix.minnozz.com)
23:05:40 <maerwald[m]> Yeah, GHC shames bad programmers into giving up their career
23:05:52 <earendel> those ppl should continue writing fibonacci recursions, not security relevant code.
23:06:12 sshine realises he's not far from writing fibonacci recursions this evening.
23:06:19 <monochrom> The benefit of Rust I appreciate the most is bringing properly done sum types to the C, C++, Go communities.
23:06:20 × zer0bitz quits (~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi) (Read error: Connection reset by peer)
23:06:30 <perro> si\
23:06:33 <sshine> monochrom, and type inference?
23:06:57 <maerwald[m]> Go devs are still debating benefits of proper sum types
23:07:03 <maerwald[m]> It's funny
23:07:05 <monochrom> That's the 2nd or 3rd on my tier list.
23:07:28 <monochrom> But my tier list is based on what I care, not necessarily what the world really needs.
23:07:32 <maerwald[m]> It's like they're still in the 90s
23:07:38 alx741 joins (~alx741@157.100.93.160)
23:07:53 <monochrom> My tier list may be like: 1. sum types; 2. the borrow system; 3. type inference
23:08:02 × chomwitt quits (~chomwitt@2a02:587:dc0d:3700:12c3:7bff:fe6d:d374) (Ping timeout: 240 seconds)
23:08:53 × myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 252 seconds)
23:08:58 <monochrom> Sum types prevent even more bugs than the borrow system, IMO.
23:09:16 <maerwald[m]> monochrom: I also care more about sum types than I do about functional or lazy
23:09:29 <maerwald[m]> The best features are the simple ones you can steal
23:09:30 <earendel> that borrow system isn't something anybody waited for i guess. it definitely is more work for the dev.
23:09:32 <monochrom> "I forgot to check whether lookup() returns null" Solved by sum types.
23:10:10 <maerwald[m]> earendel: the alternative is a proof assistant for memory soundness
23:10:18 <maerwald[m]> Even more complicated
23:10:46 <earendel> i see.
23:10:52 <maerwald[m]> The borrow system has very simple rules
23:11:01 <maerwald[m]> They sometimes make little sense
23:11:01 <earendel> sounds good.
23:11:06 <maerwald[m]> But that's irrelevant
23:11:19 <monochrom> "the packet I received is one of 3 cases and I messed up which case is which" Solved by sum types.
23:11:53 <maerwald[m]> The borrow checker in fact rejects a lot of sound programs
23:11:58 jeetelongname joins (~jeet@eduroam-public-20.nat.port.ac.uk)
23:12:09 <maerwald[m]> The trade off is pragmatic
23:12:09 <dolio> That happens with every checker.
23:12:40 <monochrom> "my function should be partial but I don't bother to announce it because I don't know what to return" Solved by sum types.
23:13:33 <maerwald[m]> Now let's talk about open sum types...still great?
23:13:37 notzmv joins (~zmv@user/notzmv)
23:13:44 <maerwald[m]> I can't decide
23:14:17 <monochrom> "my function can fail for one of 3 reasons, how do I tell the caller which reason it is?" Solved by sum types.
23:14:41 <monochrom> aka "C's errno is a disaster" Solved by sum types.
23:14:51 <earendel> nan
23:15:02 <earendel> look at your nan.
23:15:12 <maerwald[m]> Well... now you have the problem of having 100 sum types across your application. ..
23:15:20 <maerwald[m]> Or one that covers everything
23:15:26 <maerwald[m]> Both are awful
23:15:31 <monochrom> batman = repeat (sqrt (-1)) >:)
23:15:55 <maerwald[m]> This is solved by open sum types...
23:16:03 <geekosaur> NoN would be solvable if we didnb't need floating point compatibility with everything else
23:16:05 <maerwald[m]> But they're very unergonomic
23:16:15 <earendel> i thought the sum of integers would best be integer as well.
23:16:31 <earendel> same for vectors.
23:16:55 <earendel> and x should be forever set as 3.
23:17:38 <monochrom> OK, parametric polymorphism should also be on my tier list, I forgot. Not sure where to put it relative to the other 3. All of them are great!
23:18:28 <monochrom> Maybe higher than type inference because C's "use void* for generics" gets old really fast.
23:18:39 beka joins (~beka@104-244-24-117.PUBLIC.monkeybrains.net)
23:19:32 × acidjnk_new quits (~acidjnk@p200300d0c7271e2134fbc39073c29133.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
23:19:39 <monochrom> In retrospect, I think I rate "a language construct that enables you to finally say directly what you really mean" higher than "one more safety mechanism".
23:19:42 <earendel> ok. static typing is not entirely new, conceptually.
23:20:24 <monochrom> because if you say directly what you really mean, that already eliminates a lot of bugs, misunderstandings, forgetfulness.
23:20:49 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
23:22:11 <earendel> if you're coding software which primary goals are maintability and reliability (with a longer lifecycle) you would definitely prefer some typing over rapid dev features or when programming for performance.
23:22:58 <maerwald[m]> Maintainability and reliability are kinda conflicting goals
23:23:11 <earendel> as john carmack says; there's a power to the dark side.
23:23:31 × maplike quits (~maplike@31.209.100.216) (Ping timeout: 256 seconds)
23:25:46 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
23:26:10 jakalx joins (~jakalx@base.jakalx.net)
23:27:23 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
23:29:22 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:30:01 neverfindme joins (~hayden@72.92.246.5)
23:30:09 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 252 seconds)
23:30:52 × neverfindme quits (~hayden@72.92.246.5) (Remote host closed the connection)
23:31:37 × CiaoSen quits (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
23:40:45 zebrag joins (~chris@user/zebrag)
23:44:22 <sm> oh, replace-megaparsec looks great. Check this out: https://github.com/jamesdbrock/replace-megaparsec#in-the-shell
23:44:29 × ubert quits (~Thunderbi@p548c998b.dip0.t-ipconnect.de) (Remote host closed the connection)
23:44:52 <sm> how do you figure, maerwald ?
23:47:01 × Jing quits (~hedgehog@2604:a840:3::1001) (Remote host closed the connection)
23:47:38 Jing joins (~hedgehog@2604:a840:3::1001)
23:48:58 × mimmy quits (~mimmy@2607:fea8:6e0:7f90:2cc0:59c:7081:31f2) (Ping timeout: 260 seconds)
23:52:53 <sm> a new haskell shell attempt: https://www.reddit.com/r/haskell/comments/rdinq2/using_haskell_as_my_shell/
23:53:06 <EvanR> wait, static types are the dark side? cool
23:55:11 × namkeleser quits (~namkelese@101.179.128.103) (Quit: Client closed)
23:55:28 namkeleser joins (~namkelese@101.179.128.103)
23:56:13 ChanServ sets mode +o litharge
23:56:15 litharge sets mode -bo *!*@98.38.249.169 litharge
23:58:13 × Morrow quits (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
23:58:35 × jinsun quits (~quassel@user/jinsun) (Read error: Connection reset by peer)

All times are in UTC on 2021-12-10.