2024-11-07 00:00:01 +0100 | wryishly | (~wryish@216.246.119.62) (Ping timeout: 248 seconds) |
2024-11-07 00:00:04 +0100 | rune_ | (sid21167@id-21167.ilkley.irccloud.com) (Ping timeout: 260 seconds) |
2024-11-07 00:00:04 +0100 | snek | (sid280155@id-280155.lymington.irccloud.com) (Ping timeout: 260 seconds) |
2024-11-07 00:00:27 +0100 | jjhoo | (~jahakala@user/jjhoo) jjhoo |
2024-11-07 00:00:29 +0100 | Miroboru | (~myrvoll@178-164-114.82.3p.ntebredband.no) Miroboru |
2024-11-07 00:00:29 +0100 | hacklschorsch | (~flo@2a01:4f9:3a:2296::2) |
2024-11-07 00:00:45 +0100 | s4msung | (~s4msung@user/s4msung) s4msung |
2024-11-07 00:00:51 +0100 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) NiKaN |
2024-11-07 00:00:54 +0100 | snek | (sid280155@id-280155.lymington.irccloud.com) snek |
2024-11-07 00:00:55 +0100 | rune_ | (sid21167@id-21167.ilkley.irccloud.com) |
2024-11-07 00:01:11 +0100 | Techcable | (sid534393@user/Techcable) Techcable |
2024-11-07 00:01:11 +0100 | tritlo | (sid58727@id-58727.hampstead.irccloud.com) |
2024-11-07 00:01:24 +0100 | aristid | (sid1599@id-1599.uxbridge.irccloud.com) |
2024-11-07 00:01:49 +0100 | thaumavorio | (~thaumavor@thaumavor.io) thaumavorio |
2024-11-07 00:01:54 +0100 | notzmv | (~daniel@user/notzmv) (Ping timeout: 246 seconds) |
2024-11-07 00:04:14 +0100 | <probie> | When did Haskell get the IO type? ~1996? |
2024-11-07 00:04:23 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 00:04:41 +0100 | Square2 | (~Square4@user/square) Square |
2024-11-07 00:04:51 +0100 | alexherbo2 | (~alexherbo@2a02-8440-341a-456e-a8d1-f94d-35c3-2d26.rev.sfr.net) alexherbo2 |
2024-11-07 00:05:44 +0100 | <Rembane> | Yeah, it's a bit older, 1993ish. https://ncatlab.org/nlab/show/IO-monad |
2024-11-07 00:05:47 +0100 | <Rembane> | https://dl.acm.org/doi/10.1145/158511.158524 |
2024-11-07 00:06:03 +0100 | <EvanR> | uniqueness types? |
2024-11-07 00:07:28 +0100 | Square | (~Square@user/square) (Ping timeout: 245 seconds) |
2024-11-07 00:07:30 +0100 | <dolio> | 1.3 is the first report with it. |
2024-11-07 00:07:44 +0100 | Square2 | Square |
2024-11-07 00:08:56 +0100 | <dolio> | The 1993 citation is dated 1992 if you click on it. :รพ |
2024-11-07 00:09:03 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
2024-11-07 00:09:27 +0100 | <Rembane> | Good stuff :D |
2024-11-07 00:09:38 +0100 | <Rembane> | This is why I don't trust time |
2024-11-07 00:10:03 +0100 | <EvanR> | the researcher was merlin, who famously experienced time backwards |
2024-11-07 00:10:12 +0100 | <dolio> | Ah, of course. |
2024-11-07 00:12:20 +0100 | <Rembane> | It must've been a real trip to talk to him |
2024-11-07 00:13:59 +0100 | <dolio> | Even the 1.0 report has the continuation based I/O which, if you looked at it today, you might figure out it could be factored into a monad. |
2024-11-07 00:15:10 +0100 | <dolio> | It's like every IO operation has (>>=) stuck onto it already, and maybe catch. |
2024-11-07 00:16:02 +0100 | <Inst> | Clean predates Haskell, interestingly enough. |
2024-11-07 00:17:21 +0100 | unlucy | (sid572875@user/unlucy) unlucy |
2024-11-07 00:17:46 +0100 | <Rembane> | How does Clean before Haskell handle IO? |
2024-11-07 00:19:48 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 00:22:12 +0100 | <int-e> | "Consequently, a Clean program consists of a set of rewrite rules." -- 1987 Clean was a language for expressing graph rewriting systems. |
2024-11-07 00:22:41 +0100 | <int-e> | cf. https://wiki.clean.cs.ru.nl/Publications#1987 |
2024-11-07 00:23:16 +0100 | visilii | (~visilii@85.172.77.90) (Quit: ZNC - https://znc.in) |
2024-11-07 00:23:34 +0100 | visilii | (~visilii@85.172.77.90) |
2024-11-07 00:23:48 +0100 | <probie> | https://www.mbsd.cs.ru.nl/publications/papers/1992/achp92-HighLevelIO.pdf 1992 seems to be where IO appears in Clear |
2024-11-07 00:24:20 +0100 | <int-e> | stdin was provided as a list of newline-terminated lines. So it's the main :: [String] -> [String] type of I/O. |
2024-11-07 00:24:24 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-07 00:24:54 +0100 | <Rembane> | Isn't that how very early Haskell did I/O? |
2024-11-07 00:25:20 +0100 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2024-11-07 00:25:22 +0100 | <dolio> | Sort of. But the types are more complex, I think. |
2024-11-07 00:25:44 +0100 | <dolio> | Not just strings. |
2024-11-07 00:25:57 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) L29Ah |
2024-11-07 00:26:12 +0100 | <int-e> | Hmm 1988 has a related language called LEAN? Hehe. |
2024-11-07 00:26:36 +0100 | <Rembane> | I need the languages EAN, AN and N too. |
2024-11-07 00:26:42 +0100 | CrunchyFlakes | (~CrunchyFl@ip1f13e94e.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds) |
2024-11-07 00:26:52 +0100 | CrunchyFlakes | (~CrunchyFl@31.19.233.78) |
2024-11-07 00:27:18 +0100 | Everything | (~Everythin@178-133-140-206.mobile.vf-ua.net) (Remote host closed the connection) |
2024-11-07 00:27:38 +0100 | <probie> | I think `UNQ` in early Clean appears slightly before monadic IO in early Haskell, since the first monadic IO paper that's been found so far references the Clean one. |
2024-11-07 00:27:43 +0100 | visilii | (~visilii@85.172.77.90) (Client Quit) |
2024-11-07 00:28:36 +0100 | visilii | (~visilii@85.172.77.90) |
2024-11-07 00:30:40 +0100 | pavonia | (~user@user/siracusa) siracusa |
2024-11-07 00:31:22 +0100 | <Inst> | I think you can consider IO in Haskell a very primitive / early effect system, but I don't think you can say the same for Clean's uniqueness types, which seem to be a more of linearity |
2024-11-07 00:31:51 +0100 | <Inst> | so then you can argue that Haskell had the first effect system |
2024-11-07 00:35:12 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 00:38:09 +0100 | kstatz12 | (~karl@user/kstatz12) kstatz12 |
2024-11-07 00:38:12 +0100 | <int-e> | 1992 CLEAN still had rules, 1994 CLEAN started to look more like Haskell. |
2024-11-07 00:38:14 +0100 | int-e | shrugs |
2024-11-07 00:38:42 +0100 | <int-e> | Anyway, the lesson here is that languages evolve, so dates of conception can be misleading. |
2024-11-07 00:38:54 +0100 | SlackCoder | (~SlackCode@64-94-63-8.ip.weststar.net.ky) (Quit: Leaving) |
2024-11-07 00:39:31 +0100 | <dolio> | I'm curious what Miranda did, but I can't find my copy of the manual. |
2024-11-07 00:39:52 +0100 | kstatz12 | (~karl@user/kstatz12) (Client Quit) |
2024-11-07 00:40:33 +0100 | <haskellbridge> | <Bowuigi> Miranda has a sys_message ADT, main uses a list of that |
2024-11-07 00:40:56 +0100 | <sshine> | Inst, I understand that IO came to Haskell at some later point. |
2024-11-07 00:41:00 +0100 | <dolio> | In '85, though? |
2024-11-07 00:41:13 +0100 | <sshine> | I was born that year! |
2024-11-07 00:41:44 +0100 | <dolio> | I mean, that would make somse sense, because Haskell was essentially Miranda with a few tweaks. |
2024-11-07 00:42:07 +0100 | <int-e> | sshine: so how do you feel about turning ancient next year *runs* |
2024-11-07 00:42:12 +0100 | <sshine> | https://okmij.org/ftp/Computation/IO-monad-history.html |
2024-11-07 00:42:23 +0100 | <sshine> | apparently I'm not as ancient as the IO monad after all |
2024-11-07 00:42:24 +0100 | acidjnk | (~acidjnk@p200300d6e7283f63c008ff7276864804.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
2024-11-07 00:44:17 +0100 | <sshine> | well, it ain't 0x20 or 0x30, but it's a pretty number. :) |
2024-11-07 00:47:06 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2024-11-07 00:51:33 +0100 | hueso | (~root@user/hueso) (Quit: hueso) |
2024-11-07 00:57:37 +0100 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds) |
2024-11-07 00:58:00 +0100 | Versality | (~Versality@user/Versality) (Remote host closed the connection) |
2024-11-07 00:58:14 +0100 | Versality | (~Versality@84.237.180.62) |
2024-11-07 00:58:14 +0100 | Versality | (~Versality@84.237.180.62) (Changing host) |
2024-11-07 00:58:14 +0100 | Versality | (~Versality@user/Versality) Versality |
2024-11-07 01:00:26 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 01:04:51 +0100 | hueso | (~root@user/hueso) hueso |
2024-11-07 01:05:05 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
2024-11-07 01:06:18 +0100 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2024-11-07 01:12:02 +0100 | ljdarj1 | (~Thunderbi@user/ljdarj) ljdarj |
2024-11-07 01:14:10 +0100 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds) |
2024-11-07 01:14:10 +0100 | ljdarj1 | ljdarj |
2024-11-07 01:14:57 +0100 | supercode | (~supercode@user/supercode) (Quit: Client closed) |
2024-11-07 01:15:32 +0100 | sprotte24 | (~sprotte24@p200300d16f45f60044d2f8c33ad18940.dip0.t-ipconnect.de) (Quit: Leaving) |
2024-11-07 01:15:47 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 01:20:23 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds) |
2024-11-07 01:22:12 +0100 | xff0x | (~xff0x@2405:6580:b080:900:3e16:56e8:fa8f:748e) (Ping timeout: 276 seconds) |
2024-11-07 01:23:04 +0100 | <monochrom> | Haha so there is opportunity for saying "Lean 88"?! :) |
2024-11-07 01:27:25 +0100 | <monochrom> | But I disagree with Oleg in thinking of () as world state. Instead, it is more honest without sacrificing pragmatics to adopt that in "() -> Codomain" the -> is a Kleisli arrow. |
2024-11-07 01:28:38 +0100 | TonyStone | (~TonyStone@user/TonyStone) (Quit: Leaving) |
2024-11-07 01:28:54 +0100 | TonyStone | (~TonyStone@user/TonyStone) TonyStone |
2024-11-07 01:31:11 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 01:33:10 +0100 | <haskellbridge> | <zwro> would we be better off without undefined and error and other bottoms? could we guarantee totality (modulo termination)? |
2024-11-07 01:34:07 +0100 | <geekosaur> | no, because there are other ways to get bottoms any time there are external inputs |
2024-11-07 01:35:54 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-07 01:36:06 +0100 | <geekosaur> | too many bottoms, thanks to whoever thought it was a brilliant idea to throw an exception (which is a bottom) on file not found etc. |
2024-11-07 01:39:46 +0100 | Smiles | (uid551636@id-551636.lymington.irccloud.com) Smiles |
2024-11-07 01:43:16 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
2024-11-07 01:46:34 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 01:51:29 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
2024-11-07 01:51:44 +0100 | troojg | (~troojg@user/troojg) troojg |
2024-11-07 01:56:23 +0100 | alexherbo2 | (~alexherbo@2a02-8440-341a-456e-a8d1-f94d-35c3-2d26.rev.sfr.net) (Remote host closed the connection) |
2024-11-07 02:00:18 +0100 | <haskellbridge> | <zwro> can't those exceptions be "caught" with something like `readFile :: IO (Either Exception FileContents)` ? |
2024-11-07 02:00:56 +0100 | <haskellbridge> | <zwro> (pseudocode) |
2024-11-07 02:01:54 +0100 | LainExperiments | (~LainExper@user/LainExperiments) LainExperiments |
2024-11-07 02:02:24 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 02:07:14 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-07 02:09:42 +0100 | KaitoDaumoto | (~Unity3D@user/kaitodaumoto) (Remote host closed the connection) |
2024-11-07 02:09:58 +0100 | <haskellbridge> | <zwro> maybe i want to explore liquid haskell? |
2024-11-07 02:14:08 +0100 | jero98772 | (~jero98772@2800:484:1d7c:cc00::3) |
2024-11-07 02:14:13 +0100 | jero98772 | (~jero98772@2800:484:1d7c:cc00::3) (Client Quit) |
2024-11-07 02:15:05 +0100 | notzmv | (~daniel@user/notzmv) notzmv |
2024-11-07 02:15:09 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
2024-11-07 02:16:08 +0100 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 272 seconds) |
2024-11-07 02:17:47 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 02:20:06 +0100 | <geekosaur> | no, they're actual exceptions that must be caught in `IO` with `catch` or `handle` etc. |
2024-11-07 02:21:01 +0100 | <dolio> | Well, you could restructure everything to return explicit failures. However, the problem is that that isn't necessarily a good idea. |
2024-11-07 02:22:40 +0100 | <geekosaur> | as long as exceptions are a trainwreck, I can't see it being worse |
2024-11-07 02:23:48 +0100 | <dolio> | That's very naive. |
2024-11-07 02:24:54 +0100 | <geekosaur> | https://mail.haskell.org/pipermail/libraries/2014-September/023675.html |
2024-11-07 02:25:09 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-07 02:25:11 +0100 | <geekosaur> | you're likely to leak with any exception |
2024-11-07 02:25:25 +0100 | <geekosaur> | synchronous exceptions were a fundamental mistake |
2024-11-07 02:26:35 +0100 | LainExperiments | (~LainExper@user/LainExperiments) (Quit: Client closed) |
2024-11-07 02:29:41 +0100 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
2024-11-07 02:29:46 +0100 | LainExperiments | (~LainExper@user/LainExperiments) LainExperiments |
2024-11-07 02:35:50 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 02:38:52 +0100 | <dolio> | If you mean asynchronous exceptions, then you are unnecessarily conflating that with other aspects of the exception API. |
2024-11-07 02:39:52 +0100 | <dolio> | E.G. if you don't want to locally handle an explicit `Either` result, then you need to use a monad transformer or something. |
2024-11-07 02:40:29 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-07 02:42:02 +0100 | <dolio> | Which is possible, but then you probably have a lot of lifting and lowering to do. And also, the transformer will probably have abysmal performance characteristics, because it will repeatedly be building and inspecting Either values for the expected common case of not having an exception. |
2024-11-07 02:46:40 +0100 | <dolio> | For scenarios where exceptions are actually exceptional, you want an alternate implementation, like continuations for algebraic effects, so that you just install a handler once and you only jump out to it when there actually is an exception. It's technically the same 'type,' but one implementation is far superior for how it will likely be used. |
2024-11-07 02:49:39 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
2024-11-07 02:49:58 +0100 | euleritian | (~euleritia@77.22.252.56) |
2024-11-07 02:51:12 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 02:54:18 +0100 | <Leary> | We could (and imo should) have unchecked panics (anywhere) and statically checked exceptions (IO/ST only) with `IO/ST :: [Exception] -> Type -> Type` uniting exception sets in `<*>`/`>>=` while `try`/`catch` delete one and `main :: IO [] (); runST :: (forall s. ST [] a) -> a`. Interruptible operations would necessarily include async exceptions in the type-level list of exceptions they might throw. The actual implementation would be essentially unchanged |
2024-11-07 02:54:18 +0100 | <Leary> | , the interface would just be more strongly typed. |
2024-11-07 02:55:39 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-07 03:02:03 +0100 | LainExperiments | (~LainExper@user/LainExperiments) (Ping timeout: 256 seconds) |
2024-11-07 03:02:30 +0100 | califax_ | (~califax@user/califx) califx |
2024-11-07 03:03:01 +0100 | gmg | (~user@user/gehmehgeh) (Ping timeout: 260 seconds) |
2024-11-07 03:03:14 +0100 | TonyStone | (~TonyStone@user/TonyStone) (Ping timeout: 260 seconds) |
2024-11-07 03:03:36 +0100 | califax | (~califax@user/califx) (Ping timeout: 260 seconds) |
2024-11-07 03:03:36 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) (Ping timeout: 260 seconds) |
2024-11-07 03:03:50 +0100 | califax_ | califax |
2024-11-07 03:05:11 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) chiselfuse |
2024-11-07 03:05:27 +0100 | gmg | (~user@user/gehmehgeh) gehmehgeh |
2024-11-07 03:06:36 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 03:10:48 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
2024-11-07 03:12:01 +0100 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 248 seconds) |
2024-11-07 03:14:40 +0100 | spew | (~spew@201.141.99.170) (Quit: spew) |
2024-11-07 03:18:08 +0100 | TonyStone | (~TonyStone@user/TonyStone) TonyStone |
2024-11-07 03:21:59 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-07 03:23:46 +0100 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) Unicorn_Princess |
2024-11-07 03:26:59 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-07 03:32:31 +0100 | ryanbooker | (uid4340@id-4340.hampstead.irccloud.com) ryanbooker |
2024-11-07 03:35:29 +0100 | troojg | (~troojg@user/troojg) (Ping timeout: 248 seconds) |
2024-11-07 03:37:20 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |