2026/06/16

2026-06-16 00:00:31 +0000jayanth(~jayanth@static-98-115-128-109.phlapa.fios.verizon.net)
2026-06-16 00:03:19 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 00:08:02 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-06-16 00:14:43 +0000GdeVolpiano(~GdeVolpia@user/GdeVolpiano) (Ping timeout: 244 seconds)
2026-06-16 00:15:54 +0000weary-traveler(~user@user/user363627) (Quit: Konversation terminated!)
2026-06-16 00:16:12 +0000weary-traveler(~user@user/user363627) user363627
2026-06-16 00:18:14 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2026-06-16 00:18:30 +0000notzmv(~umar@user/notzmv) (Ping timeout: 245 seconds)
2026-06-16 00:18:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 00:19:22 +0000jayanth(~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) (Ping timeout: 244 seconds)
2026-06-16 00:25:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2026-06-16 00:26:32 +0000czan(~czan@user/mange) czan
2026-06-16 00:27:43 +0000GdeVolpiano(~GdeVolpia@user/GdeVolpiano) GdeVolpiano
2026-06-16 00:32:48 +0000bggd_(~bgg@2a01:e0a:fd5:f510:1a59:33f5:ef7c:52f1) (Ping timeout: 244 seconds)
2026-06-16 00:33:19 +0000acidjnk(~acidjnk@p200300d6e700e534f8213bb0af1b5ed0.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2026-06-16 00:33:22 +0000acidjnk_new(~acidjnk@p200300d6e700e534f8213bb0af1b5ed0.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2026-06-16 00:36:45 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 00:40:39 +0000redmp(~redmp@116-65-231-94.rev.home.ne.jp) redmp
2026-06-16 00:41:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-06-16 00:42:16 +0000kadobanana(~mud@user/kadoban) kadoban
2026-06-16 00:44:57 +0000mud(~mud@user/kadoban) (Ping timeout: 272 seconds)
2026-06-16 00:49:23 +0000fgarcia(~lei@user/fgarcia) (Ping timeout: 272 seconds)
2026-06-16 00:52:18 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 00:56:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-06-16 00:57:43 +0000xff0x(~xff0x@ai070051.d.east.v6connect.net) (Quit: xff0x)
2026-06-16 01:06:31 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 245 seconds)
2026-06-16 01:06:57 +0000redmp(~redmp@116-65-231-94.rev.home.ne.jp) (Ping timeout: 246 seconds)
2026-06-16 01:07:35 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 01:08:41 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2026-06-16 01:09:02 +0000emmanuelux(~em@user/emmanuelux) (Quit: bye)
2026-06-16 01:11:50 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-06-16 01:21:04 +0000spew(~spew@user/spew) spew
2026-06-16 01:22:46 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 245 seconds)
2026-06-16 01:22:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 01:27:26 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 247 seconds)
2026-06-16 01:34:14 +0000Pozyomka_(~pyon@user/pyon) pyon
2026-06-16 01:34:18 +0000Pozyomka(~pyon@user/pyon) (Remote host closed the connection)
2026-06-16 01:34:25 +0000spew(~spew@user/spew) (Quit: nyaa~)
2026-06-16 01:35:39 +0000Pozyomka_(~pyon@user/pyon) (Remote host closed the connection)
2026-06-16 01:36:03 +0000Pozyomka(~pyon@user/pyon) pyon
2026-06-16 01:38:16 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 01:38:27 +0000EvanR(~EvanR@user/evanr) (Remote host closed the connection)
2026-06-16 01:38:47 +0000EvanR(~EvanR@user/evanr) EvanR
2026-06-16 01:40:33 +0000karenw(~karenw@user/karenw) karenw
2026-06-16 01:43:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2026-06-16 01:52:12 +0000lisbeths(uid135845@id-135845.lymington.irccloud.com) lisbeths
2026-06-16 01:53:31 +0000xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2026-06-16 01:53:39 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 01:54:54 +0000Axma23834(~Axman6@user/axman6) Axman6
2026-06-16 01:55:55 +0000Axman6(~Axman6@user/axman6) (Ping timeout: 245 seconds)
2026-06-16 02:00:18 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-06-16 02:03:28 +0000karenw(~karenw@user/karenw) (Quit: Deep into that darkness peering...)
2026-06-16 02:11:46 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 02:16:00 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-06-16 02:18:53 +0000polykernel(~polykerne@user/polykernel) polykernel
2026-06-16 02:19:34 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-06-16 02:20:15 +0000Pozyomka(~pyon@user/pyon) (Quit: brb)
2026-06-16 02:21:07 +0000Pozyomka(~pyon@user/pyon) pyon
2026-06-16 02:27:03 +0000emilym(~Thunderbi@user/emilym) emilym
2026-06-16 02:31:26 +0000emilym(~Thunderbi@user/emilym) (Ping timeout: 256 seconds)
2026-06-16 02:41:45 +0000Square(~Square@user/square) (Ping timeout: 246 seconds)
2026-06-16 02:47:24 +0000peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 252 seconds)
2026-06-16 02:53:05 +0000td_(~td@i5387093E.versanet.de) (Ping timeout: 245 seconds)
2026-06-16 02:54:51 +0000td_(~td@i53870916.versanet.de)
2026-06-16 03:05:17 +0000Axma23834Axman6
2026-06-16 03:06:47 +0000notzmv(~umar@user/notzmv) notzmv
2026-06-16 03:14:54 +0000leppard(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
2026-06-16 03:39:28 +0000fgarcia(~lei@user/fgarcia) fgarcia
2026-06-16 03:40:14 +0000puke(~puke@user/puke) puke
2026-06-16 03:40:22 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 03:44:45 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-06-16 03:55:45 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 03:56:58 +0000machinedgod(~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 276 seconds)
2026-06-16 03:57:26 +0000ystael(~ystael@user/ystael) (Ping timeout: 252 seconds)
2026-06-16 04:03:36 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-06-16 04:14:34 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 04:16:45 +0000jayanth(~jayanth@static-98-115-128-109.phlapa.fios.verizon.net)
2026-06-16 04:19:06 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-06-16 04:26:59 +0000synchromesh(~john@2406:5a00:247e:1500:a691:b1ff:0:f9d) (Read error: Connection reset by peer)
2026-06-16 04:27:00 +0000Axma73573(~Axman6@user/axman6) Axman6
2026-06-16 04:28:25 +0000Axman6(~Axman6@user/axman6) (Ping timeout: 245 seconds)
2026-06-16 04:29:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 04:32:58 +0000synchromesh(~john@2406:5a00:247e:1500:a691:b1ff:0:f9d) synchromesh
2026-06-16 04:34:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
2026-06-16 04:41:30 +0000lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2026-06-16 04:42:51 +0000michalz(~michalz@185.246.207.197)
2026-06-16 04:44:51 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-06-16 04:45:17 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 04:52:28 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
2026-06-16 05:03:16 +0000wickedjargon(~user@64.114.24.74) wickedjargon
2026-06-16 05:03:20 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 05:05:09 +0000jayanth(~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) (Ping timeout: 262 seconds)
2026-06-16 05:06:33 +0000peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 252 seconds)
2026-06-16 05:07:53 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-06-16 05:15:51 +0000tusko(~uwu@user/tusko) tusko
2026-06-16 05:18:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 05:19:09 +0000takuan(~takuan@d8D86B9E9.access.telenet.be)
2026-06-16 05:21:52 +0000sord937(~sord937@gateway/tor-sasl/sord937) sord937
2026-06-16 05:23:03 +0000puke(~puke@user/puke) (Quit: puke)
2026-06-16 05:23:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2026-06-16 05:26:43 +0000puke(~puke@user/puke) puke
2026-06-16 05:34:04 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 05:35:59 +0000divlamir_(~divlamir@user/divlamir) divlamir
2026-06-16 05:38:54 +0000divlamir(~divlamir@user/divlamir) (Ping timeout: 246 seconds)
2026-06-16 05:38:54 +0000divlamir_divlamir
2026-06-16 05:38:58 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-06-16 05:46:13 +0000divlamir(~divlamir@user/divlamir) (Ping timeout: 265 seconds)
2026-06-16 05:46:28 +0000divlamir(~divlamir@user/divlamir) divlamir
2026-06-16 05:49:26 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 05:53:39 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-06-16 06:00:22 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 06:05:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 259 seconds)
2026-06-16 06:16:52 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 06:21:29 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-06-16 06:31:27 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2026-06-16 06:32:15 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 06:39:19 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-06-16 06:40:13 +0000czan(~czan@user/mange) (Quit: Quittin' time!)
2026-06-16 06:45:36 +0000divlamir_(~divlamir@user/divlamir) divlamir
2026-06-16 06:48:12 +0000divlamir(~divlamir@user/divlamir) (Ping timeout: 246 seconds)
2026-06-16 06:48:12 +0000divlamir_divlamir
2026-06-16 06:50:19 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 06:51:42 +0000Axma73573Axman6
2026-06-16 06:54:09 +0000kadobanana(~mud@user/kadoban) (Ping timeout: 246 seconds)
2026-06-16 06:54:56 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2026-06-16 06:55:46 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli)
2026-06-16 06:56:40 +0000kadobanana(~mud@user/kadoban) kadoban
2026-06-16 06:59:41 +0000Axma87347(~Axman6@user/axman6) Axman6
2026-06-16 07:01:24 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 07:01:59 +0000Axman6(~Axman6@user/axman6) (Ping timeout: 265 seconds)
2026-06-16 07:05:05 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) marinelli
2026-06-16 07:05:31 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 241 seconds)
2026-06-16 07:06:06 +0000Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2026-06-16 07:17:38 +0000CiaoSen(~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) CiaoSen
2026-06-16 07:19:11 +0000hc(~hc@mail.hce.li) (Remote host closed the connection)
2026-06-16 07:19:54 +0000jcarpenter2(~lol@96.78.87.197) (Ping timeout: 245 seconds)
2026-06-16 07:22:55 +0000jcarpenter2(~lol@2603:3016:1e01:b940:9e16:4716:cb0d:9d39)
2026-06-16 07:25:49 +0000chele(~chele@user/chele) chele
2026-06-16 07:27:37 +0000jcarpenter2(~lol@2603:3016:1e01:b940:9e16:4716:cb0d:9d39) (Ping timeout: 248 seconds)
2026-06-16 07:29:18 +0000jcarpenter2(~lol@96.78.87.197)
2026-06-16 07:33:26 +0000rainbyte(~rainbyte@181.47.219.31) (Read error: Connection reset by peer)
2026-06-16 07:36:27 +0000rainbyte(~rainbyte@181.47.219.31) rainbyte
2026-06-16 07:38:50 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2026-06-16 07:44:40 +0000oneeyedalien(~oneeyedal@user/oneeyedalien) oneeyedalien
2026-06-16 07:46:44 +0000hc(~hc@mail.hce.li) hc
2026-06-16 07:46:58 +0000puke(~puke@user/puke) (Ping timeout: 268 seconds)
2026-06-16 07:52:34 +0000kuribas(~user@2a02:1808:41:5a17:f424:93c2:8ba2:25d)
2026-06-16 07:53:37 +0000merijn(~merijn@77.242.116.146) merijn
2026-06-16 07:56:10 +0000leppard(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline
2026-06-16 08:22:32 +0000oneeyedalien(~oneeyedal@user/oneeyedalien) (Quit: Leaving)
2026-06-16 08:25:54 +0000CiaoSen(~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) (Ping timeout: 248 seconds)
2026-06-16 08:34:20 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...)
2026-06-16 08:40:25 +0000kuribas`(~user@ip-188-118-57-242.reverse.destiny.be) kuribas
2026-06-16 08:41:46 +0000bggd_(~bgg@2a01:e0a:fd5:f510:8949:3630:d504:97ee)
2026-06-16 08:42:16 +0000kuribas(~user@2a02:1808:41:5a17:f424:93c2:8ba2:25d) (Ping timeout: 268 seconds)
2026-06-16 08:44:26 +0000ft(~ft@p4fc2ab3f.dip0.t-ipconnect.de) (Quit: leaving)
2026-06-16 09:06:26 +0000CiaoSen(~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) CiaoSen
2026-06-16 09:08:10 +0000acidjnk(~acidjnk@p200300d6e700e5750409562b4c541c53.dip0.t-ipconnect.de) acidjnk
2026-06-16 09:08:17 +0000acidjnk_new(~acidjnk@p200300d6e700e5750409562b4c541c53.dip0.t-ipconnect.de)
2026-06-16 09:19:15 +0000ThePenguin(~ThePengui@cust-95-80-28-221.csbnet.se) (Remote host closed the connection)
2026-06-16 09:25:02 +0000picnoir(~picnoir@about/aquilenet/vodoo/NinjaTrappeur) (Quit: WeeChat 4.9.1)
2026-06-16 09:26:11 +0000picnoir(~picnoir@about/aquilenet/vodoo/NinjaTrappeur) NinjaTrappeur
2026-06-16 09:28:36 +0000ThePenguin(~ThePengui@cust-95-80-28-221.csbnet.se) ThePenguin
2026-06-16 09:30:22 +0000ThePenguin(~ThePengui@cust-95-80-28-221.csbnet.se) (Remote host closed the connection)
2026-06-16 09:31:04 +0000ThePenguin(~ThePengui@cust-95-80-28-221.csbnet.se) ThePenguin
2026-06-16 09:31:21 +0000Axman6(~Axman6@user/axman6) Axman6
2026-06-16 09:33:25 +0000Axma87347(~Axman6@user/axman6) (Ping timeout: 245 seconds)
2026-06-16 09:38:52 +0000lisbeths(uid135845@id-135845.lymington.irccloud.com) lisbeths
2026-06-16 10:07:35 +0000danza(~danza@user/danza) danza
2026-06-16 10:13:11 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) (Ping timeout: 245 seconds)
2026-06-16 10:15:15 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) marinelli
2026-06-16 10:21:59 +0000CiaoSen(~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) (Ping timeout: 245 seconds)
2026-06-16 10:24:02 +0000xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 256 seconds)
2026-06-16 10:36:01 +0000puke(~puke@user/puke) puke
2026-06-16 10:36:43 +0000danza(~danza@user/danza) (Remote host closed the connection)
2026-06-16 10:44:59 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) (Remote host closed the connection)
2026-06-16 10:45:21 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) marinelli
2026-06-16 10:47:49 +0000juri_(~juri@217-114-215-140.pool.ovpn.com) (Ping timeout: 265 seconds)
2026-06-16 10:51:04 +0000poscat0x04(~poscat@user/poscat) poscat
2026-06-16 10:52:58 +0000poscat(~poscat@user/poscat) (Ping timeout: 276 seconds)
2026-06-16 10:57:45 +0000juri_(~juri@217-114-215-140.pool.ovpn.com) juri_
2026-06-16 11:02:08 +0000fun-safe-math(~fun-safe-@97-120-35-225.ptld.qwest.net) ()
2026-06-16 11:04:12 +0000fun-safe-math(~fun-safe-@97-120-35-225.ptld.qwest.net) fun-safe-math
2026-06-16 11:16:44 +0000CiaoSen(~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) CiaoSen
2026-06-16 11:19:55 +0000puke(~puke@user/puke) (Quit: puke)
2026-06-16 11:20:11 +0000xal_(~xal@mx1.xal.systems) (Quit: No Ping reply in 180 seconds.)
2026-06-16 11:22:53 +0000xal(~xal@mx1.xal.systems) xal
2026-06-16 11:23:29 +0000Sgeo(~Sgeo@user/sgeo) Sgeo
2026-06-16 11:24:22 +0000puke(~puke@user/puke) puke
2026-06-16 11:26:37 +0000xff0x(~xff0x@2405:6580:b080:900:f8bd:50a9:9ed8:decc)
2026-06-16 11:28:46 +0000Lord_of_Life_(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2026-06-16 11:29:24 +0000Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
2026-06-16 11:31:38 +0000Lord_of_Life_Lord_of_Life
2026-06-16 11:31:53 +0000wickedjargon(~user@64.114.24.74) (Ping timeout: 248 seconds)
2026-06-16 11:32:24 +0000weary-traveler(~user@user/user363627) (Remote host closed the connection)
2026-06-16 11:33:43 +0000Square(~Square@user/square) Square
2026-06-16 11:38:28 +0000chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 276 seconds)
2026-06-16 11:39:13 +0000chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2026-06-16 11:45:25 +0000Axma10736(~Axman6@user/axman6) Axman6
2026-06-16 11:46:24 +0000jayanth(~jayanth@static-98-115-128-109.phlapa.fios.verizon.net)
2026-06-16 11:47:10 +0000Axman6(~Axman6@user/axman6) (Ping timeout: 245 seconds)
2026-06-16 11:48:00 +0000chromoblob(~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
2026-06-16 11:48:26 +0000chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2026-06-16 11:48:52 +0000weary-traveler(~user@user/user363627) user363627
2026-06-16 11:51:00 +0000fgarcia(~lei@user/fgarcia) (Ping timeout: 245 seconds)
2026-06-16 11:53:24 +0000fgarcia(~lei@user/fgarcia) fgarcia
2026-06-16 11:56:00 +0000CiaoSen(~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) (Ping timeout: 245 seconds)
2026-06-16 12:17:17 +0000puke(~puke@user/puke) (Read error: Connection reset by peer)
2026-06-16 12:17:33 +0000puke(~puke@user/puke) puke
2026-06-16 12:18:12 +0000lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2026-06-16 12:26:00 +0000tremon(~tremon@83-80-159-219.cable.dynamic.v4.ziggo.nl) tremon
2026-06-16 12:40:10 +0000puke(~puke@user/puke) (Remote host closed the connection)
2026-06-16 12:40:35 +0000puke(~puke@user/puke) puke
2026-06-16 12:42:22 +0000ridcully(~ridcully@p57b52a2d.dip0.t-ipconnect.de) (Quit: WeeChat 4.9.1)
2026-06-16 12:50:59 +0000CiaoSen(~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) CiaoSen
2026-06-16 13:13:50 +0000Square(~Square@user/square) (Quit: Leaving)
2026-06-16 13:24:04 +0000CiaoSen(~Jura@2a02:3035:eef:857d:4e50:ddff:fe9b:8922) (Ping timeout: 245 seconds)
2026-06-16 14:19:05 +0000Axman6(~Axman6@user/axman6) Axman6
2026-06-16 14:21:20 +0000Axma10736(~Axman6@user/axman6) (Ping timeout: 245 seconds)
2026-06-16 14:23:19 +0000vms14(~vms14@user/vms14) (Quit: WeeChat 4.6.3)
2026-06-16 14:24:38 +0000pavonia(~user@user/siracusa) (Ping timeout: 244 seconds)
2026-06-16 14:25:06 +0000pavonia(~user@user/siracusa) siracusa
2026-06-16 14:28:22 +0000pavonia_(~user@user/siracusa) siracusa
2026-06-16 14:28:48 +0000emilym(~Thunderbi@user/emilym) emilym
2026-06-16 14:30:33 +0000pavonia(~user@user/siracusa) (Ping timeout: 248 seconds)
2026-06-16 14:30:49 +0000pavonia_pavonia
2026-06-16 14:32:49 +0000emilym(~Thunderbi@user/emilym) (Ping timeout: 245 seconds)
2026-06-16 14:33:04 +0000pyooque(~puke@user/puke) puke
2026-06-16 14:33:05 +0000pukeGuest4739
2026-06-16 14:33:05 +0000pyooquepuke
2026-06-16 14:35:23 +0000machinedgod(~machinedg@d172-219-48-230.abhsia.telus.net) machinedgod
2026-06-16 14:35:49 +0000Guest4739(~puke@user/puke) (Ping timeout: 268 seconds)
2026-06-16 14:38:13 +0000ridcully(~ridcully@p57b52a2d.dip0.t-ipconnect.de) ridcully
2026-06-16 14:42:28 +0000vms14(~vms14@user/vms14) vms14
2026-06-16 14:44:02 +0000leppard(~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 +0000Googulator(~Googulato@team.broadbit.hu)
2026-06-16 14:49:45 +0000jayanth(~jayanth@static-98-115-128-109.phlapa.fios.verizon.net) (Ping timeout: 248 seconds)
2026-06-16 14:54:04 +0000pyooque(~puke@user/puke) puke
2026-06-16 14:54:05 +0000pukeGuest7801
2026-06-16 14:54:05 +0000pyooquepuke
2026-06-16 14:56:47 +0000Guest7801(~puke@user/puke) (Ping timeout: 268 seconds)
2026-06-16 15:01:59 +0000danza(~danza@user/danza) danza
2026-06-16 15:06:50 +0000chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 245 seconds)
2026-06-16 15:08:12 +0000chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2026-06-16 15:13:45 +0000chromoblob(~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
2026-06-16 15:14:15 +0000chromoblob(~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 +0000wickedjargon(~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 +0000phm_(~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 +0000phm(~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 +0000xal_(~xal@mx1.xal.systems) xal
2026-06-16 15:30:31 +0000xal(~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 +0000wickedja`(~user@2605:8d80:8201:680e:dadb:dabd:d818:4b27)
2026-06-16 15:38:21 +0000wickedjargon(~user@64.114.24.74) (Ping timeout: 242 seconds)
2026-06-16 15:53:26 +0000leppard(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline
2026-06-16 16:02:49 +0000kuribas`(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2026-06-16 16:03:25 +0000m_a_r_k(~m_a_r_k@archlinux/support/mark) (Remote host closed the connection)
2026-06-16 16:04:18 +0000m_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 +0000karenw(~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 +0000wickedja`(~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 +0000merijn(~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 +0000ft(~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 +0000chele(~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 +0000pavonia(~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 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net)
2026-06-16 16:51:39 +0000danz40363(~danza@user/danza) danza
2026-06-16 16:53:30 +0000danza(~danza@user/danza) (Ping timeout: 245 seconds)
2026-06-16 16:57:45 +0000Fijxu(~Fijxu@user/fijxu) (Quit: XD!!)
2026-06-16 17:01:01 +0000Fijxu(~Fijxu@user/fijxu) fijxu
2026-06-16 17:07:25 +0000jreicher(~joelr@user/jreicher) (Quit: brb)
2026-06-16 17:09:04 +0000jreicher(~joelr@user/jreicher) jreicher
2026-06-16 17:16:34 +0000nattkyrro(~serenity@user/nattkyrro) (Ping timeout: 256 seconds)
2026-06-16 17:18:20 +0000nattkyrro(~serenity@user/nattkyrro) nattkyrro
2026-06-16 17:20:14 +0000karenw(~karenw@user/karenw) (Quit: Deep into that darkness peering...)
2026-06-16 17:22:39 +0000danz40363(~danza@user/danza) (Remote host closed the connection)
2026-06-16 17:29:21 +0000tessier_(~tessier@ip68-8-117-219.sd.sd.cox.net) (Quit: leaving)
2026-06-16 17:31:33 +0000pyooque(~puke@user/puke) puke
2026-06-16 17:31:34 +0000pukeGuest127
2026-06-16 17:31:34 +0000pyooquepuke
2026-06-16 17:34:39 +0000Guest127(~puke@user/puke) (Ping timeout: 268 seconds)
2026-06-16 17:38:09 +0000divlamir_(~divlamir@user/divlamir) divlamir
2026-06-16 17:39:42 +0000tessier(~tessier@ip68-8-117-219.sd.sd.cox.net) tessier
2026-06-16 17:40:35 +0000divlamir(~divlamir@user/divlamir) (Ping timeout: 265 seconds)
2026-06-16 17:40:36 +0000divlamir_divlamir
2026-06-16 17:46:59 +0000divlamir(~divlamir@user/divlamir) (Ping timeout: 245 seconds)
2026-06-16 17:48:43 +0000divlamir(~divlamir@user/divlamir) divlamir
2026-06-16 17:57:27 +0000xintron(~xintron@user/xintron) (Quit: Lurker 1.0.0 (the truth is out there) https://lurker.chat)
2026-06-16 17:57:41 +0000xintron(~xintron@user/xintron) xintron
2026-06-16 18:00:34 +0000pyooq(~puke@user/puke) puke
2026-06-16 18:00:34 +0000pukeGuest8356
2026-06-16 18:00:34 +0000pyooqpuke
2026-06-16 18:01:10 +0000Guest8356(~puke@user/puke) (Ping timeout: 268 seconds)
2026-06-16 18:05:36 +0000tzh(~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 +0000machinedgod(~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 +0000xal_(~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 +0000xal(~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 +0000vms14(~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 +0000weary-traveler(~user@user/user363627) (Remote host closed the connection)
2026-06-16 19:17:05 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 19:23:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2026-06-16 19:25:16 +0000vms14(~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 +0000petrichor(~jez@user/petrichor) (Quit: ZNC 1.10.1 - https://znc.in)
2026-06-16 19:40:21 +0000merijn(~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 +0000petrichor(~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 +0000merijn(~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 +0000wickedjargon(~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 +0000merijn(~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 +0000phm_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 +0000sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2026-06-16 20:00:10 +0000merijn(~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 +0000merijn(~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 +0000eL_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 +0000eL_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 +0000merijn(~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 +0000tzh(~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 +0000nyc(~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 +0000rzrshr(~rzrshr@user/rzrshr) rzrshr
2026-06-16 20:22:18 +0000target_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 +0000merijn(~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 +0000target_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 +0000target_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 +0000merijn(~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 +0000petrichor(~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 +0000petrichor(~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 +0000merijn(~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 +0000spew(~spew@user/spew) spew
2026-06-16 20:46:18 +0000merijn(~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 +0000pavonia(~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 +0000michalz(~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 +0000spew(~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 +0000merijn(~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 +0000merijn(~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 +0000jayanth(~jayanth@static-98-115-128-109.phlapa.fios.verizon.net)
2026-06-16 21:02:38 +0000rzrshr(~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 +0000wickedjargon(~user@207.194.126.21) (Ping timeout: 248 seconds)
2026-06-16 21:12:22 +0000merijn(~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 +0000leppard(~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 +0000Googulator55(~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 +0000merijn(~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 +0000Googulator(~Googulato@team.broadbit.hu) (Ping timeout: 245 seconds)
2026-06-16 21:25:07 +0000takuan(~takuan@d8D86B9E9.access.telenet.be) (Ping timeout: 252 seconds)
2026-06-16 21:30:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 21:35:11 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-06-16 21:38:05 +0000leppard(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline
2026-06-16 21:39:26 +0000divlamir_(~divlamir@user/divlamir) divlamir
2026-06-16 21:43:05 +0000divlamir(~divlamir@user/divlamir) (Ping timeout: 248 seconds)
2026-06-16 21:43:06 +0000divlamir_divlamir
2026-06-16 21:43:56 +0000CiaoSen(~Jura@dynamic-046-114-193-162.46.114.pool.telefonica.de) CiaoSen
2026-06-16 21:45:47 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 21:49:31 +0000spew(~spew@user/spew) spew
2026-06-16 21:50:10 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-06-16 21:56:01 +0000vms14(~vms14@user/vms14) (Quit: WeeChat 4.6.3)
2026-06-16 21:56:34 +0000pyooque(~puke@user/puke) puke
2026-06-16 21:56:35 +0000pukeGuest8648
2026-06-16 21:56:35 +0000pyooquepuke
2026-06-16 21:59:12 +0000Guest8648(~puke@user/puke) (Ping timeout: 268 seconds)
2026-06-16 21:59:18 +0000spew(~spew@user/spew) (Quit: nyaa~)
2026-06-16 22:01:08 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 22:03:01 +0000absence(torgeihe@hildring.pvv.ntnu.no) (Ping timeout: 272 seconds)
2026-06-16 22:03:53 +0000target_i(~target_i@user/target-i/x-6023099) (Quit: leaving)
2026-06-16 22:04:19 +0000Axma66174(~Axman6@user/axman6) Axman6
2026-06-16 22:04:29 +0000Xe(~Xe@perl/impostor/xe) (Ping timeout: 245 seconds)
2026-06-16 22:05:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-06-16 22:05:55 +0000Axman6(~Axman6@user/axman6) (Ping timeout: 245 seconds)
2026-06-16 22:06:18 +0000machinedgod(~machinedg@d172-219-48-230.abhsia.telus.net) machinedgod
2026-06-16 22:12:00 +0000Xe(~Xe@perl/impostor/xe) Xe
2026-06-16 22:16:32 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 22:18:15 +0000 <EvanR> the context is real world, which is deeply magical
2026-06-16 22:21:01 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 258 seconds)
2026-06-16 22:24:29 +0000absence(torgeihe@hildring.pvv.ntnu.no)
2026-06-16 22:27:09 +0000 <raincomplex> is it true that a monad is basically just context
2026-06-16 22:28:12 +0000 <EvanR> effect systems seem to lean into that
2026-06-16 22:28:43 +0000 <raincomplex> 'context' in the casual sense of some extra information that gets carried along implicitly
2026-06-16 22:29:47 +0000 <raincomplex> why don't "what's a monad" articles ever lead with "it's context" :D
2026-06-16 22:30:11 +0000 <EvanR> each effect comes with an explicit resource, the rng state, the file handle that is open, whatever is needed to "log" stuff
2026-06-16 22:30:23 +0000 <EvanR> and can be combined arbitrarily
2026-06-16 22:31:18 +0000 <EvanR> however I don't see how that could explain e.g. the early exit Maybe monad
2026-06-16 22:31:41 +0000 <EvanR> or related List monad
2026-06-16 22:31:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 22:33:09 +0000 <monochrom> Hot take: A context is basically just a monad.
2026-06-16 22:33:32 +0000 <EvanR> collapsing a nested Maybe or List computation does something, some people call the nested layers a context, but that seems to be expanding a word to the extreme generic
2026-06-16 22:34:03 +0000 <EvanR> so it's really about the collapsing operation and not a hidden resource necessarily
2026-06-16 22:34:10 +0000emmanuelux(~em@user/emmanuelux) emmanuelux
2026-06-16 22:35:17 +0000 <EvanR> see also "container" where Cale would troll us and say an IO action is a container with a button on it which performs the action and spits out the result value
2026-06-16 22:36:03 +0000 <EvanR> the monad would chain a IO container that spits out another IO container
2026-06-16 22:36:30 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-06-16 22:36:45 +0000 <EvanR> proving any phenomenon can be framed as container
2026-06-16 22:44:44 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-06-16 22:47:18 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 22:51:05 +0000 <raincomplex> context that can also compute
2026-06-16 22:53:14 +0000 <EvanR> wow that ertes blog post has a great amount of examples of equational reasoning
2026-06-16 22:53:39 +0000 <EvanR> deriving haskell code starting with an equation and solving for unknowns like it's math
2026-06-16 22:53:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-06-16 22:56:47 +0000 <EvanR> raincomplex, hmm context is still this placeholder doing nothing for me. Like imagine a + b. We could call the a part context and + b is a computation with context. Though this context is explicit, just like in haskell FP
2026-06-16 22:58:51 +0000 <raincomplex> i'm experienced in programming but a newb in haskell
2026-06-16 22:59:56 +0000 <EvanR> context and container might still have value as a sort of "intuition pump"
2026-06-16 23:00:23 +0000 <EvanR> which eventually is revealed to be an incomplete analogy
2026-06-16 23:01:44 +0000 <raincomplex> one time i tried to translate monads into imperative terminology and arrived at "it's kind of like a statement separator plus magic"
2026-06-16 23:01:59 +0000 <raincomplex> magic semicolon
2026-06-16 23:02:39 +0000 <raincomplex> maybe my mistake is trying to learn what a monad is without more practice in the language :D
2026-06-16 23:02:55 +0000xff0x(~xff0x@2405:6580:b080:900:f8bd:50a9:9ed8:decc) (Ping timeout: 276 seconds)
2026-06-16 23:03:12 +0000 <raincomplex> it is fascinating to me though. there are plenty of structures in other languages that can be understood easily outside of the language
2026-06-16 23:03:22 +0000 <raincomplex> but monads seem particularly tricky
2026-06-16 23:04:39 +0000xff0x(~xff0x@2405:6580:b080:900:f9b3:ddf6:f890:9081)
2026-06-16 23:05:21 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-06-16 23:05:59 +0000 <EvanR> first try to "explain" Functor
2026-06-16 23:06:21 +0000 <EvanR> what this gets you can easily be demanded in other languages, many of which are missing fmap in key places