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.