| 2026-01-23 00:02:18 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-01-23 00:03:18 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
| 2026-01-23 00:04:51 +0100 | zanetti | (~zanetti@2804:7f0:9b80:2edc:c121:46e7:c35f:46cf) zanetti |
| 2026-01-23 00:13:09 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 00:14:16 +0100 | <jackdk> | Perhaps most approachable free intro. Optics By Example is worth the price. |
| 2026-01-23 00:18:12 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-23 00:18:26 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) |
| 2026-01-23 00:20:24 +0100 | <chromoblob> | how the fuck are you supposed to write Haskell without recursion |
| 2026-01-23 00:20:25 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-23 00:20:52 +0100 | <chromoblob> | and how is Haskell without recursion supposed to be useful |
| 2026-01-23 00:23:28 +0100 | <geekosaur> | I think tht usually means without _explicit_ recursion, e.g. using folds/traverses |
| 2026-01-23 00:28:53 +0100 | zanetti | (~zanetti@2804:7f0:9b80:2edc:c121:46e7:c35f:46cf) (Quit: Konversation terminated!) |
| 2026-01-23 00:33:34 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) (Ping timeout: 244 seconds) |
| 2026-01-23 00:34:08 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) |
| 2026-01-23 00:34:18 +0100 | <jreicher> | chromoblob: who's saying you should write Haskell without recursion? |
| 2026-01-23 00:34:30 +0100 | Hafydd | (~Hafydd@user/hafydd) (Quit: WeeChat 4.8.1) |
| 2026-01-23 00:40:35 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-01-23 00:42:00 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2026-01-23 00:47:48 +0100 | RMSBach | (~RMSBach@24.210.9.182) RMSBach |
| 2026-01-23 00:50:23 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 00:50:25 +0100 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 264 seconds) |
| 2026-01-23 00:51:03 +0100 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2026-01-23 00:55:03 +0100 | Hafydd | (~Hafydd@user/hafydd) Hafydd |
| 2026-01-23 00:56:36 +0100 | Square3 | (~Square4@user/square) Square |
| 2026-01-23 01:00:06 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-01-23 01:10:11 +0100 | <EvanR> | the answer the question, certain patterns of recursion can be encapulsated in combinators that magically have the same effect |
| 2026-01-23 01:10:13 +0100 | <EvanR> | to |
| 2026-01-23 01:10:31 +0100 | <EvanR> | e.g. map and fold |
| 2026-01-23 01:10:42 +0100 | <EvanR> | they can't do everything, but the more such tools you have the more you can do |
| 2026-01-23 01:10:58 +0100 | <EvanR> | but sometimes explicit recursion makes more sense |
| 2026-01-23 01:11:28 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 01:16:39 +0100 | <probie> | how are imperative languages without goto supposed to be useful? |
| 2026-01-23 01:16:39 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-01-23 01:25:31 +0100 | Zemy_ | (~Zemy@2600:100c:b0ab:ed8b:c474:c7ff:febb:8ed3) |
| 2026-01-23 01:27:14 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 01:28:13 +0100 | Zemy | (~Zemy@72.178.108.235) (Ping timeout: 246 seconds) |
| 2026-01-23 01:32:00 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-01-23 01:33:28 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-23 01:33:42 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) |
| 2026-01-23 01:43:02 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 01:48:16 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-01-23 01:51:32 +0100 | Zemy | (~Zemy@syn-192-154-181-091.biz.spectrum.com) |
| 2026-01-23 01:55:54 +0100 | Zemy_ | (~Zemy@2600:100c:b0ab:ed8b:c474:c7ff:febb:8ed3) (Ping timeout: 260 seconds) |
| 2026-01-23 01:56:13 +0100 | Square3 | (~Square4@user/square) (Ping timeout: 246 seconds) |
| 2026-01-23 01:58:49 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 02:01:45 +0100 | Zemy_ | (~Zemy@2600:100c:b0ab:ed8b:9876:2aff:fe33:1a1d) |
| 2026-01-23 02:03:37 +0100 | Zemy | (~Zemy@syn-192-154-181-091.biz.spectrum.com) (Ping timeout: 264 seconds) |
| 2026-01-23 02:03:49 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds) |
| 2026-01-23 02:05:55 +0100 | <systemfault> | for loops/while/etc... |
| 2026-01-23 02:07:45 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-01-23 02:08:40 +0100 | <jackdk> | I think probie is asking rhetorically, to provide an analogous question/answer pair to chromoblob/EvanR. |
| 2026-01-23 02:08:58 +0100 | <EvanR> | lol |
| 2026-01-23 02:09:57 +0100 | <EvanR> | clearly systemfault is answering in such a way intentionally to highlight the irony |
| 2026-01-23 02:10:53 +0100 | <EvanR> | this is what it's like in the tiplerian omega point simulation where everyone already knows everything anyone could talk about |
| 2026-01-23 02:11:35 +0100 | <systemfault> | Yeah... that said, I don't know what a tiplerian omega point simulation is... |
| 2026-01-23 02:13:14 +0100 | <geekosaur> | sounds to me like someone's been tippling on physics 🙂 |
| 2026-01-23 02:14:37 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 02:15:37 +0100 | xff0x | (~xff0x@2405:6580:b080:900:52f9:378c:6eea:47d5) (Ping timeout: 265 seconds) |
| 2026-01-23 02:17:50 +0100 | Pozyomka_ | (~pyon@user/pyon) (Ping timeout: 245 seconds) |
| 2026-01-23 02:19:41 +0100 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-01-23 02:19:49 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-23 02:21:54 +0100 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 2026-01-23 02:30:02 +0100 | Zemy | (~Zemy@72.178.108.235) |
| 2026-01-23 02:30:17 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 02:31:59 +0100 | Zemy_ | (~Zemy@2600:100c:b0ab:ed8b:9876:2aff:fe33:1a1d) (Ping timeout: 250 seconds) |
| 2026-01-23 02:35:26 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-01-23 02:39:37 +0100 | Square2 | (~Square@user/square) (Ping timeout: 264 seconds) |
| 2026-01-23 02:42:24 +0100 | Inline | (~User@2001-4dd7-bc56-0-fdb7-c703-fc72-e0a.ipv6dyn.netcologne.de) (Ping timeout: 252 seconds) |
| 2026-01-23 02:43:44 +0100 | omidmash3 | (~omidmash@user/omidmash) omidmash |
| 2026-01-23 02:45:34 +0100 | omidmash | (~omidmash@user/omidmash) (Ping timeout: 246 seconds) |
| 2026-01-23 02:45:34 +0100 | omidmash3 | omidmash |
| 2026-01-23 02:46:04 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 02:50:36 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-01-23 02:54:36 +0100 | Inline | (~User@2001-4dd7-bc56-0-bf4e-84aa-8c9c-590c.ipv6dyn.netcologne.de) Inline |
| 2026-01-23 03:01:29 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 03:08:07 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-23 03:10:07 +0100 | <Leary> | chromoblob: Write all your co/inductive co/data types in greatest/least-fixed-point form, and all your logic in folds. It's not even as bad as it sounds! |
| 2026-01-23 03:11:43 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...) |
| 2026-01-23 03:13:51 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2026-01-23 03:19:31 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 03:24:25 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-01-23 03:33:01 +0100 | <jackdk> | Reminds me of Dhall |
| 2026-01-23 03:35:18 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 03:40:12 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-01-23 03:41:30 +0100 | terrorjack | (~terrorjac@2a01:4f8:c17:9d11::) terrorjack |
| 2026-01-23 03:41:32 +0100 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 244 seconds) |
| 2026-01-23 03:43:36 +0100 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2026-01-23 03:47:59 +0100 | <Leary> | It should; Haskell sans recursion ~ System F ~ Dhall. |
| 2026-01-23 03:51:54 +0100 | omidmash | (~omidmash@user/omidmash) (Quit: The Lounge - https://thelounge.chat) |
| 2026-01-23 03:52:25 +0100 | mange | (~mange@user/mange) (Quit: Quittin' time!) |
| 2026-01-23 03:53:09 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 03:53:09 +0100 | trickard_ | trickard |
| 2026-01-23 03:55:29 +0100 | omidmash | (~omidmash@user/omidmash) omidmash |
| 2026-01-23 03:57:25 +0100 | haskellbridge | (~hackager@96.28.224.214) (Remote host closed the connection) |
| 2026-01-23 03:57:40 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-01-23 03:57:59 +0100 | haskellbridge | (~hackager@96.28.224.214) hackager |
| 2026-01-23 03:57:59 +0100 | ChanServ | +v haskellbridge |
| 2026-01-23 04:08:31 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 04:13:49 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-23 04:22:02 +0100 | notzmv | (~umar@user/notzmv) notzmv |
| 2026-01-23 04:23:03 +0100 | haskellbridge | (~hackager@96.28.224.214) (Remote host closed the connection) |
| 2026-01-23 04:24:18 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 04:26:58 +0100 | foul_owl | (~kerry@94.156.149.99) (Ping timeout: 260 seconds) |
| 2026-01-23 04:29:43 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-23 04:34:12 +0100 | haskellbridge | (~hackager@96.28.224.214) hackager |
| 2026-01-23 04:34:12 +0100 | ChanServ | +v haskellbridge |
| 2026-01-23 04:38:57 +0100 | Googulator26 | Googulator |
| 2026-01-23 04:40:05 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 04:41:09 +0100 | foul_owl | (~kerry@94.156.149.91) foul_owl |
| 2026-01-23 04:45:05 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-01-23 04:45:26 +0100 | <haskellbridge> | <Zemyla> You can even zip lists by folding over both of them. |
| 2026-01-23 04:51:58 +0100 | rotcev | (~rotcev@user/rotcev) (Quit: Client closed) |
| 2026-01-23 04:53:28 +0100 | chenjf | (~chenjf@68.64.178.54) |
| 2026-01-23 04:55:05 +0100 | <monochrom> | Belated: My hot take: How are languages without call/cc or at least shift/reset supposed to be useful? >:) |
| 2026-01-23 04:55:07 +0100 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 265 seconds) |
| 2026-01-23 04:55:34 +0100 | chenjf | (~chenjf@68.64.178.54) (Client Quit) |
| 2026-01-23 04:55:54 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 04:58:30 +0100 | leah2 | (~leah@vuxu.org) (Ping timeout: 265 seconds) |
| 2026-01-23 05:00:19 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-01-23 05:04:31 +0100 | notzmv | (~umar@user/notzmv) (Ping timeout: 264 seconds) |
| 2026-01-23 05:11:16 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 05:16:13 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds) |
| 2026-01-23 05:16:35 +0100 | machinedgod | (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 245 seconds) |
| 2026-01-23 05:17:51 +0100 | <probie> | Zemyla: You don't need to fold over both them, just one |
| 2026-01-23 05:23:07 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 05:23:20 +0100 | <probie> | > let zip' = foldr (\x k ys -> case ys of { [] -> []; y:ys' -> (x,y):k ys' }) (const []) in zip' "hello" "world!" |
| 2026-01-23 05:23:21 +0100 | <lambdabot> | [('h','w'),('e','o'),('l','r'),('l','l'),('o','d')] |
| 2026-01-23 05:24:15 +0100 | sp1ff` | (~user@2601:1c2:4701:900::32d4) (Read error: Connection reset by peer) |
| 2026-01-23 05:24:52 +0100 | sp1ff` | (~user@2601:1c2:4701:900::32d4) |
| 2026-01-23 05:28:08 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-01-23 05:29:11 +0100 | <ncf> | well, case ys is a fold, just not a recursive one |
| 2026-01-23 05:31:54 +0100 | trickard | (~trickard@cpe-93-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-23 05:32:05 +0100 | <probie> | It's a lesser fold. A crease? :p |
| 2026-01-23 05:32:08 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) |
| 2026-01-23 05:32:22 +0100 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-01-23 05:33:16 +0100 | <ncf> | i will concede 'a ply' |
| 2026-01-23 05:38:32 +0100 | sp1ff` | (~user@2601:1c2:4701:900::32d4) (Read error: Connection reset by peer) |
| 2026-01-23 05:38:54 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 05:39:13 +0100 | sp1ff` | (~user@2601:1c2:4701:900::32d4) |
| 2026-01-23 05:43:59 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 2026-01-23 05:48:55 +0100 | dutchie | (~dutchie@user/dutchie) (Ping timeout: 264 seconds) |
| 2026-01-23 05:50:14 +0100 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 256 seconds) |
| 2026-01-23 05:50:48 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 256 seconds) |
| 2026-01-23 05:51:25 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-01-23 05:54:42 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 05:54:50 +0100 | <haskellbridge> | <Zemyla> @let newtype Z a b = Z { runZ :: a -> (Z a b -> b) -> b } |
| 2026-01-23 05:55:20 +0100 | <haskellbridge> | <Zemyla> Apparently lambdabot doesn't like the bridge. |
| 2026-01-23 05:58:31 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer) |
| 2026-01-23 06:00:29 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-01-23 06:01:49 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-01-23 06:10:50 +0100 | <probie> | Zemyla: try putting a blank line before what you want to feed to lambdabot |
| 2026-01-23 06:12:44 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 06:15:11 +0100 | <chromoblob> | Leary: could you elaborate, maybe give an example? |
| 2026-01-23 06:15:51 +0100 | <probie> | If you send "foo\nbar" it should come through as "<haskellbridge> <Zemyla> foo\n<haskellbridge> bar", so the second line should come through as a separate message, without your username in front and will be picked up by lambdabot or yahb2 |
| 2026-01-23 06:16:33 +0100 | Googulator | (~Googulato@2a01-036d-0106-030a-8d41-f550-2a4f-1a91.pool6.digikabel.hu) (Quit: Client closed) |
| 2026-01-23 06:16:44 +0100 | Googulator | (~Googulato@2a01-036d-0106-030a-8d41-f550-2a4f-1a91.pool6.digikabel.hu) |
| 2026-01-23 06:17:25 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-01-23 06:18:03 +0100 | dutchie | (~dutchie@user/dutchie) dutchie |
| 2026-01-23 06:22:44 +0100 | lewisbrown | (~user@user/lewisbrown) lewisbrown |
| 2026-01-23 06:25:16 +0100 | leah2 | (~leah@vuxu.org) leah2 |
| 2026-01-23 06:28:33 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 06:33:25 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-01-23 06:36:43 +0100 | michalz | (~michalz@185.246.207.203) |
| 2026-01-23 06:44:22 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 06:45:15 +0100 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-01-23 06:48:56 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-23 06:49:46 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-01-23 06:57:25 +0100 | housemate | (~housemate@202.7.248.67) (Quit: https://ineedsomeacidtocalmmedown.space/) |
| 2026-01-23 06:58:54 +0100 | takuan | (~takuan@d8D86B9E9.access.telenet.be) |
| 2026-01-23 07:00:07 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 07:03:25 +0100 | housemate | (~housemate@202.7.248.67) housemate |
| 2026-01-23 07:03:54 +0100 | Googulator | (~Googulato@2a01-036d-0106-030a-8d41-f550-2a4f-1a91.pool6.digikabel.hu) (Quit: Client closed) |
| 2026-01-23 07:04:06 +0100 | Googulator | (~Googulato@2a01-036d-0106-030a-8d41-f550-2a4f-1a91.pool6.digikabel.hu) |
| 2026-01-23 07:05:25 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-23 07:07:29 +0100 | weary-traveler | (~user@user/user363627) user363627 |
| 2026-01-23 07:14:00 +0100 | notzmv | (~umar@user/notzmv) notzmv |
| 2026-01-23 07:15:55 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 07:18:07 +0100 | jmcantrell | (~weechat@user/jmcantrell) (Ping timeout: 240 seconds) |
| 2026-01-23 07:20:35 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds) |
| 2026-01-23 07:22:59 +0100 | <Leary> | chromoblob: https://gist.github.com/LSLeary/0247b813ad063409d4d09eccc5b077e0 |
| 2026-01-23 07:24:11 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 07:25:14 +0100 | trickard_ | trickard |
| 2026-01-23 07:28:56 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-23 07:31:30 +0100 | <haskellbridge> | <Bowuigi> Related https://github.com/sellout/no-recursion |
| 2026-01-23 07:39:55 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 07:46:34 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-01-23 07:47:43 +0100 | <probie> | recursion-schemes gives you general recursion anyway |
| 2026-01-23 07:49:49 +0100 | trickard | (~trickard@cpe-93-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-23 07:50:02 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) |
| 2026-01-23 07:50:10 +0100 | <Leary> | "recursion schemes" /= "recursion-schemes" |
| 2026-01-23 07:57:57 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 08:02:50 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-01-23 08:06:24 +0100 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 2026-01-23 08:12:54 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-23 08:13:07 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) |
| 2026-01-23 08:13:44 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 08:18:32 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-23 08:18:39 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds) |
| 2026-01-23 08:21:45 +0100 | tomboy64 | (~tomboy64@user/tomboy64) (Ping timeout: 252 seconds) |
| 2026-01-23 08:23:24 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) |
| 2026-01-23 08:23:28 +0100 | <ncf> | if you're not allergic to general recursion you can do the exact same thing using just one data type and no impredicative encodings https://gist.github.com/ncfavier/d42d077745c73dfb2e2c58592b1cd7e1 |
| 2026-01-23 08:24:04 +0100 | tomboy64 | (~tomboy64@user/tomboy64) tomboy64 |
| 2026-01-23 08:24:51 +0100 | <ncf> | (note that general recursion is used rather controlledly here, in `fold` and `unfold`, so you could make those abstract and pretend they are primitives) |
| 2026-01-23 08:25:07 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 08:29:58 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-01-23 08:40:55 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 08:44:06 +0100 | danza | (~danza@user/danza) danza |
| 2026-01-23 08:45:54 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-01-23 08:48:32 +0100 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 240 seconds) |
| 2026-01-23 08:53:02 +0100 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...) |
| 2026-01-23 08:56:21 +0100 | Googulator | (~Googulato@2a01-036d-0106-030a-8d41-f550-2a4f-1a91.pool6.digikabel.hu) (Ping timeout: 272 seconds) |
| 2026-01-23 08:56:42 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 08:56:46 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
| 2026-01-23 09:01:27 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-01-23 09:03:40 +0100 | oskarw | (~user@user/oskarw) oskarw |
| 2026-01-23 09:06:01 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 246 seconds) |
| 2026-01-23 09:08:04 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2026-01-23 09:08:39 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 09:10:49 +0100 | FANTOM | (~fantom@87.75.185.177) (Read error: Connection reset by peer) |
| 2026-01-23 09:13:20 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-01-23 09:21:24 +0100 | Lycurgus | (~juan@user/Lycurgus) Lycurgus |
| 2026-01-23 09:24:26 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 09:31:13 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-23 09:35:27 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 09:40:57 +0100 | AlexZenon | (~alzenon@94.233.241.51) (Ping timeout: 252 seconds) |
| 2026-01-23 09:42:04 +0100 | <Leary> | ncf: That fails to encapsulate general recursion since it's easily recoverable in the form of `fix :: (a -> a) -> a`, though perhaps if we also disallowed bottoms that wouldn't be the case. |
| 2026-01-23 09:42:25 +0100 | AlexNoo | (~AlexNoo@94.233.241.51) (Ping timeout: 246 seconds) |
| 2026-01-23 09:42:36 +0100 | Alex_delenda_est | (~al_test@94.233.241.51) (Ping timeout: 252 seconds) |
| 2026-01-23 09:43:43 +0100 | trickard_ | trickard |
| 2026-01-23 09:50:04 +0100 | <gentauro> | jackdk: thx for links and info. It's a bit sad that `eXchange` lost all their IP when they went bankrupt and now the few surviving videos look like they were recorded with a toaster :'( |
| 2026-01-23 09:50:34 +0100 | <jackdk> | Yeah it's such a shame. Though I don't think that particular talk ever had a good recording |
| 2026-01-23 09:50:55 +0100 | <gentauro> | I actually tried to "re-spawn" the hole concept of `eXchange` again as they were bought by Trifork. I made slides and stuff and provided all the "nice" names |
| 2026-01-23 09:51:16 +0100 | <gentauro> | then suddently, you see all those names at "GOTO Conferences" (yeah Trifork also own them) |
| 2026-01-23 09:51:46 +0100 | <int-e> | I know it was a typo, but "hole concept" is pretty accurate (think "memory hole") |
| 2026-01-23 09:51:48 +0100 | <gentauro> | never EVER trust `corpos`. It's just a matter of if, but when, they will screw you :( |
| 2026-01-23 09:53:04 +0100 | haritz | (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in) |
| 2026-01-23 09:53:08 +0100 | <gentauro> | the good thing? At least they bring "the names" to mainstream -> https://www.youtube.com/watch?v=lg0RYLlmjJM |
| 2026-01-23 09:53:13 +0100 | <gentauro> | ;) |
| 2026-01-23 09:53:54 +0100 | <gentauro> | and good old Kris -> https://www.youtube.com/watch?v=SOz66dcsuT8 |
| 2026-01-23 09:54:54 +0100 | <gentauro> | Elm Evan -> https://www.youtube.com/watch?v=TklYhw0Kl58 (btw, does anybody know if that `lang` is `dead`?) |
| 2026-01-23 10:01:16 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 252 seconds) |
| 2026-01-23 10:02:18 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
| 2026-01-23 10:02:56 +0100 | acidjnk | (~acidjnk@p200300d6e7171963e9342c1b23054bda.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
| 2026-01-23 10:16:08 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2026-01-23 10:19:22 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 244 seconds) |
| 2026-01-23 10:21:17 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2026-01-23 10:23:48 +0100 | housemate | (~housemate@202.7.248.67) (Remote host closed the connection) |
| 2026-01-23 10:24:40 +0100 | housemate | (~housemate@202.7.248.67) housemate |
| 2026-01-23 10:25:19 +0100 | housemate | (~housemate@202.7.248.67) (Remote host closed the connection) |
| 2026-01-23 10:25:25 +0100 | Googulator | (~Googulato@team.broadbit.hu) |
| 2026-01-23 10:25:38 +0100 | chele | (~chele@user/chele) chele |
| 2026-01-23 10:26:31 +0100 | housemate | (~housemate@202.7.248.67) housemate |
| 2026-01-23 10:26:58 +0100 | machinedgod | (~machinedg@d75-159-126-101.abhsia.telus.net) machinedgod |
| 2026-01-23 10:27:17 +0100 | housemate | (~housemate@202.7.248.67) (Max SendQ exceeded) |
| 2026-01-23 10:27:18 +0100 | skum | (~skum@user/skum) skum |
| 2026-01-23 10:29:30 +0100 | housemate | (~housemate@202.7.248.67) housemate |
| 2026-01-23 10:30:01 +0100 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen |
| 2026-01-23 10:30:11 +0100 | housemate | (~housemate@202.7.248.67) (Max SendQ exceeded) |
| 2026-01-23 10:30:37 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 264 seconds) |
| 2026-01-23 10:30:41 +0100 | housemate | (~housemate@202.7.248.67) housemate |
| 2026-01-23 10:31:09 +0100 | housemate | (~housemate@202.7.248.67) (Remote host closed the connection) |
| 2026-01-23 10:31:38 +0100 | housemate | (~housemate@202.7.248.67) housemate |
| 2026-01-23 10:31:43 +0100 | housemate | (~housemate@202.7.248.67) (Remote host closed the connection) |
| 2026-01-23 10:32:29 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2026-01-23 10:33:37 +0100 | <bwe> | How can I let wai / warp update an internal data cache regularly by querying some database (no, I don’t mean response cache)? |
| 2026-01-23 10:33:41 +0100 | XZDX | (~xzdx@2601:404:ce00:b795:214:51ff:fe83:9855) |
| 2026-01-23 10:35:33 +0100 | XZDX | (~xzdx@2601:404:ce00:b795:214:51ff:fe83:9855) (Changing host) |
| 2026-01-23 10:35:33 +0100 | XZDX | (~xzdx@user/XZDX) XZDX |
| 2026-01-23 10:48:07 +0100 | Googulator | (~Googulato@team.broadbit.hu) (Quit: Client closed) |
| 2026-01-23 10:50:47 +0100 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2026-01-23 11:04:00 +0100 | fp | (~Thunderbi@2001-14ba-6e24-3000--198.rev.dnainternet.fi) (Ping timeout: 252 seconds) |
| 2026-01-23 11:05:10 +0100 | <danza> | are you sure that is the right level of abstraction? Wai/warp sound too close to the server for a cache that has to query a database |
| 2026-01-23 11:05:50 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 265 seconds) |
| 2026-01-23 11:06:32 +0100 | __monty__ | (~toonn@user/toonn) toonn |
| 2026-01-23 11:07:29 +0100 | <[exa]> | bwe: can you be more specific on "internal data cache"? (does wai have a cache?) |
| 2026-01-23 11:12:56 +0100 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 240 seconds) |
| 2026-01-23 11:13:49 +0100 | <danza> | data-based contents would be provided at application level, but it's tricky to cache because database contents can change |
| 2026-01-23 11:14:20 +0100 | trickard | (~trickard@cpe-93-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-23 11:14:32 +0100 | trickard | (~trickard@cpe-93-98-47-163.wireline.com.au) |
| 2026-01-23 11:17:09 +0100 | ljdarj | (~Thunderbi@user/ljdarj) ljdarj |
| 2026-01-23 11:25:39 +0100 | Googulator | (~Googulato@team.broadbit.hu) |
| 2026-01-23 11:28:03 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Read error: Connection reset by peer) |
| 2026-01-23 11:28:10 +0100 | merijn | (~merijn@77.242.116.146) merijn |
| 2026-01-23 11:30:55 +0100 | hellwolf | (~user@4cde-2438-8978-87b1-0f00-4d40-07d0-2001.sta.estpak.ee) (Ping timeout: 264 seconds) |
| 2026-01-23 11:30:59 +0100 | Square2 | (~Square@user/square) Square |
| 2026-01-23 11:34:47 +0100 | <bwe> | [exa]: I currently load data when the web server starts. It hands over the data to hyperbole web framework in a Reader context through Effectful. What I want is that it loads it all 3 minutes for example without reloading the web server altogether. |
| 2026-01-23 11:35:52 +0100 | Googulator23 | (~Googulato@team.broadbit.hu) |
| 2026-01-23 11:35:58 +0100 | <[exa]> | bwe: you can have a MVar in the Reader that points to data, and replace it every now and then from a completely independent thread? |
| 2026-01-23 11:35:59 +0100 | <bwe> | danza: So, the internal data cache actually lies in the hyperbole framework. But I pull it only in on start of warp. |
| 2026-01-23 11:36:34 +0100 | <[exa]> | (I'm not very sure how hyperbole works but if you use Reader, pushing in the MVar shouldn't be a big issue.) |
| 2026-01-23 11:37:16 +0100 | <bwe> | [exa]: Well, if I get you right, that is similar to what I thought. "How can I update some thing in a different thread from another (that just sleeps between updates)?" |
| 2026-01-23 11:38:43 +0100 | <bwe> | danza: I am quite tolerant for outdated database states within a range of up to 3 minutes (update time of my internal cache). |
| 2026-01-23 11:39:00 +0100 | <[exa]> | bwe: yeah MVars are great for that, loading them doesn't cost anything and you can atomically flip to the new state |
| 2026-01-23 11:39:45 +0100 | Googulator | (~Googulato@team.broadbit.hu) (Ping timeout: 272 seconds) |
| 2026-01-23 11:40:33 +0100 | <danza> | but they should have one MVar per query? Anyway yes, sounds like something better solved in hyperbole |
| 2026-01-23 11:41:14 +0100 | hellwolf | (~user@e7d0-28a4-0ea3-c496-0f00-4d40-07d0-2001.sta.estpak.ee) hellwolf |
| 2026-01-23 11:46:35 +0100 | fp | (~Thunderbi@2001:708:20:1406::10c5) fp |
| 2026-01-23 11:47:20 +0100 | <bwe> | ...and I thought data stored in Reader doesn't change (once loaded). |
| 2026-01-23 11:49:11 +0100 | <bwe> | Then MVar is nothing but a (changeable) State across different threads, does that mean different binaries? How do they find them each other, then? |
| 2026-01-23 11:50:48 +0100 | <__monty__> | Threads don't imply different binaries. They don't even imply different processes. Rather the reverse. |
| 2026-01-23 11:54:04 +0100 | <mauke> | :t forkIO |
| 2026-01-23 11:54:05 +0100 | <lambdabot> | error: [GHC-88464] Variable not in scope: forkIO |
| 2026-01-23 11:54:18 +0100 | <[exa]> | bwe: yeah technically the "variable" reference doesn't change, but you're allowed to rewrite what's it pointing to |
| 2026-01-23 11:57:02 +0100 | <bwe> | __monty__: So, when I start the web server, I need to fork from that the runner that updates the MVar. That would work while different binary doesn't, right? |
| 2026-01-23 11:57:11 +0100 | trickard | (~trickard@cpe-93-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-23 11:57:20 +0100 | XZDX | (~xzdx@user/XZDX) (Remote host closed the connection) |
| 2026-01-23 11:57:25 +0100 | trickard_ | (~trickard@cpe-93-98-47-163.wireline.com.au) |
| 2026-01-23 11:59:39 +0100 | thenightmail | (~thenightm@user/thenightmail) (Ping timeout: 260 seconds) |
| 2026-01-23 12:00:04 +0100 | thenightmail | (~thenightm@user/thenightmail) thenightmail |
| 2026-01-23 12:00:20 +0100 | oskarw | (~user@user/oskarw) (Remote host closed the connection) |
| 2026-01-23 12:01:05 +0100 | lantti | (~lantti@xcalibur.cc.tut.fi) |
| 2026-01-23 12:01:43 +0100 | oskarw | (~user@user/oskarw) oskarw |
| 2026-01-23 12:04:01 +0100 | <__monty__> | I'm not sure. mauke seems to suggest using forkIO. |
| 2026-01-23 12:04:48 +0100 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
| 2026-01-23 12:06:19 +0100 | <mauke> | if we're just updating a data structure that someone else reads from and no other interaction, wouldn't an IORef suffice? |
| 2026-01-23 12:07:39 +0100 | <mauke> | https://hackage-content.haskell.org/package/base-4.22.0.0/docs/Data-IORef.html#v:atomicModifyIORef |
| 2026-01-23 12:08:38 +0100 | <__monty__> | Does an MVar have that much more overhead that the footgun factor is worth it? |
| 2026-01-23 12:08:55 +0100 | <tomsmeding> | an MVar definitely has much more overhead than an IORef |
| 2026-01-23 12:09:04 +0100 | <mauke> | footgun how? |
| 2026-01-23 12:09:19 +0100 | <tomsmeding> | it's a lock with an explicit queue attached (a list of threads waiting to take the lock) for fairness |
| 2026-01-23 12:09:33 +0100 | <tomsmeding> | atomicModifyIORef is little more than a single CPU instruction (compare-and-swap) |
| 2026-01-23 12:09:49 +0100 | <tomsmeding> | whether this is important in the application depends on how often you do this, of course |
| 2026-01-23 12:13:15 +0100 | <tomsmeding> | in return for the overhead, an MVar gives you 1. fairness (if you're blocking on the MVar and no one holds the MVar indefinitely, you're guaranteed to get it eventually), 2. the ability to do IO while holding the lock |
| 2026-01-23 12:13:27 +0100 | housemate | (~housemate@2405:6e00:2457:9d18:a3e8:cd50:91c3:2f91) housemate |
| 2026-01-23 12:15:59 +0100 | <tomsmeding> | also 3. an MVar can also function as a one-place channel instead of a lock |
| 2026-01-23 12:16:25 +0100 | merijn | (~merijn@77.242.116.146) (Ping timeout: 246 seconds) |
| 2026-01-23 12:18:55 +0100 | <danza> | well that sounds saner to me for the goal |
| 2026-01-23 12:27:28 +0100 | Square2 | (~Square@user/square) (Ping timeout: 256 seconds) |
| 2026-01-23 12:28:06 +0100 | housemate | (~housemate@2405:6e00:2457:9d18:a3e8:cd50:91c3:2f91) (Quit: https://ineedsomeacidtocalmmedown.space/) |
| 2026-01-23 12:29:21 +0100 | <__monty__> | mauke: The footgun is thinking you'll be able to just add another IORef later and not run into trouble. |
| 2026-01-23 12:30:26 +0100 | <mauke> | applies to MVar, too |
| 2026-01-23 12:30:30 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-01-23 12:31:45 +0100 | <__monty__> | So the doc suggesting MVars instead is misleading? |
| 2026-01-23 12:32:46 +0100 | <mauke> | well, it only talks about atomicity |
| 2026-01-23 12:32:56 +0100 | <mauke> | with MVars you can deadlock instead |
| 2026-01-23 12:33:06 +0100 | <int-e> | "Extending the atomicity to multiple IORefs is problematic, so it is recommended that if you need to do anything more complicated then using MVar instead is a good idea." |
| 2026-01-23 12:33:19 +0100 | <int-e> | If that's what you mean I don't know how it's misleading. |
| 2026-01-23 12:34:47 +0100 | Inline | (~User@2001-4dd7-bc56-0-bf4e-84aa-8c9c-590c.ipv6dyn.netcologne.de) (Quit: KVIrc 5.2.6 Quasar http://www.kvirc.net/) |
| 2026-01-23 12:34:48 +0100 | danz20169 | (~danza@user/danza) danza |
| 2026-01-23 12:35:37 +0100 | <__monty__> | Well, it suggests you can extend atomicity across multiple, no? So if you can't do that easily without deadlocking it's not a great suggestion. |