Newest at the top
2025-05-13 00:21:06 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-05-13 00:17:50 +0200 | prdak | (~Thunderbi@user/prdak) (Ping timeout: 265 seconds) |
2025-05-13 00:15:19 +0200 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
2025-05-13 00:13:37 +0200 | acidjnk | (~acidjnk@p200300d6e71c4f20419b0c7401f54203.dip0.t-ipconnect.de) acidjnk |
2025-05-13 00:13:23 +0200 | prdak | (~Thunderbi@user/prdak) prdak |
2025-05-13 00:12:26 +0200 | sprotte24 | (~sprotte24@p200300d16f0e680010976ce20a20e5ec.dip0.t-ipconnect.de) (Quit: Leaving) |
2025-05-13 00:10:05 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
2025-05-13 00:09:15 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2025-05-13 00:06:54 +0200 | foul_owl | (~kerry@94.156.149.92) (Ping timeout: 260 seconds) |
2025-05-13 00:04:57 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-05-13 00:04:06 +0200 | notzmv | (~daniel@user/notzmv) (Ping timeout: 244 seconds) |
2025-05-13 00:02:29 +0200 | acidjnk | (~acidjnk@p200300d6e71c4f20419b0c7401f54203.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2025-05-12 23:59:45 +0200 | prdak | (~Thunderbi@user/prdak) (Ping timeout: 244 seconds) |
2025-05-12 23:54:46 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
2025-05-12 23:49:10 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-05-12 23:46:20 +0200 | <EvanR> | not to be confused with a random monad, for getting random numbers |
2025-05-12 23:38:35 +0200 | <monochrom> | :) |
2025-05-12 23:38:30 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-05-12 23:36:59 +0200 | <EvanR> | I was going to say, what does it even mean if you put a random monad like Cont in for m but then you retrocausally are saying that's something useful |
2025-05-12 23:35:46 +0200 | <monochrom> | Or one benefit that has multiple manifestations. |
2025-05-12 23:35:29 +0200 | <monochrom> | There are multiple benefits! |
2025-05-12 23:34:37 +0200 | <EvanR> | ok it was testing now it's a GUI |
2025-05-12 23:33:21 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-05-12 23:31:22 +0200 | <monochrom> | err, s/reinvent/reinvert/ |
2025-05-12 23:31:10 +0200 | <monochrom> | http://blog.sigfpe.com/2011/10/quick-and-dirty-reinversion-of-control.html |
2025-05-12 23:31:08 +0200 | <monochrom> | BTW even with the production version, even if you're doing IO, you may still like to generalize so that you can swap out one UI for another. In fact, if you switch over to a "don't call us, we'll call you" GUI framework, you may need m = ContT r IO or Codensity IO and then pull the reinvent-control trick: |
2025-05-12 23:27:13 +0200 | <monochrom> | Parametric polymorphism restricts the function (e.g., it has to do the same thing for all monads), therefore users find the function more predictable. |
2025-05-12 23:22:34 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-05-12 23:21:59 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
2025-05-12 23:17:37 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-05-12 23:16:33 +0200 | takuan | (~takuan@d8D86B601.access.telenet.be) (Ping timeout: 248 seconds) |
2025-05-12 23:07:12 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
2025-05-12 23:03:47 +0200 | <Rembane> | A good thing |
2025-05-12 23:02:50 +0200 | <Rembane> | Laziness is a thing |
2025-05-12 23:02:16 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-05-12 23:02:11 +0200 | <EvanR> | this is haskell, we can do less |
2025-05-12 23:02:09 +0200 | euleritian | (~euleritia@ip4d17f864.dynamic.kabel-deutschland.de) |
2025-05-12 23:01:38 +0200 | JeremyB99 | (~JeremyB99@2607:fb91:10e0:5b80:95fd:7897:b476:7002) (Read error: Connection reset by peer) |
2025-05-12 23:01:21 +0200 | <EvanR> | by generalizing from IO to m we restricted what this function could possibly do, seems like a general property of polymorphism |
2025-05-12 23:01:05 +0200 | euleritian | (~euleritia@ip4d17f864.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2025-05-12 22:59:03 +0200 | <monochrom> | Or you may like: Explicit dictionary passing. Because you can imagine you had "class Monad m => MonadVM m where foo :: Char -> m (); bar :: m Char" so step was "step :: MonadVM m => VM -> m VM", but then you decided to delete the class and pass the two methods as arguments. |
2025-05-12 22:58:39 +0200 | <EvanR> | testing, interesting theory |
2025-05-12 22:55:52 +0200 | <monochrom> | Now, what is that called? Answer: Dependency injection. >:) |
2025-05-12 22:55:03 +0200 | <monochrom> | You can do mock testing by picking something else for m. If you pick the free monad for m, then write one interpreter for IO, another interpreter for mock testing. |
2025-05-12 22:54:06 +0200 | jespada | (~jespada@r179-25-209-21.dialup.adsl.anteldata.net.uy) jespada |
2025-05-12 22:53:00 +0200 | jespada | (~jespada@r179-25-209-21.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…) |
2025-05-12 22:51:11 +0200 | JeremyB99 | (~JeremyB99@2607:fb91:10e0:5b80:95fd:7897:b476:7002) |
2025-05-12 22:51:03 +0200 | JeremyB99 | (~JeremyB99@2607:fb91:10e0:5b80:95fd:7897:b476:7002) (Remote host closed the connection) |
2025-05-12 22:51:02 +0200 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-05-12 22:50:15 +0200 | sw4n | (~sw4n@2605:59c0:413f:3110:831:13fb:a2fa:9c07) (Remote host closed the connection) |