| 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) |
| 2026-02-09 02:44:20 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 252 seconds) |
| 2026-02-09 02:45:01 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2026-02-09 02:47:02 +0100 | emmanuelux | (~em@user/emmanuelux) (Read error: Connection reset by peer) |
| 2026-02-09 02:47:24 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 02:49:42 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
| 2026-02-09 02:50:19 +0100 | emmanuelux | (~em@user/emmanuelux) emmanuelux |
| 2026-02-09 02:52:32 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-02-09 02:53:42 +0100 | emmanuelux_ | (~em@2a01cb011051ddce36cff6fffefa7e31.ipv6.abo.wanadoo.fr) |
| 2026-02-09 02:53:43 +0100 | emmanuelux | (~em@user/emmanuelux) (Read error: Connection reset by peer) |
| 2026-02-09 02:59:27 +0100 | twb | (~twb@user/twb) (Read error: Connection reset by peer) |
| 2026-02-09 02:59:49 +0100 | twb | (~twb@user/twb) twb |
| 2026-02-09 03:00:55 +0100 | otto_s | (~user@p5de2f96c.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
| 2026-02-09 03:01:45 +0100 | weary-traveler | (~user@user/user363627) user363627 |
| 2026-02-09 03:02:23 +0100 | otto_s | (~user@p5b044c1a.dip0.t-ipconnect.de) |
| 2026-02-09 03:02:45 +0100 | ljdarj | (~Thunderbi@user/ljdarj) (Quit: ljdarj) |
| 2026-02-09 03:02:50 +0100 | user363627 | (~user@user/user363627) user363627 |
| 2026-02-09 03:03:30 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 03:03:35 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Quit: xff0x) |
| 2026-02-09 03:03:48 +0100 | emmanuelux | (~em@user/emmanuelux) emmanuelux |
| 2026-02-09 03:04:06 +0100 | emmanuelux_ | (~em@2a01cb011051ddce36cff6fffefa7e31.ipv6.abo.wanadoo.fr) (Ping timeout: 244 seconds) |
| 2026-02-09 03:06:02 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2026-02-09 03:07:06 +0100 | weary-traveler | (~user@user/user363627) (Ping timeout: 244 seconds) |
| 2026-02-09 03:08:08 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-02-09 03:10:26 +0100 | emmanuelux | (~em@user/emmanuelux) (Read error: Connection reset by peer) |
| 2026-02-09 03:13:48 +0100 | emmanuelux | (~em@user/emmanuelux) emmanuelux |
| 2026-02-09 03:17:49 +0100 | <ncf> | huh? |
| 2026-02-09 03:18:53 +0100 | twb | (~twb@user/twb) (rcirc on GNU Emacs 30.1) |
| 2026-02-09 03:19:17 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 03:26:47 +0100 | <jreicher> | I just mean it's often a bucket for unstructured data. Some uses I've seen feel more like the developer not bothering to figure out the type rather than really determining it's a String. |
| 2026-02-09 03:26:56 +0100 | kimiamania4 | (~b4b260c9@user/kimiamania) (Quit: Ping timeout (120 seconds)) |
| 2026-02-09 03:27:01 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-02-09 03:27:17 +0100 | kimiamania4 | (~b4b260c9@user/kimiamania) kimiamania |
| 2026-02-09 03:29:22 +0100 | <geekosaur> | ☝ |
| 2026-02-09 03:30:02 +0100 | <geekosaur> | or just not thinking that, y'know, I'd prefer not to have to parse an error code out of a possibly localized string |
| 2026-02-09 03:33:37 +0100 | trickard_ | (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-02-09 03:33:51 +0100 | trickard_ | (~trickard@cpe-61-98-47-163.wireline.com.au) |
| 2026-02-09 03:34:09 +0100 | geekosaur | ahem Haskell Report… |
| 2026-02-09 03:34:47 +0100 | <geekosaur> | (at least ghc has internal APIs that expose `IOError` internals to get the useful stuff) |
| 2026-02-09 03:38:17 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 03:40:48 +0100 | <geekosaur> | sorry, `IOException`. https://hackage-content.haskell.org/package/base-4.22.0.0/docs/GHC-IO-Exception.html#t:IOException |
| 2026-02-09 03:44:55 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-02-09 03:50:04 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
| 2026-02-09 03:50:45 +0100 | gmg | (~user@user/gehmehgeh) gehmehgeh |
| 2026-02-09 03:56:18 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 03:56:34 +0100 | omidmash | (~omidmash@user/omidmash) (Quit: The Lounge - https://thelounge.chat) |
| 2026-02-09 04:00:20 +0100 | omidmash | (~omidmash@user/omidmash) omidmash |
| 2026-02-09 04:01:28 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 2026-02-09 04:02:56 +0100 | emmanuelux | (~em@user/emmanuelux) (Read error: Connection reset by peer) |
| 2026-02-09 04:06:12 +0100 | emmanuelux | (~em@user/emmanuelux) emmanuelux |
| 2026-02-09 04:12:04 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-02-09 04:13:44 +0100 | emmanuelux_ | (~em@2a01cb011051ddce36cff6fffefa7e31.ipv6.abo.wanadoo.fr) |
| 2026-02-09 04:13:51 +0100 | emmanuelux_ | (~em@2a01cb011051ddce36cff6fffefa7e31.ipv6.abo.wanadoo.fr) (Read error: Connection reset by peer) |
| 2026-02-09 04:14:22 +0100 | emmanuelux | (~em@user/emmanuelux) (Ping timeout: 244 seconds) |
| 2026-02-09 04:16:51 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-02-09 04:17:10 +0100 | emmanuelux | (~em@user/emmanuelux) emmanuelux |
| 2026-02-09 04:23:50 +0100 | emmanuelux_ | (~em@92-184-96-253.mobile.fr.orangecustomers.net) |
| 2026-02-09 04:24:05 +0100 | emmanuelux | (~em@user/emmanuelux) (Ping timeout: 244 seconds) |
| 2026-02-09 04:25:23 +0100 | machinedgod | (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 250 seconds) |