2026/02/09

2026-02-09 00:01:10 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2026-02-09 00:01:36 +0100 <EvanR> returning an IO action is basically free monad if you think IO is like a huge free monad
2026-02-09 00:02:19 +0100 <EvanR> if the semantic value is a command to be executed... then the command data type or the command action itself could both be considered that
2026-02-09 00:02:48 +0100krei-se(~krei-se@p200300f1cfff3e880001000000000001.dip0.t-ipconnect.de) krei-se
2026-02-09 00:03:06 +0100tromp(~textual@2001:1c00:3487:1b00:199:803c:4cc4:404b) (Quit: My iMac has gone to sleep. ZZZzzz…)
2026-02-09 00:03:49 +0100 <EvanR> parse don't validate violation seems to be a different situation, where you validate something and then later run another parser on it
2026-02-09 00:04:03 +0100 <EvanR> the original data
2026-02-09 00:07:02 +0100 <chromoblob> why isn't IO a free monad actually?
2026-02-09 00:07:31 +0100 <ncf> can't pattern match on it
2026-02-09 00:07:36 +0100 <EvanR> performance, and or "we didn't think of it"
2026-02-09 00:08:13 +0100xff0x(~xff0x@2405:6580:b080:900:cadf:d9b9:dcb4:a899) (Quit: xff0x)
2026-02-09 00:10:14 +0100 <mauke> is this that "final tagless" thing
2026-02-09 00:10:16 +0100 <chromoblob> ncf: case putStr "123" of PutStr "123" -> ...
2026-02-09 00:10:47 +0100 <ncf> oh you mean from a design perspective
2026-02-09 00:11:27 +0100 <EvanR> the IO system predates free monads being popularized by the blogosphere
2026-02-09 00:11:49 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-02-09 00:13:00 +0100xff0x(~xff0x@2405:6580:b080:900:94ad:d9ab:f90:90c7)
2026-02-09 00:15:52 +0100twb(~twb@user/twb) twb
2026-02-09 00:16:31 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
2026-02-09 00:24:24 +0100 <geekosaur> also I think it doesn't extend nicely to threads?
2026-02-09 00:26:55 +0100 <dolio> There's multiple problems with it. What about FFI?
2026-02-09 00:27:18 +0100 <geekosaur> that too, yes
2026-02-09 00:27:37 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-02-09 00:27:44 +0100 <geekosaur> although I can think of ways to make it work, especially given that FFI already doesn't really handle varargs
2026-02-09 00:29:33 +0100 <dolio> I'm sure there are ways to do it, but the question is why you would, when being a free monad is likely not valuable at all.
2026-02-09 00:29:56 +0100 <dolio> Most likely the opposite.
2026-02-09 00:30:49 +0100 <dolio> IO specifically, that is.
2026-02-09 00:32:11 +0100 <geekosaur> tbh I've always considered that approach to be more useful conceptually than implementationally
2026-02-09 00:33:34 +0100 <dolio> If you're going to write multiple interpreters for one, then it might be worth it. But you want IO to be as low overhead as possible, bascially.
2026-02-09 00:34:07 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2026-02-09 00:45:38 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-02-09 00:47:20 +0100rainbyte(~rainbyte@186.22.19.214) rainbyte
2026-02-09 00:50:11 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-02-09 00:53:18 +0100oskarw(~user@user/oskarw) (Ping timeout: 256 seconds)
2026-02-09 01:01:24 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-02-09 01:04:14 +0100_JusSx_(~username@37.163.117.200) (Ping timeout: 244 seconds)
2026-02-09 01:06:18 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-02-09 01:09:11 +0100forell(~forell@user/forell) forell
2026-02-09 01:17:11 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-02-09 01:18:41 +0100trickard(~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2026-02-09 01:18:55 +0100trickard_(~trickard@cpe-61-98-47-163.wireline.com.au)
2026-02-09 01:20:07 +0100humasect_(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2026-02-09 01:21:58 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
2026-02-09 01:24:57 +0100emmanuelux(~em@user/emmanuelux) (Read error: Connection reset by peer)
2026-02-09 01:28:16 +0100emmanuelux(~em@user/emmanuelux) emmanuelux
2026-02-09 01:33:02 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-02-09 01:35:05 +0100Tuplanolla(~Tuplanoll@85-156-32-207.elisa-laajakaista.fi) (Ping timeout: 250 seconds)
2026-02-09 01:38:43 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-02-09 01:49:01 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-02-09 01:50:13 +0100xff0x(~xff0x@2405:6580:b080:900:94ad:d9ab:f90:90c7) (Ping timeout: 244 seconds)
2026-02-09 01:53:12 +0100 <ski> EvanR : with the former, you can do alternative analyses/semantics (perhaps sending the command to a different process, or pretty-printing it, or analyzing commands for potential trouble interaction, &c.)
2026-02-09 01:53:40 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-02-09 01:54:19 +0100 <ski> (cf. using a `String' as an error message, vs. a data type. with the latter, you can e.g. localize it to different languages, portray it differently for different UIs, &c.)
2026-02-09 01:54:35 +0100 <ski> @quote stark
2026-02-09 01:54:35 +0100 <lambdabot> AlanPerlis says: The string is a stark data structure and everywhere it is passed there is much duplication of process. It is a perfect vehicle for hiding information.
2026-02-09 02:01:17 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-02-09 02:03:59 +0100tremon(~tremon@83.80.159.219) (Quit: getting boxed in)
2026-02-09 02:14:03 +0100 <jreicher> String is almost not a type at all.
2026-02-09 02:24:05 +0100omidmash6(~omidmash@user/omidmash) omidmash
2026-02-09 02:26:36 +0100omidmash(~omidmash@user/omidmash) (Ping timeout: 265 seconds)
2026-02-09 02:26:36 +0100omidmash6omidmash
2026-02-09 02:26:43 +0100trickard_(~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2026-02-09 02:26:56 +0100trickard_(~trickard@cpe-61-98-47-163.wireline.com.au)
2026-02-09 02:28:09 +0100Square2(~Square@user/square) (Ping timeout: 260 seconds)
2026-02-09 02:35:35 +0100merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-02-09 02:42:00 +0100xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2026-02-09 02:42:30 +0100xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Client Quit)
2026-02-09 02:44:20 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 252 seconds)