| 2026-04-06 00:02:18 +0000 | Jackneill | (~Jackneill@2A001110011A2F6C2EAC817956BEEA38.mobile.pool.telekom.hu) |
| 2026-04-06 00:06:31 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 00:08:21 +0000 | Jackneill | (~Jackneill@2A001110011A2F6C2EAC817956BEEA38.mobile.pool.telekom.hu) (Remote host closed the connection) |
| 2026-04-06 00:11:30 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 00:12:04 +0000 | Square | (~Square@user/square) (Ping timeout: 244 seconds) |
| 2026-04-06 00:12:15 +0000 | yin | (~zero@user/zero) (Ping timeout: 265 seconds) |
| 2026-04-06 00:13:52 +0000 | bitdex_ | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 265 seconds) |
| 2026-04-06 00:15:19 +0000 | Tuplanolla | (~Tuplanoll@88-114-89-88.elisa-laajakaista.fi) (Quit: Leaving.) |
| 2026-04-06 00:20:39 +0000 | craunts795335385 | (~craunts@152.32.99.2) |
| 2026-04-06 00:22:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 00:29:04 +0000 | myxos | (~myxos@67-1-178-42.tcso.qwest.net) myxokephale |
| 2026-04-06 00:29:06 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 00:30:58 +0000 | yin | (~zero@user/zero) zero |
| 2026-04-06 00:36:25 +0000 | xff0x | (~xff0x@2405:6580:b080:900:57f:7a23:16bf:5911) (Ping timeout: 248 seconds) |
| 2026-04-06 00:40:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 00:45:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 00:56:08 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 01:01:04 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-04-06 01:07:57 +0000 | arandombit | (~arandombi@user/arandombit) (Remote host closed the connection) |
| 2026-04-06 01:11:55 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 01:17:07 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 01:25:25 +0000 | haritz | (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) |
| 2026-04-06 01:25:25 +0000 | haritz | (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host) |
| 2026-04-06 01:25:25 +0000 | haritz | (~hrtz@user/haritz) haritz |
| 2026-04-06 01:27:42 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 01:31:18 +0000 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2026-04-06 01:32:42 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-06 01:34:41 +0000 | Googulator | (~Googulato@2a01-036d-0106-496b-154a-c7fc-9f43-bd2d.pool6.digikabel.hu) (Quit: Client closed) |
| 2026-04-06 01:34:58 +0000 | Googulator | (~Googulato@2a01-036d-0106-496b-154a-c7fc-9f43-bd2d.pool6.digikabel.hu) |
| 2026-04-06 01:39:14 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 01:44:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 01:55:01 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 02:00:34 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...) |
| 2026-04-06 02:01:05 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-04-06 02:12:05 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 02:12:56 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) jmcantrell |
| 2026-04-06 02:14:02 +0000 | notzmv | (~umar@user/notzmv) notzmv |
| 2026-04-06 02:19:04 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 2026-04-06 02:21:32 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) (Ping timeout: 268 seconds) |
| 2026-04-06 02:30:06 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 02:30:56 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
| 2026-04-06 02:34:58 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 02:45:54 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 02:46:57 +0000 | machinedgod | (~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 255 seconds) |
| 2026-04-06 02:56:23 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-04-06 03:11:29 +0000 | notzmv | (~umar@user/notzmv) (Ping timeout: 268 seconds) |
| 2026-04-06 03:18:28 +0000 | rekahsoft | (~rekahsoft@76.67.111.168) (Remote host closed the connection) |
| 2026-04-06 03:22:47 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) jmcantrell |
| 2026-04-06 03:32:50 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-04-06 03:39:59 +0000 | somemathguy | (~somemathg@user/somemathguy) (Quit: WeeChat 4.1.1) |
| 2026-04-06 03:48:27 +0000 | Pozyomka | (~pyon@user/pyon) (Quit: bbml) |
| 2026-04-06 03:54:45 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 244 seconds) |
| 2026-04-06 03:54:55 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-04-06 04:05:42 +0000 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-04-06 04:29:30 +0000 | Googulator55 | (~Googulato@2a01-036d-0106-496b-154a-c7fc-9f43-bd2d.pool6.digikabel.hu) |
| 2026-04-06 04:29:35 +0000 | Googulator | (~Googulato@2a01-036d-0106-496b-154a-c7fc-9f43-bd2d.pool6.digikabel.hu) (Quit: Client closed) |
| 2026-04-06 04:30:20 +0000 | Googulator55 | Googulator |
| 2026-04-06 04:43:21 +0000 | danso_o | (~danso@user/danso) (Quit: quittin time) |
| 2026-04-06 04:45:55 +0000 | danso | (~danso@user/danso) danso |
| 2026-04-06 04:56:56 +0000 | itaipu | (~itaipu@168.121.97.28) (Ping timeout: 268 seconds) |
| 2026-04-06 04:57:16 +0000 | haritz | (~hrtz@user/haritz) (Ping timeout: 244 seconds) |
| 2026-04-06 04:57:39 +0000 | itaipu | (~itaipu@168.121.97.28) itaipu |
| 2026-04-06 04:57:42 +0000 | haritz | (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) |
| 2026-04-06 04:57:42 +0000 | haritz | (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host) |
| 2026-04-06 04:57:42 +0000 | haritz | (~hrtz@user/haritz) haritz |
| 2026-04-06 05:11:15 +0000 | takuan | (~takuan@d8D86B9E9.access.telenet.be) |
| 2026-04-06 05:16:16 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) (Ping timeout: 265 seconds) |
| 2026-04-06 05:17:58 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) jmcantrell |
| 2026-04-06 05:20:00 +0000 | synchromesh | (~john@2406:5a00:2412:2c00:14d5:f3ab:108b:4dd9) (Read error: Connection reset by peer) |
| 2026-04-06 05:20:30 +0000 | synchromesh | (~john@2406:5a00:2412:2c00:75ab:7cb0:db12:1e18) synchromesh |
| 2026-04-06 05:26:15 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) (Ping timeout: 255 seconds) |
| 2026-04-06 05:43:50 +0000 | traxex | (traxex@user/traxex) (Ping timeout: 256 seconds) |
| 2026-04-06 05:53:07 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 06:04:02 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 06:09:35 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 2026-04-06 06:10:44 +0000 | dumbass808 | (~dumbass80@user/dumbass808) dumbass808 |
| 2026-04-06 06:15:31 +0000 | haritz | (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in) |
| 2026-04-06 06:19:48 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 06:25:05 +0000 | arkeet | (arkeet@moriya.ca) (Quit: ZNC 1.10.1 - https://znc.in) |
| 2026-04-06 06:25:31 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 06:26:52 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 2026-04-06 06:27:15 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
| 2026-04-06 06:27:21 +0000 | arkeet | (arkeet@moriya.ca) |
| 2026-04-06 06:31:18 +0000 | tromp | (~textual@2001:1c00:340e:2700:795f:6a6f:7cb5:ecd6) |
| 2026-04-06 06:35:50 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 06:39:46 +0000 | califax | (~califax@user/califx) (Remote host closed the connection) |
| 2026-04-06 06:41:45 +0000 | califax | (~califax@user/califx) califx |
| 2026-04-06 06:45:15 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-04-06 06:48:06 +0000 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 265 seconds) |
| 2026-04-06 06:52:00 +0000 | dumbass808 | (~dumbass80@user/dumbass808) (K-Lined) |
| 2026-04-06 06:56:00 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 07:03:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 07:08:57 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-04-06 07:09:38 +0000 | CiaoSen | (~Jura@p549cb690.dip0.t-ipconnect.de) CiaoSen |
| 2026-04-06 07:11:56 +0000 | Pozyomka | (~pyon@user/pyon) (Client Quit) |
| 2026-04-06 07:12:44 +0000 | <gentauro> | monochrom: «Maybe after AI hype, only rich people still know how to think? >:)» DING DING DING, and we have a winner ;) |
| 2026-04-06 07:14:02 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 07:14:32 +0000 | <gentauro> | if you HAVE to use these "parrots", opt for the ones that are "local first" (no leaking of IP nor private data) such as https://prismml.com/ and https://www.forbes.com/sites/jonmarkman/2026/04/02/prismml-introduces-the-first-commercially-viabl… |
| 2026-04-06 07:16:48 +0000 | gentauro | and ensure to use "agentic" tools that don't leak as well https://infosec.exchange/@k3ym0/116161635202253362 |
| 2026-04-06 07:19:11 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-04-06 07:24:10 +0000 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2026-04-06 07:30:05 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 07:34:57 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-06 07:41:16 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 07:46:12 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-06 07:55:38 +0000 | tromp | (~textual@2001:1c00:340e:2700:795f:6a6f:7cb5:ecd6) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2026-04-06 07:56:02 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer) |
| 2026-04-06 07:56:51 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-04-06 07:57:03 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 07:57:41 +0000 | <haskellbridge> | <sm> thanks for the links |
| 2026-04-06 07:58:11 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-04-06 07:58:31 +0000 | <gentauro> | sm: u welcome :) |
| 2026-04-06 07:58:31 +0000 | rainbyte | (~rainbyte@181.47.219.3) (Read error: Connection reset by peer) |
| 2026-04-06 07:59:15 +0000 | <gentauro> | The PrismML peeps (CalTech prof + PhD's in Mathematics) seem like "the real deal" :o |
| 2026-04-06 08:00:10 +0000 | rainbyte | (~rainbyte@181.47.219.3) rainbyte |
| 2026-04-06 08:00:12 +0000 | <haskellbridge> | <sm> sounds impressive |
| 2026-04-06 08:00:52 +0000 | <haskellbridge> | <sm> do you think that fingerprinting toot applies to non-browser tools (claude code etc) ? |
| 2026-04-06 08:02:06 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-04-06 08:02:16 +0000 | <gentauro> | sm: yeah, they are the worst. Until recently, we had no clue what's was going on behind the scenes with claude |
| 2026-04-06 08:03:00 +0000 | <haskellbridge> | <sm> I should look check what Little Snitch is allowing from it |
| 2026-04-06 08:03:25 +0000 | <gentauro> | I guess with opencode and codex, you can at least see the source code. However, as soon as you add "skills" you are doomed |
| 2026-04-06 08:03:58 +0000 | <haskellbridge> | <sm> why's that ? Aren't skills just lazily-loaded custom prompts you define ? |
| 2026-04-06 08:06:00 +0000 | olivial | (~benjaminl@user/benjaminl) (Ping timeout: 246 seconds) |
| 2026-04-06 08:06:04 +0000 | <gentauro> | sm: yes, but they are dynamic (hello malware). I can highly recommend watching this talk from Mike Perry (the "TOR dude") from 39c3 (I was lucky to see it live in Hamborg): https://media.ccc.de/v/39c3-a-quick-stop-at-the-hostileshop |
| 2026-04-06 08:06:38 +0000 | gentauro | tl;dw he just shows how he can bypass OpenAI restricting policies by using diff text encodings. And there is nothing they can do about now, nor in the future |
| 2026-04-06 08:12:11 +0000 | <haskellbridge> | <sm> TIL about https://mistral.ai (french LLM, much less commercial surveillance) |
| 2026-04-06 08:12:49 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 08:13:19 +0000 | <haskellbridge> | <sm> ah, hello there merijn |
| 2026-04-06 08:15:24 +0000 | <gentauro> | Mistral? Is that the new startup from Yann Lecunn? |
| 2026-04-06 08:15:51 +0000 | <haskellbridge> | <sm> https://en.wikipedia.org/wiki/Mistral_AI |
| 2026-04-06 08:16:39 +0000 | olivial | (~benjaminl@user/benjaminl) benjaminl |
| 2026-04-06 08:17:23 +0000 | <gentauro> | sm: jaiks, the "investors" :| |
| 2026-04-06 08:17:34 +0000 | <gentauro> | why is the EU always sleeping? |
| 2026-04-06 08:18:15 +0000 | <haskellbridge> | <sm> they're tired from partying all night |
| 2026-04-06 08:18:17 +0000 | wickedjargon | (~user@2605:8d80:5430:634b:398a:72e0:e553:68f6) |
| 2026-04-06 08:19:21 +0000 | <gentauro> | sm: this is me partying all night https://en.wikipedia.org/wiki/Le_Chat_(AI) <- "Excuse mua. Can you please serve me another le beer?" (I'm very good at french around 01:00 - 03:00 AM) |
| 2026-04-06 08:19:53 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 08:25:33 +0000 | wickedjargon | (~user@2605:8d80:5430:634b:398a:72e0:e553:68f6) (Remote host closed the connection) |
| 2026-04-06 08:26:24 +0000 | wickedjargon | (~user@2605:8d80:5430:634b:398a:72e0:e553:68f6) wickedjargon |
| 2026-04-06 08:31:03 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 08:31:41 +0000 | CiaoSen | (~Jura@p549cb690.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 2026-04-06 08:31:56 +0000 | CiaoSen | (~Jura@p549cb690.dip0.t-ipconnect.de) CiaoSen |
| 2026-04-06 08:33:25 +0000 | Tuplanolla | (~Tuplanoll@88-114-89-88.elisa-laajakaista.fi) Tuplanolla |
| 2026-04-06 08:37:49 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-04-06 08:38:07 +0000 | Guest62 | (~Guest62@p200300ca8f13d0000071be933609493f.dip0.t-ipconnect.de) |
| 2026-04-06 08:42:35 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 08:47:34 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 2026-04-06 08:54:42 +0000 | karenw | (~karenw@user/karenw) karenw |
| 2026-04-06 08:58:22 +0000 | merijn | (~merijn@62.45.136.136) merijn |
| 2026-04-06 08:58:44 +0000 | mud | (~mud@user/kadoban) (Read error: Connection reset by peer) |
| 2026-04-06 08:58:49 +0000 | tolt | (~weechat-h@li219-154.members.linode.com) (Ping timeout: 248 seconds) |
| 2026-04-06 08:59:03 +0000 | mud | (~mud@user/kadoban) kadoban |
| 2026-04-06 08:59:15 +0000 | tolt | (~weechat-h@li219-154.members.linode.com) tolt |
| 2026-04-06 09:00:25 +0000 | pavonia | (~user@user/siracusa) (Ping timeout: 248 seconds) |
| 2026-04-06 09:00:55 +0000 | pavonia | (~user@user/siracusa) siracusa |
| 2026-04-06 09:02:10 +0000 | z-b | (jobnbg@bot.kapsi.fi) (Ping timeout: 256 seconds) |
| 2026-04-06 09:03:19 +0000 | merijn | (~merijn@62.45.136.136) (Ping timeout: 276 seconds) |
| 2026-04-06 09:05:13 +0000 | haskellbridge | (~hackager@96.28.224.214) (Ping timeout: 248 seconds) |
| 2026-04-06 09:05:20 +0000 | socksbuny | (~socks@oberon.raccoon.fun) (Ping timeout: 252 seconds) |
| 2026-04-06 09:05:46 +0000 | Hecate | (~mariposa@user/hecate) (Read error: Connection reset by peer) |
| 2026-04-06 09:06:01 +0000 | socksbuny | (~socks@oberon.raccoon.fun) raccoonasdf |
| 2026-04-06 09:06:15 +0000 | haskellbridge | (~hackager@96.28.224.214) hackager |
| 2026-04-06 09:06:15 +0000 | ChanServ | +v haskellbridge |
| 2026-04-06 09:06:39 +0000 | Hecate | (~mariposa@user/hecate) Hecate |
| 2026-04-06 09:07:16 +0000 | tdammers | (~tdammers@1-133-178-143.ftth.glasoperator.nl) (Ping timeout: 256 seconds) |
| 2026-04-06 09:07:20 +0000 | zb | (jobnbg@bot.kapsi.fi) zb |
| 2026-04-06 09:07:40 +0000 | tdammers | (~tdammers@1-133-178-143.ftth.glasoperator.nl) |
| 2026-04-06 09:13:51 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 09:19:14 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 09:27:05 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 2026-04-06 09:27:30 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
| 2026-04-06 09:28:23 +0000 | <TMA> | gentauro: I attribute some of the EU sleepiness to the finality of failure. If you start a business in EU and fail, you are forever a "bancrotee". It is not a "business experience" but "business ineptitude". And then there is the chance that the state will just nationalize your business. |
| 2026-04-06 09:29:53 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 09:31:07 +0000 | synchromesh | (~john@2406:5a00:2412:2c00:75ab:7cb0:db12:1e18) (Read error: Connection reset by peer) |
| 2026-04-06 09:32:19 +0000 | synchromesh | (~john@2406:5a00:2412:2c00:75ab:7cb0:db12:1e18) synchromesh |
| 2026-04-06 09:33:11 +0000 | <TMA> | if Donald Trump was an European, he would never recover from his first bankruptcy. Having six of them and still be considered successful by some is inconceivable |
| 2026-04-06 09:33:25 +0000 | <gentauro> | TMA: where do you live in the EU? At least in Denmark, they try as much as possible to "get rid" of public institutions (privatization). However, from time to time, when a (needed) business go wacko, they just "buy it back" (it's us who pay taxes that do it) -> https://fm.dk/nyheder/nyhedsarkiv/2025/september/statens-koeb-af-koebenhavns-lufthavne-as-er-nu-ge… (run through Google Translate) |
| 2026-04-06 09:33:48 +0000 | gentauro | I mean, CPH can NOT live without an international airport, so I guess it's okay'ish |
| 2026-04-06 09:35:25 +0000 | <gentauro> | TMA: that is not correct. If you create a business, and you don't put up money to either create limited liability or joint stock companies, you are somehow asking for it yourself |
| 2026-04-06 09:35:25 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 2026-04-06 09:35:51 +0000 | gentauro | with those companies, you are only liable for the amount of capital you inyected into them |
| 2026-04-06 09:36:16 +0000 | <gentauro> | maybe this is a topic for #haskell-offtop? |
| 2026-04-06 09:38:24 +0000 | <TMA> | gentauro: of course, you protect your other assets. But the effect I speak of is social. If "your" company went under, noone would do business with any company you are associated with, because of the stigma your person carries. And yes, it is an offtopic stuff. I'll STFU. |
| 2026-04-06 09:38:40 +0000 | wickedjargon | (~user@2605:8d80:5430:634b:398a:72e0:e553:68f6) (Read error: Connection reset by peer) |
| 2026-04-06 09:38:56 +0000 | wickedjargon | (~user@2605:8d80:5430:634b:398a:72e0:e553:68f6) wickedjargon |
| 2026-04-06 09:39:35 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2026-04-06 09:43:18 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 09:46:01 +0000 | <gentauro> | TMA: fair point. I don't think you should stop writing. I normally get called out myself with the off-topic when it's not Haskell related ;) (it's just informative) |
| 2026-04-06 09:46:31 +0000 | werneta_ | (~werneta@71.83.160.242) (Ping timeout: 264 seconds) |
| 2026-04-06 09:47:16 +0000 | werneta | (~werneta@71.83.160.242) werneta |
| 2026-04-06 09:48:04 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-04-06 09:49:27 +0000 | __monty__ | (~toonn@user/toonn) toonn |
| 2026-04-06 09:53:50 +0000 | wickedjargon | (~user@2605:8d80:5430:634b:398a:72e0:e553:68f6) (Remote host closed the connection) |
| 2026-04-06 09:54:25 +0000 | <TMA> | gentauro: Duly noted. I get called out often enough to be rattled only if the person starting the offtopic flame does the calling while simultaneously pretending they were not involved and threatening flame participants. |
| 2026-04-06 09:58:17 +0000 | tromp | (~textual@2001:1c00:340e:2700:795f:6a6f:7cb5:ecd6) |
| 2026-04-06 09:59:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 10:04:31 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 10:06:30 +0000 | jessicara | (~shirogits@user/meow/jessicara) (Ping timeout: 268 seconds) |
| 2026-04-06 10:07:01 +0000 | traxex | (traxex@user/traxex) traxex |
| 2026-04-06 10:08:21 +0000 | CiaoSen | (~Jura@p549cb690.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 2026-04-06 10:13:39 +0000 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 2026-04-06 10:13:44 +0000 | Chai-T-Rex | (~ChaiTRex@user/chaitrex) ChaiTRex |
| 2026-04-06 10:14:57 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 10:16:57 +0000 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 255 seconds) |
| 2026-04-06 10:21:55 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 10:26:26 +0000 | Pixi` | (~Pixi@user/pixi) Pixi |
| 2026-04-06 10:29:07 +0000 | Pixi | (~Pixi@user/pixi) (Ping timeout: 264 seconds) |
| 2026-04-06 10:29:16 +0000 | fp` | (~user@2001-14ba-6e24-3000--198.rev.dnainternet.fi) |
| 2026-04-06 10:32:59 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 10:33:05 +0000 | <fp`> | Hey, I tried to create my own implementation of putStr using foldl, but it only prints the last character of the string. Is this because the accumulator never changes value, so ghc optimizes to only run my function on the last value of the [Char]? |
| 2026-04-06 10:33:10 +0000 | <fp`> | putStr' str = foldl (\acc c -> putChar c) (return ()) str |
| 2026-04-06 10:34:04 +0000 | <ski> | you're not using `acc' |
| 2026-04-06 10:34:31 +0000 | <ski> | so you're discarding all `c's but the last one |
| 2026-04-06 10:34:44 +0000 | <ski> | you need to use `>>' (or `do'-notation) |
| 2026-04-06 10:34:51 +0000 | <ski> | (or `>>=') |
| 2026-04-06 10:35:33 +0000 | <ski> | however, i would suggest using `foldr' (or `foldM', perhaps) |
| 2026-04-06 10:36:15 +0000 | <ski> | fp` : perhaps i could show an example, to make you understand what happens, above |
| 2026-04-06 10:36:39 +0000 | <ski> | putStr' ['a','b','c'] |
| 2026-04-06 10:36:54 +0000 | <ski> | = foldl (\acc c -> putChar c) (return ()) ['a','b','c'] |
| 2026-04-06 10:37:08 +0000 | <ski> | = foldl (\acc c -> putChar c) (putChar 'a') ['b','c'] |
| 2026-04-06 10:37:15 +0000 | <ski> | = foldl (\acc c -> putChar c) (putChar 'b') ['c'] |
| 2026-04-06 10:37:19 +0000 | <ski> | = foldl (\acc c -> putChar c) (putChar 'c') [] |
| 2026-04-06 10:37:26 +0000 | <ski> | = putChar 'c' |
| 2026-04-06 10:37:45 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-04-06 10:37:46 +0000 | <fp`> | Mm I see |
| 2026-04-06 10:37:53 +0000 | <ski> | and then, only at this point, when `foldl' returns, do we actually start to execute the IO-action : putChar 'c' |
| 2026-04-06 10:38:32 +0000 | <ski> | so, you need to combine `acc' with the `putChar' call |
| 2026-04-06 10:38:52 +0000 | <ski> | otherwise you're just throwing away the old value of the accumulator, each time |
| 2026-04-06 10:40:18 +0000 | <fp`> | Why isn't putChar 'a' evaluated? Is this due to some laziness in evaluation? |
| 2026-04-06 10:40:39 +0000 | <ski> | it is evaluated (at the end, after `foldl' returns). and after that, it is executed |
| 2026-04-06 10:42:20 +0000 | <ski> | (but `IO'-actions (in this case, the `putChar' call has type `IO ()') are of an abstract data type, can't really be printed, so i just left the evaluation trace above at showing the `putChar' call) |
| 2026-04-06 10:42:52 +0000 | <probie> | fp`: Because `putChar 'a'` doesn't do anything until it's "evaluated" in the IO monad |
| 2026-04-06 10:43:03 +0000 | <ski> | until it's *executed* |
| 2026-04-06 10:43:09 +0000 | <probie> | > [putChar 'a', putChar 'b', putChar 'c'] !! 1 |
| 2026-04-06 10:43:10 +0000 | <lambdabot> | <IO ()> |
| 2026-04-06 10:43:26 +0000 | <probie> | % [putChar 'a', putChar 'b', putChar 'c'] !! 1 |
| 2026-04-06 10:43:26 +0000 | <yahb2> | b |
| 2026-04-06 10:43:30 +0000 | <ski> | evaluation of `IO'-actions only determine *which* action to (later, if at all) to perform. it doesn't actually perform/execute/do the action |
| 2026-04-06 10:44:18 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 10:44:43 +0000 | <ski> | the only two ways to *execute* (not evaluate) an `IO'-action is to (a) make it the value of `main' (or a part of that value); or (b) enter it into the interactor (like e.g. GHCi, or in this case the yahb2 bot) |
| 2026-04-06 10:48:08 +0000 | <fp`> | Mm so the way to make this folding impl of putStr would be to produce a queue of IO actions |
| 2026-04-06 10:48:19 +0000 | <ski> | (of course, only if your `IO'-action is a part of a branch of execution that's activated in `main' will it be executed) |
| 2026-04-06 10:48:30 +0000 | <ski> | yes, basically |
| 2026-04-06 10:48:53 +0000 | <ski> | but that "queue" can just be a single, compound, `IO'-action, that contains all the `putChar' calls, in sequence |
| 2026-04-06 10:49:02 +0000 | <ski> | and the `>>' operator is good for this |
| 2026-04-06 10:49:13 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 10:49:15 +0000 | <ski> | % putChar 'a' >> putChar 'b' |
| 2026-04-06 10:49:15 +0000 | <yahb2> | ab |
| 2026-04-06 10:49:20 +0000 | <ski> | @type putChar 'a' >> putChar 'b' |
| 2026-04-06 10:49:21 +0000 | <lambdabot> | IO () |
| 2026-04-06 10:49:45 +0000 | <ski> | that is a single compound action, that performs those two sub-actions, in that order, when it is executed |
| 2026-04-06 10:50:01 +0000 | TimWolla | (~timwolla@2a01:4f8:150:6153:beef::6667) (Quit: Bye) |
| 2026-04-06 10:50:40 +0000 | <ski> | so, try combining your `putChar c' with the `acc' action (representing everything you're planning to do with all the previous `Char'acters you've seen, so far, in the list), combining them with the `>>' operator |
| 2026-04-06 10:50:51 +0000 | <ski> | you could also use `do', if you prefer |
| 2026-04-06 10:50:59 +0000 | <ski> | % do putChar 'a'; putChar 'b' |
| 2026-04-06 10:50:59 +0000 | <yahb2> | ab |
| 2026-04-06 10:56:48 +0000 | <fp`> | Ok yeah I was able to come up with this after perusing the docs of IO, so the lambda should be (\acc c -> acc >> putChar c) |
| 2026-04-06 10:57:40 +0000 | <fp`> | And I guess if I wanted to make putStrLn', I'd just initialize the acc to putChar '\n' |
| 2026-04-06 10:58:18 +0000 | TimWolla | (~timwolla@2a01:4f8:150:6153:beef::6667) TimWolla |
| 2026-04-06 10:59:03 +0000 | <ski> | yes, that's correct |
| 2026-04-06 10:59:11 +0000 | <ski> | now, try to use `foldr' rather than `foldl' |
| 2026-04-06 10:59:26 +0000 | <ski> | "I'd just initialize the acc to putChar '\n'" -- no |
| 2026-04-06 10:59:32 +0000 | <ski> | that would give you |
| 2026-04-06 10:59:51 +0000 | <ski> | putChar '\n' >> putChar 'a' >> putChar 'b' >> putChar 'c' |
| 2026-04-06 10:59:56 +0000 | <fp`> | Ah yeah |
| 2026-04-06 11:00:05 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 11:02:03 +0000 | <fp`> | But why foldr? My understanding is that one uses foldr for its laziness, which benefits for infinitely long lists, but surely people don't want to print infinitely long strings |
| 2026-04-06 11:02:31 +0000 | fun-safe-math | (~fun-safe-@97.115.234.213) () |
| 2026-04-06 11:02:40 +0000 | <ski> | using `foldr', you can do `putStr' in constant space. with `foldl', it's not constant space |
| 2026-04-06 11:03:39 +0000 | <ski> | this is because `foldr' can be incremental (depending on the callback you pass it), can return parts of the result, piecemeal, so that you can start executing sub-actions, before you've determined all the sub-actions |
| 2026-04-06 11:04:26 +0000 | <ski> | with `foldl', it *always* executes to the end (reaching the end of the list), before providing any result back to its caller. it's "bulky". so you can't start performing `IO'-sub-actions here, until you've seen the whole list |
| 2026-04-06 11:04:42 +0000 | fun-safe-math | (~fun-safe-@97.115.234.213) fun-safe-math |
| 2026-04-06 11:04:53 +0000 | <ski> | let's assume you defined |
| 2026-04-06 11:05:05 +0000 | <ski> | putStr' str = foldl (\acc c -> acc >> putChar c) (return ()) str |
| 2026-04-06 11:05:21 +0000 | <ski> | then the evaluation trace looks like |
| 2026-04-06 11:05:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 2026-04-06 11:05:27 +0000 | <ski> | putStr' ['a','b','c'] |
| 2026-04-06 11:05:44 +0000 | <ski> | = foldl (\acc c -> acc >> putChar c) (return ()) ['a','b','c'] |
| 2026-04-06 11:05:54 +0000 | <ski> | = foldl (\acc c -> acc >> putChar c) (return () >> putChar 'a') ['b','c'] |
| 2026-04-06 11:06:02 +0000 | <ski> | = foldl (\acc c -> acc >> putChar c) (return () >> putChar 'a' >> putChar 'b') ['c'] |
| 2026-04-06 11:06:09 +0000 | <ski> | = foldl (\acc c -> acc >> putChar c) (return () >> putChar 'a' >> putChar 'b' >> putChar 'c') [] |
| 2026-04-06 11:06:15 +0000 | <ski> | = return () >> putChar 'a' >> putChar 'b' >> putChar 'c' |
| 2026-04-06 11:06:30 +0000 | <ski> | and only at this point can we start performing, executing, the `putChar' actions |
| 2026-04-06 11:07:02 +0000 | <ski> | so, you can see that the accumulator keeps growing, as `foldl' continues looping through the list, requiring more and more space to be allocated |
| 2026-04-06 11:09:03 +0000 | <gentauro> | ski: what's the name of the `>>` operator? https://hackage-content.haskell.org/package/base-4.22.0.0/docs/Prelude.html#v:-62--62- |
| 2026-04-06 11:09:08 +0000 | <ski> | "then" |
| 2026-04-06 11:09:12 +0000 | <gentauro> | (Y) |
| 2026-04-06 11:09:22 +0000 | <ski> | and `>>=' is "bind" |
| 2026-04-06 11:09:53 +0000 | <fp`> | But why would foldr be better? Since I'm iterating through the list backward, I can't even start thinking about IO actions until I know what the first thing to print is |
| 2026-04-06 11:10:20 +0000 | <ski> | if you define the `foldr' version, i can then explain why it's better here |
| 2026-04-06 11:10:41 +0000 | <ski> | (a direct recursion would also be fine) |
| 2026-04-06 11:12:19 +0000 | <fp`> | (\c acc -> putChar c >> acc) |
| 2026-04-06 11:13:07 +0000 | <fp`> | or foldr (\c acc -> putChar c >> acc) (return ()) "abc" |
| 2026-04-06 11:14:22 +0000 | <ski> | ok, so here's what happens |
| 2026-04-06 11:14:43 +0000 | <ski> | foldr (\c acc -> putChar c >> acc) (return ()) ['a','b','c'] |
| 2026-04-06 11:14:54 +0000 | <ski> | = putChar 'a' >> foldr (\c acc -> putChar c >> acc) (return ()) ['b','c'] |
| 2026-04-06 11:15:53 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 11:16:20 +0000 | <ski> | { at this point, `main' / the interactor sees that the action is an `>>'-action, with first sub-action being putChar 'a' so it performs that part now, and then tries to perform the second one, which triggers the evaluation of it, so that `foldr' continunes one more step. i'll show putChar 'a' still as part of the result value (action), but remember that it has already happened now} |
| 2026-04-06 11:16:34 +0000 | <ski> | = putChar 'a' >> putChar 'b' >> foldr (\c acc -> putChar c >> acc) (return ()) [c'] |
| 2026-04-06 11:16:53 +0000 | <ski> | { at this point, the putChar 'b' part is executed } |
| 2026-04-06 11:17:04 +0000 | <ski> | = putChar 'a' >> putChar 'b' >> putChar 'c' >> foldr (\c acc -> putChar c >> acc) (return ()) [] |
| 2026-04-06 11:17:15 +0000 | <ski> | { and now the putChar 'c' happens } |
| 2026-04-06 11:17:24 +0000 | <ski> | = putChar 'a' >> putChar 'b' >> putChar 'c' >> return () |
| 2026-04-06 11:17:41 +0000 | <ski> | { and now the return () which does nothing } |
| 2026-04-06 11:18:08 +0000 | <fp`> | Mm so it's not actually iterating from the right |
| 2026-04-06 11:18:31 +0000 | <ski> | do note that, as soon as the putChar 'a' has been executed, we don't need to keep memory around for it (although i showed it still in all the remaining lines above, for clarity), so we can discard that memory, and similarly for the other actions, so therefore we run in constant space |
| 2026-04-06 11:18:37 +0000 | <ski> | exactly |
| 2026-04-06 11:20:07 +0000 | __monty__ | (~toonn@user/toonn) (Ping timeout: 244 seconds) |
| 2026-04-06 11:20:16 +0000 | <ski> | btw, do note that if you defined |
| 2026-04-06 11:20:26 +0000 | <ski> | putStr' [ ] = return () |
| 2026-04-06 11:20:44 +0000 | <ski> | putStr' (c:cs) = putChar c >> putStr' cs |
| 2026-04-06 11:20:51 +0000 | <ski> | or, if you prefer |
| 2026-04-06 11:20:54 +0000 | <ski> | putStr' (c:cs) = do putChar c; putStr' cs |
| 2026-04-06 11:20:59 +0000 | <ski> | for the last defining equation |
| 2026-04-06 11:21:11 +0000 | <ski> | then basically the same thing would happen, as in the `foldr' version |
| 2026-04-06 11:21:38 +0000 | <ski> | (this is the "direct recursive" version) |
| 2026-04-06 11:22:03 +0000 | __monty__ | (~toonn@user/toonn) toonn |
| 2026-04-06 11:22:33 +0000 | xff0x | (~xff0x@2405:6580:b080:900:388f:e7ec:f5bb:9bd0) |
| 2026-04-06 11:22:39 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-06 11:25:25 +0000 | <ski> | both `foldl' and `foldr' start "from the left". what differs is the way it "associates" the callback (to the left, like `((z - a) - b) - c', for `foldl (-) z [a,b,c]', vs. to the right, like `a - (b - (c - z))', for `foldr (-) z [a,b,c]'). `foldl' keeps adding to, growing, the accumulator, while `foldr' wraps its recursive calls inside calls to the callback |
| 2026-04-06 11:25:39 +0000 | <ski> | > foldl f z [a,b,c] :: Expr |
| 2026-04-06 11:25:40 +0000 | <lambdabot> | f (f (f z a) b) c |
| 2026-04-06 11:25:42 +0000 | <ski> | > foldr f z [a,b,c] :: Expr |
| 2026-04-06 11:25:44 +0000 | <lambdabot> | f a (f b (f c z)) |
| 2026-04-06 11:26:25 +0000 | <ski> | `foldr' hands over control to the callback, and lets it decide if and when to continue with the `foldr' recursive call (being the second parameter passed to the callback) |
| 2026-04-06 11:26:50 +0000 | <ski> | `foldl' keeps control, until it reaches the end of the list |
| 2026-04-06 11:28:21 +0000 | <ski> | > foldr (||) False (map (> 10) [0 ..]) -- this hands over control to `||', which decides whether to continye with the next recursive `foldr' call or not |
| 2026-04-06 11:28:22 +0000 | <lambdabot> | True |
| 2026-04-06 11:28:41 +0000 | <fp`> | So foldr looks something like this (with an additional boundary condition) |
| 2026-04-06 11:28:42 +0000 | <fp`> | foldr f acc x:xs = (f x acc) : (foldr f acc xs) |
| 2026-04-06 11:29:38 +0000 | <fp`> | and the short-circuiting logic is down to... the implementor of (||)? Or ghc? Or is there even a runtime component? |
| 2026-04-06 11:33:26 +0000 | tromp | (~textual@2001:1c00:340e:2700:795f:6a6f:7cb5:ecd6) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2026-04-06 11:33:41 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 11:33:44 +0000 | <ski> | not quite that |
| 2026-04-06 11:33:54 +0000 | <ski> | there is no `:' is the result of `foldr' |
| 2026-04-06 11:34:22 +0000 | <ski> | but yes, the implementor of `||' (or whichever callback you're using) |
| 2026-04-06 11:34:26 +0000 | <ski> | @src (||) |
| 2026-04-06 11:34:27 +0000 | <lambdabot> | True || _ = True |
| 2026-04-06 11:34:27 +0000 | <lambdabot> | False || x = x |
| 2026-04-06 11:34:43 +0000 | <ski> | that short-circuits, does not evaluate the right parameter, in case the left is `True' |
| 2026-04-06 11:39:03 +0000 | <fp`> | So the `_' is what causes the short circuiting? |
| 2026-04-06 11:39:19 +0000 | <ski> | the short-circuiting is not built-in, is just a consequence of how `||' is defined, and how lazy evaluation works |
| 2026-04-06 11:39:24 +0000 | <ski> | yes, in this case |
| 2026-04-06 11:39:27 +0000 | <ski> | but if it had said |
| 2026-04-06 11:39:33 +0000 | <ski> | True || x = True |
| 2026-04-06 11:39:42 +0000 | <ski> | it would also have ignored `x', still short-circuiting |
| 2026-04-06 11:40:03 +0000 | <ski> | what matters is whether the parameter is used/demanded/forced, not really whether it's named |
| 2026-04-06 11:40:34 +0000 | <fp`> | I see |
| 2026-04-06 11:40:45 +0000 | <ski> | of course, if it's not named, then you're not forcing it (unless you use a strictness annotation, e.g. `!_'), so it's not forced unless someone else is forcing it, elsewhere |
| 2026-04-06 11:41:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 11:41:46 +0000 | <ski> | (you could pass the same list to two different places. one might use `_' (not forcing), while the other might force it, naming) |
| 2026-04-06 11:44:28 +0000 | TimWolla | (~timwolla@2a01:4f8:150:6153:beef::6667) (Quit: Bye) |
| 2026-04-06 11:45:08 +0000 | <fp`> | Also, where does lambdabot's Expr type come from? That would be quite useful to me |
| 2026-04-06 11:45:16 +0000 | <ski> | @src any |
| 2026-04-06 11:45:16 +0000 | <lambdabot> | any p = or . map p |
| 2026-04-06 11:45:17 +0000 | <ski> | @src or |
| 2026-04-06 11:45:17 +0000 | <lambdabot> | or = foldr (||) False |
| 2026-04-06 11:45:27 +0000 | merijn | (~merijn@62.45.136.136) merijn |
| 2026-04-06 11:45:32 +0000 | <ski> | so, the example above is the same as `any (> 10) [0 ..]' |
| 2026-04-06 11:47:09 +0000 | <ski> | @hackage simple-reflect |
| 2026-04-06 11:47:09 +0000 | <lambdabot> | https://hackage.haskell.org/package/simple-reflect |
| 2026-04-06 11:47:12 +0000 | <ski> | fp` ^ |
| 2026-04-06 11:50:54 +0000 | <fp`> | Cool. Thank you so much for all the help! |
| 2026-04-06 11:51:36 +0000 | <ski> | np |
| 2026-04-06 11:52:09 +0000 | merijn | (~merijn@62.45.136.136) (Ping timeout: 248 seconds) |
| 2026-04-06 11:57:16 +0000 | TimWolla | (~timwolla@2a01:4f8:150:6153:beef::6667) TimWolla |
| 2026-04-06 12:01:21 +0000 | craunts795335385 | (~craunts@152.32.99.2) (Quit: The Lounge - https://thelounge.chat) |
| 2026-04-06 12:02:34 +0000 | TimWolla | (~timwolla@2a01:4f8:150:6153:beef::6667) (Remote host closed the connection) |
| 2026-04-06 12:03:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 12:08:29 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-04-06 12:08:48 +0000 | TimWolla | (~timwolla@2a01:4f8:150:6153:beef::6667) TimWolla |
| 2026-04-06 12:10:08 +0000 | raelie | (~raelie@user/raelie) raelie |
| 2026-04-06 12:13:33 +0000 | craunts795335385 | (~craunts@152.32.99.2) |
| 2026-04-06 12:14:46 +0000 | Pozyomka | (~pyon@user/pyon) (Quit: brb) |
| 2026-04-06 12:19:08 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 12:24:01 +0000 | m | (~travltux@user/travltux) (Quit: WeeChat 4.7.2) |
| 2026-04-06 12:24:28 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-04-06 12:26:35 +0000 | m2 | (~travltux@user/travltux) travltux |
| 2026-04-06 12:35:11 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 12:39:43 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-04-06 12:40:10 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-04-06 12:40:31 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 264 seconds) |
| 2026-04-06 12:43:56 +0000 | sonny | (~sonny@bras-base-london140cw-grc-17-142-113-177-150.dsl.bell.ca) sonny |
| 2026-04-06 12:44:37 +0000 | Pixi` | Pixi |
| 2026-04-06 12:44:51 +0000 | rainbyte | (~rainbyte@181.47.219.3) (Read error: Connection reset by peer) |
| 2026-04-06 12:45:42 +0000 | rainbyte | (~rainbyte@181.47.219.3) rainbyte |
| 2026-04-06 12:46:20 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 12:47:30 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Excess Flood) |
| 2026-04-06 12:48:53 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-04-06 12:50:25 +0000 | tromp | (~textual@2001:1c00:340e:2700:8cf8:7bb7:a0e:7cfa) |
| 2026-04-06 12:51:30 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 12:59:08 +0000 | oats | (~oats@user/oats) (Read error: Connection reset by peer) |
| 2026-04-06 12:59:22 +0000 | oats | (~oats@user/oats) oats |
| 2026-04-06 13:02:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 13:05:30 +0000 | <fp`> | So in the sense that `putChar 'c'` is evaluated to <IO action> and that is eventually executed to produce a 'c' in the tty, who does the executing? Is this a metaphor for how GHC produces code, or is there a runtime that is literally turning IO actions into syscalls? |
| 2026-04-06 13:06:26 +0000 | tromp | (~textual@2001:1c00:340e:2700:8cf8:7bb7:a0e:7cfa) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 2026-04-06 13:07:31 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 13:11:30 +0000 | <probie> | fp`: Something of type `IO a` is modelled by GHC as function from the current state of the universe, to a pair containing the new state of the universe, and a value of type `a`. As part of generating this "new state of the universe", IO actions happen |
| 2026-04-06 13:14:37 +0000 | <probie> | e.g. something of type `Char -> IO ()` is really `Char -> Universe -> ((), Universe)`, and the interface of the IO monad prevents you from using that `Universe` twice. In reality it's actually `Char -> State# RealWorld -> (# State# RealWorld, a #)` |
| 2026-04-06 13:16:44 +0000 | <probie> | `State# RealWorld` is a special 0-bit type that's just a token (since you can't actually pass the universe around), and the `(# ..., ... #)` is an "unboxed tuple", which you can think of as a strict tuple with no runtime overhead |
| 2026-04-06 13:17:51 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 13:23:17 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-04-06 13:25:01 +0000 | Square2 | (~Square@user/square) Square |
| 2026-04-06 13:25:04 +0000 | <ski> | fp` : yes, you can think of it as a run-time that interprets the `IO'-action values, actually performing them |
| 2026-04-06 13:25:52 +0000 | <ski> | (for efficiency, it does get compiled, by GHC, to code that directly performs the indicated actions, rather than interpreting data structures) |
| 2026-04-06 13:26:31 +0000 | <ski> | if you want to, you could imagine a data type something like |
| 2026-04-06 13:26:56 +0000 | <ski> | data MyIO :: * -> * |
| 2026-04-06 13:26:58 +0000 | <ski> | where |
| 2026-04-06 13:27:04 +0000 | <ski> | Return :: a -> MyIO a |
| 2026-04-06 13:27:17 +0000 | <ski> | Bind :: MyIO a -> (a -> MyIO b) -> MyIO b |
| 2026-04-06 13:27:38 +0000 | <ski> | OpenFile :: FilePath -> IOMode -> MyIO Handle |
| 2026-04-06 13:27:51 +0000 | <ski> | hGetChar :: Handle -> MyIO Char |
| 2026-04-06 13:28:03 +0000 | <ski> | HPutChar :: Handle -> Char -> MyIO () |
| 2026-04-06 13:28:05 +0000 | <ski> | ... |
| 2026-04-06 13:28:07 +0000 | <ski> | and so on |
| 2026-04-06 13:28:30 +0000 | <ski> | you could write an interpreter, `runMyIO :: MyIO a -> IO a', for this |
| 2026-04-06 13:28:41 +0000 | <ski> | (er, s/hGetChar/HGetChar/) |
| 2026-04-06 13:29:08 +0000 | terrorjack | (~terrorjac@2a01:4f8:271:2d98::2) (Quit: The Lounge - https://thelounge.chat) |
| 2026-04-06 13:29:10 +0000 | sonny | (~sonny@bras-base-london140cw-grc-17-142-113-177-150.dsl.bell.ca) (Quit: Client closed) |
| 2026-04-06 13:29:55 +0000 | <ski> | btw, before monadic I/O was introduces in Haskell, there was a "dialogue"-style I/O, where you defined |
| 2026-04-06 13:29:59 +0000 | <ski> | main :: Dialogue |
| 2026-04-06 13:30:00 +0000 | <ski> | where |
| 2026-04-06 13:30:13 +0000 | <ski> | type Dialogue = [Responses] -> [Requests] |
| 2026-04-06 13:31:09 +0000 | <ski> | iowy, you write a function which returns a lazy list of I/O requests, and then (after generating the current request), you look at the current response |
| 2026-04-06 13:31:18 +0000 | <ski> | something like |
| 2026-04-06 13:32:07 +0000 | somemathguy | (~somemathg@user/somemathguy) somemathguy |
| 2026-04-06 13:32:22 +0000 | <ski> | data Request = OpenFile FilePath IOMode | HGetChar Handle | HPutChar Handle Char | ... |
| 2026-04-06 13:32:58 +0000 | <ski> | data Response = FileOpened Handle | HCharGot Char | HCharPut | ... |
| 2026-04-06 13:33:03 +0000 | Pozyomka | (~pyon@user/pyon) (Quit: bbml) |
| 2026-04-06 13:33:17 +0000 | terrorjack | (~terrorjac@static.27.101.55.162.clients.your-server.de) terrorjack |
| 2026-04-06 13:33:28 +0000 | <ski> | and then you can define helper functions like |
| 2026-04-06 13:33:46 +0000 | <ski> | hPutChar :: Handle -> Char -> Dialogue -> Dialogue |
| 2026-04-06 13:33:53 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 13:34:57 +0000 | <ski> | hPutChar h c cont resps0 = HPutChar h c : case resps0 of HCharPut:resps -> cont resps |
| 2026-04-06 13:35:00 +0000 | <ski> | and |
| 2026-04-06 13:35:12 +0000 | <ski> | hGetChar :: Handle -> (Char -> Dialogue) -> Dialogue |
| 2026-04-06 13:35:45 +0000 | <ski> | hGetChar h c_cont resps0 = HGetChar h : case resps0 of HCharGot c:resps -> c_cont c resps |
| 2026-04-06 13:37:16 +0000 | <ski> | where you pass a "continuation" dialogue for what to do (which will generate the remaining requests and process the corresponding responses), after the character you've outputted, or inputted |
| 2026-04-06 13:40:04 +0000 | <ski> | in this case, there'd be a thin run-time driver, which inspects the requests from the dialogue, performs it, and then generates the corresponding response for the dialogue to receive |
| 2026-04-06 13:40:35 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-04-06 13:40:50 +0000 | synchromesh | (~john@2406:5a00:2412:2c00:75ab:7cb0:db12:1e18) (Read error: Connection reset by peer) |
| 2026-04-06 13:41:03 +0000 | <ski> | (btw, this `(Char -> Dialogue) -> Dialogue' can be expressed as a "continuation monad", `Cont Dialogue Char', and similarly `Cont Dialogue ()' for the output case) |
| 2026-04-06 13:41:13 +0000 | <ski> | @unmtl Cont Dialogue Char |
| 2026-04-06 13:41:13 +0000 | <lambdabot> | (Char -> Dialogue) -> Dialogue |
| 2026-04-06 13:41:32 +0000 | <ski> | @src Cont |
| 2026-04-06 13:41:32 +0000 | <lambdabot> | newtype Cont r a = Cont { runCont :: (a -> r) -> r } |
| 2026-04-06 13:42:09 +0000 | synchromesh | (~john@2406:5a00:2412:2c00:75ab:7cb0:db12:1e18) synchromesh |
| 2026-04-06 13:47:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 13:48:49 +0000 | tromp | (~textual@2001:1c00:340e:2700:8cf8:7bb7:a0e:7cfa) |
| 2026-04-06 13:52:30 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-06 13:55:59 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 2026-04-06 13:56:03 +0000 | <TMA> | my understanding of I/O in Haskell stopped with threading RealWorld through everything |
| 2026-04-06 14:03:08 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 14:08:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 14:18:55 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 14:20:25 +0000 | traxex | (traxex@user/traxex) (Ping timeout: 272 seconds) |
| 2026-04-06 14:24:02 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-04-06 14:30:37 +0000 | somemathguy | (~somemathg@user/somemathguy) (Quit: WeeChat 4.1.1) |
| 2026-04-06 14:33:07 +0000 | <EvanR> | my understanding of I/O started when threading RealWorld stopped xD |
| 2026-04-06 14:34:44 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 14:39:55 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 14:40:35 +0000 | <EvanR> | RealWorld and [Response] -> [Request] both seems like dead ends in IO enlightenment |
| 2026-04-06 14:45:20 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-04-06 14:48:20 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 14:51:32 +0000 | puke | (~puke@user/puke) puke |
| 2026-04-06 14:53:40 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 2026-04-06 14:55:22 +0000 | <ski> | they're stepping stones |
| 2026-04-06 14:57:17 +0000 | <TMA> | EvanR: my understanding now is: haskell has no I/O. it has IO instead and that's dark magic I don't want to touch |
| 2026-04-06 15:04:08 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 15:08:57 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 15:10:52 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) jmcantrell |
| 2026-04-06 15:10:52 +0000 | jmcantrell_ | jmcantrell |
| 2026-04-06 15:14:40 +0000 | <tomsmeding> | TMA: have you ever done anything with linear types? |
| 2026-04-06 15:15:11 +0000 | <tomsmeding> | if you write IO as `newtype IO a = IO (RealWorld %1-> (RealWorld, Ur a))` suddenly it makes perfectsense |
| 2026-04-06 15:15:17 +0000 | <tomsmeding> | *perfect sense |
| 2026-04-06 15:16:33 +0000 | acidjnk_new | (~acidjnk@p200300d6e700e50883c9e32b40afcfd6.dip0.t-ipconnect.de) |
| 2026-04-06 15:16:34 +0000 | <tomsmeding> | ostensibly that %1 should be there, but it isn't |
| 2026-04-06 15:16:55 +0000 | <__monty__> | TMA: That's a bad conclusion. (As in, it saddens me that you've come to it, not as in you're bad for reaching it.) Maybe forego "understanding" IO for a bit and just try it out for a bit, get a feel for it. (Don't fall into the trap of turning your observations into rigid rules of how it works though, keep an open mind.) |
| 2026-04-06 15:16:59 +0000 | <tomsmeding> | but that's mostly an emperor's-new-clothes situation, everyone assumes it's there |
| 2026-04-06 15:19:54 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 15:25:46 +0000 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
| 2026-04-06 15:26:33 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-06 15:27:14 +0000 | jmcantrell | (~weechat@user/jmcantrell) (Ping timeout: 248 seconds) |
| 2026-04-06 15:34:37 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-04-06 15:35:09 +0000 | <TMA> | tomsmeding: I have read about them. |
| 2026-04-06 15:36:41 +0000 | <TMA> | __monty__: nobody permits me to use haskell in employment related work so I use haskell mostly as an inspiration for structuring code in other languages, so this level of understanding does not hinder me at all |
| 2026-04-06 15:37:36 +0000 | TMA | has come to terms with own limitations |
| 2026-04-06 15:37:56 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 15:38:17 +0000 | TMA | is not smart enough and that's fine |
| 2026-04-06 15:38:54 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 246 seconds) |
| 2026-04-06 15:40:02 +0000 | divlamir | (~divlamir@user/divlamir) (Read error: Connection reset by peer) |
| 2026-04-06 15:40:22 +0000 | divlamir | (~divlamir@user/divlamir) divlamir |
| 2026-04-06 15:42:45 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-04-06 15:47:15 +0000 | <gentauro> | TMA: do you know Binary Lambda Calculus from John Tromp? https://tromp.github.io/cl/Binary_lambda_calculus.html (see his examples how he handles IO effects) ;) |
| 2026-04-06 15:49:20 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 15:54:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 15:57:55 +0000 | slomp | (~slomp@47-158-212-88.lsan.ca.frontiernet.net) (Read error: Connection reset by peer) |
| 2026-04-06 15:59:22 +0000 | slomp | (~slomp@47-158-212-88.lsan.ca.frontiernet.net) |
| 2026-04-06 16:05:18 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 16:10:03 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-04-06 16:14:39 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-04-06 16:22:07 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 16:24:41 +0000 | <TMA> | gentauro: I have read it. I have not understood it. |
| 2026-04-06 16:25:09 +0000 | machinedgod | (~machinedg@d172-219-48-230.abhsia.telus.net) machinedgod |
| 2026-04-06 16:26:17 +0000 | <TMA> | gentauro: some parts are easy. some parts make my brain shut down. |
| 2026-04-06 16:26:20 +0000 | TMA | is not smart enough and that's fine |
| 2026-04-06 16:27:37 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-04-06 16:29:24 +0000 | <mauke> | RealWorld is bullshit. it doesn't explain anything |
| 2026-04-06 16:38:11 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 16:43:33 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 2026-04-06 16:46:42 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-04-06 16:48:41 +0000 | hellwolf | (~user@52de-36c6-d139-9d27-0f00-4d40-07d0-2001.sta.estpak.ee) (Ping timeout: 248 seconds) |
| 2026-04-06 16:50:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 16:54:34 +0000 | hellwolf | (~user@7530-0dab-5d73-cf2b-0f00-4d40-07d0-2001.sta.estpak.ee) hellwolf |
| 2026-04-06 16:57:49 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 2026-04-06 17:03:02 +0000 | zalo-rocky | (~flyingzal@user/zalo-rocky) zalo-rocky |
| 2026-04-06 17:03:13 +0000 | <ski> | it explains sequencing data dependency, but not much more |
| 2026-04-06 17:03:51 +0000 | <ski> | (e.g. doesn't explain I/O exceptions, doesn't explain concurrency (including communication), &c.) |
| 2026-04-06 17:07:58 +0000 | Googulator10 | (~Googulato@2a01-036d-0106-496b-154a-c7fc-9f43-bd2d.pool6.digikabel.hu) |
| 2026-04-06 17:07:59 +0000 | sm__ | (~sm@66.8.200.171) |
| 2026-04-06 17:08:13 +0000 | Googulator | (~Googulato@2a01-036d-0106-496b-154a-c7fc-9f43-bd2d.pool6.digikabel.hu) (Quit: Client closed) |
| 2026-04-06 17:08:23 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 17:09:54 +0000 | Tuplanolla | (~Tuplanoll@88-114-89-88.elisa-laajakaista.fi) (Ping timeout: 246 seconds) |
| 2026-04-06 17:13:44 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-04-06 17:14:37 +0000 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
| 2026-04-06 17:14:53 +0000 | gmg | (~user@user/gehmehgeh) gehmehgeh |
| 2026-04-06 17:25:12 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 17:30:18 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-06 17:34:52 +0000 | karenw | (~karenw@user/karenw) (Ping timeout: 276 seconds) |
| 2026-04-06 17:35:11 +0000 | <mauke> | it doesn't explain I/O |
| 2026-04-06 17:37:11 +0000 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-04-06 17:40:44 +0000 | st_aldini | (~Betterbir@2605:a601:a07c:7426:a9c5:df0c:3e0f:b451) st_aldini |
| 2026-04-06 17:40:44 +0000 | arandombit | (~arandombi@user/arandombit) arandombit |
| 2026-04-06 17:41:18 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 17:42:37 +0000 | arandombit | (~arandombi@user/arandombit) (Remote host closed the connection) |
| 2026-04-06 17:45:15 +0000 | st_aldini | (~Betterbir@2605:a601:a07c:7426:a9c5:df0c:3e0f:b451) (Ping timeout: 246 seconds) |
| 2026-04-06 17:45:42 +0000 | Pozyomka | (~pyon@user/pyon) (Quit: bbl) |
| 2026-04-06 17:46:17 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-04-06 17:48:28 +0000 | arandombit | (~arandombi@user/arandombit) arandombit |
| 2026-04-06 17:50:51 +0000 | zalo-rocky | (~flyingzal@user/zalo-rocky) (Quit: The Lounge - https://thelounge.chat) |
| 2026-04-06 17:51:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 17:56:24 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-06 18:02:07 +0000 | m_a_r_k | (~m_a_r_k@archlinux/support/mark) (Read error: Connection reset by peer) |
| 2026-04-06 18:03:47 +0000 | fp` | (~user@2001-14ba-6e24-3000--198.rev.dnainternet.fi) (Ping timeout: 252 seconds) |
| 2026-04-06 18:04:30 +0000 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 246 seconds) |
| 2026-04-06 18:04:57 +0000 | mehbark | (~mehbark@user/mehbark) (Ping timeout: 248 seconds) |
| 2026-04-06 18:07:08 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 18:07:55 +0000 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-04-06 18:14:45 +0000 | op_4 | mission_speciali |
| 2026-04-06 18:14:55 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-04-06 18:15:26 +0000 | mission_speciali | op_4 |
| 2026-04-06 18:18:33 +0000 | op_4 | missionspecialis |
| 2026-04-06 18:19:02 +0000 | missionspecialis | op_4 |
| 2026-04-06 18:19:21 +0000 | confusedalex | (~confuseda@user/confusedalex) (Ping timeout: 255 seconds) |
| 2026-04-06 18:19:50 +0000 | puke | (~puke@user/puke) (Quit: puke) |
| 2026-04-06 18:22:42 +0000 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 248 seconds) |
| 2026-04-06 18:24:20 +0000 | qqq | (~qqq@185.54.23.237) |
| 2026-04-06 18:26:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 18:29:00 +0000 | confusedalex | (~confuseda@user/confusedalex) confusedalex |
| 2026-04-06 18:33:22 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-04-06 18:34:10 +0000 | <monochrom> | I'm an extremist, I want to begin by scaremongering about what Ken Thompson said about the source code meaning sh*t if you don't know how much the compiler is special-casing what it sees. |
| 2026-04-06 18:34:12 +0000 | puke | (~puke@user/puke) puke |
| 2026-04-06 18:35:18 +0000 | <monochrom> | In our particular case, we already know that GHC is special-casing RealWorld, so you must not trust any library source code that pretends to take it seriously. |
| 2026-04-06 18:35:22 +0000 | karenw | (~karenw@user/karenw) karenw |
| 2026-04-06 18:36:11 +0000 | <monochrom> | But ideally no one should need to remind anyone else about that. You can just check the assembly code, and it will be plain as day that RealWorld doesn't exist there. |
| 2026-04-06 18:37:44 +0000 | arandombit | (~arandombi@user/arandombit) (Ping timeout: 244 seconds) |
| 2026-04-06 18:41:44 +0000 | qqq | (~qqq@185.54.23.237) (Ping timeout: 252 seconds) |
| 2026-04-06 18:42:03 +0000 | marinelli | (~weechat@brrr.fr) (Quit: marinelli) |
| 2026-04-06 18:44:45 +0000 | merijn | (~merijn@62.45.136.136) merijn |
| 2026-04-06 18:48:57 +0000 | merijn | (~merijn@62.45.136.136) (Ping timeout: 246 seconds) |
| 2026-04-06 18:52:20 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 18:52:27 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-04-06 18:55:52 +0000 | Pozyomka | (~pyon@user/pyon) (Client Quit) |
| 2026-04-06 18:56:59 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-04-06 18:58:03 +0000 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-04-06 18:58:38 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-04-06 19:00:50 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...) |
| 2026-04-06 19:03:56 +0000 | <tomsmeding> | monochrom: surely RealWorld not existing in the asm is the least of the special-casing? |
| 2026-04-06 19:04:44 +0000 | <tomsmeding> | a value (# #) also doesn't exist in the asm |
| 2026-04-06 19:04:55 +0000 | <monochrom> | It is the beginning of believing that special-casing happened. |
| 2026-04-06 19:05:29 +0000 | <tomsmeding> | not representing a value with no information in the compiled program is not particularly special :p |
| 2026-04-06 19:05:50 +0000 | <tomsmeding> | what's special is that GHC sees that RealWorld has no information, but then still does the full dance of passing it around in Core |
| 2026-04-06 19:05:55 +0000 | <tomsmeding> | to maintain the sequencing |
| 2026-04-06 19:05:56 +0000 | <monochrom> | At present, most people still believe that RealWorld has a non-trivial representation in the final code. |
| 2026-04-06 19:06:06 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:06:17 +0000 | <tomsmeding> | does that matter for understanding how IO works? |
| 2026-04-06 19:06:51 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:07:19 +0000 | <monochrom> | 0th-order approximation no, 2nd-order approximation yes. |
| 2026-04-06 19:07:27 +0000 | <tomsmeding> | or are you saying, the fact itself that RealWorld has no information in it, must mean that there's something special going on, because otherwise there's nothing to "mutate" with our IO? |
| 2026-04-06 19:07:34 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:07:59 +0000 | <c_wraith> | people believe RealWorld exists in the final code? huh. I had no idea. |
| 2026-04-06 19:08:07 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 19:08:12 +0000 | <int-e> | well *something* is still going on because the RTS knows how to apply a function to a void (zero-size) argument |
| 2026-04-06 19:08:12 +0000 | <tomsmeding> | it would be rather stupid! |
| 2026-04-06 19:08:41 +0000 | <tomsmeding> | int-e: if the argument is zero-size, does it exist? |
| 2026-04-06 19:08:44 +0000 | Googulator10 | Googulator |
| 2026-04-06 19:08:50 +0000 | <c_wraith> | int-e: yes. What's going on is that at level procedures exist. :) |
| 2026-04-06 19:08:56 +0000 | <int-e> | tomsmeding: no, but the function is different from its result value |
| 2026-04-06 19:09:02 +0000 | <tomsmeding> | sure |
| 2026-04-06 19:10:10 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:10:17 +0000 | <int-e> | tomsmeding: well. I guess I shouldn't say "no |
| 2026-04-06 19:10:18 +0000 | <int-e> | " |
| 2026-04-06 19:10:28 +0000 | <monochrom> | Right, I am saying that looking at the assembly code is the beginning of realizing that something special, not shown in source code, is going on. |
| 2026-04-06 19:10:33 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:10:43 +0000 | <tomsmeding> | OK I can get behind that |
| 2026-04-06 19:10:48 +0000 | <int-e> | because in a way it does exist, it just has no material manifestation whatsoever |
| 2026-04-06 19:10:54 +0000 | <tomsmeding> | I guess |
| 2026-04-06 19:11:14 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:11:15 +0000 | <raincomplex> | isn't it true that most of the type system doesn't exist in the final code? |
| 2026-04-06 19:11:28 +0000 | <int-e> | raincomplex: but values exist |
| 2026-04-06 19:11:31 +0000 | <int-e> | most of them |
| 2026-04-06 19:11:32 +0000 | <tomsmeding> | sure, but there's not even a _vlaue_ of type RealWorld |
| 2026-04-06 19:11:35 +0000 | <int-e> | this particular one doesn't |
| 2026-04-06 19:11:46 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:12:00 +0000 | <tomsmeding> | (not to be confused with types that can have no values in the first place, i.e. types with kind different from Type) |
| 2026-04-06 19:12:00 +0000 | <monochrom> | Yes. But I am addressing what people choose to believe, and how to change their minds; not what is already true. |
| 2026-04-06 19:12:01 +0000 | <c_wraith> | making GHC allow users to create zero-size values is actually a relatively new thing. |
| 2026-04-06 19:12:09 +0000 | <int-e> | "exist" in the sense that they're stored in memory or a register |
| 2026-04-06 19:12:10 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:12:20 +0000 | <c_wraith> | GHC supports values that exist in code, but not at run time. |
| 2026-04-06 19:12:54 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:13:05 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-04-06 19:13:18 +0000 | <c_wraith> | they have some obvious restrictions as the result of this - they can't be the sole return value of a function, for instance. |
| 2026-04-06 19:13:21 +0000 | <int-e> | Now, here's the real question: Did Rust steal zero-sized types from Haskell ;-) |
| 2026-04-06 19:13:34 +0000 | <mauke> | RealWorld is an irrelevant implementation detail of one particular Haskell implementation |
| 2026-04-06 19:13:35 +0000 | <c_wraith> | (though they can be part of an unboxed tuple of return values) |
| 2026-04-06 19:14:00 +0000 | <mauke> | it's like someone asking how I/O works in C and the first thing people point to is the struct layout of FILE in the glibc implementation of <stdio.h> |
| 2026-04-06 19:14:03 +0000 | <monochrom> | "RealWorld -> (a, RealWorld)" is a very comfortable model, so comfortable that people try everything to rationalize that it really happens in the real world. (Pun intended!) |
| 2026-04-06 19:14:36 +0000 | <int-e> | And monochrom is cruel anough to tell them that RealWorld is entirely imaginary. |
| 2026-04-06 19:14:39 +0000 | <c_wraith> | the model doesn't work for concurrent code, though. So... uh... |
| 2026-04-06 19:14:54 +0000 | <monochrom> | ISTR Hugs old versions did it the free-monad way! But I can't find it now. |
| 2026-04-06 19:14:58 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:15:15 +0000 | <mauke> | why did 10 lines of activity just pop up at once? how laggy is this connection? :-) |
| 2026-04-06 19:15:30 +0000 | <monochrom> | Right, good for about 0th approximation only. |
| 2026-04-06 19:15:31 +0000 | <int-e> | Wasn't there a [Reply] -> [Request] model at some point |
| 2026-04-06 19:15:46 +0000 | <c_wraith> | yes, that predates Monad being part of the standard library |
| 2026-04-06 19:15:53 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:15:56 +0000 | <mauke> | that sounds like Haskell 1.3 or something |
| 2026-04-06 19:16:10 +0000 | <int-e> | (it predates my exposure to Haskell) |
| 2026-04-06 19:16:34 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:17:05 +0000 | puke | (~puke@user/puke) (Quit: puke) |
| 2026-04-06 19:17:06 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:17:18 +0000 | m_a_r_k | (~m_a_r_k@archlinux/support/mark) m_a_r_k |
| 2026-04-06 19:17:30 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:17:42 +0000 | <monochrom> | Generally, people want comfort-zone models, not models that actually works. (Just look at most analogies for Monad way back then.) |
| 2026-04-06 19:18:14 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:19:29 +0000 | <monochrom> | Yeah very old Haskell did [Reply] -> [Request]. And provided a CPS wrapper. |
| 2026-04-06 19:20:18 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:21:00 +0000 | <monochrom> | Strictly (pun! you'll see) speaking, [Reply] -> [Request] plus a very strong laziness assumption because clearly you should not force a reply before you emit a request... |
| 2026-04-06 19:21:13 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:21:41 +0000 | <int-e> | eh a little nontermination never killed anybody |
| 2026-04-06 19:21:46 +0000 | <int-e> | (quite the opposite) |
| 2026-04-06 19:21:54 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:22:00 +0000 | <monochrom> | (The CPS wrapper is then less error-prone in that regard.) |
| 2026-04-06 19:22:26 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:22:38 +0000 | <monochrom> | (I might say that, then, from CPS to monad is a fairly natural next step.) |
| 2026-04-06 19:22:39 +0000 | preflex | (~preflex@user/mauke/bot/preflex) (Remote host closed the connection) |
| 2026-04-06 19:22:50 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:22:53 +0000 | <int-e> | (please nobody bring up the Therac-25... oops) |
| 2026-04-06 19:23:12 +0000 | <monochrom> | :( |
| 2026-04-06 19:23:16 +0000 | preflex | (~preflex@user/mauke/bot/preflex) preflex |
| 2026-04-06 19:23:34 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:23:55 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 19:25:38 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:26:33 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:27:14 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:27:46 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:27:51 +0000 | <monochrom> | https://www.haskell.org/definition/from12to13.html So probably 1.2 was [Reply] -> [Request], 1.3 began the IO Monad. |
| 2026-04-06 19:28:10 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:28:50 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) jmcantrell |
| 2026-04-06 19:28:58 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:29:06 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-06 19:30:58 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:31:53 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:32:34 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:33:30 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:33:38 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:33:45 +0000 | <monochrom> | Wait, 1.4 had "List comprehensions have been generalized to arbitrary monads"? And 98 took it away?! |
| 2026-04-06 19:33:54 +0000 | <monochrom> | :'( |
| 2026-04-06 19:33:58 +0000 | <geekosaur> | yep |
| 2026-04-06 19:34:14 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:34:17 +0000 | <geekosaur> | and then ghc gave it back as an extension |
| 2026-04-06 19:34:28 +0000 | monochrom | proposes MonadComprehension for GHC2037 |
| 2026-04-06 19:36:18 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:37:13 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:37:54 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:38:06 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) (Ping timeout: 255 seconds) |
| 2026-04-06 19:38:26 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:38:50 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:39:34 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:40:00 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 19:40:28 +0000 | target_i | (~target_i@user/target-i/x-6023099) target_i |
| 2026-04-06 19:41:09 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) jmcantrell |
| 2026-04-06 19:41:38 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:42:33 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:43:14 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:43:46 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:44:10 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:44:58 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:45:31 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 2026-04-06 19:46:58 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:47:53 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:48:34 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:48:46 +0000 | jmcantrell_ | (~weechat@user/jmcantrell) (Ping timeout: 276 seconds) |
| 2026-04-06 19:48:57 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:49:38 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:50:34 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:52:05 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 19:52:18 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:53:13 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:53:22 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:53:57 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:54:58 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:55:39 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 255 seconds) |
| 2026-04-06 19:55:54 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) |
| 2026-04-06 19:57:06 +0000 | comerijn | (~merijn@77.242.116.146) merijn |
| 2026-04-06 19:57:10 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-04-06 19:57:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 19:57:38 +0000 | AlexNoo | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 19:58:10 +0000 | AlexNoo_ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 20:00:18 +0000 | AlexNoo__ | (~AlexNoo@85.174.183.185) (Ping timeout: 248 seconds) |
| 2026-04-06 20:02:13 +0000 | comerijn | (~merijn@77.242.116.146) (Ping timeout: 265 seconds) |
| 2026-04-06 20:04:25 +0000 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 248 seconds) |
| 2026-04-06 20:12:24 +0000 | puke | (~puke@user/puke) puke |
| 2026-04-06 20:31:47 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-04-06 20:36:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-06 20:37:54 +0000 | emmanuelux_ | (~em@2a02-8440-2502-667f-6732-4cb1-658e-9089.rev.sfr.net) |
| 2026-04-06 20:39:09 +0000 | emmanuelux | (~em@user/emmanuelux) (Ping timeout: 272 seconds) |
| 2026-04-06 20:41:13 +0000 | comonad | (~comonad@p200300d02717df00adc247ef70bd7367.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 2026-04-06 20:43:59 +0000 | emmanuelux | (~em@user/emmanuelux) emmanuelux |
| 2026-04-06 20:44:45 +0000 | emmanuelux_ | (~em@2a02-8440-2502-667f-6732-4cb1-658e-9089.rev.sfr.net) (Ping timeout: 268 seconds) |
| 2026-04-06 20:50:29 +0000 | <jreicher> | TMA: you know in imperative/OO languages any function that does IO needs to "eventually" make a system call to really do it? I.e. the IO is actually done by the OS? |