| 2025-12-16 00:01:47 +0100 | myxokephale | (~myxos@2001:579:8380:f20:50ce:9e79:bbea:e21f) myxokephale |
| 2025-12-16 00:04:34 +0100 | myxos | (~myxos@2001:579:8380:f20:fbd3:ef8a:e888:18ad) (Ping timeout: 255 seconds) |
| 2025-12-16 00:04:43 +0100 | <dolio> | It's fine, just don't put it in Monad. |
| 2025-12-16 00:05:41 +0100 | Googulator | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 00:05:46 +0100 | Googulator33 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 00:06:01 +0100 | <dolio> | Originally I think failable patterns would desugar to MonadZero. |
| 2025-12-16 00:10:17 +0100 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2025-12-16 00:17:31 +0100 | <jackdk> | The H98 report, s3.14, desugars `do { p <- e; stmts }` to `let { ok p = do {stmts}; ok _ = fail "..." in e >>= ok }` |
| 2025-12-16 00:18:07 +0100 | <jackdk> | (And specifies that `fail` is an operation of `class Monad`) |
| 2025-12-16 00:19:50 +0100 | <haskellbridge> | <loonycyborg> "do" can be used in pure code to together with BlockArguments kill even more parentheses :P |
| 2025-12-16 00:20:16 +0100 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 256 seconds) |
| 2025-12-16 00:20:29 +0100 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
| 2025-12-16 00:22:24 +0100 | Googulator33 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 00:22:41 +0100 | Googulator33 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 00:24:14 +0100 | <chromoblob> | ... = ... $ do ... |
| 2025-12-16 00:24:43 +0100 | <haskellbridge> | <loonycyborg> +to |
| 2025-12-16 00:24:56 +0100 | <chromoblob> | `$` is how i kill parentheses :p |
| 2025-12-16 00:28:38 +0100 | <chromoblob> | and i have even defined `($$) = flip ($)` in past, to do `... $$ ... $$ ...` - iirc |
| 2025-12-16 00:33:29 +0100 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 260 seconds) |
| 2025-12-16 00:34:21 +0100 | Googulator33 | Googulator |
| 2025-12-16 00:36:04 +0100 | Googulator96 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 00:36:19 +0100 | Googulator | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 00:38:37 +0100 | Googulator96 | Googulator |
| 2025-12-16 00:40:51 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 00:41:31 +0100 | mange | (~mange@user/mange) mange |
| 2025-12-16 00:43:44 +0100 | bggd__ | (~bgg@2a01:e0a:fd5:f510:6bc5:c845:f799:c476) (Remote host closed the connection) |
| 2025-12-16 00:44:00 +0100 | latticepolytope | (~user@user/isekaijin) isekaijin |
| 2025-12-16 00:44:03 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2025-12-16 00:44:09 +0100 | <jackdk> | chromoblob: Your ($$) is (Data.Function.&), since base-4.8 (ghc 7.10.1, April 2015) |
| 2025-12-16 00:45:24 +0100 | <chromoblob> | yeah, i did this in 2014 lol |
| 2025-12-16 00:45:37 +0100 | <chromoblob> | :i & |
| 2025-12-16 00:45:48 +0100 | <chromoblob> | no work... |
| 2025-12-16 00:46:10 +0100 | <jackdk> | % :i & |
| 2025-12-16 00:46:10 +0100 | <yahb2> | <interactive>:1:1: error: [GHC-76037] Not in scope: ‘&’ |
| 2025-12-16 00:46:53 +0100 | <geekosaur> | % :i Data.Function.& |
| 2025-12-16 00:46:53 +0100 | <yahb2> | (GHC.Internal.Data.Function.&) :: a -> (a -> b) -> b ; -- Defined in ‘GHC.Internal.Data.Function’ ; infixl 1 GHC.Internal.Data.Function.& |
| 2025-12-16 00:48:03 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 2025-12-16 00:54:46 +0100 | <chromoblob> | wait, i mixed it up |
| 2025-12-16 00:55:15 +0100 | <chromoblob> | i mean that ($$) is same that ($) but has left associativity |
| 2025-12-16 00:55:17 +0100 | dolio | (~dolio@130.44.140.168) (Quit: ZNC 1.10.1 - https://znc.in) |
| 2025-12-16 00:55:31 +0100 | <chromoblob> | that -> as |
| 2025-12-16 00:58:52 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 01:01:15 +0100 | dolio | (~dolio@130.44.140.168) dolio |
| 2025-12-16 01:03:01 +0100 | dolio | (~dolio@130.44.140.168) (Client Quit) |
| 2025-12-16 01:03:47 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2025-12-16 01:09:04 +0100 | jmcantrell_ | jmcantrell |
| 2025-12-16 01:14:36 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 01:15:08 +0100 | dolio | (~dolio@130.44.140.168) dolio |
| 2025-12-16 01:19:14 +0100 | itaipu | (~itaipu@168.121.97.28) itaipu |
| 2025-12-16 01:19:31 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-12-16 01:30:23 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 01:30:40 +0100 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2025-12-16 01:34:53 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) (Ping timeout: 244 seconds) |
| 2025-12-16 01:35:10 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2025-12-16 01:35:23 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 01:36:00 +0100 | Googulator20 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 01:36:23 +0100 | Googulator | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 01:38:02 +0100 | ttybitnik | (~ttybitnik@user/wolper) (Quit: Fading out...) |
| 2025-12-16 01:46:11 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 01:55:36 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2025-12-16 02:04:20 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 244 seconds) |
| 2025-12-16 02:04:36 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2025-12-16 02:06:25 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 02:08:15 +0100 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 240 seconds) |
| 2025-12-16 02:08:55 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 240 seconds) |
| 2025-12-16 02:10:31 +0100 | xff0x | (~xff0x@2405:6580:b080:900:1f68:a6af:8023:736) (Ping timeout: 246 seconds) |
| 2025-12-16 02:10:55 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 02:20:15 +0100 | Tuplanolla | (~Tuplanoll@91-152-225-194.elisa-laajakaista.fi) (Ping timeout: 240 seconds) |
| 2025-12-16 02:22:01 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 02:24:40 +0100 | divlamir | (~divlamir@user/divlamir) (Read error: Connection reset by peer) |
| 2025-12-16 02:24:52 +0100 | divlamir | (~divlamir@user/divlamir) divlamir |
| 2025-12-16 02:25:10 +0100 | somemathguy | (~somemathg@user/somemathguy) (Quit: WeeChat 4.1.1) |
| 2025-12-16 02:25:23 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2025-12-16 02:26:43 +0100 | kodachi | (~kodachi@198.105.112.55) (Quit: Leaving) |
| 2025-12-16 02:27:25 +0100 | Lycurgus | (~juan@user/Lycurgus) Lycurgus |
| 2025-12-16 02:28:49 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-12-16 02:29:03 +0100 | omidmash5 | (~omidmash@user/omidmash) omidmash |
| 2025-12-16 02:30:28 +0100 | acidjnk | (~acidjnk@p200300d6e7171911ece553fa3dd3d975.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 2025-12-16 02:30:59 +0100 | omidmash | (~omidmash@user/omidmash) (Ping timeout: 265 seconds) |
| 2025-12-16 02:30:59 +0100 | omidmash5 | omidmash |
| 2025-12-16 02:31:54 +0100 | spew | (~spew@user/spew) (Ping timeout: 252 seconds) |
| 2025-12-16 02:33:41 +0100 | somemathguy | (~somemathg@user/somemathguy) somemathguy |
| 2025-12-16 02:39:50 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-12-16 02:40:04 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 02:40:04 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 02:42:34 +0100 | DetourNe- | (DetourNetw@user/DetourNetworkUK) DetourNetworkUK |
| 2025-12-16 02:43:04 +0100 | DetourNetworkUK | (~DetourNet@user/DetourNetworkUK) (Ping timeout: 246 seconds) |
| 2025-12-16 02:44:50 +0100 | DetourNe- | DetourNetworkUK |
| 2025-12-16 02:45:20 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2025-12-16 02:46:10 +0100 | Square | (~Square4@user/square) Square |
| 2025-12-16 02:49:49 +0100 | Square2 | (~Square@user/square) (Ping timeout: 264 seconds) |
| 2025-12-16 02:55:49 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 02:57:11 +0100 | Googulator20 | Googulator |
| 2025-12-16 03:01:10 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2025-12-16 03:05:52 +0100 | Googulator | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 03:05:55 +0100 | Googulator73 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 03:10:25 +0100 | Lycurgus | (~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org )) |
| 2025-12-16 03:11:57 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 03:16:08 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2025-12-16 03:16:34 +0100 | spew | (~spew@user/spew) spew |
| 2025-12-16 03:16:35 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 03:24:23 +0100 | spew | (~spew@user/spew) (Ping timeout: 260 seconds) |
| 2025-12-16 03:26:34 +0100 | spew | (~spew@user/spew) spew |
| 2025-12-16 03:27:45 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 03:33:01 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-12-16 03:35:47 +0100 | Googulator73 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 03:35:52 +0100 | Googulator11 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 03:40:13 +0100 | Googulator11 | Googulator |
| 2025-12-16 03:43:33 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 03:48:07 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 03:59:18 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 04:05:19 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 246 seconds) |
| 2025-12-16 04:05:45 +0100 | Googulator | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 04:05:49 +0100 | Googulator61 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 04:05:55 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 04:06:05 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2025-12-16 04:13:30 +0100 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 244 seconds) |
| 2025-12-16 04:15:33 +0100 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2025-12-16 04:15:43 +0100 | spew | (~spew@user/spew) (Ping timeout: 260 seconds) |
| 2025-12-16 04:16:18 +0100 | finsternis | (~X@23.226.237.192) finsternis |
| 2025-12-16 04:17:20 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 04:22:07 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2025-12-16 04:24:37 +0100 | hsw | (~hsw@112-104-86-252.adsl.dynamic.seed.net.tw) (Quit: Leaving) |
| 2025-12-16 04:33:05 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 04:35:42 +0100 | Googulator61 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 04:35:47 +0100 | Googulator31 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 04:37:26 +0100 | Googulator31 | Googulator |
| 2025-12-16 04:37:43 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 04:39:01 +0100 | hsw | (~hsw@112-104-86-252.adsl.dynamic.seed.net.tw) hsw |
| 2025-12-16 04:40:49 +0100 | td_ | (~td@i53870904.versanet.de) (Ping timeout: 264 seconds) |
| 2025-12-16 04:42:05 +0100 | td_ | (~td@i53870911.versanet.de) td_ |
| 2025-12-16 04:48:54 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 04:49:57 +0100 | omidmash | (~omidmash@user/omidmash) (Quit: The Lounge - https://thelounge.chat) |
| 2025-12-16 04:52:20 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) |
| 2025-12-16 04:52:28 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2025-12-16 04:53:35 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 04:54:19 +0100 | omidmash | (~omidmash@user/omidmash) omidmash |
| 2025-12-16 04:59:55 +0100 | machinedgod | (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 240 seconds) |
| 2025-12-16 05:00:47 +0100 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2025-12-16 05:03:19 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer) |
| 2025-12-16 05:03:46 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2025-12-16 05:04:40 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 05:06:24 +0100 | latticepolytope | (~user@user/isekaijin) (Quit: bbl) |
| 2025-12-16 05:06:31 +0100 | somemathguy | (~somemathg@user/somemathguy) (Quit: WeeChat 4.1.1) |
| 2025-12-16 05:08:25 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 264 seconds) |
| 2025-12-16 05:09:02 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2025-12-16 05:09:37 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-12-16 05:11:33 +0100 | spew | (~spew@user/spew) spew |
| 2025-12-16 05:20:27 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 05:25:25 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2025-12-16 05:25:50 +0100 | Square | (~Square4@user/square) (Ping timeout: 244 seconds) |
| 2025-12-16 05:26:09 +0100 | vetkat | (~vetkat@user/vetkat) (Read error: Connection reset by peer) |
| 2025-12-16 05:26:31 +0100 | vetkat | (~vetkat@user/vetkat) vetkat |
| 2025-12-16 05:27:26 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) |
| 2025-12-16 05:27:47 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer) |
| 2025-12-16 05:28:06 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2025-12-16 05:32:37 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 255 seconds) |
| 2025-12-16 05:36:16 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 05:43:18 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2025-12-16 05:48:01 +0100 | haritz | (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in) |
| 2025-12-16 05:54:19 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 05:54:33 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2025-12-16 05:58:55 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 06:07:22 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2025-12-16 06:14:52 +0100 | spew | (~spew@user/spew) (Quit: WeeChat 4.7.2) |
| 2025-12-16 06:20:38 +0100 | weary-traveler | (~user@user/user363627) (Remote host closed the connection) |
| 2025-12-16 06:22:45 +0100 | weary-traveler | (~user@user/user363627) user363627 |
| 2025-12-16 06:23:00 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 06:24:26 +0100 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 265 seconds) |
| 2025-12-16 06:27:18 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2025-12-16 06:28:26 +0100 | jmcantrell | (~weechat@user/jmcantrell) (Quit: WeeChat 4.8.1) |
| 2025-12-16 06:34:19 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer) |
| 2025-12-16 06:34:39 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2025-12-16 06:37:34 +0100 | mange | (~mange@user/mange) (Quit: Zzz...) |
| 2025-12-16 06:38:23 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 06:43:38 +0100 | michalz | (~michalz@185.246.207.221) |
| 2025-12-16 06:43:49 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-12-16 06:52:29 +0100 | <chromoblob> | and i was frustrated that you can't set $$ to less precedence than $ |
| 2025-12-16 06:54:12 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 06:58:05 +0100 | <[exa]> | lol. |
| 2025-12-16 06:58:55 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 07:03:14 +0100 | <[exa]> | Is there a way to do something Selective-like with parsers that read a sequence length and then the sequence? roughly like: parseInt >>= \n -> replicateA n parseValue |
| 2025-12-16 07:04:05 +0100 | <[exa]> | (or do we need Repetitive or something such for that) |
| 2025-12-16 07:05:36 +0100 | Googulator88 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 07:05:49 +0100 | Googulator | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 07:10:00 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 07:16:49 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2025-12-16 07:21:07 +0100 | takuan | (~takuan@d8D86B9E9.access.telenet.be) |
| 2025-12-16 07:21:29 +0100 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 2025-12-16 07:27:59 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 07:33:04 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2025-12-16 07:35:40 +0100 | Googulator52 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 07:37:21 +0100 | Googulator88 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 07:43:18 +0100 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2025-12-16 07:43:47 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 07:48:24 +0100 | ft | (~ft@p4fc2ab42.dip0.t-ipconnect.de) (Quit: leaving) |
| 2025-12-16 07:48:31 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 07:59:27 +0100 | tt12316072 | (~tt1231@75.185.104.199) tt1231 |
| 2025-12-16 07:59:34 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 08:00:22 +0100 | tt1231607 | (~tt1231@75.185.104.199) (Read error: Connection reset by peer) |
| 2025-12-16 08:00:22 +0100 | tt12316072 | tt1231607 |
| 2025-12-16 08:00:40 +0100 | lbseale | (~quassel@user/ep1ctetus) (Quit: No Ping reply in 180 seconds.) |
| 2025-12-16 08:00:56 +0100 | lbseale | (~quassel@user/ep1ctetus) ep1ctetus |
| 2025-12-16 08:01:55 +0100 | myxos | (~myxos@2001:579:8380:f20:bd90:58c1:9ba1:835a) myxokephale |
| 2025-12-16 08:03:37 +0100 | Pixi | (~Pixi@user/pixi) (Ping timeout: 264 seconds) |
| 2025-12-16 08:03:53 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-12-16 08:04:07 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 08:04:15 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 08:04:56 +0100 | myxokephale | (~myxos@2001:579:8380:f20:50ce:9e79:bbea:e21f) (Ping timeout: 256 seconds) |
| 2025-12-16 08:05:42 +0100 | Googulator52 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 08:05:47 +0100 | Googulator90 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 08:06:37 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 08:08:32 +0100 | xstill_ | (xstill@fimu/xstill) (Quit: Ping timeout (120 seconds)) |
| 2025-12-16 08:11:15 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 08:11:53 +0100 | xstill_ | (xstill@fimu/xstill) xstill |
| 2025-12-16 08:22:24 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 08:25:33 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) (Quit: Leaving) |
| 2025-12-16 08:26:40 +0100 | Igloo | (~ian@81.2.99.210) (Ping timeout: 244 seconds) |
| 2025-12-16 08:27:43 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 2025-12-16 08:34:00 +0100 | <gentauro> | quote: tomsmeding> gentauro: nice, very helpful error. -> I guess it was inevitable: https://github.com/NixOS/nixpkgs/commit/39e997304a220f5e80a097296fa07149344f0e15 (🤖 Generated with [Claude Code]) GG |
| 2025-12-16 08:36:09 +0100 | <gentauro> | no wonder the "stable" NixOS channel keeps breaking https://status.nixos.org/. I guess that's the state of software development these days :( |
| 2025-12-16 08:38:11 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 08:38:35 +0100 | Igloo | (~ian@81.2.99.210) |
| 2025-12-16 08:39:25 +0100 | Guest98 | (~Guest98@122.11.246.146) |
| 2025-12-16 08:41:30 +0100 | ljdarj | (~Thunderbi@user/ljdarj) ljdarj |
| 2025-12-16 08:42:29 +0100 | ski | likes `return' more |
| 2025-12-16 08:42:37 +0100 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 264 seconds) |
| 2025-12-16 08:43:12 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2025-12-16 08:48:10 +0100 | Guest98 | (~Guest98@122.11.246.146) (Quit: Client closed) |
| 2025-12-16 08:53:57 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 08:56:35 +0100 | tomboy64 | (~tomboy64@user/tomboy64) (Ping timeout: 240 seconds) |
| 2025-12-16 08:57:36 +0100 | fp | (~Thunderbi@2001:708:20:1406::10c5) fp |
| 2025-12-16 08:58:39 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) |
| 2025-12-16 08:59:03 +0100 | tomboy64 | (~tomboy64@user/tomboy64) tomboy64 |
| 2025-12-16 08:59:05 +0100 | lucabtz | (~lucabtz@user/lucabtz) lucabtz |
| 2025-12-16 08:59:14 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 2025-12-16 09:07:38 +0100 | <gentauro> | ski: if related to `Monads` then `return` is the right keyword. If related to `Applicative`, `pure` is the right keyword |
| 2025-12-16 09:07:38 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
| 2025-12-16 09:12:31 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2025-12-16 09:15:40 +0100 | Googulator72 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 09:15:49 +0100 | Googulator90 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 09:17:45 +0100 | euphores | (~SASL_euph@user/euphores) euphores |
| 2025-12-16 09:22:30 +0100 | LainIwakura | (~LainIwaku@user/LainIwakura) LainIwakura |
| 2025-12-16 09:24:09 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2025-12-16 09:24:33 +0100 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
| 2025-12-16 09:26:42 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
| 2025-12-16 09:27:15 +0100 | weary-traveler | (~user@user/user363627) (Ping timeout: 240 seconds) |
| 2025-12-16 09:27:56 +0100 | weary-traveler | (~user@user/user363627) user363627 |
| 2025-12-16 09:42:41 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-12-16 09:42:54 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 09:58:24 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 10:00:41 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-12-16 10:00:54 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 10:03:47 +0100 | fp1 | (~Thunderbi@dhcp-86-128.eduroam.aalto.fi) fp |
| 2025-12-16 10:05:06 +0100 | fp | (~Thunderbi@2001:708:20:1406::10c5) (Ping timeout: 252 seconds) |
| 2025-12-16 10:05:10 +0100 | fp1 | fp |
| 2025-12-16 10:05:17 +0100 | Googulator72 | Googulator |
| 2025-12-16 10:06:33 +0100 | acidjnk | (~acidjnk@p200300d6e71719974d985e7e473d8889.dip0.t-ipconnect.de) acidjnk |
| 2025-12-16 10:10:49 +0100 | <tomsmeding> | gentauro: is it indeed that commit that breaks things for you? |
| 2025-12-16 10:12:46 +0100 | <tomsmeding> | gentauro: also, if the problem is broken haskell packages, then that still doesn't explain why you get an error without any info |
| 2025-12-16 10:15:07 +0100 | kuribas | (~user@2a02:1808:41:7270:9839:ee7c:6379:63a8) kuribas |
| 2025-12-16 10:15:38 +0100 | fp1 | (~Thunderbi@2001:708:20:1406::1370) fp |
| 2025-12-16 10:15:42 +0100 | Googulator | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 10:15:43 +0100 | Googulator18 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 10:16:14 +0100 | fp | (~Thunderbi@dhcp-86-128.eduroam.aalto.fi) (Ping timeout: 260 seconds) |
| 2025-12-16 10:16:14 +0100 | fp1 | fp |
| 2025-12-16 10:16:28 +0100 | chele | (~chele@user/chele) chele |
| 2025-12-16 10:18:18 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2025-12-16 10:18:40 +0100 | Googulator18 | Googulator |
| 2025-12-16 10:24:01 +0100 | sp1ff | (~user@2601:1c2:4c00:6820::c593) (Ping timeout: 246 seconds) |
| 2025-12-16 10:28:36 +0100 | sp1ff | (~user@2601:1c2:4c00:6820::c593) sp1ff |
| 2025-12-16 10:30:48 +0100 | kuribas | (~user@2a02:1808:41:7270:9839:ee7c:6379:63a8) (Ping timeout: 260 seconds) |
| 2025-12-16 10:34:33 +0100 | fp | (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 256 seconds) |
| 2025-12-16 10:42:22 +0100 | <gentauro> | tomsmeding: jep xD |
| 2025-12-16 10:44:49 +0100 | <dminuoso> | gentauro: I favour `pure` only, but I learned Haskell post AMPD. |
| 2025-12-16 10:44:54 +0100 | <dminuoso> | s/AMPD/AMP/ |
| 2025-12-16 10:45:05 +0100 | <gentauro> | but truth to be told, I'm building from GIT (scratch), so I'm not really impacted by that issue. (they have made a simplex-chat-desktop heavy on the UI, but not the simplex-chat-cli, which is what I'm trying to do, but, if I can't build locally, pretty diff to make a pkg) |
| 2025-12-16 10:45:56 +0100 | trickard_ | trickard |
| 2025-12-16 10:46:19 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) |
| 2025-12-16 10:47:49 +0100 | <dminuoso> | [exa]: No, that's precisely the upgrade you get from Monad over Applicative or Selective. |
| 2025-12-16 10:48:12 +0100 | <dminuoso> | % :t (>>=>) |
| 2025-12-16 10:48:12 +0100 | <yahb2> | <interactive>:1:1: error: [GHC-88464] ; Variable not in scope: >>=> ; Suggested fix: Perhaps use ‘>>=’ (imported from Prelude) |
| 2025-12-16 10:48:17 +0100 | <dminuoso> | % :t (>>=) |
| 2025-12-16 10:48:17 +0100 | <yahb2> | (>>=) :: Monad m => m a -> (a -> m b) -> m b |
| 2025-12-16 10:48:51 +0100 | <dminuoso> | This describes precisely an effect that depends on the result of a previous effect. |
| 2025-12-16 10:50:26 +0100 | <dminuoso> | [exa]: *If* your Int is bounded, in theory you could also describe it with Selective of course if you enumerate every possible number in your program. |
| 2025-12-16 10:50:45 +0100 | <dminuoso> | I'll leave the decision up to you whether you should do that. :-) |
| 2025-12-16 10:51:49 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 260 seconds) |
| 2025-12-16 10:52:30 +0100 | <gentauro> | if you parse, lets say encoded bytes over the wire, where the length is encoded in varInt/zigZag/…, you MUST use `>>=` to parse length to ensure correct boundries with upcoming bytes? |
| 2025-12-16 10:52:59 +0100 | <gentauro> | ex: list of strings |
| 2025-12-16 10:53:09 +0100 | <dminuoso> | gentauro: I think you could do a kind of recursion trick parsing it with `select` perhaps. |
| 2025-12-16 10:53:20 +0100 | <dminuoso> | But it would result in downright silly performance. |
| 2025-12-16 10:53:38 +0100 | fp | (~Thunderbi@130.233.70.102) fp |
| 2025-12-16 10:53:41 +0100 | <gentauro> | makes sense |
| 2025-12-16 10:54:07 +0100 | fp1 | (~Thunderbi@wireless-86-50-140-165.open.aalto.fi) fp |
| 2025-12-16 10:55:07 +0100 | <dminuoso> | This should be a fun excercise, let me try this. |
| 2025-12-16 10:55:30 +0100 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 2025-12-16 10:56:30 +0100 | <dminuoso> | I think you should be able to write `>>= :: (Enum a, Selective f) => f a -> (a -> f b) -> f b` |
| 2025-12-16 10:56:30 +0100 | chromoblob | ✌️ ski |
| 2025-12-16 10:57:03 +0100 | poscat0x04 | (~poscat@user/poscat) (Remote host closed the connection) |
| 2025-12-16 10:57:08 +0100 | <dminuoso> | Ah no, not quite. |
| 2025-12-16 10:57:47 +0100 | <dminuoso> | `bindEither :: (Enum a, Selective f) => f (Either a b) -> (a -> f b) -> f b` |
| 2025-12-16 10:57:49 +0100 | <dminuoso> | This. |
| 2025-12-16 10:58:05 +0100 | fp | (~Thunderbi@130.233.70.102) (Ping timeout: 250 seconds) |
| 2025-12-16 10:58:07 +0100 | fp1 | (~Thunderbi@wireless-86-50-140-165.open.aalto.fi) (Ping timeout: 240 seconds) |
| 2025-12-16 11:00:10 +0100 | poscat | (~poscat@user/poscat) poscat |
| 2025-12-16 11:04:41 +0100 | humasect_ | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2025-12-16 11:04:52 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 11:06:28 +0100 | mangoiv | (~mangoiv@user/mangoiv) mangoiv |
| 2025-12-16 11:09:18 +0100 | humasect_ | (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 260 seconds) |
| 2025-12-16 11:09:19 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 240 seconds) |
| 2025-12-16 11:21:15 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 11:21:25 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 246 seconds) |
| 2025-12-16 11:24:26 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2025-12-16 11:25:14 +0100 | trickard | (~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-12-16 11:25:27 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 11:25:35 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 240 seconds) |
| 2025-12-16 11:28:59 +0100 | haritz | (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) |
| 2025-12-16 11:28:59 +0100 | haritz | (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host) |
| 2025-12-16 11:28:59 +0100 | haritz | (~hrtz@user/haritz) haritz |
| 2025-12-16 11:31:20 +0100 | <dutchie> | I'm having trouble with quoting ghc-options in cabal files. In my .cabal I have: `ghc-options: -Wall -with-rtsopts="-N -I0"` but when I build, I get a warning `Warning: [misplaced-c-opt] Instead of 'ghc-options: -I0"' use 'include-dirs: 0"'` and then my program errors out complaining that the rts option `"-N` is unexpected |
| 2025-12-16 11:31:34 +0100 | <dutchie> | how can i pass multiple flags to -with-rtsopts? |
| 2025-12-16 11:31:48 +0100 | <[exa]> | dminuoso: Is that precisely the Monad jump though? I somehow felt that having the integers always finite would degrade the capabilities of the stuff a little (as in, you can't encode actual turing machine into that computation, right?) |
| 2025-12-16 11:31:51 +0100 | <tomsmeding> | dutchie: you have to put the quotes around the entire thing |
| 2025-12-16 11:31:57 +0100 | <tomsmeding> | "-with-rtsopts=-N -I0" |
| 2025-12-16 11:32:14 +0100 | <dutchie> | ah i think that's about the only quotation mode i've not tried lol |
| 2025-12-16 11:32:40 +0100 | <dminuoso> | [exa]: Like I said, in principle you could recurse over anything enumerable with something like `bindEither :: (Enum a, Selective f) => f (Either a b) -> (a -> f b) -> f b`, but it would result in terrible performance |
| 2025-12-16 11:33:17 +0100 | <dutchie> | ty, that's sorted it |
| 2025-12-16 11:33:39 +0100 | <dminuoso> | [exa]: So its not just about being finite, but being enumerable. |
| 2025-12-16 11:33:45 +0100 | <[exa]> | dminuoso: yeah that is true, I'm more like searching for a theoretical argument |
| 2025-12-16 11:34:51 +0100 | <[exa]> | as in, not "how to simulate this with selectives" but "how does this allow you to run an arbitrary monad" |
| 2025-12-16 11:34:58 +0100 | <dminuoso> | [exa]: Selective gives you the power to branch. To find a number, you would have to essentially enumerate that branching until you arrive at a branch that matches that precise number/ |
| 2025-12-16 11:35:17 +0100 | <dminuoso> | [exa]: That is, you enumerate all possible numbers into a parser tree, and with `select` you can navigate one branch at a time. |
| 2025-12-16 11:35:32 +0100 | <dminuoso> | This is not an arbitrary monad. |
| 2025-12-16 11:35:35 +0100 | <dminuoso> | Monad is strictly more powerful. |
| 2025-12-16 11:35:44 +0100 | <[exa]> | ah okay good |
| 2025-12-16 11:35:54 +0100 | <dminuoso> | Monad can do it without having to enumerate. |
| 2025-12-16 11:36:03 +0100 | <dminuoso> | So it works on things that are not enumerable. |
| 2025-12-16 11:36:24 +0100 | <[exa]> | ahhhhhhhhh ok I think I get the whole problem now |
| 2025-12-16 11:36:26 +0100 | <[exa]> | okay |
| 2025-12-16 11:36:28 +0100 | <[exa]> | good |
| 2025-12-16 11:36:30 +0100 | <[exa]> | thanks |
| 2025-12-16 11:37:08 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 11:37:28 +0100 | <[exa]> | so if this would be a typeclass, it would make sense (not completely a Monad) but it would be more like an efficiency upgrade of Selectives for this exact case, not actual new functionality |
| 2025-12-16 11:37:51 +0100 | <dminuoso> | [exa]: One good way to think about selective is to imagine that `Applicative` gives you a kind of diamond that acts "in parallel" (but I mean that in a reall loose sense), whereas `Selective` gives you a diamond that acts as a conditional branch . |
| 2025-12-16 11:39:08 +0100 | <dminuoso> | [exa]: And no, not a separate typeclass |
| 2025-12-16 11:39:24 +0100 | <dminuoso> | [exa]: The prescribed `bindEither` above should be writable. |
| 2025-12-16 11:39:28 +0100 | <dminuoso> | With no extra typeclass |
| 2025-12-16 11:39:54 +0100 | <tomsmeding> | I guess you can formulate it as: with Selective you can have branching on previously-computed values, but the whole branching tree must be known before seeing any values |
| 2025-12-16 11:40:14 +0100 | <[exa]> | yeah, I wanted this more for the static analysis, the extra action would be somewhat of a kleene star, but you'd know exactly what you need to compute to know how many repetitions are there |
| 2025-12-16 11:40:40 +0100 | <tomsmeding> | whereas with Monad, the branches can be decided on _after_ seeing values, which corresponds to a possibly infinite branching tree if you'dd need to specify it all statically |
| 2025-12-16 11:40:49 +0100 | <dminuoso> | tomsmeding: Sure. And with `monad` the parse structure is potentially completely unknown, as it can depend on effect results. |
| 2025-12-16 11:40:58 +0100 | <dminuoso> | % :t (>>=) |
| 2025-12-16 11:40:59 +0100 | <yahb2> | (>>=) :: Monad m => m a -> (a -> m b) -> m b |
| 2025-12-16 11:41:02 +0100 | <dminuoso> | It's literally baked into this type. :) |
| 2025-12-16 11:41:07 +0100 | <tomsmeding> | yes :) |
| 2025-12-16 11:41:43 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 264 seconds) |
| 2025-12-16 11:41:58 +0100 | <dminuoso> | Of course, if we applied some black hole theory and cosmology, one could argue that all possible executions are enumeratable - the entropy of the visible universe is finite. |
| 2025-12-16 11:42:03 +0100 | <dminuoso> | enumerable? |
| 2025-12-16 11:42:10 +0100 | <[exa]> | I probably just want an actual marker there into the selective tree that tells me "this selection is numeric" |
| 2025-12-16 11:42:33 +0100 | <tomsmeding> | and give an infinite list of branches? |
| 2025-12-16 11:42:48 +0100 | <dminuoso> | Finiteness is a red herring. |
| 2025-12-16 11:42:54 +0100 | <dminuoso> | It's just about enumerability I think? |
| 2025-12-16 11:42:59 +0100 | <tomsmeding> | is Integer enumerable? |
| 2025-12-16 11:43:09 +0100 | <tomsmeding> | (ignoring cosmology arguments) |
| 2025-12-16 11:43:30 +0100 | <dminuoso> | `Enum Integer` is a thing |
| 2025-12-16 11:44:06 +0100 | <tomsmeding> | but can you simulate `(>>=) @_ @Integer` with Selective? |
| 2025-12-16 11:44:25 +0100 | <tomsmeding> | (you can simulate `(>>=) @_ @Bool` trivially using Either () ()) |
| 2025-12-16 11:44:48 +0100 | <dminuoso> | Im thinking that perhaps we need at least one bound, or some base case. Enum doesnt seem to have `zero :: Enum a => a` |
| 2025-12-16 11:45:11 +0100 | <tomsmeding> | you can also simulate `(>>=) @_ @Int`, with a branching tree that has 2^64 leaves, and a cosmological computer |
| 2025-12-16 11:45:18 +0100 | <dminuoso> | There is `toEnum :: Enum a => Int -> a` but Im not sure about its semantics |
| 2025-12-16 11:45:30 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 11:45:42 +0100 | Googulator71 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 11:45:44 +0100 | <dminuoso> | tomsmeding: Even without cosmology arguments, it's very trivial to enumerate over all Integer? |
| 2025-12-16 11:45:48 +0100 | <dminuoso> | Assuming infinite memory. |
| 2025-12-16 11:45:55 +0100 | <dminuoso> | Integer is countable |
| 2025-12-16 11:45:58 +0100 | <tomsmeding> | only if the selective functor itself is lazy, I guess? |
| 2025-12-16 11:46:07 +0100 | <tomsmeding> | because the branching tree would be infinitely large |
| 2025-12-16 11:46:14 +0100 | <dminuoso> | It just matters whether its countable. |
| 2025-12-16 11:46:20 +0100 | <dminuoso> | Or does it? |
| 2025-12-16 11:46:24 +0100 | <tomsmeding> | well everything is countable |
| 2025-12-16 11:46:25 +0100 | Googulator | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 11:46:29 +0100 | <dminuoso> | Not everything is. |
| 2025-12-16 11:46:34 +0100 | <tomsmeding> | in computer science, everything is |
| 2025-12-16 11:47:45 +0100 | <tomsmeding> | so if the question is just whether the thing being branched on is countable, then the difference between Selective and Monad would only be one of performance and memory use |
| 2025-12-16 11:48:03 +0100 | <dminuoso> | So this is an interesting question. |
| 2025-12-16 11:48:16 +0100 | <dminuoso> | Is `Enum` the typeclass of things that are countable? |
| 2025-12-16 11:48:21 +0100 | <dminuoso> | Is Rational Enum? |
| 2025-12-16 11:48:38 +0100 | <tomsmeding> | Enum is nothing, essentially, as it has no sensible laws and the methods are nonsense too (can you only enumerate things that are Int-large?) |
| 2025-12-16 11:49:23 +0100 | <tomsmeding> | no, because Rational is at least as large as Integer, and Integer is bigger than Int, and you must define fromEnum |
| 2025-12-16 11:49:38 +0100 | <tomsmeding> | but that just shows that the Enum class is nonsense, not any kind of enumerability of Rational |
| 2025-12-16 11:49:47 +0100 | <tomsmeding> | because Rational is very countable indeed |
| 2025-12-16 11:49:53 +0100 | somemathguy | (~somemathg@user/somemathguy) somemathguy |
| 2025-12-16 11:50:22 +0100 | <tomsmeding> | (Enum is useful as a base for [..] syntax, but that's not under discussion here) |
| 2025-12-16 11:52:09 +0100 | <dminuoso> | tomsmeding: I think Enum is in a weird state in that it feels like its *meant* to represent things that are countable, since the ability to enumerate seems to align with the mathematical notion of countability. But the [..] and relatedly fromEnum/toEnum make it a somewhat adhoc thing. |
| 2025-12-16 11:52:25 +0100 | <tomsmeding> | right |
| 2025-12-16 11:53:19 +0100 | <tomsmeding> | it's actually useful for [..] (apart from not being able to enumerate stuff that's bigger than Int, which is nonsense), and it's _almost_ useful for describing enumerability in general, but then falls short |
| 2025-12-16 11:53:36 +0100 | <tomsmeding> | it's like Arrow with `arr`, except that Enum actually has some use still |
| 2025-12-16 11:53:43 +0100 | <dminuoso> | So we would need a kind of `class Countable a => fromNat :: Natural -> a` |
| 2025-12-16 11:54:07 +0100 | <tomsmeding> | I'd like a mapping in the other direction too with a law saying that they are inverses |
| 2025-12-16 11:54:22 +0100 | <haskellbridge> | <loonycyborg> I don't see how it represents countability in mathematical sense |
| 2025-12-16 11:54:22 +0100 | <haskellbridge> | <loonycyborg> it's merely prerequisite |
| 2025-12-16 11:54:31 +0100 | <haskellbridge> | <loonycyborg> but there are many ways of counting the same thing |
| 2025-12-16 11:54:47 +0100 | <dminuoso> | loonycyborg: The fromEnum/toEnum are really the same essence. |
| 2025-12-16 11:55:01 +0100 | Googulator71 | Googulator |
| 2025-12-16 11:55:01 +0100 | <dminuoso> | Except it's constrained to Int instead of Natural |
| 2025-12-16 11:55:03 +0100 | <haskellbridge> | <loonycyborg> that is making a mapping of Thing -> Natural |
| 2025-12-16 11:55:46 +0100 | <tomsmeding> | (another problem is that fromEnum and toEnum are not declared in the documentation to be inverses of each other, although we can reasonably say that they "obviously" must be) |
| 2025-12-16 11:56:01 +0100 | <dminuoso> | Being countable really means a one-to-one mapping to ℕ |
| 2025-12-16 11:56:27 +0100 | <dminuoso> | loonycyborg: It does not matter *how* you count it. |
| 2025-12-16 11:56:38 +0100 | <dminuoso> | As long as you *can* provide any way to map to ℕ |
| 2025-12-16 11:56:47 +0100 | <haskellbridge> | <loonycyborg> Enum represents only one way that is deemed useful for whatever reason |
| 2025-12-16 11:58:03 +0100 | <lucabtz> | dminuoso: countable = finite or 1-1 mapping to N |
| 2025-12-16 11:58:14 +0100 | <tomsmeding> | countable = injective mapping to N |
| 2025-12-16 11:58:19 +0100 | arandombit | (~arandombi@user/arandombit) (Ping timeout: 260 seconds) |
| 2025-12-16 11:58:21 +0100 | <lucabtz> | if finite there is not 1-1 mapping with N, but still countable |
| 2025-12-16 11:58:21 +0100 | <dminuoso> | Given that `toEnum, fromEnum` are the minimal methods, and `toEnum` is in principle derivable from `fromEnum`... the loose description in the Haskell report really implies that its something along the lines of Countability. |
| 2025-12-16 11:58:43 +0100 | arandombit | (~arandombi@user/arandombit) arandombit |
| 2025-12-16 11:58:52 +0100 | <dminuoso> | lucabtz: Yes, Enum lacks the ability to talk about infinite sets. |
| 2025-12-16 11:59:00 +0100 | <merijn> | and sparse sets |
| 2025-12-16 11:59:14 +0100 | <tomsmeding> | merijn: we're talking about countability here, not usefulness |
| 2025-12-16 11:59:32 +0100 | <dminuoso> | But that really goes into the line of "Haskell has Int in a lot of places where, morally, it should use Integer or Natural" instead. |
| 2025-12-16 11:59:34 +0100 | <lucabtz> | tomsmeding: yeah i suppose dropping surjectivity is the same |
| 2025-12-16 11:59:42 +0100 | <dminuoso> | The choice of `Int` in most places is because of history and performance. |
| 2025-12-16 12:00:09 +0100 | <dminuoso> | So if we squint a bit, Enum is meant to be that Countable typeclass... |
| 2025-12-16 12:01:11 +0100 | <probie> | and also reasonability, `(!!) :: [a] -> Integer -> a` doesn't gain you anything, because you don't have time to walk that very large list (nor enough memory unless it has a cycle) |
| 2025-12-16 12:01:37 +0100 | <tomsmeding> | walking Int is also not particularly practical |
| 2025-12-16 12:01:52 +0100 | <tomsmeding> | (on modern 64-bit machines) |
| 2025-12-16 12:02:27 +0100 | <dminuoso> | probie: That's the other side of it. The [] structure is so pervasive because it both represents control flow *and* data. When its used for data, its a really poor fit because it results in terrible access patterns. |
| 2025-12-16 12:02:52 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-12-16 12:02:56 +0100 | <dminuoso> | So on one hand we favour Int because its much faster due to direct mapping into machine registers, but then we drag those singly linked lists around everywhere. |
| 2025-12-16 12:03:00 +0100 | <dminuoso> | A weird state we are in. |
| 2025-12-16 12:03:06 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 12:03:29 +0100 | <probie> | but for Enum, it's quite possible to want `[a..b]` where `fromEnum a - fromEnum b` is small, but `fromEnum a` is bigger than int |
| 2025-12-16 12:03:53 +0100 | <dminuoso> | probie: Given that `fromEnum/toEnum` are minimal, one could assume that they should not be partial. |
| 2025-12-16 12:04:05 +0100 | <dminuoso> | But there's so many bottoms flying around in base... |
| 2025-12-16 12:04:42 +0100 | <probie> | Sorry, I was unclear. I mean for things that "should" be `Enum`, if there weren't too many of them |
| 2025-12-16 12:04:48 +0100 | <dminuoso> | At least for `fromEnum` an argument could be made that it should behave in a cyclic fashion. |
| 2025-12-16 12:04:59 +0100 | <dminuoso> | Or no, I meant `toEnum` |
| 2025-12-16 12:05:37 +0100 | <haskellbridge> | <magic_rb> Singly linked lists make sense in many cases due to laziness, but generally one should use vector yes |
| 2025-12-16 12:06:37 +0100 | <probie> | as in `Integer` is genuinely a better chouce needed for {to,from}Enum in a way that isn't the case in other places `Int` is used instead (like `(!!)`) |
| 2025-12-16 12:06:38 +0100 | <merijn> | magic_rb: I don't think "generally you should use vector" is right. |
| 2025-12-16 12:06:51 +0100 | deptype | (~deptype@2406:b400:3a:9d2f:476c:a58e:3471:ff37) |
| 2025-12-16 12:06:53 +0100 | <merijn> | Don't get me wrong, Vector is *often* right, but I'm not sure I'd ever recommend defaulting to it |
| 2025-12-16 12:07:01 +0100 | <probie> | Vector requires me to copy the whole thing to "change" a single element. This is often not desirable |
| 2025-12-16 12:07:23 +0100 | <dminuoso> | I sometimes wish there was a kind of Vector/[] polymorphism, that I could myself decide what I want. |
| 2025-12-16 12:07:29 +0100 | <dminuoso> | But something without typeclasses |
| 2025-12-16 12:07:34 +0100 | <merijn> | probie: Vector doesn't always copy the whole thing, and also mutable Vector exists :) |
| 2025-12-16 12:07:48 +0100 | <dminuoso> | What was that cabal feature along the lines of OCaml functors called again? |
| 2025-12-16 12:07:51 +0100 | <haskellbridge> | <loonycyborg> in ST monad? |
| 2025-12-16 12:07:51 +0100 | <haskellbridge> | <magic_rb> ^ |
| 2025-12-16 12:07:54 +0100 | <merijn> | dminuoso: backpack |
| 2025-12-16 12:07:55 +0100 | <probie> | dminuoso: backpack |
| 2025-12-16 12:07:57 +0100 | <haskellbridge> | <magic_rb> Yeah vector in ST |
| 2025-12-16 12:08:03 +0100 | <dminuoso> | Right backpack. |
| 2025-12-16 12:08:17 +0100 | <merijn> | loonycyborg: Vector has a bunch, there's ST, but also IO |
| 2025-12-16 12:08:26 +0100 | <merijn> | Depending on your usecase |
| 2025-12-16 12:08:30 +0100 | <dminuoso> | Yeah if via backpack I could just swap between vector or list for a given package that would be ideal. |
| 2025-12-16 12:08:50 +0100 | <dminuoso> | Of course it's completely unreasonable for 2 major reasons. |
| 2025-12-16 12:09:06 +0100 | <merijn> | tbh, I'm a big fan of "just thinking about your data type choices" :p |
| 2025-12-16 12:09:07 +0100 | <haskellbridge> | <loonycyborg> But still it's procedural state, in haskell you'd want a persistent structure in general. Unless you wanna go all out for a hotspot. |
| 2025-12-16 12:09:30 +0100 | <merijn> | Vector is very good for lots of things, and List good for lots of other things |
| 2025-12-16 12:09:46 +0100 | <dminuoso> | merijn: For a library thats tought unless you like to duplicate interfaces. And with duplicated things you get the typical `toLazy/fromLazy` nonsense when passing text between library portions. |
| 2025-12-16 12:10:13 +0100 | <haskellbridge> | <magic_rb> Generally List is fine if you dont care about performance and arent storing it around or traversing it in any other direction than linearly forward |
| 2025-12-16 12:10:15 +0100 | <probie> | Vector is very good for lots of things, and GHC does some very heavy lifting to make List good for lots of other things :p |
| 2025-12-16 12:10:42 +0100 | <merijn> | dminuoso: A library should use whatever's best for said library |
| 2025-12-16 12:10:51 +0100 | <merijn> | especially since Vector.toList is super cheap |
| 2025-12-16 12:11:06 +0100 | <merijn> | So someone wanting to pass a vector can easily convert to a list on demand |
| 2025-12-16 12:12:54 +0100 | <haskellbridge> | <loonycyborg> There's also Seq, and Set and lots of other containers depending on your needs |
| 2025-12-16 12:13:17 +0100 | <probie> | Let's just cut out the middle man and pass the fold `data List a = forall b . List ((a -> b -> b) -> b -> b)` |
| 2025-12-16 12:13:24 +0100 | <dminuoso> | Maybe it depends a bit on your problem domain, but in one of our projects there's quite a bit of `pack/unpack`, `fromStrict/ToString` or even combinations going on. |
| 2025-12-16 12:13:43 +0100 | <dminuoso> | There's just so much impedance mismatching going on when interfacing with more than one library at a time. |
| 2025-12-16 12:13:54 +0100 | Pixi | (~Pixi@user/pixi) Pixi |
| 2025-12-16 12:14:00 +0100 | <probie> | (to clarify, my above statement is a joke, since that meets even fewer use cases than a list) |
| 2025-12-16 12:14:03 +0100 | <dminuoso> | And those problems are exactly the same as the above vector/list problems. |
| 2025-12-16 12:14:11 +0100 | <haskellbridge> | <magic_rb> Sounds to me like things need to get more generic :) |
| 2025-12-16 12:14:31 +0100 | <dminuoso> | probie: Joke is on you, thats precisely what GHC does behind the scenes for you in a lot of places. |
| 2025-12-16 12:15:21 +0100 | <dminuoso> | Its what the whole build/foldr fusion works. |
| 2025-12-16 12:15:57 +0100 | <dminuoso> | Or is that what you were hinting at? |
| 2025-12-16 12:18:48 +0100 | ljdarj | (~Thunderbi@user/ljdarj) (Read error: Connection reset by peer) |
| 2025-12-16 12:20:03 +0100 | xff0x | (~xff0x@2405:6580:b080:900:4560:111e:4edd:d178) |
| 2025-12-16 12:23:05 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) wootehfoot |
| 2025-12-16 12:28:13 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 264 seconds) |
| 2025-12-16 12:28:27 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) (Quit: Leaving) |
| 2025-12-16 12:35:23 +0100 | trickard_ | trickard |
| 2025-12-16 12:39:40 +0100 | Maxdamantus | (~Maxdamant@user/maxdamantus) (Ping timeout: 255 seconds) |
| 2025-12-16 12:40:11 +0100 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen |
| 2025-12-16 12:40:49 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 12:40:56 +0100 | Maxdamantus | (~Maxdamant@user/maxdamantus) Maxdamantus |
| 2025-12-16 12:45:37 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 264 seconds) |
| 2025-12-16 12:54:12 +0100 | bggd | (~bgg@2a01:e0a:fd5:f510:fc9f:3e03:d92a:8f6) |
| 2025-12-16 12:54:13 +0100 | bggd | (~bgg@2a01:e0a:fd5:f510:fc9f:3e03:d92a:8f6) (Changing host) |
| 2025-12-16 12:54:13 +0100 | bggd | (~bgg@user/bggd) bggd |
| 2025-12-16 12:56:38 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 13:00:43 +0100 | somemathguy | (~somemathg@user/somemathguy) (Quit: WeeChat 4.1.1) |
| 2025-12-16 13:01:10 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 246 seconds) |
| 2025-12-16 13:07:45 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 13:08:29 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2025-12-16 13:15:41 +0100 | Googulator | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 13:15:48 +0100 | Googulator67 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 13:20:55 +0100 | lucabtz | (~lucabtz@user/lucabtz) (Ping timeout: 240 seconds) |
| 2025-12-16 13:31:15 +0100 | latticepolytope | (~user@user/isekaijin) isekaijin |
| 2025-12-16 13:32:27 +0100 | pavonia | (~user@user/siracusa) (Ping timeout: 252 seconds) |
| 2025-12-16 13:32:35 +0100 | LainIwakura | (~LainIwaku@user/LainIwakura) (Quit: Client closed) |
| 2025-12-16 13:33:38 +0100 | lucabtz | (~lucabtz@user/lucabtz) lucabtz |
| 2025-12-16 13:34:07 +0100 | pabs3 | (~pabs3@user/pabs3) (Ping timeout: 240 seconds) |
| 2025-12-16 13:35:40 +0100 | pabs3 | (~pabs3@user/pabs3) pabs3 |
| 2025-12-16 13:40:11 +0100 | Googulator67 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 13:40:29 +0100 | Googulator67 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 13:42:21 +0100 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 252 seconds) |
| 2025-12-16 13:42:42 +0100 | <Leary> | [exa], dminuoso: Bit late to the party, but I wrote something vaguely amusing: https://gist.github.com/LSLeary/e108d7a7ee27e0a9e9bee27fe9247910 |
| 2025-12-16 13:45:24 +0100 | pavonia | (~user@user/siracusa) siracusa |
| 2025-12-16 13:45:32 +0100 | Googulator67 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 13:45:41 +0100 | Googulator67 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 13:48:00 +0100 | <[exa]> | Leary: that's wonderful |
| 2025-12-16 13:54:37 +0100 | weary-traveler | (~user@user/user363627) (Quit: Konversation terminated!) |
| 2025-12-16 13:54:54 +0100 | weary-traveler | (~user@user/user363627) user363627 |
| 2025-12-16 13:57:08 +0100 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) |
| 2025-12-16 13:58:34 +0100 | <kuribas> | Can you use lazyness to determine if a graph has loops? |
| 2025-12-16 13:58:40 +0100 | <kuribas> | I guess no, because it will just loop? |
| 2025-12-16 13:59:39 +0100 | <kuribas> | For example, Map a [a] -> Map a (Maybe Int), where Nothing means ther is a loop, n means it has n parents. |
| 2025-12-16 14:02:01 +0100 | <kuribas> | I guess I just need to recurse, and consider visited nodes. |
| 2025-12-16 14:04:52 +0100 | merijn | (~merijn@77.242.116.146) (Quit: reboot) |
| 2025-12-16 14:05:33 +0100 | Googulator67 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 14:05:51 +0100 | Googulator67 | (~Googulato@87-97-86-146.pool.digikabel.hu) |
| 2025-12-16 14:15:12 +0100 | Googulator67 | (~Googulato@87-97-86-146.pool.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 14:15:35 +0100 | Googulator67 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 14:21:17 +0100 | myxokephale | (~myxos@2001:579:8380:f20:f2c2:4b00:b76e:8530) myxokephale |
| 2025-12-16 14:21:22 +0100 | <ski> | gentauro : yea (although not keywords) |
| 2025-12-16 14:23:31 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 14:23:46 +0100 | myxos | (~myxos@2001:579:8380:f20:bd90:58c1:9ba1:835a) (Ping timeout: 246 seconds) |
| 2025-12-16 14:25:01 +0100 | Psy-Q | (~psy-q@user/psy-q) Psy-Q |
| 2025-12-16 14:29:37 +0100 | <kuribas> | How can this work without constraints? reachable :: HashSet a -> HashMap a [a] -> HashSet a |
| 2025-12-16 14:29:59 +0100 | <kuribas> | Does GHC now infer constraints? |
| 2025-12-16 14:32:54 +0100 | <[exa]> | kuribas: which constraint would be missing there? I guess Hashable, but that might not be needed |
| 2025-12-16 14:33:06 +0100 | <[exa]> | (depending on what kind of hash table is used ofc) |
| 2025-12-16 14:33:14 +0100 | <kuribas> | [exa]: HashMap.lookupDefault needs it though? |
| 2025-12-16 14:33:23 +0100 | <kuribas> | unordered-containers |
| 2025-12-16 14:34:22 +0100 | <[exa]> | yeah I guess there it doesn't need the actual values, it just follows the hashes |
| 2025-12-16 14:34:39 +0100 | <[exa]> | use the source tho |
| 2025-12-16 14:35:09 +0100 | <kuribas> | https://hackage-content.haskell.org/package/unordered-containers-0.2.21/docs/src/Data.HashMap.Inte… |
| 2025-12-16 14:35:22 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) |
| 2025-12-16 14:41:09 +0100 | <tomsmeding> | it's the source of reachable that is relevant here, not that of lookupDefault |
| 2025-12-16 14:41:30 +0100 | <kuribas> | tomsmeding: HashSet.fromList $ HashSet.toList nodes >>= (\n -> HashMap.lookupDefault [] n mapping) |
| 2025-12-16 14:42:42 +0100 | <tomsmeding> | it's even easier to think about the fromList |
| 2025-12-16 14:43:03 +0100 | <tomsmeding> | this should definitely incur a 'Hashable a' constraint |
| 2025-12-16 14:43:57 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) wootehfoot |
| 2025-12-16 14:44:13 +0100 | <kuribas> | Yes, but it doesn't? |
| 2025-12-16 14:44:38 +0100 | <kuribas> | Or do you mean infer, by incur? |
| 2025-12-16 14:45:09 +0100 | rekahsoft | (~rekahsoft@70.51.99.245) rekahsoft |
| 2025-12-16 14:45:43 +0100 | Googulator67 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 14:45:46 +0100 | Googulator54 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 14:52:32 +0100 | <[exa]> | kuribas: where did you get the `reachable` btw? |
| 2025-12-16 14:52:43 +0100 | <kuribas> | [exa]: I wrote it |
| 2025-12-16 14:53:25 +0100 | <kuribas> | Oh, there was another error somewhere else, which took precedence over the instance check apparently... |
| 2025-12-16 14:53:40 +0100 | <[exa]> | yeah I was wondering |
| 2025-12-16 14:55:56 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2025-12-16 15:01:02 +0100 | jmcantrell_ | (~weechat@user/jmcantrell) jmcantrell |
| 2025-12-16 15:01:27 +0100 | jmcantrell_ | jmcantrell |
| 2025-12-16 15:04:05 +0100 | cubic_jpg | (~cubic_jpg@user/cubic-jpg:13603) cubic_jpg |
| 2025-12-16 15:06:24 +0100 | <tomsmeding> | kuribas: if you're using HLS, then parse error > name resolution errors in patterns > kind errors > type errors > constraint errors, iirc |
| 2025-12-16 15:06:43 +0100 | <tomsmeding> | or equivalently when using -fdefer-type-errors, because HLS passes that to GHC |
| 2025-12-16 15:06:52 +0100 | <tomsmeding> | when not using that flag, the order is a bit more compressed, but there's still an ordering |
| 2025-12-16 15:08:04 +0100 | <kuribas> | right |
| 2025-12-16 15:09:08 +0100 | <tomsmeding> | see the "side note" here in the issue description https://gitlab.haskell.org/ghc/ghc/-/issues/26016 |
| 2025-12-16 15:09:11 +0100 | <tomsmeding> | I've complained about it before :p |
| 2025-12-16 15:13:19 +0100 | jmcantrell | (~weechat@user/jmcantrell) (Ping timeout: 240 seconds) |
| 2025-12-16 15:16:01 +0100 | cubic_jpg | (~cubic_jpg@user/cubic-jpg:13603) (Quit: Client closed) |
| 2025-12-16 15:16:30 +0100 | cubic_jpg | (~cubic_jpg@user/cubic-jpg:13603) cubic_jpg |
| 2025-12-16 15:17:50 +0100 | Enrico63 | (~Enrico63@host-95-251-99-143.retail.telecomitalia.it) Enrico63 |
| 2025-12-16 15:21:31 +0100 | <kuribas> | Also, for some reason lsp gives me the internal documentation, where there is no docstring... |
| 2025-12-16 15:27:54 +0100 | somemathguy | (~somemathg@user/somemathguy) somemathguy |
| 2025-12-16 15:29:40 +0100 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen |
| 2025-12-16 15:34:56 +0100 | trickard | (~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-12-16 15:37:43 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 15:44:10 +0100 | spew | (~spew@user/spew) spew |
| 2025-12-16 15:49:51 +0100 | fp | (~Thunderbi@130.233.70.102) fp |
| 2025-12-16 15:53:10 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2025-12-16 15:54:15 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2025-12-16 15:55:39 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) |
| 2025-12-16 15:56:39 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Client Quit) |
| 2025-12-16 15:56:54 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 260 seconds) |
| 2025-12-16 15:57:25 +0100 | spew | (~spew@user/spew) (Quit: WeeChat 4.7.2) |
| 2025-12-16 15:59:27 +0100 | spew | (~spew@user/spew) spew |
| 2025-12-16 16:01:38 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) |
| 2025-12-16 16:03:16 +0100 | Square2 | (~Square@user/square) Square |
| 2025-12-16 16:06:27 +0100 | weary-traveler | (~user@user/user363627) (Quit: Konversation terminated!) |
| 2025-12-16 16:06:43 +0100 | weary-traveler | (~user@user/user363627) user363627 |
| 2025-12-16 16:08:03 +0100 | weary-traveler | (~user@user/user363627) (Client Quit) |
| 2025-12-16 16:08:27 +0100 | weary-traveler | (~user@user/user363627) user363627 |
| 2025-12-16 16:08:48 +0100 | tremon | (~tremon@83.80.159.219) tremon |
| 2025-12-16 16:09:03 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 16:11:05 +0100 | deptype_ | (~deptype@2406:b400:3a:9d2f:476c:a58e:3471:ff37) |
| 2025-12-16 16:11:37 +0100 | infinity0 | (~infinity0@pwned.gg) (Ping timeout: 255 seconds) |
| 2025-12-16 16:13:40 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 246 seconds) |
| 2025-12-16 16:13:49 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) (Ping timeout: 264 seconds) |
| 2025-12-16 16:14:05 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 16:15:18 +0100 | Enrico63 | (~Enrico63@host-95-251-99-143.retail.telecomitalia.it) (Quit: Client closed) |
| 2025-12-16 16:15:50 +0100 | Googulator98 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) |
| 2025-12-16 16:15:54 +0100 | Googulator54 | (~Googulato@2a01-036d-0106-01cb-3c18-a4bd-1bda-7c8b.pool6.digikabel.hu) (Quit: Client closed) |
| 2025-12-16 16:27:15 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 16:27:40 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
| 2025-12-16 16:32:11 +0100 | infinity0 | (~infinity0@pwned.gg) infinity0 |
| 2025-12-16 16:33:03 +0100 | Pixi` | (~Pixi@user/pixi) Pixi |
| 2025-12-16 16:35:43 +0100 | Pixi | (~Pixi@user/pixi) (Ping timeout: 246 seconds) |
| 2025-12-16 16:37:24 +0100 | j1n37 | (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 2025-12-16 16:43:29 +0100 | <kuribas> | is it possible to do "pure" memoization, for example using a fix-point combinator? |
| 2025-12-16 16:44:22 +0100 | <lucabtz> | i saw some libraries that do that |
| 2025-12-16 16:44:32 +0100 | <opqdonut> | yes, using a lazy self-referential data structure |
| 2025-12-16 16:44:35 +0100 | <lucabtz> | or claim to do that at least |
| 2025-12-16 16:44:49 +0100 | <opqdonut> | for example an array, if you can enumerate all the inputt |
| 2025-12-16 16:45:00 +0100 | j1n37 | (~j1n37@user/j1n37) j1n37 |
| 2025-12-16 16:45:13 +0100 | <opqdonut> | doing it "sparsely" like you would by mutating a map of values, is harder |
| 2025-12-16 16:46:02 +0100 | <opqdonut> | the iconic fibonacci list is an example of this kind of memoization with an unbounded domain |
| 2025-12-16 16:47:35 +0100 | <opqdonut> | a more general-purpose solution might be a trie |
| 2025-12-16 16:47:44 +0100 | latticepolytope | (~user@user/isekaijin) (Ping timeout: 244 seconds) |
| 2025-12-16 16:48:21 +0100 | latticepolytope | (~user@user/isekaijin) isekaijin |
| 2025-12-16 16:48:24 +0100 | <opqdonut> | (practically people do it using unsafePerformIO, of course) |
| 2025-12-16 16:48:31 +0100 | <kuribas> | Or parametrize over a monad? Like memoFix :: (forall m.Monad m => (a -> foo) -> a -> m foo) -> (a -> foo) |
| 2025-12-16 16:48:50 +0100 | <opqdonut> | yeah |
| 2025-12-16 16:48:51 +0100 | spew | (~spew@user/spew) (Read error: Connection reset by peer) |
| 2025-12-16 16:49:15 +0100 | <kuribas> | (missed an m...) |
| 2025-12-16 16:49:58 +0100 | <opqdonut> | you can't make the m disappear from the final result tho |
| 2025-12-16 16:50:21 +0100 | <kuribas> | Why not? |
| 2025-12-16 16:50:43 +0100 | fgarcia | (~lei@user/fgarcia) (Ping timeout: 264 seconds) |
| 2025-12-16 16:51:17 +0100 | <opqdonut> | if you're relying on the monad sequencing to provide the concept of this-has-been-computed-before-that |
| 2025-12-16 16:52:10 +0100 | <kuribas> | I can get "(a -> State memo foo)" =~ a -> memo -> (foo, memo), then flip, apply memo, and take the first. |
| 2025-12-16 16:52:42 +0100 | <opqdonut> | sure, but then the next call won't use the outputted memo |
| 2025-12-16 16:53:12 +0100 | <lucabtz> | yeah if you use State you have to live in the State monad |
| 2025-12-16 16:53:13 +0100 | <opqdonut> | (unless you store it somewhere impurely) |
| 2025-12-16 16:53:35 +0100 | spew | (~spew@user/spew) spew |
| 2025-12-16 16:53:38 +0100 | <kuribas> | yes, just the pure state monad, and I remove it in the end. |
| 2025-12-16 16:53:47 +0100 | <lucabtz> | to escape the state you will have to provide a initial memo using runState which will be empty |
| 2025-12-16 16:54:07 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2025-12-16 16:54:08 +0100 | <lucabtz> | unless you thread around the memo from different runState calls |
| 2025-12-16 16:56:18 +0100 | fgarcia | (~lei@user/fgarcia) fgarcia |
| 2025-12-16 16:56:35 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2025-12-16 16:59:55 +0100 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 250 seconds) |
| 2025-12-16 17:01:37 +0100 | fp | (~Thunderbi@130.233.70.102) (Quit: fp) |
| 2025-12-16 17:05:33 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
| 2025-12-16 17:14:07 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) |
| 2025-12-16 17:14:44 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) (Client Quit) |
| 2025-12-16 17:15:10 +0100 | machinedgod | (~machinedg@d75-159-126-101.abhsia.telus.net) machinedgod |
| 2025-12-16 17:15:50 +0100 | tromp | (~textual@2001:1c00:3487:1b00:dc21:3bf3:aa50:6091) |
| 2025-12-16 17:21:28 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2025-12-16 17:22:00 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2025-12-16 17:22:35 +0100 | annamalai | (~annamalai@157.32.210.253) (Ping timeout: 240 seconds) |
| 2025-12-16 17:22:54 +0100 | annamalai | (~annamalai@117.246.58.193) annamalai |
| 2025-12-16 17:23:01 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2025-12-16 17:23:15 +0100 | trickard_ | (~trickard@cpe-81-98-47-163.wireline.com.au) |
| 2025-12-16 17:24:55 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 245 seconds) |
| 2025-12-16 17:26:29 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 244 seconds) |
| 2025-12-16 17:28:36 +0100 | chele | (~chele@user/chele) (Remote host closed the connection) |
| 2025-12-16 17:32:07 +0100 | lucabtz | (~lucabtz@user/lucabtz) (Quit: Lost terminal) |
| 2025-12-16 17:33:43 +0100 | Pixi` | (~Pixi@user/pixi) (Quit: Leaving) |
| 2025-12-16 17:34:35 +0100 | latticepolytope | (~user@user/isekaijin) (Ping timeout: 240 seconds) |
| 2025-12-16 17:36:30 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2025-12-16 17:36:36 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2025-12-16 17:37:29 +0100 | cubic_jpg | NikServe |
| 2025-12-16 17:38:07 +0100 | latticepolytope | (~user@user/isekaijin) isekaijin |
| 2025-12-16 17:39:29 +0100 | Pixi | (~Pixi@user/pixi) Pixi |
| 2025-12-16 17:40:15 +0100 | NikServe | NikoChanServv |
| 2025-12-16 17:42:22 +0100 | NikoChanServv | NickSer |
| 2025-12-16 17:43:09 +0100 | NickSer | (~cubic_jpg@user/cubic-jpg:13603) (Quit: Client closed) |
| 2025-12-16 17:43:41 +0100 | cubic_jpg | (~cubic_jpg@user/cubic-jpg:13603) cubic_jpg |
| 2025-12-16 17:48:02 +0100 | cubic_jpg | SnacksSer |
| 2025-12-16 17:48:07 +0100 | Googulator98 | Googulator |
| 2025-12-16 17:48:08 +0100 | bggd | (~bgg@user/bggd) (Remote host closed the connection) |
| 2025-12-16 17:48:40 +0100 | Guest15 | (~Guest15@31-39-208.wireless.csail.mit.edu) |
| 2025-12-16 17:49:13 +0100 | annamalai | (~annamalai@117.246.58.193) (Ping timeout: 264 seconds) |
| 2025-12-16 17:57:16 +0100 | weary-traveler | (~user@user/user363627) (Quit: Konversation terminated!) |
| 2025-12-16 17:57:32 +0100 | weary-traveler | (~user@user/user363627) user363627 |
| 2025-12-16 17:58:58 +0100 | weary-traveler | (~user@user/user363627) (Remote host closed the connection) |
| 2025-12-16 17:59:56 +0100 | <dminuoso> | Leary: Ah yeah, guess I had something like that in mind. The choice of ifS makes it quite readable and expressive. |
| 2025-12-16 18:00:04 +0100 | SnacksSer | (~cubic_jpg@user/cubic-jpg:13603) (Quit: Client closed) |
| 2025-12-16 18:00:19 +0100 | Lycurgus | (~juan@user/Lycurgus) Lycurgus |
| 2025-12-16 18:00:33 +0100 | cubic_jpg | (~cubic_jpg@user/cubic-jpg:13603) cubic_jpg |
| 2025-12-16 18:11:02 +0100 | ft_ | (~ft@p4fc2ab42.dip0.t-ipconnect.de) ft |