2025/12/16

2025-12-16 00:01:47 +0100myxokephale(~myxos@2001:579:8380:f20:50ce:9e79:bbea:e21f) myxokephale
2025-12-16 00:04:34 +0100myxos(~myxos@2001:579:8380:f20:fbd3:ef8a:e888:18ad) (Ping timeout: 255 seconds)
2025-12-16 00:04:43 +0100 <dolio> It's fine, just don't put it in Monad.
2025-12-16 00:05:41 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 00:05:46 +0100Googulator33(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 00:06:01 +0100 <dolio> Originally I think failable patterns would desugar to MonadZero.
2025-12-16 00:10:17 +0100peterbecich(~Thunderbi@71.84.33.135) peterbecich
2025-12-16 00:17:31 +0100 <jackdk> The H98 report, s3.14, desugars `do { p <- e; stmts }` to `let { ok p = do {stmts}; ok _ = fail "..." in e >>= ok }`
2025-12-16 00:18:07 +0100 <jackdk> (And specifies that `fail` is an operation of `class Monad`)
2025-12-16 00:19:50 +0100 <haskellbridge> <loonycyborg> "do" can be used in pure code to together with BlockArguments kill even more parentheses :P
2025-12-16 00:20:16 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 256 seconds)
2025-12-16 00:20:29 +0100Sgeo(~Sgeo@user/sgeo) Sgeo
2025-12-16 00:22:24 +0100Googulator33(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 00:22:41 +0100Googulator33(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 00:24:14 +0100 <chromoblob> ... = ... $ do ...
2025-12-16 00:24:43 +0100 <haskellbridge> <loonycyborg> +to
2025-12-16 00:24:56 +0100 <chromoblob> `$` is how i kill parentheses :p
2025-12-16 00:28:38 +0100 <chromoblob> and i have even defined `($$) = flip ($)` in past, to do `... $$ ... $$ ...` - iirc
2025-12-16 00:33:29 +0100peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 260 seconds)
2025-12-16 00:34:21 +0100Googulator33Googulator
2025-12-16 00:36:04 +0100Googulator96(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 00:36:19 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 00:38:37 +0100Googulator96Googulator
2025-12-16 00:40:51 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 00:41:31 +0100mange(~mange@user/mange) mange
2025-12-16 00:43:44 +0100bggd__(~bgg@2a01:e0a:fd5:f510:6bc5:c845:f799:c476) (Remote host closed the connection)
2025-12-16 00:44:00 +0100latticepolytope(~user@user/isekaijin) isekaijin
2025-12-16 00:44:03 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-16 00:44:09 +0100 <jackdk> chromoblob: Your ($$) is (Data.Function.&), since base-4.8 (ghc 7.10.1, April 2015)
2025-12-16 00:45:24 +0100 <chromoblob> yeah, i did this in 2014 lol
2025-12-16 00:45:37 +0100 <chromoblob> :i &
2025-12-16 00:45:48 +0100 <chromoblob> no work...
2025-12-16 00:46:10 +0100 <jackdk> % :i &
2025-12-16 00:46:10 +0100 <yahb2> <interactive>:1:1: error: [GHC-76037] Not in scope: ‘&’
2025-12-16 00:46:53 +0100 <geekosaur> % :i Data.Function.&
2025-12-16 00:46:53 +0100 <yahb2> (GHC.Internal.Data.Function.&) :: a -> (a -> b) -> b ; -- Defined in ‘GHC.Internal.Data.Function’ ; infixl 1 GHC.Internal.Data.Function.&
2025-12-16 00:48:03 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-16 00:54:46 +0100 <chromoblob> wait, i mixed it up
2025-12-16 00:55:15 +0100 <chromoblob> i mean that ($$) is same that ($) but has left associativity
2025-12-16 00:55:17 +0100dolio(~dolio@130.44.140.168) (Quit: ZNC 1.10.1 - https://znc.in)
2025-12-16 00:55:31 +0100 <chromoblob> that -> as
2025-12-16 00:58:52 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 01:01:15 +0100dolio(~dolio@130.44.140.168) dolio
2025-12-16 01:03:01 +0100dolio(~dolio@130.44.140.168) (Client Quit)
2025-12-16 01:03:47 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-16 01:09:04 +0100jmcantrell_jmcantrell
2025-12-16 01:14:36 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 01:15:08 +0100dolio(~dolio@130.44.140.168) dolio
2025-12-16 01:19:14 +0100itaipu(~itaipu@168.121.97.28) itaipu
2025-12-16 01:19:31 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-16 01:30:23 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 01:30:40 +0100peterbecich(~Thunderbi@71.84.33.135) peterbecich
2025-12-16 01:34:53 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Ping timeout: 244 seconds)
2025-12-16 01:35:10 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
2025-12-16 01:35:23 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 01:36:00 +0100Googulator20(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 01:36:23 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 01:38:02 +0100ttybitnik(~ttybitnik@user/wolper) (Quit: Fading out...)
2025-12-16 01:46:11 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 01:55:36 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-12-16 02:04:20 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 244 seconds)
2025-12-16 02:04:36 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-16 02:06:25 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 02:08:15 +0100peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 240 seconds)
2025-12-16 02:08:55 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 240 seconds)
2025-12-16 02:10:31 +0100xff0x(~xff0x@2405:6580:b080:900:1f68:a6af:8023:736) (Ping timeout: 246 seconds)
2025-12-16 02:10:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 02:20:15 +0100Tuplanolla(~Tuplanoll@91-152-225-194.elisa-laajakaista.fi) (Ping timeout: 240 seconds)
2025-12-16 02:22:01 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 02:24:40 +0100divlamir(~divlamir@user/divlamir) (Read error: Connection reset by peer)
2025-12-16 02:24:52 +0100divlamir(~divlamir@user/divlamir) divlamir
2025-12-16 02:25:10 +0100somemathguy(~somemathg@user/somemathguy) (Quit: WeeChat 4.1.1)
2025-12-16 02:25:23 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-16 02:26:43 +0100kodachi(~kodachi@198.105.112.55) (Quit: Leaving)
2025-12-16 02:27:25 +0100Lycurgus(~juan@user/Lycurgus) Lycurgus
2025-12-16 02:28:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-16 02:29:03 +0100omidmash5(~omidmash@user/omidmash) omidmash
2025-12-16 02:30:28 +0100acidjnk(~acidjnk@p200300d6e7171911ece553fa3dd3d975.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2025-12-16 02:30:59 +0100omidmash(~omidmash@user/omidmash) (Ping timeout: 265 seconds)
2025-12-16 02:30:59 +0100omidmash5omidmash
2025-12-16 02:31:54 +0100spew(~spew@user/spew) (Ping timeout: 252 seconds)
2025-12-16 02:33:41 +0100somemathguy(~somemathg@user/somemathguy) somemathguy
2025-12-16 02:39:50 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 02:40:04 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 02:40:04 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 02:42:34 +0100DetourNe-(DetourNetw@user/DetourNetworkUK) DetourNetworkUK
2025-12-16 02:43:04 +0100DetourNetworkUK(~DetourNet@user/DetourNetworkUK) (Ping timeout: 246 seconds)
2025-12-16 02:44:50 +0100DetourNe-DetourNetworkUK
2025-12-16 02:45:20 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2025-12-16 02:46:10 +0100Square(~Square4@user/square) Square
2025-12-16 02:49:49 +0100Square2(~Square@user/square) (Ping timeout: 264 seconds)
2025-12-16 02:55:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 02:57:11 +0100Googulator20Googulator
2025-12-16 03:01:10 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-16 03:05:52 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 03:05:55 +0100Googulator73(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 03:10:25 +0100Lycurgus(~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org ))
2025-12-16 03:11:57 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 03:16:08 +0100xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2025-12-16 03:16:34 +0100spew(~spew@user/spew) spew
2025-12-16 03:16:35 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 03:24:23 +0100spew(~spew@user/spew) (Ping timeout: 260 seconds)
2025-12-16 03:26:34 +0100spew(~spew@user/spew) spew
2025-12-16 03:27:45 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 03:33:01 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-16 03:35:47 +0100Googulator73(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 03:35:52 +0100Googulator11(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 03:40:13 +0100Googulator11Googulator
2025-12-16 03:43:33 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 03:48:07 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 03:59:18 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 04:05:19 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 246 seconds)
2025-12-16 04:05:45 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 04:05:49 +0100Googulator61(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 04:05:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 04:06:05 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-16 04:13:30 +0100vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 244 seconds)
2025-12-16 04:15:33 +0100vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-12-16 04:15:43 +0100spew(~spew@user/spew) (Ping timeout: 260 seconds)
2025-12-16 04:16:18 +0100finsternis(~X@23.226.237.192) finsternis
2025-12-16 04:17:20 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 04:22:07 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
2025-12-16 04:24:37 +0100hsw(~hsw@112-104-86-252.adsl.dynamic.seed.net.tw) (Quit: Leaving)
2025-12-16 04:33:05 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 04:35:42 +0100Googulator61(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 04:35:47 +0100Googulator31(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 04:37:26 +0100Googulator31Googulator
2025-12-16 04:37:43 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 04:39:01 +0100hsw(~hsw@112-104-86-252.adsl.dynamic.seed.net.tw) hsw
2025-12-16 04:40:49 +0100td_(~td@i53870904.versanet.de) (Ping timeout: 264 seconds)
2025-12-16 04:42:05 +0100td_(~td@i53870911.versanet.de) td_
2025-12-16 04:48:54 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 04:49:57 +0100omidmash(~omidmash@user/omidmash) (Quit: The Lounge - https://thelounge.chat)
2025-12-16 04:52:20 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net)
2025-12-16 04:52:28 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
2025-12-16 04:53:35 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 04:54:19 +0100omidmash(~omidmash@user/omidmash) omidmash
2025-12-16 04:59:55 +0100machinedgod(~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 240 seconds)
2025-12-16 05:00:47 +0100peterbecich(~Thunderbi@71.84.33.135) peterbecich
2025-12-16 05:03:19 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
2025-12-16 05:03:46 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-16 05:04:40 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 05:06:24 +0100latticepolytope(~user@user/isekaijin) (Quit: bbl)
2025-12-16 05:06:31 +0100somemathguy(~somemathg@user/somemathguy) (Quit: WeeChat 4.1.1)
2025-12-16 05:08:25 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 264 seconds)
2025-12-16 05:09:02 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-16 05:09:37 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-16 05:11:33 +0100spew(~spew@user/spew) spew
2025-12-16 05:20:27 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 05:25:25 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
2025-12-16 05:25:50 +0100Square(~Square4@user/square) (Ping timeout: 244 seconds)
2025-12-16 05:26:09 +0100vetkat(~vetkat@user/vetkat) (Read error: Connection reset by peer)
2025-12-16 05:26:31 +0100vetkat(~vetkat@user/vetkat) vetkat
2025-12-16 05:27:26 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net)
2025-12-16 05:27:47 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
2025-12-16 05:28:06 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-16 05:32:37 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 255 seconds)
2025-12-16 05:36:16 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 05:43:18 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-12-16 05:48:01 +0100haritz(~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
2025-12-16 05:54:19 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 05:54:33 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-16 05:58:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 06:07:22 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
2025-12-16 06:14:52 +0100spew(~spew@user/spew) (Quit: WeeChat 4.7.2)
2025-12-16 06:20:38 +0100weary-traveler(~user@user/user363627) (Remote host closed the connection)
2025-12-16 06:22:45 +0100weary-traveler(~user@user/user363627) user363627
2025-12-16 06:23:00 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 06:24:26 +0100peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 265 seconds)
2025-12-16 06:27:18 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-12-16 06:28:26 +0100jmcantrell(~weechat@user/jmcantrell) (Quit: WeeChat 4.8.1)
2025-12-16 06:34:19 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
2025-12-16 06:34:39 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-16 06:37:34 +0100mange(~mange@user/mange) (Quit: Zzz...)
2025-12-16 06:38:23 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 06:43:38 +0100michalz(~michalz@185.246.207.221)
2025-12-16 06:43:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-16 06:52:29 +0100 <chromoblob> and i was frustrated that you can't set $$ to less precedence than $
2025-12-16 06:54:12 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 06:58:05 +0100 <[exa]> lol.
2025-12-16 06:58:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 07:03:14 +0100 <[exa]> Is there a way to do something Selective-like with parsers that read a sequence length and then the sequence? roughly like: parseInt >>= \n -> replicateA n parseValue
2025-12-16 07:04:05 +0100 <[exa]> (or do we need Repetitive or something such for that)
2025-12-16 07:05:36 +0100Googulator88(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 07:05:49 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 07:10:00 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 07:16:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-16 07:21:07 +0100takuan(~takuan@d8D86B9E9.access.telenet.be)
2025-12-16 07:21:29 +0100euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2025-12-16 07:27:59 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 07:33:04 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-12-16 07:35:40 +0100Googulator52(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 07:37:21 +0100Googulator88(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 07:43:18 +0100peterbecich(~Thunderbi@71.84.33.135) peterbecich
2025-12-16 07:43:47 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 07:48:24 +0100ft(~ft@p4fc2ab42.dip0.t-ipconnect.de) (Quit: leaving)
2025-12-16 07:48:31 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 07:59:27 +0100tt12316072(~tt1231@75.185.104.199) tt1231
2025-12-16 07:59:34 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 08:00:22 +0100tt1231607(~tt1231@75.185.104.199) (Read error: Connection reset by peer)
2025-12-16 08:00:22 +0100tt12316072tt1231607
2025-12-16 08:00:40 +0100lbseale(~quassel@user/ep1ctetus) (Quit: No Ping reply in 180 seconds.)
2025-12-16 08:00:56 +0100lbseale(~quassel@user/ep1ctetus) ep1ctetus
2025-12-16 08:01:55 +0100myxos(~myxos@2001:579:8380:f20:bd90:58c1:9ba1:835a) myxokephale
2025-12-16 08:03:37 +0100Pixi(~Pixi@user/pixi) (Ping timeout: 264 seconds)
2025-12-16 08:03:53 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 08:04:07 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 08:04:15 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 08:04:56 +0100myxokephale(~myxos@2001:579:8380:f20:50ce:9e79:bbea:e21f) (Ping timeout: 256 seconds)
2025-12-16 08:05:42 +0100Googulator52(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 08:05:47 +0100Googulator90(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 08:06:37 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 08:08:32 +0100xstill_(xstill@fimu/xstill) (Quit: Ping timeout (120 seconds))
2025-12-16 08:11:15 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 08:11:53 +0100xstill_(xstill@fimu/xstill) xstill
2025-12-16 08:22:24 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 08:25:33 +0100wootehfoot(~wootehfoo@user/wootehfoot) (Quit: Leaving)
2025-12-16 08:26:40 +0100Igloo(~ian@81.2.99.210) (Ping timeout: 244 seconds)
2025-12-16 08:27:43 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-16 08:34:00 +0100 <gentauro> quote: tomsmeding> gentauro: nice, very helpful error. -> I guess it was inevitable: https://github.com/NixOS/nixpkgs/commit/39e997304a220f5e80a097296fa07149344f0e15 (🤖 Generated with [Claude Code]) GG
2025-12-16 08:36:09 +0100 <gentauro> no wonder the "stable" NixOS channel keeps breaking https://status.nixos.org/. I guess that's the state of software development these days :(
2025-12-16 08:38:11 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 08:38:35 +0100Igloo(~ian@81.2.99.210)
2025-12-16 08:39:25 +0100Guest98(~Guest98@122.11.246.146)
2025-12-16 08:41:30 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-12-16 08:42:29 +0100skilikes `return' more
2025-12-16 08:42:37 +0100peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 264 seconds)
2025-12-16 08:43:12 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-16 08:48:10 +0100Guest98(~Guest98@122.11.246.146) (Quit: Client closed)
2025-12-16 08:53:57 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 08:56:35 +0100tomboy64(~tomboy64@user/tomboy64) (Ping timeout: 240 seconds)
2025-12-16 08:57:36 +0100fp(~Thunderbi@2001:708:20:1406::10c5) fp
2025-12-16 08:58:39 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091)
2025-12-16 08:59:03 +0100tomboy64(~tomboy64@user/tomboy64) tomboy64
2025-12-16 08:59:05 +0100lucabtz(~lucabtz@user/lucabtz) lucabtz
2025-12-16 08:59:14 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-16 09:07:38 +0100 <gentauro> ski: if related to `Monads` then `return` is the right keyword. If related to `Applicative`, `pure` is the right keyword
2025-12-16 09:07:38 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-16 09:12:31 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 09:15:40 +0100Googulator72(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 09:15:49 +0100Googulator90(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 09:17:45 +0100euphores(~SASL_euph@user/euphores) euphores
2025-12-16 09:22:30 +0100LainIwakura(~LainIwaku@user/LainIwakura) LainIwakura
2025-12-16 09:24:09 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2025-12-16 09:24:33 +0100Sgeo(~Sgeo@user/sgeo) Sgeo
2025-12-16 09:26:42 +0100sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-12-16 09:27:15 +0100weary-traveler(~user@user/user363627) (Ping timeout: 240 seconds)
2025-12-16 09:27:56 +0100weary-traveler(~user@user/user363627) user363627
2025-12-16 09:42:41 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 09:42:54 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 09:58:24 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 10:00:41 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 10:00:54 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 10:03:47 +0100fp1(~Thunderbi@dhcp-86-128.eduroam.aalto.fi) fp
2025-12-16 10:05:06 +0100fp(~Thunderbi@2001:708:20:1406::10c5) (Ping timeout: 252 seconds)
2025-12-16 10:05:10 +0100fp1fp
2025-12-16 10:05:17 +0100Googulator72Googulator
2025-12-16 10:06:33 +0100acidjnk(~acidjnk@p200300d6e71719974d985e7e473d8889.dip0.t-ipconnect.de) acidjnk
2025-12-16 10:10:49 +0100 <tomsmeding> gentauro: is it indeed that commit that breaks things for you?
2025-12-16 10:12:46 +0100 <tomsmeding> gentauro: also, if the problem is broken haskell packages, then that still doesn't explain why you get an error without any info
2025-12-16 10:15:07 +0100kuribas(~user@2a02:1808:41:7270:9839:ee7c:6379:63a8) kuribas
2025-12-16 10:15:38 +0100fp1(~Thunderbi@2001:708:20:1406::1370) fp
2025-12-16 10:15:42 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 10:15:43 +0100Googulator18(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 10:16:14 +0100fp(~Thunderbi@dhcp-86-128.eduroam.aalto.fi) (Ping timeout: 260 seconds)
2025-12-16 10:16:14 +0100fp1fp
2025-12-16 10:16:28 +0100chele(~chele@user/chele) chele
2025-12-16 10:18:18 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2025-12-16 10:18:40 +0100Googulator18Googulator
2025-12-16 10:24:01 +0100sp1ff(~user@2601:1c2:4c00:6820::c593) (Ping timeout: 246 seconds)
2025-12-16 10:28:36 +0100sp1ff(~user@2601:1c2:4c00:6820::c593) sp1ff
2025-12-16 10:30:48 +0100kuribas(~user@2a02:1808:41:7270:9839:ee7c:6379:63a8) (Ping timeout: 260 seconds)
2025-12-16 10:34:33 +0100fp(~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 256 seconds)
2025-12-16 10:42:22 +0100 <gentauro> tomsmeding: jep xD
2025-12-16 10:44:49 +0100 <dminuoso> gentauro: I favour `pure` only, but I learned Haskell post AMPD.
2025-12-16 10:44:54 +0100 <dminuoso> s/AMPD/AMP/
2025-12-16 10:45:05 +0100 <gentauro> but truth to be told, I'm building from GIT (scratch), so I'm not really impacted by that issue. (they have made a simplex-chat-desktop heavy on the UI, but not the simplex-chat-cli, which is what I'm trying to do, but, if I can't build locally, pretty diff to make a pkg)
2025-12-16 10:45:56 +0100trickard_trickard
2025-12-16 10:46:19 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net)
2025-12-16 10:47:49 +0100 <dminuoso> [exa]: No, that's precisely the upgrade you get from Monad over Applicative or Selective.
2025-12-16 10:48:12 +0100 <dminuoso> % :t (>>=>)
2025-12-16 10:48:12 +0100 <yahb2> <interactive>:1:1: error: [GHC-88464] ; Variable not in scope: >>=> ; Suggested fix: Perhaps use ‘>>=’ (imported from Prelude)
2025-12-16 10:48:17 +0100 <dminuoso> % :t (>>=)
2025-12-16 10:48:17 +0100 <yahb2> (>>=) :: Monad m => m a -> (a -> m b) -> m b
2025-12-16 10:48:51 +0100 <dminuoso> This describes precisely an effect that depends on the result of a previous effect.
2025-12-16 10:50:26 +0100 <dminuoso> [exa]: *If* your Int is bounded, in theory you could also describe it with Selective of course if you enumerate every possible number in your program.
2025-12-16 10:50:45 +0100 <dminuoso> I'll leave the decision up to you whether you should do that. :-)
2025-12-16 10:51:49 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 260 seconds)
2025-12-16 10:52:30 +0100 <gentauro> if you parse, lets say encoded bytes over the wire, where the length is encoded in varInt/zigZag/…, you MUST use `>>=` to parse length to ensure correct boundries with upcoming bytes?
2025-12-16 10:52:59 +0100 <gentauro> ex: list of strings
2025-12-16 10:53:09 +0100 <dminuoso> gentauro: I think you could do a kind of recursion trick parsing it with `select` perhaps.
2025-12-16 10:53:20 +0100 <dminuoso> But it would result in downright silly performance.
2025-12-16 10:53:38 +0100fp(~Thunderbi@130.233.70.102) fp
2025-12-16 10:53:41 +0100 <gentauro> makes sense
2025-12-16 10:54:07 +0100fp1(~Thunderbi@wireless-86-50-140-165.open.aalto.fi) fp
2025-12-16 10:55:07 +0100 <dminuoso> This should be a fun excercise, let me try this.
2025-12-16 10:55:30 +0100tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2025-12-16 10:56:30 +0100 <dminuoso> I think you should be able to write `>>= :: (Enum a, Selective f) => f a -> (a -> f b) -> f b`
2025-12-16 10:56:30 +0100chromoblob✌️ ski
2025-12-16 10:57:03 +0100poscat0x04(~poscat@user/poscat) (Remote host closed the connection)
2025-12-16 10:57:08 +0100 <dminuoso> Ah no, not quite.
2025-12-16 10:57:47 +0100 <dminuoso> `bindEither :: (Enum a, Selective f) => f (Either a b) -> (a -> f b) -> f b`
2025-12-16 10:57:49 +0100 <dminuoso> This.
2025-12-16 10:58:05 +0100fp(~Thunderbi@130.233.70.102) (Ping timeout: 250 seconds)
2025-12-16 10:58:07 +0100fp1(~Thunderbi@wireless-86-50-140-165.open.aalto.fi) (Ping timeout: 240 seconds)
2025-12-16 11:00:10 +0100poscat(~poscat@user/poscat) poscat
2025-12-16 11:04:41 +0100humasect_(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2025-12-16 11:04:52 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 11:06:28 +0100mangoiv(~mangoiv@user/mangoiv) mangoiv
2025-12-16 11:09:18 +0100humasect_(~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 260 seconds)
2025-12-16 11:09:19 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 240 seconds)
2025-12-16 11:21:15 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 11:21:25 +0100xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 246 seconds)
2025-12-16 11:24:26 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
2025-12-16 11:25:14 +0100trickard(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 11:25:27 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 11:25:35 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 240 seconds)
2025-12-16 11:28:59 +0100haritz(~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8)
2025-12-16 11:28:59 +0100haritz(~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host)
2025-12-16 11:28:59 +0100haritz(~hrtz@user/haritz) haritz
2025-12-16 11:31:20 +0100 <dutchie> I'm having trouble with quoting ghc-options in cabal files. In my .cabal I have: `ghc-options: -Wall -with-rtsopts="-N -I0"` but when I build, I get a warning `Warning: [misplaced-c-opt] Instead of 'ghc-options: -I0"' use 'include-dirs: 0"'` and then my program errors out complaining that the rts option `"-N` is unexpected
2025-12-16 11:31:34 +0100 <dutchie> how can i pass multiple flags to -with-rtsopts?
2025-12-16 11:31:48 +0100 <[exa]> dminuoso: Is that precisely the Monad jump though? I somehow felt that having the integers always finite would degrade the capabilities of the stuff a little (as in, you can't encode actual turing machine into that computation, right?)
2025-12-16 11:31:51 +0100 <tomsmeding> dutchie: you have to put the quotes around the entire thing
2025-12-16 11:31:57 +0100 <tomsmeding> "-with-rtsopts=-N -I0"
2025-12-16 11:32:14 +0100 <dutchie> ah i think that's about the only quotation mode i've not tried lol
2025-12-16 11:32:40 +0100 <dminuoso> [exa]: Like I said, in principle you could recurse over anything enumerable with something like `bindEither :: (Enum a, Selective f) => f (Either a b) -> (a -> f b) -> f b`, but it would result in terrible performance
2025-12-16 11:33:17 +0100 <dutchie> ty, that's sorted it
2025-12-16 11:33:39 +0100 <dminuoso> [exa]: So its not just about being finite, but being enumerable.
2025-12-16 11:33:45 +0100 <[exa]> dminuoso: yeah that is true, I'm more like searching for a theoretical argument
2025-12-16 11:34:51 +0100 <[exa]> as in, not "how to simulate this with selectives" but "how does this allow you to run an arbitrary monad"
2025-12-16 11:34:58 +0100 <dminuoso> [exa]: Selective gives you the power to branch. To find a number, you would have to essentially enumerate that branching until you arrive at a branch that matches that precise number/
2025-12-16 11:35:17 +0100 <dminuoso> [exa]: That is, you enumerate all possible numbers into a parser tree, and with `select` you can navigate one branch at a time.
2025-12-16 11:35:32 +0100 <dminuoso> This is not an arbitrary monad.
2025-12-16 11:35:35 +0100 <dminuoso> Monad is strictly more powerful.
2025-12-16 11:35:44 +0100 <[exa]> ah okay good
2025-12-16 11:35:54 +0100 <dminuoso> Monad can do it without having to enumerate.
2025-12-16 11:36:03 +0100 <dminuoso> So it works on things that are not enumerable.
2025-12-16 11:36:24 +0100 <[exa]> ahhhhhhhhh ok I think I get the whole problem now
2025-12-16 11:36:26 +0100 <[exa]> okay
2025-12-16 11:36:28 +0100 <[exa]> good
2025-12-16 11:36:30 +0100 <[exa]> thanks
2025-12-16 11:37:08 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 11:37:28 +0100 <[exa]> so if this would be a typeclass, it would make sense (not completely a Monad) but it would be more like an efficiency upgrade of Selectives for this exact case, not actual new functionality
2025-12-16 11:37:51 +0100 <dminuoso> [exa]: One good way to think about selective is to imagine that `Applicative` gives you a kind of diamond that acts "in parallel" (but I mean that in a reall loose sense), whereas `Selective` gives you a diamond that acts as a conditional branch .
2025-12-16 11:39:08 +0100 <dminuoso> [exa]: And no, not a separate typeclass
2025-12-16 11:39:24 +0100 <dminuoso> [exa]: The prescribed `bindEither` above should be writable.
2025-12-16 11:39:28 +0100 <dminuoso> With no extra typeclass
2025-12-16 11:39:54 +0100 <tomsmeding> I guess you can formulate it as: with Selective you can have branching on previously-computed values, but the whole branching tree must be known before seeing any values
2025-12-16 11:40:14 +0100 <[exa]> yeah, I wanted this more for the static analysis, the extra action would be somewhat of a kleene star, but you'd know exactly what you need to compute to know how many repetitions are there
2025-12-16 11:40:40 +0100 <tomsmeding> whereas with Monad, the branches can be decided on _after_ seeing values, which corresponds to a possibly infinite branching tree if you'dd need to specify it all statically
2025-12-16 11:40:49 +0100 <dminuoso> tomsmeding: Sure. And with `monad` the parse structure is potentially completely unknown, as it can depend on effect results.
2025-12-16 11:40:58 +0100 <dminuoso> % :t (>>=)
2025-12-16 11:40:59 +0100 <yahb2> (>>=) :: Monad m => m a -> (a -> m b) -> m b
2025-12-16 11:41:02 +0100 <dminuoso> It's literally baked into this type. :)
2025-12-16 11:41:07 +0100 <tomsmeding> yes :)
2025-12-16 11:41:43 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 264 seconds)
2025-12-16 11:41:58 +0100 <dminuoso> Of course, if we applied some black hole theory and cosmology, one could argue that all possible executions are enumeratable - the entropy of the visible universe is finite.
2025-12-16 11:42:03 +0100 <dminuoso> enumerable?
2025-12-16 11:42:10 +0100 <[exa]> I probably just want an actual marker there into the selective tree that tells me "this selection is numeric"
2025-12-16 11:42:33 +0100 <tomsmeding> and give an infinite list of branches?
2025-12-16 11:42:48 +0100 <dminuoso> Finiteness is a red herring.
2025-12-16 11:42:54 +0100 <dminuoso> It's just about enumerability I think?
2025-12-16 11:42:59 +0100 <tomsmeding> is Integer enumerable?
2025-12-16 11:43:09 +0100 <tomsmeding> (ignoring cosmology arguments)
2025-12-16 11:43:30 +0100 <dminuoso> `Enum Integer` is a thing
2025-12-16 11:44:06 +0100 <tomsmeding> but can you simulate `(>>=) @_ @Integer` with Selective?
2025-12-16 11:44:25 +0100 <tomsmeding> (you can simulate `(>>=) @_ @Bool` trivially using Either () ())
2025-12-16 11:44:48 +0100 <dminuoso> Im thinking that perhaps we need at least one bound, or some base case. Enum doesnt seem to have `zero :: Enum a => a`
2025-12-16 11:45:11 +0100 <tomsmeding> you can also simulate `(>>=) @_ @Int`, with a branching tree that has 2^64 leaves, and a cosmological computer
2025-12-16 11:45:18 +0100 <dminuoso> There is `toEnum :: Enum a => Int -> a` but Im not sure about its semantics
2025-12-16 11:45:30 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 11:45:42 +0100Googulator71(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 11:45:44 +0100 <dminuoso> tomsmeding: Even without cosmology arguments, it's very trivial to enumerate over all Integer?
2025-12-16 11:45:48 +0100 <dminuoso> Assuming infinite memory.
2025-12-16 11:45:55 +0100 <dminuoso> Integer is countable
2025-12-16 11:45:58 +0100 <tomsmeding> only if the selective functor itself is lazy, I guess?
2025-12-16 11:46:07 +0100 <tomsmeding> because the branching tree would be infinitely large
2025-12-16 11:46:14 +0100 <dminuoso> It just matters whether its countable.
2025-12-16 11:46:20 +0100 <dminuoso> Or does it?
2025-12-16 11:46:24 +0100 <tomsmeding> well everything is countable
2025-12-16 11:46:25 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 11:46:29 +0100 <dminuoso> Not everything is.
2025-12-16 11:46:34 +0100 <tomsmeding> in computer science, everything is
2025-12-16 11:47:45 +0100 <tomsmeding> so if the question is just whether the thing being branched on is countable, then the difference between Selective and Monad would only be one of performance and memory use
2025-12-16 11:48:03 +0100 <dminuoso> So this is an interesting question.
2025-12-16 11:48:16 +0100 <dminuoso> Is `Enum` the typeclass of things that are countable?
2025-12-16 11:48:21 +0100 <dminuoso> Is Rational Enum?
2025-12-16 11:48:38 +0100 <tomsmeding> Enum is nothing, essentially, as it has no sensible laws and the methods are nonsense too (can you only enumerate things that are Int-large?)
2025-12-16 11:49:23 +0100 <tomsmeding> no, because Rational is at least as large as Integer, and Integer is bigger than Int, and you must define fromEnum
2025-12-16 11:49:38 +0100 <tomsmeding> but that just shows that the Enum class is nonsense, not any kind of enumerability of Rational
2025-12-16 11:49:47 +0100 <tomsmeding> because Rational is very countable indeed
2025-12-16 11:49:53 +0100somemathguy(~somemathg@user/somemathguy) somemathguy
2025-12-16 11:50:22 +0100 <tomsmeding> (Enum is useful as a base for [..] syntax, but that's not under discussion here)
2025-12-16 11:52:09 +0100 <dminuoso> tomsmeding: I think Enum is in a weird state in that it feels like its *meant* to represent things that are countable, since the ability to enumerate seems to align with the mathematical notion of countability. But the [..] and relatedly fromEnum/toEnum make it a somewhat adhoc thing.
2025-12-16 11:52:25 +0100 <tomsmeding> right
2025-12-16 11:53:19 +0100 <tomsmeding> it's actually useful for [..] (apart from not being able to enumerate stuff that's bigger than Int, which is nonsense), and it's _almost_ useful for describing enumerability in general, but then falls short
2025-12-16 11:53:36 +0100 <tomsmeding> it's like Arrow with `arr`, except that Enum actually has some use still
2025-12-16 11:53:43 +0100 <dminuoso> So we would need a kind of `class Countable a => fromNat :: Natural -> a`
2025-12-16 11:54:07 +0100 <tomsmeding> I'd like a mapping in the other direction too with a law saying that they are inverses
2025-12-16 11:54:22 +0100 <haskellbridge> <loonycyborg> I don't see how it represents countability in mathematical sense
2025-12-16 11:54:22 +0100 <haskellbridge> <loonycyborg> it's merely prerequisite
2025-12-16 11:54:31 +0100 <haskellbridge> <loonycyborg> but there are many ways of counting the same thing
2025-12-16 11:54:47 +0100 <dminuoso> loonycyborg: The fromEnum/toEnum are really the same essence.
2025-12-16 11:55:01 +0100Googulator71Googulator
2025-12-16 11:55:01 +0100 <dminuoso> Except it's constrained to Int instead of Natural
2025-12-16 11:55:03 +0100 <haskellbridge> <loonycyborg> that is making a mapping of Thing -> Natural
2025-12-16 11:55:46 +0100 <tomsmeding> (another problem is that fromEnum and toEnum are not declared in the documentation to be inverses of each other, although we can reasonably say that they "obviously" must be)
2025-12-16 11:56:01 +0100 <dminuoso> Being countable really means a one-to-one mapping to ℕ
2025-12-16 11:56:27 +0100 <dminuoso> loonycyborg: It does not matter *how* you count it.
2025-12-16 11:56:38 +0100 <dminuoso> As long as you *can* provide any way to map to ℕ
2025-12-16 11:56:47 +0100 <haskellbridge> <loonycyborg> Enum represents only one way that is deemed useful for whatever reason
2025-12-16 11:58:03 +0100 <lucabtz> dminuoso: countable = finite or 1-1 mapping to N
2025-12-16 11:58:14 +0100 <tomsmeding> countable = injective mapping to N
2025-12-16 11:58:19 +0100arandombit(~arandombi@user/arandombit) (Ping timeout: 260 seconds)
2025-12-16 11:58:21 +0100 <lucabtz> if finite there is not 1-1 mapping with N, but still countable
2025-12-16 11:58:21 +0100 <dminuoso> Given that `toEnum, fromEnum` are the minimal methods, and `toEnum` is in principle derivable from `fromEnum`... the loose description in the Haskell report really implies that its something along the lines of Countability.
2025-12-16 11:58:43 +0100arandombit(~arandombi@user/arandombit) arandombit
2025-12-16 11:58:52 +0100 <dminuoso> lucabtz: Yes, Enum lacks the ability to talk about infinite sets.
2025-12-16 11:59:00 +0100 <merijn> and sparse sets
2025-12-16 11:59:14 +0100 <tomsmeding> merijn: we're talking about countability here, not usefulness
2025-12-16 11:59:32 +0100 <dminuoso> But that really goes into the line of "Haskell has Int in a lot of places where, morally, it should use Integer or Natural" instead.
2025-12-16 11:59:34 +0100 <lucabtz> tomsmeding: yeah i suppose dropping surjectivity is the same
2025-12-16 11:59:42 +0100 <dminuoso> The choice of `Int` in most places is because of history and performance.
2025-12-16 12:00:09 +0100 <dminuoso> So if we squint a bit, Enum is meant to be that Countable typeclass...
2025-12-16 12:01:11 +0100 <probie> and also reasonability, `(!!) :: [a] -> Integer -> a` doesn't gain you anything, because you don't have time to walk that very large list (nor enough memory unless it has a cycle)
2025-12-16 12:01:37 +0100 <tomsmeding> walking Int is also not particularly practical
2025-12-16 12:01:52 +0100 <tomsmeding> (on modern 64-bit machines)
2025-12-16 12:02:27 +0100 <dminuoso> probie: That's the other side of it. The [] structure is so pervasive because it both represents control flow *and* data. When its used for data, its a really poor fit because it results in terrible access patterns.
2025-12-16 12:02:52 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 12:02:56 +0100 <dminuoso> So on one hand we favour Int because its much faster due to direct mapping into machine registers, but then we drag those singly linked lists around everywhere.
2025-12-16 12:03:00 +0100 <dminuoso> A weird state we are in.
2025-12-16 12:03:06 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 12:03:29 +0100 <probie> but for Enum, it's quite possible to want `[a..b]` where `fromEnum a - fromEnum b` is small, but `fromEnum a` is bigger than int
2025-12-16 12:03:53 +0100 <dminuoso> probie: Given that `fromEnum/toEnum` are minimal, one could assume that they should not be partial.
2025-12-16 12:04:05 +0100 <dminuoso> But there's so many bottoms flying around in base...
2025-12-16 12:04:42 +0100 <probie> Sorry, I was unclear. I mean for things that "should" be `Enum`, if there weren't too many of them
2025-12-16 12:04:48 +0100 <dminuoso> At least for `fromEnum` an argument could be made that it should behave in a cyclic fashion.
2025-12-16 12:04:59 +0100 <dminuoso> Or no, I meant `toEnum`
2025-12-16 12:05:37 +0100 <haskellbridge> <magic_rb> Singly linked lists make sense in many cases due to laziness, but generally one should use vector yes
2025-12-16 12:06:37 +0100 <probie> as in `Integer` is genuinely a better chouce needed for {to,from}Enum in a way that isn't the case in other places `Int` is used instead (like `(!!)`)
2025-12-16 12:06:38 +0100 <merijn> magic_rb: I don't think "generally you should use vector" is right.
2025-12-16 12:06:51 +0100deptype(~deptype@2406:b400:3a:9d2f:476c:a58e:3471:ff37)
2025-12-16 12:06:53 +0100 <merijn> Don't get me wrong, Vector is *often* right, but I'm not sure I'd ever recommend defaulting to it
2025-12-16 12:07:01 +0100 <probie> Vector requires me to copy the whole thing to "change" a single element. This is often not desirable
2025-12-16 12:07:23 +0100 <dminuoso> I sometimes wish there was a kind of Vector/[] polymorphism, that I could myself decide what I want.
2025-12-16 12:07:29 +0100 <dminuoso> But something without typeclasses
2025-12-16 12:07:34 +0100 <merijn> probie: Vector doesn't always copy the whole thing, and also mutable Vector exists :)
2025-12-16 12:07:48 +0100 <dminuoso> What was that cabal feature along the lines of OCaml functors called again?
2025-12-16 12:07:51 +0100 <haskellbridge> <loonycyborg> in ST monad?
2025-12-16 12:07:51 +0100 <haskellbridge> <magic_rb> ^
2025-12-16 12:07:54 +0100 <merijn> dminuoso: backpack
2025-12-16 12:07:55 +0100 <probie> dminuoso: backpack
2025-12-16 12:07:57 +0100 <haskellbridge> <magic_rb> Yeah vector in ST
2025-12-16 12:08:03 +0100 <dminuoso> Right backpack.
2025-12-16 12:08:17 +0100 <merijn> loonycyborg: Vector has a bunch, there's ST, but also IO
2025-12-16 12:08:26 +0100 <merijn> Depending on your usecase
2025-12-16 12:08:30 +0100 <dminuoso> Yeah if via backpack I could just swap between vector or list for a given package that would be ideal.
2025-12-16 12:08:50 +0100 <dminuoso> Of course it's completely unreasonable for 2 major reasons.
2025-12-16 12:09:06 +0100 <merijn> tbh, I'm a big fan of "just thinking about your data type choices" :p
2025-12-16 12:09:07 +0100 <haskellbridge> <loonycyborg> But still it's procedural state, in haskell you'd want a persistent structure in general. Unless you wanna go all out for a hotspot.
2025-12-16 12:09:30 +0100 <merijn> Vector is very good for lots of things, and List good for lots of other things
2025-12-16 12:09:46 +0100 <dminuoso> merijn: For a library thats tought unless you like to duplicate interfaces. And with duplicated things you get the typical `toLazy/fromLazy` nonsense when passing text between library portions.
2025-12-16 12:10:13 +0100 <haskellbridge> <magic_rb> Generally List is fine if you dont care about performance and arent storing it around or traversing it in any other direction than linearly forward
2025-12-16 12:10:15 +0100 <probie> Vector is very good for lots of things, and GHC does some very heavy lifting to make List good for lots of other things :p
2025-12-16 12:10:42 +0100 <merijn> dminuoso: A library should use whatever's best for said library
2025-12-16 12:10:51 +0100 <merijn> especially since Vector.toList is super cheap
2025-12-16 12:11:06 +0100 <merijn> So someone wanting to pass a vector can easily convert to a list on demand
2025-12-16 12:12:54 +0100 <haskellbridge> <loonycyborg> There's also Seq, and Set and lots of other containers depending on your needs
2025-12-16 12:13:17 +0100 <probie> Let's just cut out the middle man and pass the fold `data List a = forall b . List ((a -> b -> b) -> b -> b)`
2025-12-16 12:13:24 +0100 <dminuoso> Maybe it depends a bit on your problem domain, but in one of our projects there's quite a bit of `pack/unpack`, `fromStrict/ToString` or even combinations going on.
2025-12-16 12:13:43 +0100 <dminuoso> There's just so much impedance mismatching going on when interfacing with more than one library at a time.
2025-12-16 12:13:54 +0100Pixi(~Pixi@user/pixi) Pixi
2025-12-16 12:14:00 +0100 <probie> (to clarify, my above statement is a joke, since that meets even fewer use cases than a list)
2025-12-16 12:14:03 +0100 <dminuoso> And those problems are exactly the same as the above vector/list problems.
2025-12-16 12:14:11 +0100 <haskellbridge> <magic_rb> Sounds to me like things need to get more generic :)
2025-12-16 12:14:31 +0100 <dminuoso> probie: Joke is on you, thats precisely what GHC does behind the scenes for you in a lot of places.
2025-12-16 12:15:21 +0100 <dminuoso> Its what the whole build/foldr fusion works.
2025-12-16 12:15:57 +0100 <dminuoso> Or is that what you were hinting at?
2025-12-16 12:18:48 +0100ljdarj(~Thunderbi@user/ljdarj) (Read error: Connection reset by peer)
2025-12-16 12:20:03 +0100xff0x(~xff0x@2405:6580:b080:900:4560:111e:4edd:d178)
2025-12-16 12:23:05 +0100wootehfoot(~wootehfoo@user/wootehfoot) wootehfoot
2025-12-16 12:28:13 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 264 seconds)
2025-12-16 12:28:27 +0100wootehfoot(~wootehfoo@user/wootehfoot) (Quit: Leaving)
2025-12-16 12:35:23 +0100trickard_trickard
2025-12-16 12:39:40 +0100Maxdamantus(~Maxdamant@user/maxdamantus) (Ping timeout: 255 seconds)
2025-12-16 12:40:11 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-12-16 12:40:49 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 12:40:56 +0100Maxdamantus(~Maxdamant@user/maxdamantus) Maxdamantus
2025-12-16 12:45:37 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 264 seconds)
2025-12-16 12:54:12 +0100bggd(~bgg@2a01:e0a:fd5:f510:fc9f:3e03:d92a:8f6)
2025-12-16 12:54:13 +0100bggd(~bgg@2a01:e0a:fd5:f510:fc9f:3e03:d92a:8f6) (Changing host)
2025-12-16 12:54:13 +0100bggd(~bgg@user/bggd) bggd
2025-12-16 12:56:38 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 13:00:43 +0100somemathguy(~somemathg@user/somemathguy) (Quit: WeeChat 4.1.1)
2025-12-16 13:01:10 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 246 seconds)
2025-12-16 13:07:45 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 13:08:29 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-16 13:15:41 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 13:15:48 +0100Googulator67(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 13:20:55 +0100lucabtz(~lucabtz@user/lucabtz) (Ping timeout: 240 seconds)
2025-12-16 13:31:15 +0100latticepolytope(~user@user/isekaijin) isekaijin
2025-12-16 13:32:27 +0100pavonia(~user@user/siracusa) (Ping timeout: 252 seconds)
2025-12-16 13:32:35 +0100LainIwakura(~LainIwaku@user/LainIwakura) (Quit: Client closed)
2025-12-16 13:33:38 +0100lucabtz(~lucabtz@user/lucabtz) lucabtz
2025-12-16 13:34:07 +0100pabs3(~pabs3@user/pabs3) (Ping timeout: 240 seconds)
2025-12-16 13:35:40 +0100pabs3(~pabs3@user/pabs3) pabs3
2025-12-16 13:40:11 +0100Googulator67(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 13:40:29 +0100Googulator67(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 13:42:21 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 252 seconds)
2025-12-16 13:42:42 +0100 <Leary> [exa], dminuoso: Bit late to the party, but I wrote something vaguely amusing: https://gist.github.com/LSLeary/e108d7a7ee27e0a9e9bee27fe9247910
2025-12-16 13:45:24 +0100pavonia(~user@user/siracusa) siracusa
2025-12-16 13:45:32 +0100Googulator67(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 13:45:41 +0100Googulator67(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 13:48:00 +0100 <[exa]> Leary: that's wonderful
2025-12-16 13:54:37 +0100weary-traveler(~user@user/user363627) (Quit: Konversation terminated!)
2025-12-16 13:54:54 +0100weary-traveler(~user@user/user363627) user363627
2025-12-16 13:57:08 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2025-12-16 13:58:34 +0100 <kuribas> Can you use lazyness to determine if a graph has loops?
2025-12-16 13:58:40 +0100 <kuribas> I guess no, because it will just loop?
2025-12-16 13:59:39 +0100 <kuribas> For example, Map a [a] -> Map a (Maybe Int), where Nothing means ther is a loop, n means it has n parents.
2025-12-16 14:02:01 +0100 <kuribas> I guess I just need to recurse, and consider visited nodes.
2025-12-16 14:04:52 +0100merijn(~merijn@77.242.116.146) (Quit: reboot)
2025-12-16 14:05:33 +0100Googulator67(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 14:05:51 +0100Googulator67(~Googulato@87-97-86-146.pool.digikabel.hu)
2025-12-16 14:15:12 +0100Googulator67(~Googulato@87-97-86-146.pool.digikabel.hu) (Quit: Client closed)
2025-12-16 14:15:35 +0100Googulator67(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 14:21:17 +0100myxokephale(~myxos@2001:579:8380:f20:f2c2:4b00:b76e:8530) myxokephale
2025-12-16 14:21:22 +0100 <ski> gentauro : yea (although not keywords)
2025-12-16 14:23:31 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 14:23:46 +0100myxos(~myxos@2001:579:8380:f20:bd90:58c1:9ba1:835a) (Ping timeout: 246 seconds)
2025-12-16 14:25:01 +0100Psy-Q(~psy-q@user/psy-q) Psy-Q
2025-12-16 14:29:37 +0100 <kuribas> How can this work without constraints? reachable :: HashSet a -> HashMap a [a] -> HashSet a
2025-12-16 14:29:59 +0100 <kuribas> Does GHC now infer constraints?
2025-12-16 14:32:54 +0100 <[exa]> kuribas: which constraint would be missing there? I guess Hashable, but that might not be needed
2025-12-16 14:33:06 +0100 <[exa]> (depending on what kind of hash table is used ofc)
2025-12-16 14:33:14 +0100 <kuribas> [exa]: HashMap.lookupDefault needs it though?
2025-12-16 14:33:23 +0100 <kuribas> unordered-containers
2025-12-16 14:34:22 +0100 <[exa]> yeah I guess there it doesn't need the actual values, it just follows the hashes
2025-12-16 14:34:39 +0100 <[exa]> use the source tho
2025-12-16 14:35:09 +0100 <kuribas> https://hackage-content.haskell.org/package/unordered-containers-0.2.21/docs/src/Data.HashMap.Inte…
2025-12-16 14:35:22 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091)
2025-12-16 14:41:09 +0100 <tomsmeding> it's the source of reachable that is relevant here, not that of lookupDefault
2025-12-16 14:41:30 +0100 <kuribas> tomsmeding: HashSet.fromList $ HashSet.toList nodes >>= (\n -> HashMap.lookupDefault [] n mapping)
2025-12-16 14:42:42 +0100 <tomsmeding> it's even easier to think about the fromList
2025-12-16 14:43:03 +0100 <tomsmeding> this should definitely incur a 'Hashable a' constraint
2025-12-16 14:43:57 +0100wootehfoot(~wootehfoo@user/wootehfoot) wootehfoot
2025-12-16 14:44:13 +0100 <kuribas> Yes, but it doesn't?
2025-12-16 14:44:38 +0100 <kuribas> Or do you mean infer, by incur?
2025-12-16 14:45:09 +0100rekahsoft(~rekahsoft@70.51.99.245) rekahsoft
2025-12-16 14:45:43 +0100Googulator67(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 14:45:46 +0100Googulator54(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 14:52:32 +0100 <[exa]> kuribas: where did you get the `reachable` btw?
2025-12-16 14:52:43 +0100 <kuribas> [exa]: I wrote it
2025-12-16 14:53:25 +0100 <kuribas> Oh, there was another error somewhere else, which took precedence over the instance check apparently...
2025-12-16 14:53:40 +0100 <[exa]> yeah I was wondering
2025-12-16 14:55:56 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2025-12-16 15:01:02 +0100jmcantrell_(~weechat@user/jmcantrell) jmcantrell
2025-12-16 15:01:27 +0100jmcantrell_jmcantrell
2025-12-16 15:04:05 +0100cubic_jpg(~cubic_jpg@user/cubic-jpg:13603) cubic_jpg
2025-12-16 15:06:24 +0100 <tomsmeding> kuribas: if you're using HLS, then parse error > name resolution errors in patterns > kind errors > type errors > constraint errors, iirc
2025-12-16 15:06:43 +0100 <tomsmeding> or equivalently when using -fdefer-type-errors, because HLS passes that to GHC
2025-12-16 15:06:52 +0100 <tomsmeding> when not using that flag, the order is a bit more compressed, but there's still an ordering
2025-12-16 15:08:04 +0100 <kuribas> right
2025-12-16 15:09:08 +0100 <tomsmeding> see the "side note" here in the issue description https://gitlab.haskell.org/ghc/ghc/-/issues/26016
2025-12-16 15:09:11 +0100 <tomsmeding> I've complained about it before :p
2025-12-16 15:13:19 +0100jmcantrell(~weechat@user/jmcantrell) (Ping timeout: 240 seconds)
2025-12-16 15:16:01 +0100cubic_jpg(~cubic_jpg@user/cubic-jpg:13603) (Quit: Client closed)
2025-12-16 15:16:30 +0100cubic_jpg(~cubic_jpg@user/cubic-jpg:13603) cubic_jpg
2025-12-16 15:17:50 +0100Enrico63(~Enrico63@host-95-251-99-143.retail.telecomitalia.it) Enrico63
2025-12-16 15:21:31 +0100 <kuribas> Also, for some reason lsp gives me the internal documentation, where there is no docstring...
2025-12-16 15:27:54 +0100somemathguy(~somemathg@user/somemathguy) somemathguy
2025-12-16 15:29:40 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-12-16 15:34:56 +0100trickard(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 15:37:43 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 15:44:10 +0100spew(~spew@user/spew) spew
2025-12-16 15:49:51 +0100fp(~Thunderbi@130.233.70.102) fp
2025-12-16 15:53:10 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-16 15:54:15 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
2025-12-16 15:55:39 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091)
2025-12-16 15:56:39 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Client Quit)
2025-12-16 15:56:54 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 260 seconds)
2025-12-16 15:57:25 +0100spew(~spew@user/spew) (Quit: WeeChat 4.7.2)
2025-12-16 15:59:27 +0100spew(~spew@user/spew) spew
2025-12-16 16:01:38 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091)
2025-12-16 16:03:16 +0100Square2(~Square@user/square) Square
2025-12-16 16:06:27 +0100weary-traveler(~user@user/user363627) (Quit: Konversation terminated!)
2025-12-16 16:06:43 +0100weary-traveler(~user@user/user363627) user363627
2025-12-16 16:08:03 +0100weary-traveler(~user@user/user363627) (Client Quit)
2025-12-16 16:08:27 +0100weary-traveler(~user@user/user363627) user363627
2025-12-16 16:08:48 +0100tremon(~tremon@83.80.159.219) tremon
2025-12-16 16:09:03 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 16:11:05 +0100deptype_(~deptype@2406:b400:3a:9d2f:476c:a58e:3471:ff37)
2025-12-16 16:11:37 +0100infinity0(~infinity0@pwned.gg) (Ping timeout: 255 seconds)
2025-12-16 16:13:40 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 246 seconds)
2025-12-16 16:13:49 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Ping timeout: 264 seconds)
2025-12-16 16:14:05 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 16:15:18 +0100Enrico63(~Enrico63@host-95-251-99-143.retail.telecomitalia.it) (Quit: Client closed)
2025-12-16 16:15:50 +0100Googulator98(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 16:15:54 +0100Googulator54(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 16:27:15 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 16:27:40 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2025-12-16 16:32:11 +0100infinity0(~infinity0@pwned.gg) infinity0
2025-12-16 16:33:03 +0100Pixi`(~Pixi@user/pixi) Pixi
2025-12-16 16:35:43 +0100Pixi(~Pixi@user/pixi) (Ping timeout: 246 seconds)
2025-12-16 16:37:24 +0100j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-12-16 16:43:29 +0100 <kuribas> is it possible to do "pure" memoization, for example using a fix-point combinator?
2025-12-16 16:44:22 +0100 <lucabtz> i saw some libraries that do that
2025-12-16 16:44:32 +0100 <opqdonut> yes, using a lazy self-referential data structure
2025-12-16 16:44:35 +0100 <lucabtz> or claim to do that at least
2025-12-16 16:44:49 +0100 <opqdonut> for example an array, if you can enumerate all the inputt
2025-12-16 16:45:00 +0100j1n37(~j1n37@user/j1n37) j1n37
2025-12-16 16:45:13 +0100 <opqdonut> doing it "sparsely" like you would by mutating a map of values, is harder
2025-12-16 16:46:02 +0100 <opqdonut> the iconic fibonacci list is an example of this kind of memoization with an unbounded domain
2025-12-16 16:47:35 +0100 <opqdonut> a more general-purpose solution might be a trie
2025-12-16 16:47:44 +0100latticepolytope(~user@user/isekaijin) (Ping timeout: 244 seconds)
2025-12-16 16:48:21 +0100latticepolytope(~user@user/isekaijin) isekaijin
2025-12-16 16:48:24 +0100 <opqdonut> (practically people do it using unsafePerformIO, of course)
2025-12-16 16:48:31 +0100 <kuribas> Or parametrize over a monad? Like memoFix :: (forall m.Monad m => (a -> foo) -> a -> m foo) -> (a -> foo)
2025-12-16 16:48:50 +0100 <opqdonut> yeah
2025-12-16 16:48:51 +0100spew(~spew@user/spew) (Read error: Connection reset by peer)
2025-12-16 16:49:15 +0100 <kuribas> (missed an m...)
2025-12-16 16:49:58 +0100 <opqdonut> you can't make the m disappear from the final result tho
2025-12-16 16:50:21 +0100 <kuribas> Why not?
2025-12-16 16:50:43 +0100fgarcia(~lei@user/fgarcia) (Ping timeout: 264 seconds)
2025-12-16 16:51:17 +0100 <opqdonut> if you're relying on the monad sequencing to provide the concept of this-has-been-computed-before-that
2025-12-16 16:52:10 +0100 <kuribas> I can get "(a -> State memo foo)" =~ a -> memo -> (foo, memo), then flip, apply memo, and take the first.
2025-12-16 16:52:42 +0100 <opqdonut> sure, but then the next call won't use the outputted memo
2025-12-16 16:53:12 +0100 <lucabtz> yeah if you use State you have to live in the State monad
2025-12-16 16:53:13 +0100 <opqdonut> (unless you store it somewhere impurely)
2025-12-16 16:53:35 +0100spew(~spew@user/spew) spew
2025-12-16 16:53:38 +0100 <kuribas> yes, just the pure state monad, and I remove it in the end.
2025-12-16 16:53:47 +0100 <lucabtz> to escape the state you will have to provide a initial memo using runState which will be empty
2025-12-16 16:54:07 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-16 16:54:08 +0100 <lucabtz> unless you thread around the memo from different runState calls
2025-12-16 16:56:18 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-16 16:56:35 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2025-12-16 16:59:55 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 250 seconds)
2025-12-16 17:01:37 +0100fp(~Thunderbi@130.233.70.102) (Quit: fp)
2025-12-16 17:05:33 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2025-12-16 17:14:07 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091)
2025-12-16 17:14:44 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Client Quit)
2025-12-16 17:15:10 +0100machinedgod(~machinedg@d75-159-126-101.abhsia.telus.net) machinedgod
2025-12-16 17:15:50 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091)
2025-12-16 17:21:28 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
2025-12-16 17:22:00 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2025-12-16 17:22:35 +0100annamalai(~annamalai@157.32.210.253) (Ping timeout: 240 seconds)
2025-12-16 17:22:54 +0100annamalai(~annamalai@117.246.58.193) annamalai
2025-12-16 17:23:01 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 17:23:15 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 17:24:55 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 245 seconds)
2025-12-16 17:26:29 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 244 seconds)
2025-12-16 17:28:36 +0100chele(~chele@user/chele) (Remote host closed the connection)
2025-12-16 17:32:07 +0100lucabtz(~lucabtz@user/lucabtz) (Quit: Lost terminal)
2025-12-16 17:33:43 +0100Pixi`(~Pixi@user/pixi) (Quit: Leaving)
2025-12-16 17:34:35 +0100latticepolytope(~user@user/isekaijin) (Ping timeout: 240 seconds)
2025-12-16 17:36:30 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-16 17:36:36 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2025-12-16 17:37:29 +0100cubic_jpgNikServe
2025-12-16 17:38:07 +0100latticepolytope(~user@user/isekaijin) isekaijin
2025-12-16 17:39:29 +0100Pixi(~Pixi@user/pixi) Pixi
2025-12-16 17:40:15 +0100NikServeNikoChanServv
2025-12-16 17:42:22 +0100NikoChanServvNickSer
2025-12-16 17:43:09 +0100NickSer(~cubic_jpg@user/cubic-jpg:13603) (Quit: Client closed)
2025-12-16 17:43:41 +0100cubic_jpg(~cubic_jpg@user/cubic-jpg:13603) cubic_jpg
2025-12-16 17:48:02 +0100cubic_jpgSnacksSer
2025-12-16 17:48:07 +0100Googulator98Googulator
2025-12-16 17:48:08 +0100bggd(~bgg@user/bggd) (Remote host closed the connection)
2025-12-16 17:48:40 +0100Guest15(~Guest15@31-39-208.wireless.csail.mit.edu)
2025-12-16 17:49:13 +0100annamalai(~annamalai@117.246.58.193) (Ping timeout: 264 seconds)
2025-12-16 17:57:16 +0100weary-traveler(~user@user/user363627) (Quit: Konversation terminated!)
2025-12-16 17:57:32 +0100weary-traveler(~user@user/user363627) user363627
2025-12-16 17:58:58 +0100weary-traveler(~user@user/user363627) (Remote host closed the connection)
2025-12-16 17:59:56 +0100 <dminuoso> Leary: Ah yeah, guess I had something like that in mind. The choice of ifS makes it quite readable and expressive.
2025-12-16 18:00:04 +0100SnacksSer(~cubic_jpg@user/cubic-jpg:13603) (Quit: Client closed)
2025-12-16 18:00:19 +0100Lycurgus(~juan@user/Lycurgus) Lycurgus
2025-12-16 18:00:33 +0100cubic_jpg(~cubic_jpg@user/cubic-jpg:13603) cubic_jpg
2025-12-16 18:11:02 +0100ft_(~ft@p4fc2ab42.dip0.t-ipconnect.de) ft
2025-12-16 18:20:01 +0100ft_ft
2025-12-16 18:21:45 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 252 seconds)
2025-12-16 18:22:44 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 18:23:18 +0100Googulator(~Googulato@87-97-86-146.pool.digikabel.hu)
2025-12-16 18:29:50 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2025-12-16 18:30:27 +0100annamalai(~annamalai@117.246.173.168) annamalai
2025-12-16 18:33:08 +0100target_i(~target_i@user/target-i/x-6023099) target_i
2025-12-16 18:40:48 +0100annamalai(~annamalai@117.246.173.168) (Remote host closed the connection)
2025-12-16 18:41:18 +0100thaumavorio_(~thaumavor@thaumavor.io) (Quit: ZNC 1.8.2 - https://znc.in)
2025-12-16 18:41:38 +0100annamalai(~annamalai@117.246.173.168) annamalai
2025-12-16 18:42:25 +0100Square2(~Square@user/square) (Remote host closed the connection)
2025-12-16 18:42:46 +0100Square2(~Square@user/square) Square
2025-12-16 18:43:19 +0100Guest15(~Guest15@31-39-208.wireless.csail.mit.edu) (Quit: Client closed)
2025-12-16 18:43:39 +0100thaumavorio(~thaumavor@thaumavor.io) thaumavorio
2025-12-16 18:45:42 +0100Googulator(~Googulato@87-97-86-146.pool.digikabel.hu) (Quit: Client closed)
2025-12-16 18:45:49 +0100Googulator25(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 18:54:23 +0100tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net)
2025-12-16 18:56:54 +0100cubic_jpg(~cubic_jpg@user/cubic-jpg:13603) (Quit: Client closed)
2025-12-16 18:58:11 +0100Lycurgus(~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org ))
2025-12-16 19:05:31 +0100annamalai(~annamalai@117.246.173.168) (Ping timeout: 246 seconds)
2025-12-16 19:05:55 +0100gmg(~user@user/gehmehgeh) (Ping timeout: 252 seconds)
2025-12-16 19:06:01 +0100annamalai(~annamalai@157.32.212.233) annamalai
2025-12-16 19:07:28 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-16 19:08:06 +0100gmg(~user@user/gehmehgeh) gehmehgeh
2025-12-16 19:08:38 +0100larsivi(~larsivi@user/larsivi) larsivi
2025-12-16 19:09:19 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091)
2025-12-16 19:11:19 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Ping timeout: 240 seconds)
2025-12-16 19:15:22 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2025-12-16 19:15:46 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2025-12-16 19:17:12 +0100kaskal(~kaskal@2a02:8388:1a8b:7d00:dfb3:620:180e:8832) (Quit: ZNC - https://znc.in)
2025-12-16 19:17:32 +0100kaskal(~kaskal@84-115-235-223.cable.dynamic.surfer.at) kaskal
2025-12-16 19:27:28 +0100kimiamania99(~67ff9c12@user/kimiamania) (Quit: PegeLinux)
2025-12-16 19:28:44 +0100kimiamania99(~67ff9c12@user/kimiamania) kimiamania
2025-12-16 19:30:01 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 19:30:14 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 19:31:29 +0100deptype(~deptype@2406:b400:3a:9d2f:476c:a58e:3471:ff37) (Remote host closed the connection)
2025-12-16 19:31:29 +0100deptype_(~deptype@2406:b400:3a:9d2f:476c:a58e:3471:ff37) (Remote host closed the connection)
2025-12-16 19:31:59 +0100trickard_trickard
2025-12-16 19:41:16 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-16 19:41:17 +0100kuribas(~user@2a02:1808:41:1c70:586a:7bf2:33fa:d708) kuribas
2025-12-16 19:46:50 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 19:51:55 +0100Square2(~Square@user/square) (Ping timeout: 240 seconds)
2025-12-16 19:52:25 +0100trickard(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 19:52:39 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 19:53:19 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 20:04:31 +0100kuribas(~user@2a02:1808:41:1c70:586a:7bf2:33fa:d708) (Ping timeout: 250 seconds)
2025-12-16 20:04:43 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091)
2025-12-16 20:04:52 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 20:09:29 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-16 20:11:09 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
2025-12-16 20:19:15 +0100gmg(~user@user/gehmehgeh) (Ping timeout: 252 seconds)
2025-12-16 20:20:16 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 20:21:50 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-12-16 20:24:30 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-12-16 20:28:07 +0100gmg(~user@user/gehmehgeh) gehmehgeh
2025-12-16 20:32:00 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-12-16 20:33:01 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 264 seconds)
2025-12-16 20:33:19 +0100Lord_of_Life_Lord_of_Life
2025-12-16 20:34:40 +0100lambda_gibbon(~lambda_gi@208.83.175.39)
2025-12-16 20:35:31 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 20:39:43 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 20:45:15 +0100latticepolytope(~user@user/isekaijin) (Ping timeout: 240 seconds)
2025-12-16 20:47:45 +0100Googulator25Googulator
2025-12-16 20:53:28 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 20:57:09 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 20:57:33 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 20:57:46 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-16 20:57:48 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-16 20:59:51 +0100GdeVolpiano(~GdeVolpia@user/GdeVolpiano) (Quit: WeeChat 4.5.2)
2025-12-16 21:01:53 +0100kst(~krjst@2a0a:4cc0:2000:789a:b827:c6ff:fed6:bb48) (Quit: bye)
2025-12-16 21:02:10 +0100krjst(~krjst@2a0a:4cc0:2000:789a:b827:c6ff:fed6:bb48) krjst
2025-12-16 21:02:34 +0100GdeVolpiano(~GdeVolpia@user/GdeVolpiano) GdeVolpiano
2025-12-16 21:06:10 +0100pavonia(~user@user/siracusa) siracusa
2025-12-16 21:06:55 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-16 21:07:08 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 21:08:51 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 21:10:36 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-12-16 21:12:01 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au) (Ping timeout: 264 seconds)
2025-12-16 21:13:46 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-12-16 21:17:38 +0100Guest42(~Guest42@93-159-22-28.cgnat.inetia.pl)
2025-12-16 21:19:40 +0100Guest42(~Guest42@93-159-22-28.cgnat.inetia.pl) (Client Quit)
2025-12-16 21:21:19 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 21:23:00 +0100tromp(~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091)
2025-12-16 21:24:14 +0100trickard_(~trickard@cpe-81-98-47-163.wireline.com.au)
2025-12-16 21:25:53 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-16 21:36:50 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 21:41:25 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-16 21:45:40 +0100Googulator(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 21:45:46 +0100Googulator16(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu)
2025-12-16 21:45:50 +0100jmcantrell_(~weechat@user/jmcantrell) jmcantrell
2025-12-16 21:52:20 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 21:56:48 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-16 22:07:44 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 22:12:07 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 22:13:44 +0100Square2(~Square@user/square) Square
2025-12-16 22:14:19 +0100ljdarj(~Thunderbi@user/ljdarj) (Quit: ljdarj)
2025-12-16 22:14:37 +0100ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-12-16 22:15:48 +0100Googulator16(~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed)
2025-12-16 22:15:50 +0100Googulator38(~Googulato@87-97-86-146.pool.digikabel.hu)
2025-12-16 22:16:55 +0100ljdarj1ljdarj
2025-12-16 22:21:25 +0100myxos(~myxos@2001:579:8380:f20:b869:f32d:617d:ee68) myxokephale
2025-12-16 22:22:18 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 22:22:50 +0100target_i(~target_i@user/target-i/x-6023099) (Quit: leaving)
2025-12-16 22:24:18 +0100myxokephale(~myxos@2001:579:8380:f20:f2c2:4b00:b76e:8530) (Ping timeout: 252 seconds)
2025-12-16 22:28:55 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 22:30:21 +0100GdeVolpiano(~GdeVolpia@user/GdeVolpiano) (Ping timeout: 252 seconds)
2025-12-16 22:31:23 +0100GdeVolpiano(~GdeVolpia@user/GdeVolpiano) GdeVolpiano
2025-12-16 22:33:52 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 22:38:25 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-16 22:41:42 +0100arkeet(~arkeet@moriya.ca)
2025-12-16 22:48:54 +0100Square2(~Square@user/square) (Remote host closed the connection)
2025-12-16 22:49:10 +0100Square2(~Square@user/square) Square
2025-12-16 22:49:13 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 22:53:01 +0100lambda_gibbon(~lambda_gi@208.83.175.39) (Ping timeout: 255 seconds)
2025-12-16 22:53:43 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-16 22:58:04 +0100Everything(~Everythin@172-232-54-192.ip.linodeusercontent.com) Everything
2025-12-16 22:59:47 +0100ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-12-16 23:00:15 +0100_d0t(~{-d0t-}@user/-d0t-/x-7915216) (Ping timeout: 244 seconds)
2025-12-16 23:01:43 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 240 seconds)
2025-12-16 23:01:44 +0100ljdarj1ljdarj
2025-12-16 23:04:37 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 23:05:39 +0100_d0t(~{-d0t-}@user/-d0t-/x-7915216) {-d0t-}
2025-12-16 23:06:44 +0100 <haskellbridge> <lucabtz> this is similar to the discussion there was between pure and return. when I have a monad should I use liftM or fmap. similarly liftM2 or liftA2. I would use the M versions but using the other two could make the code more general in case at some point you may realize you can relax the monad to an Applicative
2025-12-16 23:07:15 +0100 <monochrom> :)
2025-12-16 23:09:17 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-12-16 23:09:26 +0100 <monochrom> I write "instance Functor MyMonad where fmap = liftM" when I'm lazy. :)
2025-12-16 23:12:36 +0100 <monochrom> Although, when teaching, I show coding up fmap for MyMonad directly because it is more basic and a good preparation.
2025-12-16 23:18:12 +0100 <geekosaur> isn't the lazy version `deriving Functor`?
2025-12-16 23:18:26 +0100 <monochrom> Oops heh.
2025-12-16 23:19:34 +0100 <monochrom> OK, "instance Applicative MyMonad where pure = (... this I will code up directly ...); liftA2 = liftM2; (<*>) = ap"
2025-12-16 23:20:56 +0100 <monochrom> Alternatively (pun!), I optimize for fewer import lines! So I use (<*>) to spare importing Control.Monad. :)
2025-12-16 23:21:06 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 23:21:25 +0100 <monochrom> (And then later I find myself needing foldM so the plan is foiled.)
2025-12-16 23:24:07 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 240 seconds)
2025-12-16 23:25:20 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-12-16 23:35:29 +0100trickard_trickard
2025-12-16 23:36:28 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2025-12-16 23:40:39 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-16 23:41:56 +0100peterbecich(~Thunderbi@71.84.33.135) peterbecich