| 2026-06-16 00:00:31 +0000 | jayanth | (~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) |
| 2026-06-16 00:03:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 00:08:02 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-06-16 00:14:43 +0000 | GdeVolpiano | (~GdeVolpia@user/GdeVolpiano) (Ping timeout: 244 seconds) |
| 2026-06-16 00:15:54 +0000 | weary-traveler | (~user@user/user363627) (Quit: Konversation terminated!) |
| 2026-06-16 00:16:12 +0000 | weary-traveler | (~user@user/user363627) user363627 |
| 2026-06-16 00:18:14 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
| 2026-06-16 00:18:30 +0000 | notzmv | (~umar@user/notzmv) (Ping timeout: 245 seconds) |
| 2026-06-16 00:18:42 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 00:19:22 +0000 | jayanth | (~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) (Ping timeout: 244 seconds) |
| 2026-06-16 00:25:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 2026-06-16 00:26:32 +0000 | czan | (~czan@user/mange) czan |
| 2026-06-16 00:27:43 +0000 | GdeVolpiano | (~GdeVolpia@user/GdeVolpiano) GdeVolpiano |
| 2026-06-16 00:32:48 +0000 | bggd_ | (~bgg@2a01:e0a:fd5:f510:1a59:33f5:ef7c:52f1) (Ping timeout: 244 seconds) |
| 2026-06-16 00:33:19 +0000 | acidjnk | (~acidjnk@p200300d6e700e534f8213bb0af1b5ed0.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 2026-06-16 00:33:22 +0000 | acidjnk_new | (~acidjnk@p200300d6e700e534f8213bb0af1b5ed0.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 2026-06-16 00:36:45 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 00:40:39 +0000 | redmp | (~redmp@116-65-231-94.rev.home.ne.jp) redmp |
| 2026-06-16 00:41:13 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-06-16 00:42:16 +0000 | kadobanana | (~mud@user/kadoban) kadoban |
| 2026-06-16 00:44:57 +0000 | mud | (~mud@user/kadoban) (Ping timeout: 272 seconds) |
| 2026-06-16 00:49:23 +0000 | fgarcia | (~lei@user/fgarcia) (Ping timeout: 272 seconds) |
| 2026-06-16 00:52:18 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 00:56:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-06-16 00:57:43 +0000 | xff0x | (~xff0x@ai070051.d.east.v6connect.net) (Quit: xff0x) |
| 2026-06-16 01:06:31 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 245 seconds) |
| 2026-06-16 01:06:57 +0000 | redmp | (~redmp@116-65-231-94.rev.home.ne.jp) (Ping timeout: 246 seconds) |
| 2026-06-16 01:07:35 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 01:08:41 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) bitdex |
| 2026-06-16 01:09:02 +0000 | emmanuelux | (~em@user/emmanuelux) (Quit: bye) |
| 2026-06-16 01:11:50 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-06-16 01:21:04 +0000 | spew | (~spew@user/spew) spew |
| 2026-06-16 01:22:46 +0000 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 245 seconds) |
| 2026-06-16 01:22:54 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 01:27:26 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 247 seconds) |
| 2026-06-16 01:34:14 +0000 | Pozyomka_ | (~pyon@user/pyon) pyon |
| 2026-06-16 01:34:18 +0000 | Pozyomka | (~pyon@user/pyon) (Remote host closed the connection) |
| 2026-06-16 01:34:25 +0000 | spew | (~spew@user/spew) (Quit: nyaa~) |
| 2026-06-16 01:35:39 +0000 | Pozyomka_ | (~pyon@user/pyon) (Remote host closed the connection) |
| 2026-06-16 01:36:03 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-06-16 01:38:16 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 01:38:27 +0000 | EvanR | (~EvanR@user/evanr) (Remote host closed the connection) |
| 2026-06-16 01:38:47 +0000 | EvanR | (~EvanR@user/evanr) EvanR |
| 2026-06-16 01:40:33 +0000 | karenw | (~karenw@user/karenw) karenw |
| 2026-06-16 01:43:13 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 2026-06-16 01:52:12 +0000 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) lisbeths |
| 2026-06-16 01:53:31 +0000 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 2026-06-16 01:53:39 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 01:54:54 +0000 | Axma23834 | (~Axman6@user/axman6) Axman6 |
| 2026-06-16 01:55:55 +0000 | Axman6 | (~Axman6@user/axman6) (Ping timeout: 245 seconds) |
| 2026-06-16 02:00:18 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-06-16 02:03:28 +0000 | karenw | (~karenw@user/karenw) (Quit: Deep into that darkness peering...) |
| 2026-06-16 02:11:46 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 02:16:00 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-06-16 02:18:53 +0000 | polykernel | (~polykerne@user/polykernel) polykernel |
| 2026-06-16 02:19:34 +0000 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-06-16 02:20:15 +0000 | Pozyomka | (~pyon@user/pyon) (Quit: brb) |
| 2026-06-16 02:21:07 +0000 | Pozyomka | (~pyon@user/pyon) pyon |
| 2026-06-16 02:27:03 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-16 02:31:26 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 256 seconds) |
| 2026-06-16 02:41:45 +0000 | Square | (~Square@user/square) (Ping timeout: 246 seconds) |
| 2026-06-16 02:47:24 +0000 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 252 seconds) |
| 2026-06-16 02:53:05 +0000 | td_ | (~td@i5387093E.versanet.de) (Ping timeout: 245 seconds) |
| 2026-06-16 02:54:51 +0000 | td_ | (~td@i53870916.versanet.de) |
| 2026-06-16 03:05:17 +0000 | Axma23834 | Axman6 |
| 2026-06-16 03:06:47 +0000 | notzmv | (~umar@user/notzmv) notzmv |
| 2026-06-16 03:14:54 +0000 | leppard | (~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) (Ping timeout: 252 seconds) |
| 2026-06-16 03:39:28 +0000 | fgarcia | (~lei@user/fgarcia) fgarcia |
| 2026-06-16 03:40:14 +0000 | puke | (~puke@user/puke) puke |
| 2026-06-16 03:40:22 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 03:44:45 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-06-16 03:55:45 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 03:56:58 +0000 | machinedgod | (~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 276 seconds) |
| 2026-06-16 03:57:26 +0000 | ystael | (~ystael@user/ystael) (Ping timeout: 252 seconds) |
| 2026-06-16 04:03:36 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-06-16 04:14:34 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 04:16:45 +0000 | jayanth | (~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) |
| 2026-06-16 04:19:06 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-06-16 04:26:59 +0000 | synchromesh | (~john@2406:5a00:247e:1500:a691:b1ff:0:f9d) (Read error: Connection reset by peer) |
| 2026-06-16 04:27:00 +0000 | Axma73573 | (~Axman6@user/axman6) Axman6 |
| 2026-06-16 04:28:25 +0000 | Axman6 | (~Axman6@user/axman6) (Ping timeout: 245 seconds) |
| 2026-06-16 04:29:55 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 04:32:58 +0000 | synchromesh | (~john@2406:5a00:247e:1500:a691:b1ff:0:f9d) synchromesh |
| 2026-06-16 04:34:09 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-06-16 04:41:30 +0000 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 2026-06-16 04:42:51 +0000 | michalz | (~michalz@185.246.207.197) |
| 2026-06-16 04:44:51 +0000 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-06-16 04:45:17 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 04:52:28 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 2026-06-16 05:03:16 +0000 | wickedjargon | (~user@64.114.24.74) wickedjargon |
| 2026-06-16 05:03:20 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 05:05:09 +0000 | jayanth | (~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) (Ping timeout: 262 seconds) |
| 2026-06-16 05:06:33 +0000 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 252 seconds) |
| 2026-06-16 05:07:53 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-06-16 05:15:51 +0000 | tusko | (~uwu@user/tusko) tusko |
| 2026-06-16 05:18:43 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 05:19:09 +0000 | takuan | (~takuan@d8D86B9E9.access.telenet.be) |
| 2026-06-16 05:21:52 +0000 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
| 2026-06-16 05:23:03 +0000 | puke | (~puke@user/puke) (Quit: puke) |
| 2026-06-16 05:23:25 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 2026-06-16 05:26:43 +0000 | puke | (~puke@user/puke) puke |
| 2026-06-16 05:34:04 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 05:35:59 +0000 | divlamir_ | (~divlamir@user/divlamir) divlamir |
| 2026-06-16 05:38:54 +0000 | divlamir | (~divlamir@user/divlamir) (Ping timeout: 246 seconds) |
| 2026-06-16 05:38:54 +0000 | divlamir_ | divlamir |
| 2026-06-16 05:38:58 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-06-16 05:46:13 +0000 | divlamir | (~divlamir@user/divlamir) (Ping timeout: 265 seconds) |
| 2026-06-16 05:46:28 +0000 | divlamir | (~divlamir@user/divlamir) divlamir |
| 2026-06-16 05:49:26 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 05:53:39 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-06-16 06:00:22 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 06:05:13 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 259 seconds) |
| 2026-06-16 06:16:52 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 06:21:29 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-06-16 06:31:27 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) humasect |
| 2026-06-16 06:32:15 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 06:39:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-06-16 06:40:13 +0000 | czan | (~czan@user/mange) (Quit: Quittin' time!) |
| 2026-06-16 06:45:36 +0000 | divlamir_ | (~divlamir@user/divlamir) divlamir |
| 2026-06-16 06:48:12 +0000 | divlamir | (~divlamir@user/divlamir) (Ping timeout: 246 seconds) |
| 2026-06-16 06:48:12 +0000 | divlamir_ | divlamir |
| 2026-06-16 06:50:19 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 06:51:42 +0000 | Axma73573 | Axman6 |
| 2026-06-16 06:54:09 +0000 | kadobanana | (~mud@user/kadoban) (Ping timeout: 246 seconds) |
| 2026-06-16 06:54:56 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-06-16 06:55:46 +0000 | marinelli | (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli) |
| 2026-06-16 06:56:40 +0000 | kadobanana | (~mud@user/kadoban) kadoban |
| 2026-06-16 06:59:41 +0000 | Axma87347 | (~Axman6@user/axman6) Axman6 |
| 2026-06-16 07:01:24 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 07:01:59 +0000 | Axman6 | (~Axman6@user/axman6) (Ping timeout: 265 seconds) |
| 2026-06-16 07:05:05 +0000 | marinelli | (~weechat@gateway/tor-sasl/marinelli) marinelli |
| 2026-06-16 07:05:31 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 241 seconds) |
| 2026-06-16 07:06:06 +0000 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2026-06-16 07:17:38 +0000 | CiaoSen | (~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) CiaoSen |
| 2026-06-16 07:19:11 +0000 | hc | (~hc@mail.hce.li) (Remote host closed the connection) |
| 2026-06-16 07:19:54 +0000 | jcarpenter2 | (~lol@96.78.87.197) (Ping timeout: 245 seconds) |
| 2026-06-16 07:22:55 +0000 | jcarpenter2 | (~lol@2603:3016:1e01:b940:9e16:4716:cb0d:9d39) |
| 2026-06-16 07:25:49 +0000 | chele | (~chele@user/chele) chele |
| 2026-06-16 07:27:37 +0000 | jcarpenter2 | (~lol@2603:3016:1e01:b940:9e16:4716:cb0d:9d39) (Ping timeout: 248 seconds) |
| 2026-06-16 07:29:18 +0000 | jcarpenter2 | (~lol@96.78.87.197) |
| 2026-06-16 07:33:26 +0000 | rainbyte | (~rainbyte@181.47.219.31) (Read error: Connection reset by peer) |
| 2026-06-16 07:36:27 +0000 | rainbyte | (~rainbyte@181.47.219.31) rainbyte |
| 2026-06-16 07:38:50 +0000 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 2026-06-16 07:44:40 +0000 | oneeyedalien | (~oneeyedal@user/oneeyedalien) oneeyedalien |
| 2026-06-16 07:46:44 +0000 | hc | (~hc@mail.hce.li) hc |
| 2026-06-16 07:46:58 +0000 | puke | (~puke@user/puke) (Ping timeout: 268 seconds) |
| 2026-06-16 07:52:34 +0000 | kuribas | (~user@2a02:1808:41:5a17:f424:93c2:8ba2:25d) |
| 2026-06-16 07:53:37 +0000 | merijn | (~merijn@77.242.116.146) merijn |
| 2026-06-16 07:56:10 +0000 | leppard | (~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline |
| 2026-06-16 08:22:32 +0000 | oneeyedalien | (~oneeyedal@user/oneeyedalien) (Quit: Leaving) |
| 2026-06-16 08:25:54 +0000 | CiaoSen | (~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) (Ping timeout: 248 seconds) |
| 2026-06-16 08:34:20 +0000 | humasect | (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...) |
| 2026-06-16 08:40:25 +0000 | kuribas` | (~user@ip-188-118-57-242.reverse.destiny.be) kuribas |
| 2026-06-16 08:41:46 +0000 | bggd_ | (~bgg@2a01:e0a:fd5:f510:8949:3630:d504:97ee) |
| 2026-06-16 08:42:16 +0000 | kuribas | (~user@2a02:1808:41:5a17:f424:93c2:8ba2:25d) (Ping timeout: 268 seconds) |
| 2026-06-16 08:44:26 +0000 | ft | (~ft@p4fc2ab3f.dip0.t-ipconnect.de) (Quit: leaving) |
| 2026-06-16 09:06:26 +0000 | CiaoSen | (~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) CiaoSen |
| 2026-06-16 09:08:10 +0000 | acidjnk | (~acidjnk@p200300d6e700e5750409562b4c541c53.dip0.t-ipconnect.de) acidjnk |
| 2026-06-16 09:08:17 +0000 | acidjnk_new | (~acidjnk@p200300d6e700e5750409562b4c541c53.dip0.t-ipconnect.de) |
| 2026-06-16 09:19:15 +0000 | ThePenguin | (~ThePengui@cust-95-80-28-221.csbnet.se) (Remote host closed the connection) |
| 2026-06-16 09:25:02 +0000 | picnoir | (~picnoir@about/aquilenet/vodoo/NinjaTrappeur) (Quit: WeeChat 4.9.1) |
| 2026-06-16 09:26:11 +0000 | picnoir | (~picnoir@about/aquilenet/vodoo/NinjaTrappeur) NinjaTrappeur |
| 2026-06-16 09:28:36 +0000 | ThePenguin | (~ThePengui@cust-95-80-28-221.csbnet.se) ThePenguin |
| 2026-06-16 09:30:22 +0000 | ThePenguin | (~ThePengui@cust-95-80-28-221.csbnet.se) (Remote host closed the connection) |
| 2026-06-16 09:31:04 +0000 | ThePenguin | (~ThePengui@cust-95-80-28-221.csbnet.se) ThePenguin |
| 2026-06-16 09:31:21 +0000 | Axman6 | (~Axman6@user/axman6) Axman6 |
| 2026-06-16 09:33:25 +0000 | Axma87347 | (~Axman6@user/axman6) (Ping timeout: 245 seconds) |
| 2026-06-16 09:38:52 +0000 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) lisbeths |
| 2026-06-16 10:07:35 +0000 | danza | (~danza@user/danza) danza |
| 2026-06-16 10:13:11 +0000 | marinelli | (~weechat@gateway/tor-sasl/marinelli) (Ping timeout: 245 seconds) |
| 2026-06-16 10:15:15 +0000 | marinelli | (~weechat@gateway/tor-sasl/marinelli) marinelli |
| 2026-06-16 10:21:59 +0000 | CiaoSen | (~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) (Ping timeout: 245 seconds) |
| 2026-06-16 10:24:02 +0000 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 256 seconds) |
| 2026-06-16 10:36:01 +0000 | puke | (~puke@user/puke) puke |
| 2026-06-16 10:36:43 +0000 | danza | (~danza@user/danza) (Remote host closed the connection) |
| 2026-06-16 10:44:59 +0000 | marinelli | (~weechat@gateway/tor-sasl/marinelli) (Remote host closed the connection) |
| 2026-06-16 10:45:21 +0000 | marinelli | (~weechat@gateway/tor-sasl/marinelli) marinelli |
| 2026-06-16 10:47:49 +0000 | juri_ | (~juri@217-114-215-140.pool.ovpn.com) (Ping timeout: 265 seconds) |
| 2026-06-16 10:51:04 +0000 | poscat0x04 | (~poscat@user/poscat) poscat |
| 2026-06-16 10:52:58 +0000 | poscat | (~poscat@user/poscat) (Ping timeout: 276 seconds) |
| 2026-06-16 10:57:45 +0000 | juri_ | (~juri@217-114-215-140.pool.ovpn.com) juri_ |
| 2026-06-16 11:02:08 +0000 | fun-safe-math | (~fun-safe-@97-120-35-225.ptld.qwest.net) () |
| 2026-06-16 11:04:12 +0000 | fun-safe-math | (~fun-safe-@97-120-35-225.ptld.qwest.net) fun-safe-math |
| 2026-06-16 11:16:44 +0000 | CiaoSen | (~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) CiaoSen |
| 2026-06-16 11:19:55 +0000 | puke | (~puke@user/puke) (Quit: puke) |
| 2026-06-16 11:20:11 +0000 | xal_ | (~xal@mx1.xal.systems) (Quit: No Ping reply in 180 seconds.) |
| 2026-06-16 11:22:53 +0000 | xal | (~xal@mx1.xal.systems) xal |
| 2026-06-16 11:23:29 +0000 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
| 2026-06-16 11:24:22 +0000 | puke | (~puke@user/puke) puke |
| 2026-06-16 11:26:37 +0000 | xff0x | (~xff0x@2405:6580:b080:900:f8bd:50a9:9ed8:decc) |
| 2026-06-16 11:28:46 +0000 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
| 2026-06-16 11:29:24 +0000 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds) |
| 2026-06-16 11:31:38 +0000 | Lord_of_Life_ | Lord_of_Life |
| 2026-06-16 11:31:53 +0000 | wickedjargon | (~user@64.114.24.74) (Ping timeout: 248 seconds) |
| 2026-06-16 11:32:24 +0000 | weary-traveler | (~user@user/user363627) (Remote host closed the connection) |
| 2026-06-16 11:33:43 +0000 | Square | (~Square@user/square) Square |
| 2026-06-16 11:38:28 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 276 seconds) |
| 2026-06-16 11:39:13 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-16 11:45:25 +0000 | Axma10736 | (~Axman6@user/axman6) Axman6 |
| 2026-06-16 11:46:24 +0000 | jayanth | (~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) |
| 2026-06-16 11:47:10 +0000 | Axman6 | (~Axman6@user/axman6) (Ping timeout: 245 seconds) |
| 2026-06-16 11:48:00 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer) |
| 2026-06-16 11:48:26 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-16 11:48:52 +0000 | weary-traveler | (~user@user/user363627) user363627 |
| 2026-06-16 11:51:00 +0000 | fgarcia | (~lei@user/fgarcia) (Ping timeout: 245 seconds) |
| 2026-06-16 11:53:24 +0000 | fgarcia | (~lei@user/fgarcia) fgarcia |
| 2026-06-16 11:56:00 +0000 | CiaoSen | (~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) (Ping timeout: 245 seconds) |
| 2026-06-16 12:17:17 +0000 | puke | (~puke@user/puke) (Read error: Connection reset by peer) |
| 2026-06-16 12:17:33 +0000 | puke | (~puke@user/puke) puke |
| 2026-06-16 12:18:12 +0000 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 2026-06-16 12:26:00 +0000 | tremon | (~tremon@83-80-159-219.cable.dynamic.v4.ziggo.nl) tremon |
| 2026-06-16 12:40:10 +0000 | puke | (~puke@user/puke) (Remote host closed the connection) |
| 2026-06-16 12:40:35 +0000 | puke | (~puke@user/puke) puke |
| 2026-06-16 12:42:22 +0000 | ridcully | (~ridcully@p57b52a2d.dip0.t-ipconnect.de) (Quit: WeeChat 4.9.1) |
| 2026-06-16 12:50:59 +0000 | CiaoSen | (~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) CiaoSen |
| 2026-06-16 13:13:50 +0000 | Square | (~Square@user/square) (Quit: Leaving) |
| 2026-06-16 13:24:04 +0000 | CiaoSen | (~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) (Ping timeout: 245 seconds) |
| 2026-06-16 14:19:05 +0000 | Axman6 | (~Axman6@user/axman6) Axman6 |
| 2026-06-16 14:21:20 +0000 | Axma10736 | (~Axman6@user/axman6) (Ping timeout: 245 seconds) |
| 2026-06-16 14:23:19 +0000 | vms14 | (~vms14@user/vms14) (Quit: WeeChat 4.6.3) |
| 2026-06-16 14:24:38 +0000 | pavonia | (~user@user/siracusa) (Ping timeout: 244 seconds) |
| 2026-06-16 14:25:06 +0000 | pavonia | (~user@user/siracusa) siracusa |
| 2026-06-16 14:28:22 +0000 | pavonia_ | (~user@user/siracusa) siracusa |
| 2026-06-16 14:28:48 +0000 | emilym | (~Thunderbi@user/emilym) emilym |
| 2026-06-16 14:30:33 +0000 | pavonia | (~user@user/siracusa) (Ping timeout: 248 seconds) |
| 2026-06-16 14:30:49 +0000 | pavonia_ | pavonia |
| 2026-06-16 14:32:49 +0000 | emilym | (~Thunderbi@user/emilym) (Ping timeout: 245 seconds) |
| 2026-06-16 14:33:04 +0000 | pyooque | (~puke@user/puke) puke |
| 2026-06-16 14:33:05 +0000 | puke | Guest4739 |
| 2026-06-16 14:33:05 +0000 | pyooque | puke |
| 2026-06-16 14:35:23 +0000 | machinedgod | (~machinedg@d172-219-48-230.abhsia.telus.net) machinedgod |
| 2026-06-16 14:35:49 +0000 | Guest4739 | (~puke@user/puke) (Ping timeout: 268 seconds) |
| 2026-06-16 14:38:13 +0000 | ridcully | (~ridcully@p57b52a2d.dip0.t-ipconnect.de) ridcully |
| 2026-06-16 14:42:28 +0000 | vms14 | (~vms14@user/vms14) vms14 |
| 2026-06-16 14:44:02 +0000 | leppard | (~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) (Quit: KVIrc 5.2.8 Quasar http://www.kvirc.net/) |
| 2026-06-16 14:45:02 +0000 | Googulator | (~Googulato@team.broadbit.hu) |
| 2026-06-16 14:49:45 +0000 | jayanth | (~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) (Ping timeout: 248 seconds) |
| 2026-06-16 14:54:04 +0000 | pyooque | (~puke@user/puke) puke |
| 2026-06-16 14:54:05 +0000 | puke | Guest7801 |
| 2026-06-16 14:54:05 +0000 | pyooque | puke |
| 2026-06-16 14:56:47 +0000 | Guest7801 | (~puke@user/puke) (Ping timeout: 268 seconds) |
| 2026-06-16 15:01:59 +0000 | danza | (~danza@user/danza) danza |
| 2026-06-16 15:06:50 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 245 seconds) |
| 2026-06-16 15:08:12 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-16 15:13:45 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer) |
| 2026-06-16 15:14:15 +0000 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-06-16 15:14:39 +0000 | <merijn> | > take 1 (map f [x,y,z]) -- vms14 |
| 2026-06-16 15:14:40 +0000 | <lambdabot> | Ambiguous type variable ‘a0’ arising from a use of ‘e_1114’ |
| 2026-06-16 15:14:40 +0000 | <lambdabot> | prevents the constraint ‘(FromExpr a0)’ from being solved. |
| 2026-06-16 15:14:40 +0000 | <lambdabot> | Probable fix: use a type annotation to specify what ‘a0’ should be. |
| 2026-06-16 15:14:44 +0000 | <merijn> | ah, wait type error |
| 2026-06-16 15:14:51 +0000 | <merijn> | > take 1 (map f [x,y,z]) :: [Expr] |
| 2026-06-16 15:14:53 +0000 | <lambdabot> | [f x] |
| 2026-06-16 15:14:55 +0000 | <vms14> | :0 |
| 2026-06-16 15:15:07 +0000 | <vms14> | > putStrLn "oh.." |
| 2026-06-16 15:15:08 +0000 | <lambdabot> | <IO ()> |
| 2026-06-16 15:15:15 +0000 | <merijn> | Consider how that doesn't actually require building thunks for `f y` and `f z` |
| 2026-06-16 15:15:30 +0000 | wickedjargon | (~user@64.114.24.74) wickedjargon |
| 2026-06-16 15:15:37 +0000 | <merijn> | vms14: IO is sandboxed and not allowed in lambdabot, I think yahb can run it, though |
| 2026-06-16 15:15:44 +0000 | <merijn> | % putStrLn "oh.." |
| 2026-06-16 15:15:44 +0000 | <yahb2> | oh.. |
| 2026-06-16 15:16:56 +0000 | <merijn> | vms14: When the result of `take 1` is evaluated, it has to inspect the list, so it takes the `map f [x,y,z]` thunk, forces it to Weak-Head Normal Form (i.e. force it until the outermost thing is a constructor) |
| 2026-06-16 15:17:56 +0000 | <merijn> | So you start with a thunk `<map f [x, y, z]>` that gets forced into `<f x> : <map f [y, z]>` and `take 1` only grabs the `f x` part and that ends up getting forced by the printing to stdout |
| 2026-06-16 15:18:16 +0000 | <merijn> | So the recursive step of `map` (and the thunks it would create) just never even happens |
| 2026-06-16 15:18:55 +0000 | <ski> | % take 1 (map (\e -> trace ("it's " ++ show e ++ ", ") (e ^ 2)) [2,3,5,7]) |
| 2026-06-16 15:18:55 +0000 | <yahb2> | it's 2, ; [4] |
| 2026-06-16 15:19:28 +0000 | <merijn> | vms14: This is probably the most important insight about laziness and recursion in Haskell. In most cases you stop at the very first constructor, so build ups only happen when that first constructor requires *a lot* of thunk forcing |
| 2026-06-16 15:19:44 +0000 | <merijn> | > foldl (:) [] [x, y, z] |
| 2026-06-16 15:19:46 +0000 | <lambdabot> | Couldn't match expected type ‘[[a]]’ with actual type ‘Expr’ |
| 2026-06-16 15:19:46 +0000 | <lambdabot> | In the expression: z |
| 2026-06-16 15:19:46 +0000 | <lambdabot> | In the third argument of ‘foldl’, namely ‘[x, y, z]’ |
| 2026-06-16 15:19:57 +0000 | <ski> | flip |
| 2026-06-16 15:20:00 +0000 | <merijn> | > foldl (:) [] [x, y, z] :: [Expr] |
| 2026-06-16 15:20:02 +0000 | <lambdabot> | Couldn't match expected type ‘[[Expr]]’ with actual type ‘Expr’ |
| 2026-06-16 15:20:02 +0000 | <lambdabot> | In the expression: z |
| 2026-06-16 15:20:02 +0000 | <lambdabot> | In the third argument of ‘foldl’, namely ‘[x, y, z]’ |
| 2026-06-16 15:20:07 +0000 | <merijn> | ah, rats |
| 2026-06-16 15:20:18 +0000 | <merijn> | :t foldl |
| 2026-06-16 15:20:20 +0000 | <lambdabot> | Foldable t => (b -> a -> b) -> b -> t a -> b |
| 2026-06-16 15:20:26 +0000 | <ski> | .. |
| 2026-06-16 15:20:34 +0000 | <vms14> | i do not get why it does not explode and returns [f x] when they are free variables |
| 2026-06-16 15:20:46 +0000 | <ski> | @type x |
| 2026-06-16 15:20:47 +0000 | <lambdabot> | Expr |
| 2026-06-16 15:20:48 +0000 | <ski> | @type f |
| 2026-06-16 15:20:49 +0000 | <lambdabot> | FromExpr a => a |
| 2026-06-16 15:21:06 +0000 | <vms14> | will it explode only when used? |
| 2026-06-16 15:21:13 +0000 | <merijn> | vms14: lambdabot has a library `simple-reflect` which visualises applications of some pre-defined variables |
| 2026-06-16 15:21:20 +0000 | <vms14> | ah |
| 2026-06-16 15:21:39 +0000 | <ski> | @hackage simpl-ereflect |
| 2026-06-16 15:21:40 +0000 | <lambdabot> | https://hackage.haskell.org/package/simpl-ereflect |
| 2026-06-16 15:21:54 +0000 | <merijn> | :t foldl (flip (:)) [] [x, y, z] :: [Expr] |
| 2026-06-16 15:21:56 +0000 | <ski> | er |
| 2026-06-16 15:21:56 +0000 | <lambdabot> | [Expr] |
| 2026-06-16 15:21:59 +0000 | <ski> | @hackage simple-reflect |
| 2026-06-16 15:21:59 +0000 | <lambdabot> | https://hackage.haskell.org/package/simple-reflect |
| 2026-06-16 15:22:00 +0000 | <merijn> | > foldl (flip (:)) [] [x, y, z] :: [Expr] |
| 2026-06-16 15:22:02 +0000 | <lambdabot> | [z,y,x] |
| 2026-06-16 15:22:06 +0000 | <merijn> | ah, wait |
| 2026-06-16 15:22:10 +0000 | <merijn> | That's not what I wanted |
| 2026-06-16 15:22:18 +0000 | <merijn> | > foldl f [] [x, y, z] :: [Expr] |
| 2026-06-16 15:22:20 +0000 | <lambdabot> | No instance for ‘FromExpr [Expr]’ arising from a use of ‘f’ |
| 2026-06-16 15:22:20 +0000 | <ski> | you didn't want `foldl' ? |
| 2026-06-16 15:22:20 +0000 | <lambdabot> | In the first argument of ‘foldl’, namely ‘f’ |
| 2026-06-16 15:22:20 +0000 | <lambdabot> | In the expression: foldl f [] [x, y, z] :: [Expr] |
| 2026-06-16 15:22:28 +0000 | <merijn> | > foldl f [] [x, y, z] :: Expr |
| 2026-06-16 15:22:30 +0000 | <lambdabot> | Couldn't match expected type ‘Expr’ with actual type ‘[a0]’ |
| 2026-06-16 15:22:30 +0000 | <lambdabot> | In the second argument of ‘foldl’, namely ‘[]’ |
| 2026-06-16 15:22:30 +0000 | <lambdabot> | In the expression: foldl f [] [x, y, z] :: Expr |
| 2026-06-16 15:22:39 +0000 | <merijn> | > foldl f z [x, y] :: Expr |
| 2026-06-16 15:22:40 +0000 | <lambdabot> | f (f z x) y |
| 2026-06-16 15:22:44 +0000 | <merijn> | > foldr f z [x, y] :: Expr |
| 2026-06-16 15:22:45 +0000 | <lambdabot> | f x (f y z) |
| 2026-06-16 15:23:03 +0000 | <ski> | > foldr f z [a,b,c,d,e] |
| 2026-06-16 15:23:05 +0000 | <lambdabot> | f a (f b (f c (f d (f e z)))) |
| 2026-06-16 15:23:12 +0000 | <ski> | > foldl f z [a,b,c,d,e] |
| 2026-06-16 15:23:13 +0000 | <merijn> | vms14: imagine `f` is, e.g. `:` our list constructor. notice how foldr can stop **immediately* |
| 2026-06-16 15:23:14 +0000 | <lambdabot> | f (f (f (f (f z a) b) c) d) e |
| 2026-06-16 15:24:00 +0000 | <merijn> | Whereas trying to pattern match and extract the first element of foldl will make you evaluate 5 layers |
| 2026-06-16 15:24:21 +0000 | <ski> | `foldl' has to traverse the whole list (because it is tail-recursive). `foldr' *may* hand back control earlier to the caller (if the `f' callback does, before looking at its second argument, which will be the recursive call to `foldr') |
| 2026-06-16 15:24:34 +0000 | <merijn> | So the thunk buildup you mentioned only happens in the foldl case |
| 2026-06-16 15:24:37 +0000 | phm_ | (~peter@fsf/member/phm) phm |
| 2026-06-16 15:25:09 +0000 | <vms14> | i did not yet learn about fold xD |
| 2026-06-16 15:25:21 +0000 | <ski> | @src foldl |
| 2026-06-16 15:25:21 +0000 | <lambdabot> | foldl f z [] = z |
| 2026-06-16 15:25:21 +0000 | <lambdabot> | foldl f z (x:xs) = foldl f (f z x) xs |
| 2026-06-16 15:25:24 +0000 | <ski> | @src foldr |
| 2026-06-16 15:25:24 +0000 | <lambdabot> | foldr f z [] = z |
| 2026-06-16 15:25:24 +0000 | <lambdabot> | foldr f z (x:xs) = f x (foldr f z xs) |
| 2026-06-16 15:25:33 +0000 | <vms14> | just that lists can be seen as foldable and foldable seems to mean sequence |
| 2026-06-16 15:25:48 +0000 | <merijn> | vms14: foldl/foldr are with some squinting equivalent to, e.g. python's reduce |
| 2026-06-16 15:25:59 +0000 | <merijn> | if you know that |
| 2026-06-16 15:26:11 +0000 | <vms14> | oh |
| 2026-06-16 15:26:17 +0000 | <merijn> | :t Data.List.foldl |
| 2026-06-16 15:26:19 +0000 | <lambdabot> | Foldable t => (b -> a -> b) -> b -> t a -> b |
| 2026-06-16 15:26:21 +0000 | <merijn> | ah, rats |
| 2026-06-16 15:26:27 +0000 | <ski> | you combine all the elements of a list together into some result, one at a time |
| 2026-06-16 15:26:57 +0000 | <merijn> | vms14: Pretend that reads `foldl :: (b -> a -> b) -> b -> [a] -> b`. If you ponder that type, you should be able to figure out what it's doing |
| 2026-06-16 15:27:07 +0000 | <ski> | (or, actually works for other things than lists, as long as they are instances of `Foldable'. but it's basically a "list/sequence-like" type class, yes) |
| 2026-06-16 15:27:55 +0000 | phm | (~peter@fsf/member/phm) (Ping timeout: 264 seconds) |
| 2026-06-16 15:28:24 +0000 | <vms14> | foldr (+) 0 [1,2,3] |
| 2026-06-16 15:28:33 +0000 | <ski> | > foldr (\n s -> "(" ++ show n ++ " + " ++ s ++ ")") "0" [2,3,5,7] -- can you see how this works ? |
| 2026-06-16 15:28:34 +0000 | <lambdabot> | "(2 + (3 + (5 + (7 + 0))))" |
| 2026-06-16 15:28:45 +0000 | <ski> | > foldr (+) 0 [2,3,5,7] |
| 2026-06-16 15:28:47 +0000 | <lambdabot> | 17 |
| 2026-06-16 15:29:34 +0000 | <ski> | > foldl (\s n -> "(" ++ s ++ " + " ++ show n ++ ")") "0" [2,3,5,7] -- or this ? |
| 2026-06-16 15:29:36 +0000 | <lambdabot> | "((((0 + 2) + 3) + 5) + 7)" |
| 2026-06-16 15:29:41 +0000 | <ski> | > foldl (+) 0 [2,3,5,7] |
| 2026-06-16 15:29:43 +0000 | <lambdabot> | 17 |
| 2026-06-16 15:30:14 +0000 | xal_ | (~xal@mx1.xal.systems) xal |
| 2026-06-16 15:30:31 +0000 | xal | (~xal@mx1.xal.systems) (Ping timeout: 276 seconds) |
| 2026-06-16 15:30:43 +0000 | <vms14> | and l or r is just where the 0 goes in that case? |
| 2026-06-16 15:31:29 +0000 | <vms14> | foldr (+) 0 [1,2,3] 0 + 1 + 2 + 3 where foldl would be 1 + 2 + 3 + 0 |
| 2026-06-16 15:32:01 +0000 | <vms14> | i guess the reverse |
| 2026-06-16 15:32:37 +0000 | <vms14> | well i have to keep reading, the real world haskell book seems it will be fun |
| 2026-06-16 15:32:41 +0000 | <merijn> | That's where simple-reflect is hekpful ;) |
| 2026-06-16 15:32:46 +0000 | <merijn> | > foldl f z [a,b,c] |
| 2026-06-16 15:32:48 +0000 | <lambdabot> | f (f (f z a) b) c |
| 2026-06-16 15:32:50 +0000 | <vms14> | i want to play with sockets |
| 2026-06-16 15:32:50 +0000 | <merijn> | > foldr f z [a,b,c] |
| 2026-06-16 15:32:51 +0000 | <lambdabot> | f a (f b (f c z)) |
| 2026-06-16 15:33:13 +0000 | <ski> | "fold left", say `foldl f z xs', starts from the front, with `z', combines each element of `xs', as it encounters then, into the `z' accumulator, using `f' to combine |
| 2026-06-16 15:33:24 +0000 | <ski> | and, when it has seen all elements, it returns final accumulator |
| 2026-06-16 15:33:56 +0000 | <vms14> | i do not know anything yet so i can't move properly |
| 2026-06-16 15:34:17 +0000 | <vms14> | and i feel like you guys are wasting time teaching me basics i should learn by myself |
| 2026-06-16 15:34:35 +0000 | <ski> | it's fine to ask questions, if things are unclear |
| 2026-06-16 15:34:49 +0000 | <vms14> | cool, i'll take your words :D |
| 2026-06-16 15:36:12 +0000 | <vms14> | ty for teaching me though, i appreciate it |
| 2026-06-16 15:36:59 +0000 | wickedja` | (~user@2605:8d80:8201:680e:dadb:dabd:d818:4b27) |
| 2026-06-16 15:38:21 +0000 | wickedjargon | (~user@64.114.24.74) (Ping timeout: 242 seconds) |
| 2026-06-16 15:53:26 +0000 | leppard | (~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline |
| 2026-06-16 16:02:49 +0000 | kuribas` | (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
| 2026-06-16 16:03:25 +0000 | m_a_r_k | (~m_a_r_k@archlinux/support/mark) (Remote host closed the connection) |
| 2026-06-16 16:04:18 +0000 | m_a_r_k | (~m_a_r_k@archlinux/support/mark) m_a_r_k |
| 2026-06-16 16:06:24 +0000 | <c_wraith> | I wouldn't worry too much about the names "foldl" and "foldr". In particular, thinking of them as left or right really doesn't clarify anything. |
| 2026-06-16 16:09:54 +0000 | karenw | (~karenw@user/karenw) karenw |
| 2026-06-16 16:11:05 +0000 | <int-e> | c_wraith: it does though if you know that you're supposed to view `f` as an infix operator and l and r refer to associativity of said operator |
| 2026-06-16 16:11:19 +0000 | <c_wraith> | I end up thinking of them as legacy names for 1) apply f to an accumulator with every element before returning or 2) immediately reduce to f with the first element and an unevaluated expression |
| 2026-06-16 16:11:29 +0000 | wickedja` | (~user@2605:8d80:8201:680e:dadb:dabd:d818:4b27) (Remote host closed the connection) |
| 2026-06-16 16:12:18 +0000 | <c_wraith> | those are the actual useful ways to think about the operations |
| 2026-06-16 16:13:05 +0000 | <int-e> | c_wraith: Anyway this is the burrito fallacy in full effect. For both of us. |
| 2026-06-16 16:13:33 +0000 | <davean> | Yah I'm not sure I see a difference in those definitions. I think this is all about the person saying them |
| 2026-06-16 16:13:34 +0000 | <c_wraith> | Is it? I'm rejecting metaphor in place of semantics. |
| 2026-06-16 16:13:44 +0000 | <jaror> | Which way do the foldr and foldl go for numbers 1 and 2? |
| 2026-06-16 16:13:46 +0000 | <c_wraith> | that's the opposite of the burrito fallacy |
| 2026-06-16 16:14:04 +0000 | <jaror> | Laziness throws a wrench into that imo |
| 2026-06-16 16:14:20 +0000 | <int-e> | (mistaking the explanation/model that made a concept connect for yourself for a good explanation that works for everyone, when in truth the right approach for teaching is to try all the explanations until one of them clicks for the student) |
| 2026-06-16 16:14:49 +0000 | <c_wraith> | Oh, I didn't claim my explanations were good for teaching. Just that they're precisely correct. |
| 2026-06-16 16:15:07 +0000 | <int-e> | c_wraith: I mean, what is an accumulator? Is it really a simpler concept than associativity? |
| 2026-06-16 16:15:12 +0000 | <c_wraith> | yes |
| 2026-06-16 16:15:20 +0000 | <int-e> | Well, I disagree. |
| 2026-06-16 16:16:06 +0000 | <int-e> | Also, that's not what foldl does; you want foldl'. |
| 2026-06-16 16:16:13 +0000 | <int-e> | Like, 99% of the time. |
| 2026-06-16 16:16:31 +0000 | <c_wraith> | it's what both do. It's just a lot less useful with foldl than foldl' |
| 2026-06-16 16:17:02 +0000 | <c_wraith> | I only said it applies f, not that it evaluates the result. |
| 2026-06-16 16:18:09 +0000 | <c_wraith> | jaror: any explanation of foldr that doesn't focus on how laziness means it immediately reduces to a call to f without performing any recursion is missing about 95% of why foldr is important in Haskell |
| 2026-06-16 16:19:23 +0000 | <jaror> | I guess "immediately reduce to f" is a bit of a cop-out, because if f is strict then folding won't immediately produce a result |
| 2026-06-16 16:19:38 +0000 | <jaror> | Even explaining reduction is not that easy |
| 2026-06-16 16:20:53 +0000 | <int-e> | Now let's discuss this for snoc lists :P |
| 2026-06-16 16:21:07 +0000 | <c_wraith> | yes, and using a strict (in its second argument) function with foldr is *really bad*. It just destroys the stack. |
| 2026-06-16 16:21:19 +0000 | <int-e> | Anyway. I think foldr and foldl are perfectly good names. |
| 2026-06-16 16:21:25 +0000 | <c_wraith> | If you know that foldr immediately reduces to f, that's obvious |
| 2026-06-16 16:22:00 +0000 | <int-e> | Especially now that they're generalized (and we have `fold` for general tree-shaped folding in the middle) |
| 2026-06-16 16:27:07 +0000 | merijn | (~merijn@77.242.116.146) (Ping timeout: 265 seconds) |
| 2026-06-16 16:27:41 +0000 | <c_wraith> | fwiw... Yes. My explanations depend heavily on understanding evaluation-by-reduction. I think that's necessary for understanding Haskell semantics and practical performance anyway, so I don't consider it an extra thing to learn. I consider it a foundational thing to learn. |
| 2026-06-16 16:30:16 +0000 | <danza> | hi all. I have `f :: IO [a]` and i want to run it with `forever`. |
| 2026-06-16 16:30:21 +0000 | <danza> | From my understanding, when `f` returns `mzero` forever will stop, but trying that all `[a]` are discarded. Is there a way to gracefully terminate `forever f` keeping the `[a]` thet were returned before returning `mzero`? I feel like i misunderstood forever's docs |
| 2026-06-16 16:31:19 +0000 | <c_wraith> | indeed. forever is meant to not return any useful value |
| 2026-06-16 16:31:46 +0000 | <int-e> | danza: if it's supposed to terminate then you don't want `forever` |
| 2026-06-16 16:32:06 +0000 | <c_wraith> | :t forever |
| 2026-06-16 16:32:07 +0000 | <lambdabot> | Applicative f => f a -> f b |
| 2026-06-16 16:32:13 +0000 | <int-e> | @src forever |
| 2026-06-16 16:32:13 +0000 | <lambdabot> | forever a = let a' = a >> a' in a' |
| 2026-06-16 16:32:22 +0000 | <c_wraith> | Note the type there. f a -> f b |
| 2026-06-16 16:32:31 +0000 | <int-e> | it'll just be f >> f >> f >> f >> f >> f >> f >> f >> f >> ... [scnr] |
| 2026-06-16 16:32:33 +0000 | <c_wraith> | where does the b in the return type come from? |
| 2026-06-16 16:32:54 +0000 | ft | (~ft@p4fc2ab3f.dip0.t-ipconnect.de) ft |
| 2026-06-16 16:32:59 +0000 | <int-e> | it expresses that no value is returned |
| 2026-06-16 16:33:03 +0000 | <danza> | just to adapt to the enclosing monad i guess |
| 2026-06-16 16:33:05 +0000 | <danza> | thanks both |
| 2026-06-16 16:33:15 +0000 | <int-e> | s/no value/nothing/ |
| 2026-06-16 16:35:14 +0000 | <int-e> | % Control.Monad.forever (Control.Monad.mzero :: IO [Int]) |
| 2026-06-16 16:35:14 +0000 | <yahb2> | *** Exception: user error (mzero) |
| 2026-06-16 16:35:31 +0000 | <danza> | :t loop |
| 2026-06-16 16:35:32 +0000 | <lambdabot> | ArrowLoop a => a (b, d) (c, d) -> a b c |
| 2026-06-16 16:35:41 +0000 | <danza> | is that of use? |
| 2026-06-16 16:35:49 +0000 | <int-e> | I guess throwing an exception makes forever mzero = mzero |
| 2026-06-16 16:35:53 +0000 | <int-e> | (eww) |
| 2026-06-16 16:36:04 +0000 | <danza> | yep |
| 2026-06-16 16:36:05 +0000 | <c_wraith> | You should probably just write the loop by hand, with recursion |
| 2026-06-16 16:36:19 +0000 | <c_wraith> | there are other approaches, but that's the easiest one to understand |
| 2026-06-16 16:36:23 +0000 | <danza> | yes was scouting for idioms |
| 2026-06-16 16:36:58 +0000 | <c_wraith> | for IO [a] specifically, you might find that various streaming libraries actually fit what you want. |
| 2026-06-16 16:37:14 +0000 | <c_wraith> | they're totally different idioms |
| 2026-06-16 16:37:51 +0000 | <c_wraith> | But they are intended to handle when you're producing an unknown number of `a` values in IO, and want to keep memory use in line |
| 2026-06-16 16:38:06 +0000 | <danza> | sounds overkill for my case |
| 2026-06-16 16:38:22 +0000 | <ski> | `forever' can be useful with say `ExceptT e IO' |
| 2026-06-16 16:38:44 +0000 | <c_wraith> | yeah, you *can* return a value from forever, but you have to smuggle it out in the f rather than the a |
| 2026-06-16 16:38:52 +0000 | <danza> | hm i prefer to avoid exceptions anyways |
| 2026-06-16 16:38:53 +0000 | <int-e> | @hoogle untilM |
| 2026-06-16 16:38:54 +0000 | <lambdabot> | Control.Monad.Loops untilM :: Monad m => m a -> m Bool -> m [a] |
| 2026-06-16 16:38:54 +0000 | <lambdabot> | Control.Monad.HT untilM :: Monad m => (a -> Bool) -> m a -> m a |
| 2026-06-16 16:38:54 +0000 | <lambdabot> | Control.Monad.IfElse untilM :: Monad m => m Bool -> m () -> m () |
| 2026-06-16 16:39:23 +0000 | <int-e> | (not in base, but this is a pattern people have clearly felt a need for) |
| 2026-06-16 16:39:49 +0000 | <danza> | @hoogle loop |
| 2026-06-16 16:39:50 +0000 | <lambdabot> | Control.Arrow loop :: ArrowLoop a => a (b, d) (c, d) -> a b c |
| 2026-06-16 16:39:50 +0000 | <lambdabot> | GHC.JS.Make loop :: JStgExpr -> (JStgExpr -> JStgExpr) -> (JStgExpr -> JSM JStgStat) -> JSM JStgStat |
| 2026-06-16 16:39:50 +0000 | <lambdabot> | Control.Monad.Extra loop :: (a -> Either a b) -> a -> b |
| 2026-06-16 16:40:03 +0000 | <Leary> | :t fmap concat . many |
| 2026-06-16 16:40:04 +0000 | <lambdabot> | Alternative f => f [a] -> f [a] |
| 2026-06-16 16:40:13 +0000 | chele | (~chele@user/chele) (Remote host closed the connection) |
| 2026-06-16 16:40:15 +0000 | <danza> | entry from Control Monad Extra seems suited, but it requires a pure function |
| 2026-06-16 16:40:38 +0000 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
| 2026-06-16 16:41:15 +0000 | <danza> | i guess i would have an `f :: IO (Maybe a)` and then turn that into an `IO [a]` with a bespoke loop |
| 2026-06-16 16:41:48 +0000 | <danza> | with Nothing terminating |
| 2026-06-16 16:47:31 +0000 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 2026-06-16 16:51:39 +0000 | danz40363 | (~danza@user/danza) danza |
| 2026-06-16 16:53:30 +0000 | danza | (~danza@user/danza) (Ping timeout: 245 seconds) |
| 2026-06-16 16:57:45 +0000 | Fijxu | (~Fijxu@user/fijxu) (Quit: XD!!) |
| 2026-06-16 17:01:01 +0000 | Fijxu | (~Fijxu@user/fijxu) fijxu |
| 2026-06-16 17:07:25 +0000 | jreicher | (~joelr@user/jreicher) (Quit: brb) |
| 2026-06-16 17:09:04 +0000 | jreicher | (~joelr@user/jreicher) jreicher |
| 2026-06-16 17:16:34 +0000 | nattkyrro | (~serenity@user/nattkyrro) (Ping timeout: 256 seconds) |
| 2026-06-16 17:18:20 +0000 | nattkyrro | (~serenity@user/nattkyrro) nattkyrro |
| 2026-06-16 17:20:14 +0000 | karenw | (~karenw@user/karenw) (Quit: Deep into that darkness peering...) |
| 2026-06-16 17:22:39 +0000 | danz40363 | (~danza@user/danza) (Remote host closed the connection) |
| 2026-06-16 17:29:21 +0000 | tessier_ | (~tessier@ip68-8-117-219.sd.sd.cox.net) (Quit: leaving) |
| 2026-06-16 17:31:33 +0000 | pyooque | (~puke@user/puke) puke |
| 2026-06-16 17:31:34 +0000 | puke | Guest127 |
| 2026-06-16 17:31:34 +0000 | pyooque | puke |
| 2026-06-16 17:34:39 +0000 | Guest127 | (~puke@user/puke) (Ping timeout: 268 seconds) |
| 2026-06-16 17:38:09 +0000 | divlamir_ | (~divlamir@user/divlamir) divlamir |
| 2026-06-16 17:39:42 +0000 | tessier | (~tessier@ip68-8-117-219.sd.sd.cox.net) tessier |
| 2026-06-16 17:40:35 +0000 | divlamir | (~divlamir@user/divlamir) (Ping timeout: 265 seconds) |
| 2026-06-16 17:40:36 +0000 | divlamir_ | divlamir |
| 2026-06-16 17:46:59 +0000 | divlamir | (~divlamir@user/divlamir) (Ping timeout: 245 seconds) |
| 2026-06-16 17:48:43 +0000 | divlamir | (~divlamir@user/divlamir) divlamir |
| 2026-06-16 17:57:27 +0000 | xintron | (~xintron@user/xintron) (Quit: Lurker 1.0.0 (the truth is out there) https://lurker.chat) |
| 2026-06-16 17:57:41 +0000 | xintron | (~xintron@user/xintron) xintron |
| 2026-06-16 18:00:34 +0000 | pyooq | (~puke@user/puke) puke |
| 2026-06-16 18:00:34 +0000 | puke | Guest8356 |
| 2026-06-16 18:00:34 +0000 | pyooq | puke |
| 2026-06-16 18:01:10 +0000 | Guest8356 | (~puke@user/puke) (Ping timeout: 268 seconds) |
| 2026-06-16 18:05:36 +0000 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: djvnkj) |
| 2026-06-16 18:07:41 +0000 | <monochrom> | I too teach foldl and foldr as recursion patterns rather than the intuitive pictures of left- and right- associations. The intuitive pictures fail to suggest that map f is a foldr and reverse is a foldl, for example. |
| 2026-06-16 18:11:01 +0000 | <monochrom> | I first teach the recursion pattern for 15 minutes. Then mention "oh the Internet shows you the association picture. utterly useless except for toy examples" for 30 seconds. |
| 2026-06-16 18:13:56 +0000 | machinedgod | (~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 265 seconds) |
| 2026-06-16 18:15:56 +0000 | <monochrom> | Plus Haskell's laziness ruins the right association picture for foldr. |
| 2026-06-16 18:17:05 +0000 | xal_ | (~xal@mx1.xal.systems) (Quit: No Ping reply in 180 seconds.) |
| 2026-06-16 18:17:06 +0000 | <jaror> | I think the right/left association pictures are fine if all you care about is correctness and you have properly proven termination of your functions |
| 2026-06-16 18:17:20 +0000 | <jaror> | as one should :P |
| 2026-06-16 18:18:00 +0000 | <monochrom> | How does that work for foldr (||) False (repeat True)? |
| 2026-06-16 18:18:23 +0000 | xal | (~xal@mx1.xal.systems) xal |
| 2026-06-16 18:18:40 +0000 | <jaror> | repeat is not a terminating function |
| 2026-06-16 18:19:03 +0000 | <jaror> | This kind of thing gets very hairy for more complicated examples |
| 2026-06-16 18:19:14 +0000 | <EvanR> | termination is overrated |
| 2026-06-16 18:19:23 +0000 | <monochrom> | OK so what I said about "except for toy examples". |
| 2026-06-16 18:19:33 +0000 | <jaror> | No |
| 2026-06-16 18:19:36 +0000 | <jaror> | the opposite |
| 2026-06-16 18:19:40 +0000 | <monochrom> | I didn't deny that it's useful for toy examples! |
| 2026-06-16 18:19:49 +0000 | <jaror> | repeat True is a toy example |
| 2026-06-16 18:21:52 +0000 | <monochrom> | I just too lazy to come up with a real application where the list is infinite. |
| 2026-06-16 18:22:24 +0000 | <jaror> | I'm sure there are, but I'm also sure those have bugs :) |
| 2026-06-16 18:22:39 +0000 | <monochrom> | Or even the list is finite but very long but the foldr consumes just constant space instead of linear space. |
| 2026-06-16 18:22:53 +0000 | <jaror> | Right but then you care about things other than correctness |
| 2026-06-16 18:22:59 +0000 | <jaror> | Which is fair |
| 2026-06-16 18:23:53 +0000 | <EvanR> | situations where the code is made real slick by processing an infinite list come up some times |
| 2026-06-16 18:23:55 +0000 | <EvanR> | works |
| 2026-06-16 18:23:59 +0000 | <monochrom> | Here is another angle. When I care about correctness, I use induction, not a picture that contains "...". |
| 2026-06-16 18:24:37 +0000 | <monochrom> | not even a formula that contains "...". |
| 2026-06-16 18:25:38 +0000 | <monochrom> | (Sure I will use "..." for communicating ideas.) |
| 2026-06-16 18:27:08 +0000 | <monochrom> | And when I use induction, I care about the recursive code pattern only. |
| 2026-06-16 18:30:48 +0000 | vms14 | (~vms14@user/vms14) (Quit: WeeChat 4.6.3) |
| 2026-06-16 18:33:16 +0000 | <monochrom> | This was what inspired me to focus on teaching the recursion pattern. It uses the spirit of indcution. https://web.archive.org/web/20250615160509/http://ertes.eu/tutorial/foldr.html |
| 2026-06-16 18:34:23 +0000 | <monochrom> | Unfortunately the author passed away years ago, and now their website ertes.eu has disappeared, so I can only point you to the wayback machine archive. They actually used to be here! |
| 2026-06-16 18:34:50 +0000 | weary-traveler | (~user@user/user363627) (Remote host closed the connection) |
| 2026-06-16 19:17:05 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 19:23:42 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-06-16 19:25:16 +0000 | vms14 | (~vms14@user/vms14) vms14 |
| 2026-06-16 19:26:06 +0000 | <vms14> | it is wrong to use descriptive names instead of a b c for type vars and x z xs for values? |
| 2026-06-16 19:26:16 +0000 | <vms14> | seems the convention is to use letters |
| 2026-06-16 19:26:44 +0000 | <vms14> | so i should get used to use them instead of names? |
| 2026-06-16 19:26:51 +0000 | <jaror> | I prefer `a` over `theFirstArgument` for very generic functions |
| 2026-06-16 19:26:53 +0000 | <vms14> | for example this makes it very clear for me |
| 2026-06-16 19:26:57 +0000 | <vms14> | myFold :: (resultType -> inputType -> resultType) -> resultType -> [inputType] -> resultType |
| 2026-06-16 19:27:18 +0000 | <vms14> | instead of (b -> a -> b) -> b -> [a] -> b |
| 2026-06-16 19:27:36 +0000 | <vms14> | but it feels like i should get used to those a and b |
| 2026-06-16 19:27:50 +0000 | <vms14> | and that myFold signature is ugly for any haskeller |
| 2026-06-16 19:28:08 +0000 | <jaror> | All these are types so ending them with `Type` says nothing |
| 2026-06-16 19:28:22 +0000 | <vms14> | yeah the name is not the best i guess |
| 2026-06-16 19:28:42 +0000 | <vms14> | still i'll just try to get used to letters instead |
| 2026-06-16 19:28:56 +0000 | <jaror> | I guess there is a point that `result` is more informative than `b` |
| 2026-06-16 19:29:28 +0000 | <vms14> | it defeats the problem of not knowing how to name your vars also |
| 2026-06-16 19:29:49 +0000 | <jaror> | Something like `(res -> el -> res) -> res -> [el] -> res` seems acceptable to me |
| 2026-06-16 19:30:00 +0000 | <vms14> | ofthen in other languages this would be discouraged, but in haskell seems to be the contrary |
| 2026-06-16 19:30:17 +0000 | <vms14> | often* |
| 2026-06-16 19:30:42 +0000 | <jaror> | I think Java uses `A` a bunch for its generics |
| 2026-06-16 19:30:48 +0000 | <jaror> | Like `List<A>` |
| 2026-06-16 19:38:00 +0000 | petrichor | (~jez@user/petrichor) (Quit: ZNC 1.10.1 - https://znc.in) |
| 2026-06-16 19:40:21 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 19:41:16 +0000 | <monochrom> | Naively, it is good to use descriptive names. Cynically, it is extremely difficult to make them accurate and honest. |
| 2026-06-16 19:42:41 +0000 | petrichor | (~jez@user/petrichor) petrichor |
| 2026-06-16 19:45:07 +0000 | <monochrom> | Practically, more general things are worth less of your time thinking up names. Extreme example: "id :: a -> a" there is really no point "improving" the "a" to something longer. (You can still argue about "id"; I would respect that.) |
| 2026-06-16 19:45:35 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 2026-06-16 19:46:01 +0000 | <vms14> | i was thinking that it would be harder to name a type variable than a value variable |
| 2026-06-16 19:46:08 +0000 | wickedjargon | (~user@207.194.126.21) wickedjargon |
| 2026-06-16 19:46:27 +0000 | <monochrom> | reasoning being: more general things deserve broader names, so broad that you may as well just call it "x", it's as good as "thingy" or "foo". |
| 2026-06-16 19:46:43 +0000 | <monochrom> | or "object". |
| 2026-06-16 19:47:13 +0000 | <vms14> | it will also train me to read formulas |
| 2026-06-16 19:48:32 +0000 | <monochrom> | Historically, programmers have had a long history of meaningful names that confuse, mislead, or downright gaslight. Examples: RAII, bus factor, test pollution. |
| 2026-06-16 19:49:23 +0000 | <vms14> | there is a post aobut conventions to follow? |
| 2026-06-16 19:49:33 +0000 | <vms14> | i should read it |
| 2026-06-16 19:49:35 +0000 | <monochrom> | to the point I'm now cynical and just say that meaningful names are lies. |
| 2026-06-16 19:50:03 +0000 | <vms14> | https://wiki.haskell.org/Programming_guidelines |
| 2026-06-16 19:50:58 +0000 | <yin> | guidelines are for suckers. parse, don't validate |
| 2026-06-16 19:51:32 +0000 | <monochrom> | In Haskell, we have our share in choosing the name "return". (We are now trying to change it to "pure".) |
| 2026-06-16 19:52:33 +0000 | <mauke> | compromise: repure |
| 2026-06-16 19:52:56 +0000 | <mauke> | what's confusing about RAII? |
| 2026-06-16 19:53:28 +0000 | <vms14> | that does not seem to be common though: For lambda expressions, write \ t -> ??? instead of \t -> ???. |
| 2026-06-16 19:53:36 +0000 | <monochrom> | I switched to these principles instead: mnemonic names, even insider jokes are OK, and hamming distance between names should be proportionate to semantic difference. |
| 2026-06-16 19:54:14 +0000 | <monochrom> | RAII should be renamed to Resource Release Upon Exit. IMO anyway. |
| 2026-06-16 19:54:22 +0000 | <Leary> | vms14: http://jackkelly.name/blog/archives/2024/10/12/a_dictionary_of_single-letter_variable_names/ |
| 2026-06-16 19:54:42 +0000 | <mauke> | no, resource release upon exit is the goal |
| 2026-06-16 19:54:47 +0000 | <mauke> | but how are you going to achieve it? |
| 2026-06-16 19:55:25 +0000 | <monochrom> | On surface literal value, if you do so much as "int *p = malloc(...)" you are already allocating resource at initialization. |
| 2026-06-16 19:55:36 +0000 | <mauke> | no, you're not |
| 2026-06-16 19:55:45 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 19:55:47 +0000 | <mauke> | malloc(...) allocates the resource |
| 2026-06-16 19:56:01 +0000 | <monochrom> | "p =" is initialization. |
| 2026-06-16 19:56:07 +0000 | <mauke> | "p =" doesn't allocate |
| 2026-06-16 19:57:15 +0000 | phm_ | phm |
| 2026-06-16 19:57:53 +0000 | <vms14> | Leary: cool, i'llcheck. i was looking at this https://kowainik.github.io/posts/naming-conventions |
| 2026-06-16 19:57:59 +0000 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 2026-06-16 20:00:10 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-06-16 20:00:21 +0000 | <monochrom> | Yeah I haven't seen "\ t", only "\t". |
| 2026-06-16 20:00:55 +0000 | <monochrom> | https://xkcd.com/927/ applies. :) |
| 2026-06-16 20:05:49 +0000 | <EvanR> | I took RAII at face value, was a I wrong? |
| 2026-06-16 20:05:57 +0000 | <vms14> | Leary: i think those uses make sense and will be commonly found in code |
| 2026-06-16 20:06:18 +0000 | <EvanR> | er, freudian slip. Was I wrong |
| 2026-06-16 20:06:30 +0000 | <vms14> | the ones you linked |
| 2026-06-16 20:07:25 +0000 | <monochrom> | I took "bus factor" at face value too. And wondering why the motherboard bus had anything to do with high-level software project management. |
| 2026-06-16 20:08:49 +0000 | <mauke> | the motherboard bus is figurative, too |
| 2026-06-16 20:09:47 +0000 | <mauke> | weak face value form? |
| 2026-06-16 20:11:06 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 20:11:37 +0000 | <vms14> | i was skeptical of Either = Left | Right but it's easy to remember |
| 2026-06-16 20:12:06 +0000 | <vms14> | the Left is at the left and right at right, also when used for exceptions the exception is usually Left, because Right is right |
| 2026-06-16 20:12:19 +0000 | eL_Bart0 | (eL_Bart02@dietunichtguten.org) (Ping timeout: 264 seconds) |
| 2026-06-16 20:12:56 +0000 | <mauke> | data Bool1 a b = False1 a | True1 b |
| 2026-06-16 20:12:57 +0000 | eL_Bart0 | (eL_Bart02@dietunichtguten.org) |
| 2026-06-16 20:13:32 +0000 | <vms14> | a lot of names and behaviors are also what i would expect and stuff like syntax for if then else is something i was already implementing in my toy langs with an end delimiter |
| 2026-06-16 20:13:36 +0000 | <EvanR> | motherboard bus etymology seems to go back farther and still has nothing to do with busses |
| 2026-06-16 20:14:12 +0000 | <EvanR> | Right is right unless driving in UK |
| 2026-06-16 20:14:53 +0000 | <EvanR> | if x then y else z, principle of least surprise |
| 2026-06-16 20:15:38 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-06-16 20:15:47 +0000 | <monochrom> | The alternative to Left and Right is One and Two. And then people would become divisible about "but it should be Zero and One". >:) |
| 2026-06-16 20:15:58 +0000 | <mauke> | "The electrical sense is derived from figurative application of the automotive sense." |
| 2026-06-16 20:19:11 +0000 | <EvanR> | Zero | Two |
| 2026-06-16 20:19:31 +0000 | <monochrom> | Tony Hoare thought up "y <| x |> z". I like it, it's as close to infix binary as one can get. Later, Python came up with "y if x else z", not too bad IMO. |
| 2026-06-16 20:19:57 +0000 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 2026-06-16 20:20:00 +0000 | <mauke> | AughtPointFive | OnePointFive |
| 2026-06-16 20:20:18 +0000 | nyc | (~nyc@user/nyc) nyc |
| 2026-06-16 20:20:20 +0000 | <mauke> | monochrom: yeah, who doesn't love middle-endian control flow? |
| 2026-06-16 20:20:35 +0000 | <monochrom> | Later, I put on a parser assignment "there is also no ambiguity in 'a if y if x else z else b' so write a parser to parse that!" |
| 2026-06-16 20:20:58 +0000 | <vms14> | i would have named them Oh | Meh |
| 2026-06-16 20:21:30 +0000 | <monochrom> | data TheEnd = Oh | Meh | Gah |
| 2026-06-16 20:21:35 +0000 | <EvanR> | the left-to-right right-to-left debate can be solved another way: code grows both directions from the center of the line |
| 2026-06-16 20:21:40 +0000 | <EvanR> | center justified |
| 2026-06-16 20:21:42 +0000 | <mauke> | It | Unit |
| 2026-06-16 20:22:14 +0000 | rzrshr | (~rzrshr@user/rzrshr) rzrshr |
| 2026-06-16 20:22:18 +0000 | target_i | (~target_i@user/target-i/x-6023099) target_i |
| 2026-06-16 20:23:25 +0000 | <vms14> | o only cry about camel case though |
| 2026-06-16 20:23:30 +0000 | <vms14> | i* |
| 2026-06-16 20:24:00 +0000 | <monochrom> | At every year's ICPC, each school gets to send two teams. Most schools name them "team 1, team 2" and "team a, team b", with the connotation that 2 or b is the less experienced team. One year, I came up with the great idea of "team 1, team a". :) |
| 2026-06-16 20:24:01 +0000 | <EvanR> | I think it really helps haskell's readability |
| 2026-06-16 20:24:46 +0000 | <monochrom> | I don't like camel case. |
| 2026-06-16 20:25:09 +0000 | <EvanR> | TheEnd ? |
| 2026-06-16 20:25:30 +0000 | <monochrom> | I grudgingly agreed to use it because I respect the community. |
| 2026-06-16 20:25:40 +0000 | <mauke> | I'd rather read unsafe_perform_io than unsafePerFormIO |
| 2026-06-16 20:25:55 +0000 | <vms14> | monochrom: 1 still makes them to be the one |
| 2026-06-16 20:26:07 +0000 | <monochrom> | I am secretly fond of Oleg case: unsafe'perform'IO :) |
| 2026-06-16 20:26:13 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 20:26:19 +0000 | <vms14> | just surrender and callthem pro team noob team |
| 2026-06-16 20:26:20 +0000 | <EvanR> | yeah unSafEPerFOrMIo makes it sound much more cringeworthy |
| 2026-06-16 20:26:36 +0000 | <EvanR> | syntactic saccharine |
| 2026-06-16 20:26:48 +0000 | <monochrom> | I'm hoping one day I can call them "team 1, team 0". :) |
| 2026-06-16 20:26:55 +0000 | <mauke> | technically it should be unsafe_perform_i_o, I suppose |
| 2026-06-16 20:26:58 +0000 | target_i | (~target_i@user/target-i/x-6023099) (Ping timeout: 260 seconds) |
| 2026-06-16 20:27:15 +0000 | <monochrom> | only if IO is renamed I_O ! |
| 2026-06-16 20:27:22 +0000 | <vms14> | team 0 is more insulting xd |
| 2026-06-16 20:27:37 +0000 | target_i | (~target_i@user/target-i/x-6023099) target_i |
| 2026-06-16 20:27:47 +0000 | <EvanR> | team IO and team OI |
| 2026-06-16 20:27:48 +0000 | <mauke> | monochrom: s/([[:upper:]])/_\L$1/g |
| 2026-06-16 20:28:02 +0000 | <monochrom> | haha nice |
| 2026-06-16 20:28:29 +0000 | <mauke> | team aleph, team NaN |
| 2026-06-16 20:30:52 +0000 | <EvanR> | team <emoji> |
| 2026-06-16 20:31:11 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 2026-06-16 20:32:01 +0000 | <mauke> | team <zero width non-joiner>, team <right-to-left override> |
| 2026-06-16 20:32:28 +0000 | <monochrom> | Evil |
| 2026-06-16 20:34:43 +0000 | <mauke> | > show 1 |
| 2026-06-16 20:34:44 +0000 | <lambdabot> | "1" |
| 2026-06-16 20:36:25 +0000 | petrichor | (~jez@user/petrichor) (Ping timeout: 248 seconds) |
| 2026-06-16 20:38:57 +0000 | <mauke> | > ( 2) + ( 2) |
| 2026-06-16 20:38:58 +0000 | <lambdabot> | 4 |
| 2026-06-16 20:39:09 +0000 | <mauke> | I hope this renders the way I want it |
| 2026-06-16 20:39:16 +0000 | petrichor | (~jez@user/petrichor) petrichor |
| 2026-06-16 20:40:30 +0000 | <vms14> | i'm yet not sure of why i would want to learn haskell and make it my main dev language |
| 2026-06-16 20:41:22 +0000 | <vms14> | it solves the js problem which is something i want. but that has nothing to do with the lang itself and whether it will resonate with me |
| 2026-06-16 20:41:27 +0000 | <Rembane> | vms14: Don't make it your main language, make it your second or third language so you always can get inspired. |
| 2026-06-16 20:41:34 +0000 | <Rembane> | vms14: Have you checked out Elm? |
| 2026-06-16 20:41:35 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 20:41:48 +0000 | <vms14> | Rembane: no |
| 2026-06-16 20:41:55 +0000 | <vms14> | i have the js backend though |
| 2026-06-16 20:41:57 +0000 | <mauke> | elm is spanish for them |
| 2026-06-16 20:42:02 +0000 | <vms14> | and made some hello world |
| 2026-06-16 20:42:16 +0000 | <Rembane> | vms14: It's quite nice if you want to replace js on the frontend, but it's also quite old and I'm not sure if it's that actively developed anymore. |
| 2026-06-16 20:42:44 +0000 | <Rembane> | mauke: What's us in spanish? |
| 2026-06-16 20:42:45 +0000 | <vms14> | Rembane: i have this |
| 2026-06-16 20:42:48 +0000 | <vms14> | https://ghc.gitlab.haskell.org/ghc/doc/users_guide/javascript.html |
| 2026-06-16 20:43:10 +0000 | <vms14> | and the wasm one is even cooler with fancier ffi and a browser repl :0 |
| 2026-06-16 20:43:19 +0000 | <vms14> | but i can't install it on my fake debian in termux xd |
| 2026-06-16 20:43:26 +0000 | <monochrom> | If you just want to solve the js problem but still write for web, try purescript. |
| 2026-06-16 20:43:34 +0000 | <Rembane> | vms14: Fancy |
| 2026-06-16 20:43:37 +0000 | <mauke> | Rembane: estados unidos |
| 2026-06-16 20:43:46 +0000 | <vms14> | monochrom: i was going to, but i think i have everything i wanted with the js backend of ghc |
| 2026-06-16 20:43:57 +0000 | <vms14> | it's full haskell on the browser |
| 2026-06-16 20:44:06 +0000 | <vms14> | the wasm one would have been better though |
| 2026-06-16 20:44:12 +0000 | <Rembane> | mauke: Thank you! That's a good one! |
| 2026-06-16 20:44:15 +0000 | <vms14> | i can just ffi to js like it's nothing |
| 2026-06-16 20:44:27 +0000 | <monochrom> | But I'm just as happy if you adopt Haskell, at your expense. >:) |
| 2026-06-16 20:44:34 +0000 | <Rembane> | mauke: That one is not what it says on the tin. :( |
| 2026-06-16 20:44:41 +0000 | <vms14> | https://gitlab.com/ohmycat/oh/-/blob/main/JS.hs |
| 2026-06-16 20:44:43 +0000 | <mauke> | or "eeuu", I guess |
| 2026-06-16 20:44:47 +0000 | <vms14> | those are some random ffi tests |
| 2026-06-16 20:45:54 +0000 | spew | (~spew@user/spew) spew |
| 2026-06-16 20:46:18 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 258 seconds) |
| 2026-06-16 20:47:03 +0000 | <EvanR> | us = nosotros |
| 2026-06-16 20:47:11 +0000 | <vms14> | also i've heard ffi to c is nice |
| 2026-06-16 20:47:35 +0000 | <vms14> | so haskell has me covered for almost any program i want to do |
| 2026-06-16 20:47:57 +0000 | <Rembane> | Especially if you're ready to put in a lot of time |
| 2026-06-16 20:48:10 +0000 | <vms14> | Rembane: only if it's worth |
| 2026-06-16 20:48:16 +0000 | <EvanR> | haskell on an 8bit micro... might not work. But haskell library which outputs a program for 8bit micro |
| 2026-06-16 20:48:16 +0000 | <vms14> | it is worth in your opinion? |
| 2026-06-16 20:48:33 +0000 | <EvanR> | has me convinced |
| 2026-06-16 20:49:16 +0000 | <vms14> | seems haskell is good for managing complex programs better than other mainstream languages |
| 2026-06-16 20:49:26 +0000 | <vms14> | but i can't talk |
| 2026-06-16 20:49:39 +0000 | <EvanR> | haskell is a gateway drug to more sophisticated programming tech that exists but no one's heard of |
| 2026-06-16 20:49:55 +0000 | <EvanR> | for that it's worth it |
| 2026-06-16 20:49:58 +0000 | <vms14> | then wouldn't be a mistake not to use it? |
| 2026-06-16 20:51:31 +0000 | <monochrom> | I made a joke about "write in Haskell this program that used to be in Apple II BASIC. bonus credit for getting it to run on Apple II". :) |
| 2026-06-16 20:51:43 +0000 | <Rembane> | One of the better reason to not use Haskell is that you don't miss all the Haskelly features that don't exist in other languages. |
| 2026-06-16 20:52:49 +0000 | pavonia | (~user@user/siracusa) siracusa |
| 2026-06-16 20:52:54 +0000 | <vms14> | i also have to learn about template haskell |
| 2026-06-16 20:53:03 +0000 | <Rembane> | monochrom: That's simple! Just create a DSL that can compile to Apple II Basic... wait a minute! |
| 2026-06-16 20:53:04 +0000 | <vms14> | macros that typecheck |
| 2026-06-16 20:53:41 +0000 | <EvanR> | the haskell preoccupation with semantics where normally such thing fall through the floor can be applied in other programming situations |
| 2026-06-16 20:54:00 +0000 | <EvanR> | possibly improving code quality of not haskell |
| 2026-06-16 20:55:05 +0000 | <EvanR> | template haskell continues to be the thing you resort to when the language fails you |
| 2026-06-16 20:55:15 +0000 | michalz | (~michalz@185.246.207.197) (Remote host closed the connection) |
| 2026-06-16 20:55:31 +0000 | <EvanR> | e.g. generics can now do a lot of stuff TH was used for, and compiles faster |
| 2026-06-16 20:55:38 +0000 | <vms14> | i suspect template haskell will be the thing that makes the language click for me |
| 2026-06-16 20:55:52 +0000 | <vms14> | but does not seem to be as free as lisp macros |
| 2026-06-16 20:56:16 +0000 | <EvanR> | well lisp has no type system to speak of |
| 2026-06-16 20:56:29 +0000 | <EvanR> | haskell is typed all the way to core |
| 2026-06-16 20:56:43 +0000 | spew | (~spew@user/spew) (Quit: nyaa~) |
| 2026-06-16 20:56:48 +0000 | <vms14> | but also for example does not seem you will accidentally call a macro like in lisp thinking is just a function |
| 2026-06-16 20:56:59 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 20:57:05 +0000 | <EvanR> | well they are called with different syntax so yeah |
| 2026-06-16 20:57:23 +0000 | <mauke> | yeah, haskell is much more perlish |
| 2026-06-16 20:57:26 +0000 | <vms14> | i'll have to learn about them soon |
| 2026-06-16 20:57:35 +0000 | <vms14> | mauke: :0 how? |
| 2026-06-16 20:58:20 +0000 | <vms14> | mauke: do you think if i like perl i will like haskell? |
| 2026-06-16 20:58:20 +0000 | <mauke> | not quite sigils, but macro splices are marked $( ... ) |
| 2026-06-16 20:58:33 +0000 | <mauke> | hard to say |
| 2026-06-16 20:59:05 +0000 | <mauke> | perl and haskell are pretty different, but there are some rather abstract things they have in common |
| 2026-06-16 20:59:21 +0000 | <vms14> | is freedom one of them? |
| 2026-06-16 20:59:28 +0000 | <Rembane> | Parrot! Hugs! Pugs! Fun! |
| 2026-06-16 20:59:47 +0000 | <mauke> | no, I don't know what that is |
| 2026-06-16 21:00:06 +0000 | <vms14> | so no freedom in haskell :/ |
| 2026-06-16 21:00:10 +0000 | <mauke> | but context is a thing in both languages |
| 2026-06-16 21:00:19 +0000 | <mauke> | as is a preference for explicit binders |
| 2026-06-16 21:00:27 +0000 | <EvanR> | I have not heard of freedom as a programming language feature |
| 2026-06-16 21:00:41 +0000 | <vms14> | EvanR: it's the main thing i look for in a language |
| 2026-06-16 21:00:44 +0000 | <EvanR> | sounds suspicious |
| 2026-06-16 21:00:50 +0000 | <vms14> | and the reason perl was clay for my mind |
| 2026-06-16 21:01:01 +0000 | <mauke> | and unicode |
| 2026-06-16 21:01:05 +0000 | <EvanR> | I like the analogy of dry sand |
| 2026-06-16 21:01:16 +0000 | <EvanR> | is the material I felt PHP was |
| 2026-06-16 21:01:38 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-06-16 21:01:48 +0000 | <EvanR> | if programming languages were building materials |
| 2026-06-16 21:02:19 +0000 | jayanth | (~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) |
| 2026-06-16 21:02:38 +0000 | rzrshr | (~rzrshr@user/rzrshr) (Quit: WeeChat 4.9.0) |
| 2026-06-16 21:02:39 +0000 | <vms14> | having multiple ways of expressing an idea allows me to prototype and the code writes itself |
| 2026-06-16 21:02:57 +0000 | <vms14> | i guess haskell gives you the freedom by making your own types |
| 2026-06-16 21:03:05 +0000 | <EvanR> | we certainly don't have There's Only One Way To Do It |
| 2026-06-16 21:03:54 +0000 | <mauke> | a higher than average amount of $ in our programs |
| 2026-06-16 21:04:21 +0000 | <vms14> | i wish $ was . instead |
| 2026-06-16 21:04:43 +0000 | <EvanR> | some people can't tell the difference |
| 2026-06-16 21:05:38 +0000 | <EvanR> | but . is usually much more modular |
| 2026-06-16 21:06:31 +0000 | <EvanR> | $ is like putting a roof on your factory building in satisfactory, you're giving up and going home |
| 2026-06-16 21:07:00 +0000 | <EvanR> | . leaves addons open ended |
| 2026-06-16 21:11:14 +0000 | wickedjargon | (~user@207.194.126.21) (Ping timeout: 248 seconds) |
| 2026-06-16 21:12:22 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-06-16 21:13:00 +0000 | <vms14> | ski: that's my ai now |
| 2026-06-16 21:13:02 +0000 | <vms14> | main = do interact (\x -> seq x "you are absolutely right") |
| 2026-06-16 21:15:22 +0000 | <EvanR> | totally unnecessary do, nice |
| 2026-06-16 21:15:46 +0000 | <EvanR> | do print "Hello World" |
| 2026-06-16 21:16:07 +0000 | <EvanR> | don't (error "o_O") |
| 2026-06-16 21:16:53 +0000 | <monochrom> | I prefer: map (const "you are absolutely right") . lines |
| 2026-06-16 21:17:38 +0000 | leppard | (~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) (Ping timeout: 248 seconds) |
| 2026-06-16 21:17:39 +0000 | <monochrom> | narcism = interact (map (const "you are the fairest of them all"). lines) |
| 2026-06-16 21:17:42 +0000 | <EvanR> | are you guys's memes why I am more and more being told how wrong i am by AI |
| 2026-06-16 21:17:54 +0000 | <EvanR> | thanks for that |
| 2026-06-16 21:18:50 +0000 | <vms14> | EvanR: i didn't know that it was not needed |
| 2026-06-16 21:19:12 +0000 | Googulator55 | (~Googulato@team.broadbit.hu) |
| 2026-06-16 21:19:28 +0000 | <monochrom> | > do do do do True |
| 2026-06-16 21:19:29 +0000 | <lambdabot> | True |
| 2026-06-16 21:19:32 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 2026-06-16 21:20:21 +0000 | <vms14> | yeah it's just syntax sugar for the next block |
| 2026-06-16 21:20:27 +0000 | <vms14> | and i'm not using that sugar |
| 2026-06-16 21:21:41 +0000 | <vms14> | for some reason i had associated do made main IO friendly, but main is expected to be IO |
| 2026-06-16 21:22:05 +0000 | <vms14> | which is something i do not yet know, nor the context it runs it |
| 2026-06-16 21:22:49 +0000 | <vms14> | runs on* |
| 2026-06-16 21:22:53 +0000 | <monochrom> | do makes IO friendly. Generally, do makes monadic code friendly. :) |
| 2026-06-16 21:23:07 +0000 | Googulator | (~Googulato@team.broadbit.hu) (Ping timeout: 245 seconds) |
| 2026-06-16 21:25:07 +0000 | takuan | (~takuan@d8D86B9E9.access.telenet.be) (Ping timeout: 252 seconds) |
| 2026-06-16 21:30:25 +0000 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |