| 2026-02-09 00:01:10 +0100 | merijn | (~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 +0100 | krei-se | (~krei-se@p200300f1cfff3e880001000000000001.dip0.t-ipconnect.de) krei-se |
| 2026-02-09 00:03:06 +0100 | tromp | (~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 +0100 | xff0x | (~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 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 00:13:00 +0100 | xff0x | (~xff0x@2405:6580:b080:900:94ad:d9ab:f90:90c7) |
| 2026-02-09 00:15:52 +0100 | twb | (~twb@user/twb) twb |
| 2026-02-09 00:16:31 +0100 | merijn | (~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 +0100 | merijn | (~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 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-02-09 00:45:38 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 00:47:20 +0100 | rainbyte | (~rainbyte@186.22.19.214) rainbyte |
| 2026-02-09 00:50:11 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-02-09 00:53:18 +0100 | oskarw | (~user@user/oskarw) (Ping timeout: 256 seconds) |
| 2026-02-09 01:01:24 +0100 | merijn | (~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 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-02-09 01:09:11 +0100 | forell | (~forell@user/forell) forell |
| 2026-02-09 01:17:11 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 01:18:41 +0100 | trickard | (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-02-09 01:18:55 +0100 | trickard_ | (~trickard@cpe-61-98-47-163.wireline.com.au) |
| 2026-02-09 01:20:07 +0100 | humasect_ | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-02-09 01:21:58 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-02-09 01:24:57 +0100 | emmanuelux | (~em@user/emmanuelux) (Read error: Connection reset by peer) |
| 2026-02-09 01:28:16 +0100 | emmanuelux | (~em@user/emmanuelux) emmanuelux |
| 2026-02-09 01:33:02 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 01:35:05 +0100 | Tuplanolla | (~Tuplanoll@85-156-32-207.elisa-laajakaista.fi) (Ping timeout: 250 seconds) |
| 2026-02-09 01:38:43 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-02-09 01:49:01 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 01:50:13 +0100 | xff0x | (~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 +0100 | merijn | (~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 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 02:03:59 +0100 | tremon | (~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 +0100 | omidmash6 | (~omidmash@user/omidmash) omidmash |
| 2026-02-09 02:26:36 +0100 | omidmash | (~omidmash@user/omidmash) (Ping timeout: 265 seconds) |
| 2026-02-09 02:26:36 +0100 | omidmash6 | omidmash |
| 2026-02-09 02:26:43 +0100 | trickard_ | (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-02-09 02:26:56 +0100 | trickard_ | (~trickard@cpe-61-98-47-163.wireline.com.au) |
| 2026-02-09 02:28:09 +0100 | Square2 | (~Square@user/square) (Ping timeout: 260 seconds) |
| 2026-02-09 02:35:35 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-02-09 02:42:00 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2026-02-09 02:42:30 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Client Quit) |