Home liberachat/#haskell: Logs Calendar

Logs on 2024-10-29 (liberachat/#haskell)

00:01:49 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
00:02:20 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:05:05 × sadmax quits (~user@64.130.91.66) (Ping timeout: 248 seconds)
00:05:37 × acidjnk_new quits (~acidjnk@p200300d6e72cfb16a87636e44c055c5c.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
00:05:47 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
00:06:16 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
00:06:38 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
00:08:34 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
00:08:43 werneta joins (~werneta@syn-071-083-160-242.res.spectrum.com)
00:11:30 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
00:15:10 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:19:23 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
00:19:23 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
00:19:33 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
00:20:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
00:21:09 × califax quits (~califax@user/califx) (Remote host closed the connection)
00:21:34 califax joins (~califax@user/califx)
00:29:58 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
00:32:36 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:37:02 × tv quits (~tv@user/tv) (Quit: derp)
00:37:03 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
00:37:27 × xff0x quits (~xff0x@2405:6580:b080:900:b00a:f648:5747:c396) (Ping timeout: 276 seconds)
00:46:20 tv joins (~tv@user/tv)
00:47:58 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:48:35 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
00:52:50 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
00:54:33 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
01:01:42 user363627 joins (~user@user/user363627)
01:03:40 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
01:03:50 × jumper149 quits (~jumper149@base.felixspringer.xyz) (Quit: WeeChat 4.4.2)
01:06:30 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:11:14 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
01:21:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:22:56 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
01:23:39 gmg joins (~user@user/gehmehgeh)
01:23:50 hgolden__ joins (~hgolden@204.152.216.122)
01:23:53 catties is now known as CatGPT
01:26:18 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
01:26:42 × hgolden_ quits (~hgolden@146.70.173.165) (Ping timeout: 265 seconds)
01:28:09 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Remote host closed the connection)
01:28:25 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
01:31:35 × yaroot quits (~yaroot@2400:4052:ac0:d901:1cf4:2aff:fe51:c04c) (Remote host closed the connection)
01:32:18 yaroot joins (~yaroot@2400:4052:ac0:d901:1cf4:2aff:fe51:c04c)
01:37:16 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:41:35 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
01:42:07 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds)
01:47:59 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 260 seconds)
01:52:38 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:55:13 × jc_nn quits (~jc@2803:c180:2003:5c33:6f77:c169:b2b:789f) (Quit: Leaving)
01:57:00 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
01:59:43 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
02:06:24 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Remote host closed the connection)
02:07:17 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
02:07:59 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:09:39 L29Ah joins (~L29Ah@wikipedia/L29Ah)
02:11:33 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
02:12:30 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
02:14:37 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Remote host closed the connection)
02:14:51 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
02:14:58 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
02:15:12 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
02:23:23 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:24:22 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
02:29:58 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
02:29:59 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
02:30:36 × mantraofpie quits (~mantraofp@user/mantraofpie) (Remote host closed the connection)
02:30:58 mantraofpie joins (~mantraofp@user/mantraofpie)
02:37:49 hgolden_ joins (~hgolden@204.152.216.106)
02:41:14 × hgolden__ quits (~hgolden@204.152.216.122) (Ping timeout: 260 seconds)
02:41:26 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:45:46 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
02:56:48 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:00:30 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
03:01:10 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:02:11 <markasoftware> how many bytes per character does a naive `String` actually use? There's some info online that claims 32 bytes per character, but my math works out to 40 bytes: (8) for the linked list constructor tag, (8) for ptr to char, (8) for char constructor tag, (4 padded to 8) for the char content, (8) for pointer to next linked list node. 8*5=40. Or does it somehow elide the char constructor tag?
03:06:29 <geekosaur> seems to me anything that would allow that would also elide the pointer to the char (i.e. inline it into the list constructor)… but it's not strict so neither one can happen
03:09:41 × haritz quits (~hrtz@user/haritz) (Ping timeout: 248 seconds)
03:12:11 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:12:14 <markasoftware> https://blog.johantibell.com/2011/06/memory-footprints-of-some-common-data.html clears up a lot of the details
03:12:15 haritz joins (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk)
03:14:04 × haritz quits (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) (Changing host)
03:14:04 haritz joins (~hrtz@user/haritz)
03:14:44 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
03:16:34 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:27:33 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:28:04 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
03:31:58 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:40:30 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
03:42:57 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:46:56 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 260 seconds)
03:47:33 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
03:49:14 gmg joins (~user@user/gehmehgeh)
03:53:39 × AlexZenon quits (~alzenon@178.34.161.119) (Ping timeout: 246 seconds)
03:54:36 × AlexNoo quits (~AlexNoo@178.34.161.119) (Ping timeout: 265 seconds)
03:54:54 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds)
03:56:51 × spew quits (~spew@155.133.15.121) (Quit: spew)
03:58:19 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:00:04 AlexNoo joins (~AlexNoo@178.34.150.78)
04:01:32 × td_ quits (~td@i53870902.versanet.de) (Ping timeout: 272 seconds)
04:02:45 td_ joins (~td@i5387091D.versanet.de)
04:03:19 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
04:06:42 AlexZenon joins (~alzenon@178.34.150.78)
04:09:13 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
04:11:59 AlexNoo_ joins (~AlexNoo@178.34.150.78)
04:13:45 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
04:13:52 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:15:14 × AlexNoo quits (~AlexNoo@178.34.150.78) (Ping timeout: 252 seconds)
04:18:31 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
04:30:32 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:32:03 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
04:32:15 × Nixkernal quits (~Nixkernal@52.131.63.188.dynamic.cust.swisscom.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
04:32:23 × alphazone quits (~alphazone@2.219.56.221) (Ping timeout: 255 seconds)
04:33:00 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
04:33:51 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 252 seconds)
04:34:57 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
04:40:09 × AlexZenon quits (~alzenon@178.34.150.78) (Ping timeout: 252 seconds)
04:40:46 AlexNoo joins (~AlexNoo@178.34.150.78)
04:41:00 × AlexNoo_ quits (~AlexNoo@178.34.150.78) (Ping timeout: 265 seconds)
04:43:16 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
04:45:55 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:50:26 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
04:50:43 AlexZenon joins (~alzenon@178.34.150.78)
04:51:32 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
04:56:15 × user363627 quits (~user@user/user363627) (Remote host closed the connection)
05:01:15 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:08:30 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
05:19:06 rosco joins (~rosco@60.53.5.183)
05:19:18 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:21:01 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
05:23:54 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
05:25:16 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
05:26:46 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
05:30:01 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
05:34:21 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
05:34:38 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:39:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
05:43:05 michalz joins (~michalz@185.246.207.221)
05:50:02 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:54:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
06:04:08 × kaskal quits (~kaskal@213-225-13-57.nat.highway.a1.net) (Ping timeout: 245 seconds)
06:05:24 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:10:02 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
06:13:30 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 276 seconds)
06:16:10 euleritian joins (~euleritia@dynamic-176-002-002-253.176.2.pool.telefonica.de)
06:19:57 × euleritian quits (~euleritia@dynamic-176-002-002-253.176.2.pool.telefonica.de) (Read error: Connection reset by peer)
06:20:47 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:20:56 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
06:21:05 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
06:25:23 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
06:27:03 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds)
06:27:49 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 265 seconds)
06:34:43 euleritian joins (~euleritia@176.2.145.170)
06:36:10 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:42:57 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
06:42:59 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
06:50:19 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
06:55:25 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:56:00 CiaoSen joins (~Jura@2a05:5800:47e:3300:ca4b:d6ff:fec1:99da)
06:59:04 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:00:01 × caconym quits (~caconym@user/caconym) (Quit: bye)
07:00:39 caconym joins (~caconym@user/caconym)
07:03:13 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
07:03:22 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
07:06:26 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 248 seconds)
07:08:28 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
07:14:17 × euleritian quits (~euleritia@176.2.145.170) (Read error: Connection reset by peer)
07:14:36 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
07:15:08 Noinia joins (~Frank@77-162-168-71.fixed.kpn.net)
07:17:24 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:18:18 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:20:16 acidjnk_new joins (~acidjnk@p200300d6e7283f47c4b62c6ffe9eb9d8.dip0.t-ipconnect.de)
07:21:08 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
07:21:42 euleritian joins (~euleritia@dynamic-176-006-134-175.176.6.pool.telefonica.de)
07:21:54 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
07:26:15 alphazone joins (~alphazone@2.219.56.221)
07:26:44 × euleritian quits (~euleritia@dynamic-176-006-134-175.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
07:27:02 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
07:27:03 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:27:22 takuan joins (~takuan@178-116-218-225.access.telenet.be)
07:27:39 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
07:32:30 × AlexZenon quits (~alzenon@178.34.150.78) (Ping timeout: 252 seconds)
07:32:46 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:36:30 AlexZenon joins (~alzenon@178.34.150.78)
07:36:31 × werneta quits (~werneta@syn-071-083-160-242.res.spectrum.com) (Remote host closed the connection)
07:38:00 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
07:40:10 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
07:40:21 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
07:43:08 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
07:44:24 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
07:44:29 Lord_of_Life_ is now known as Lord_of_Life
07:45:44 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
07:48:09 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:52:16 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
07:52:55 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds)
07:56:25 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
07:59:29 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
08:03:15 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
08:04:05 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
08:06:30 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
08:07:49 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
08:08:01 sord937 joins (~sord937@gateway/tor-sasl/sord937)
08:08:46 × ft quits (~ft@p4fc2a216.dip0.t-ipconnect.de) (Quit: leaving)
08:09:39 × acidjnk_new quits (~acidjnk@p200300d6e7283f47c4b62c6ffe9eb9d8.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
08:15:36 acidjnk_new joins (~acidjnk@p200300d6e7283f47c4b62c6ffe9eb9d8.dip0.t-ipconnect.de)
08:16:04 Square2 joins (~Square4@user/square)
08:17:12 jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
08:17:42 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
08:18:33 alp joins (~alp@2001:861:e3d6:8f80:f60c:ddc9:c66e:3f2c)
08:23:29 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
08:26:25 mantraofpie_ joins (~mantraofp@user/mantraofpie)
08:27:31 × mantraofpie quits (~mantraofp@user/mantraofpie) (Ping timeout: 260 seconds)
08:29:05 × rosco quits (~rosco@60.53.5.183) (Quit: Lost terminal)
08:37:03 ljdarj joins (~Thunderbi@user/ljdarj)
08:37:34 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
08:43:02 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 255 seconds)
08:44:01 chele joins (~chele@user/chele)
08:52:33 × acidjnk_new quits (~acidjnk@p200300d6e7283f47c4b62c6ffe9eb9d8.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
08:57:05 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
09:00:47 merijn joins (~merijn@77.242.116.146)
09:01:59 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
09:03:48 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 252 seconds)
09:05:33 <probie> markasoftware: Under ideal circumstances, less than one byte per character
09:06:53 <probie> `repeat 'a'` uses finite space for a non-finite string, so the "average" numbers of bytes per character is 0 :p
09:08:24 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:14:56 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
09:19:27 laxmik joins (~laxmik@ip-109-40-177-194.web.vodafone.de)
09:20:18 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
09:21:13 × laxmik quits (~laxmik@ip-109-40-177-194.web.vodafone.de) (Client Quit)
09:21:23 <tomsmeding> markasoftware: also, string _literals_ in your haskell source are compiled to some `base` function applied to a C string. So literal strings are stored as compactly as C would store them (with perhaps a single pointer as overhead), and are converted to linked-list nodes on demand
09:22:24 mari-estel joins (~mari-este@user/mari-estel)
09:24:54 lxsameer joins (~lxsameer@Serene/lxsameer)
09:25:20 kaskal joins (~kaskal@213-147-165-220.nat.highway.webapn.at)
09:26:04 igemnace_ joins (~igemnace@user/igemnace)
09:26:10 × igemnace quits (~igemnace@user/igemnace) (Ping timeout: 252 seconds)
09:27:56 igemnace_ is now known as igemnace
09:29:19 <ash3en> in attoparsec, how would I split an input in 4 bytes until the end of input/less than 4 bytes left?
09:31:10 Inst joins (~Inst@user/Inst)
09:31:12 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Remote host closed the connection)
09:31:13 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds)
09:31:32 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
09:31:34 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
09:31:52 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
09:34:47 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
09:34:57 euleritian joins (~euleritia@dynamic-176-006-132-151.176.6.pool.telefonica.de)
09:35:17 <merijn> tomsmeding: eh, that statement needs a bunch of asterisks :p
09:35:40 <merijn> tomsmeding: In that C specifies no encodings for "strings" at all, and GHC stores strings in a very specific encoding :p
09:35:59 <merijn> (which used to be something other than UTF-8 for historical reasons, but I dunno if that changes since I last looked)
09:36:36 <tomsmeding> fair point
09:36:42 <merijn> But yeah, String literals are stored as dense binary blobs that are lazily decoded into Haskells linked list format "on-demand"
09:37:01 <tomsmeding> fairly sure it's UTF-8 now, and also if you store the string in a variable, `length` it or something, and then use it again, you materialise the linked-list repr
09:37:45 <merijn> I know there was some work on using utf-8, but god knows if that landed yet
09:37:56 <merijn> It's also mostly irrelevant for 90% of users
09:38:40 <tomsmeding> a Core dump of `putStrLn "hello"` shows `GHC.CString.unpackCStringUtf8#` being used
09:38:47 <Maxdamantus> I would guess they'd use UTF-32 but selecting 8-bit, 16-bit or 32-bit storage units depending on `maximum . map fromEnum`
09:39:03 <Maxdamantus> (like CPython does)
09:39:06 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
09:39:11 <merijn> Maxdamantus: That sounds dumb as hell, tbh
09:39:45 <tomsmeding> and if I put some non-ascii chracters in the string, they end up as UTF-8 bytes in the Core
09:39:54 <tomsmeding> so merijn seems that work has landed :)
09:40:16 <Maxdamantus> Well, strings in Python and Haskell are dumb as hell, and I think the CPython representation is a fairly reasonable one given that nasty model.
09:40:44 <tomsmeding> and this pattern is the same back to 8.4.4, the earliest I have around to test on right now (though the name of the function changes a bit between versions)
09:40:57 <merijn> Maxdamantus: I think strings in Haskell are about as well as you can do
09:41:10 <Maxdamantus> imo Unicode strings would be better.
09:41:12 <merijn> i.e. having lots of different string types for specific usecase
09:41:14 <Maxdamantus> (ie, UTF-8 strings)
09:41:22 <Maxdamantus> (ie, 8-bit sequences)
09:41:25 × euleritian quits (~euleritia@dynamic-176-006-132-151.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
09:41:27 <tomsmeding> Text?
09:41:31 <merijn> That's Text
09:41:37 <tomsmeding> that's UTF-8 these days
09:41:42 <merijn> also, UTF-8 != 8 bit sequences
09:41:42 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
09:41:44 <Maxdamantus> Text isn't any standard Unicode string.
09:41:54 <Maxdamantus> Text is for sequences of Unicode Scalar Values, which is different.
09:42:16 <merijn> Maxdamantus: If you want raw unicode bytes then ByteString
09:42:31 <Maxdamantus> a standard "Unicode string" should be a sequence of either UTF-8, UTF-16 or UTF-32 code units (pick one, but I'd recommend UTF-8)
09:42:39 <merijn> Ancient hot-take: We should turn ByteString into a type alias and rename the type Bytes
09:43:01 <Maxdamantus> (where a code unit is just any integer with that designated width)
09:43:08 <merijn> Maxdamantus: You can get those easily via both ByteString and Storable Vector
09:43:40 <Maxdamantus> merijn: sure, but then they don't appear to be "strings" to most users.
09:44:11 <tomsmeding> Maxdamantus: do you want a string type that can simultaneously be seen as a sequence of bytes in UTF-8 and as a sequence of unicode scalar values?
09:44:16 <tomsmeding> trying to parse what you are saying
09:44:49 <Maxdamantus> tomsmeding: I want a standard Unicode string using UTF-8.
09:44:56 <tomsmeding> what is a "standard Unicode string"
09:45:02 <tomsmeding> what is that what Text is not
09:45:06 <Maxdamantus> tomsmeding: the UTF-8 variant is a byte sequence.
09:45:18 <Maxdamantus> tomsmeding: Text doesn't allow representation of ill-formed Unicode strings.
09:45:23 <merijn> Maxdamantus: You are aware not not every byte sequence is UTF-8, yes?
09:45:23 <tomsmeding> how is what you are saying different from what I just asked?
09:45:58 <Maxdamantus> merijn: I'm aware that not every UTF-8 Unicode string is well-formed (aka "in UTF-8")
09:46:38 <Maxdamantus> tomsmeding: I dunno. It's hard to parse what you asked.
09:46:53 <Maxdamantus> If you read Unicode chapter 3, it explains what a Unicode string is.
09:46:54 <tomsmeding> I'm finding it equally hard to parse what you are saying, and I'm not sure whose fault it is :p
09:47:16 <Maxdamantus> and in particular, Unicode chapter 3 will talk about ill-formed Unicode strings and the fact that you can still do sensible operations on them.
09:47:40 <Maxdamantus> eg, concatenating ill-formed strings to create well-formed strings, a concept that is not possible with `Text`
09:47:45 <merijn> Maxdamantus: That's not something that MOST programmers want, though
09:47:55 <merijn> Maxdamantus: And you can still do it relatively easily
09:48:00 <tomsmeding> I see
09:48:33 <merijn> Maxdamantus: Text will *happily* let you rip the raw bytes out of one
09:48:38 <Maxdamantus> merijn: I'd argue that most programmers do want that implicitly.
09:48:48 <tomsmeding> yeah I strongly suspect that Haskell's model of "you either have a sequence of unstructured bytes (to be later interpreted into something else), or a well-formed unicode string" matches what you need in practice quite precisely
09:48:53 <Maxdamantus> merijn: since otherwise programs will randomly fail when you given them ill-formed Unicode.
09:49:12 × mari-estel quits (~mari-este@user/mari-estel) (Remote host closed the connection)
09:49:19 <Maxdamantus> and fundamentally there's nothing to stop ill-formed Unicode from occurring (particularly ill-formed UTF-8)
09:49:21 <merijn> Maxdamantus: I mean, that's why you parse first
09:49:41 <tomsmeding> in what situation would you want ill-formed UTF8 in a string?
09:49:46 <Maxdamantus> merijn: have all the filenames in my filesystem been parsed before they reach Haskell?
09:49:48 <tomsmeding> as a "user"
09:49:51 <merijn> Maxdamantus: You'd normally get input (from disk/network) as ByteString and decode to Text, and the handling off ill-formed unicode is handled in the decode
09:50:02 <merijn> Maxdamantus: I mean, that question is screwed anyway
09:50:05 <Maxdamantus> tomsmeding: head -c 10 somefile.txt
09:50:14 <merijn> Maxdamantus: Because file names are not unicode at all
09:50:24 <tomsmeding> well `head` should not assume that either the file name, or the file's contents, are in any particular encoding whatsoever
09:50:30 <merijn> Maxdamantus: That head example is solved by doing things properly
09:50:31 <tomsmeding> that's little to do with unicode :p
09:50:31 <Maxdamantus> tomsmeding: exactly.
09:50:39 <merijn> Maxdamantus: That is, do IO in ByteString, then convert to unicode
09:50:47 <Maxdamantus> tomsmeding: so `head` should not be responsible for ensuring the output is well-formed Unicode.
09:50:47 <tomsmeding> that should not even be an "ill-formed unicode string", it should just be a byte sequence
09:51:02 <tomsmeding> ByteString is the right model for that, not IllFormedText
09:51:04 <Maxdamantus> tomsmeding: but should the Haskell program crash because it's been given such a string?
09:51:12 <tomsmeding> no, because it uses ByteString, not Text
09:51:15 <merijn> Maxdamantus: No, and they won't if you do it properly
09:51:19 <tomsmeding> the program should make no assumptions about what's in there
09:51:31 <merijn> Maxdamantus: You read ByteString and then decode to text
09:51:39 <Maxdamantus> "do it properly" is hard to get right when you're telling people to use `ByteString` for textual data.
09:51:43 <tomsmeding> now, something like `wc` will need to make assumptions because it handles certain characters specially
09:51:46 <Maxdamantus> Unicode was designed to cater to these sorts of things.
09:52:01 <merijn> Maxdamantus: No, I'm saying "do IO with ByteString and decode to Text *then* do whatever you want"
09:52:13 <tomsmeding> what is a "code unit" in the unicode spec?
09:52:13 <Maxdamantus> Having a crappy restricted string type just ignores these design points from Unicode.
09:52:17 <merijn> Maxdamantus: Text's decoding functions handle ill-formed unicode fine
09:52:27 <merijn> See, e.g. lenientDecode
09:52:30 <Maxdamantus> tomsmeding: in UTF-8 it's a byte.
09:52:58 <merijn> Or the `replace` and `ignore` decoders
09:53:20 <merijn> Maxdamantus: ok, but explain how these problems aren't solved by just "read as bytestring and decode", which is how you're supposed to do it
09:53:30 <tomsmeding> the spec points to D92 for the definition of "code unit" for UTF8, but then "code unit" doesn't appear in D92
09:54:17 <tomsmeding> ok but generalising from D91 about UTF16 does imply that it would be a byte for UTF8
09:55:16 <Maxdamantus> It says that it specifies what a UTF-8 code unit sequence is in D92, which it does specify.
09:56:33 <tomsmeding> Maxdamantus: "code unit" does not appear in D92?
09:56:52 <Maxdamantus> tomsmeding: no, because D92 is about the interpretation of code unit sequences.
09:57:28 <Maxdamantus> tomsmeding: D78 gives a general meaning of a "code unit sequence": "An ordered sequence of one or more code units"
09:57:37 <Maxdamantus> > hen the code unit is an 8-bit unit, a code unit sequence may also be referred
09:57:38 <Maxdamantus> to as a byte sequence
09:57:38 <lambdabot> <hint>:1:35: error: parse error on input ‘,’
09:59:23 <tomsmeding> I see
09:59:27 <Maxdamantus> imo Go is an example of a relatively recent language that has at least got strings right.
09:59:52 <Maxdamantus> and the core developers there also obviously had a lot to do with inventing UTF-8.
10:00:00 <tomsmeding> I guess merijn and I are just not convinced how useful it is to a programmer to have a string type available that allows unicode operations on potentially ill-formed unicode
10:00:30 <Maxdamantus> you basically just have one string type, so developers aren't having to figure out exactly what their strings are going to be used for.
10:00:56 <Maxdamantus> Go programs are unlikely to crash if you give them a truncated string, or a filename in some other encoding.
10:00:57 <tomsmeding> haskell likes to split things out more, and indicate in types exactly what you are or are not supposed to do with a thing
10:01:22 <Maxdamantus> right, but with strings you can't be too specific.
10:01:41 <Maxdamantus> if you're trying to be specific, you might have different types for English text and Arabic text.
10:01:56 <Maxdamantus> or different types for sentences and words.
10:02:07 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
10:02:13 <Maxdamantus> or different types for sentences and filenames.
10:02:14 <merijn> tomsmeding: I am convinced being able to handle ill-formed unicode is useful
10:02:28 <merijn> I disagree that it is the right default and that it's not possible in Haskell right now
10:02:44 <merijn> It is *obviously* the wrong default and doing what Maxdamantus is trivial in Haskell
10:02:47 <tomsmeding> merijn: how would you handle ill-formedu unicode in haskell?
10:02:54 <Maxdamantus> I find it hard to see why it's useful for it not to be the default.
10:03:01 <tomsmeding> lenient conversion to Text forgets information about the ill-formed bytes
10:03:03 <merijn> tomsmeding: Like I said, bytestring + decode
10:03:28 <Maxdamantus> If you're disallowing ill-formed strings by default, you're just making it so your program has random crashes or other branching behaviour that you need to reason about.
10:03:38 <merijn> Maxdamantus: Because 99% of program logic considers ill-formed unicode an input or output error
10:03:49 <merijn> Maxdamantus: Why do you say crash?
10:04:01 <merijn> Maxdamantus: Why would a Haskell program crash on encountering ill-formed unicode
10:04:06 <tomsmeding> Maxdamantus: that's a weak argument: what should (!!) do on ill-formed unicode?
10:04:12 <tomsmeding> error?
10:04:20 <tomsmeding> then we've replaced errors in one place with errors in another place
10:04:49 <merijn> For 99% of code if you get ill-formed unicode someone already fucked up somewhere. So you wanna handle that at the program boundary
10:04:59 <tomsmeding> (or the equivalent of (!!) on whatever the UnicodeString type would be)
10:05:13 <tomsmeding> the 1% is not 0% though
10:05:22 <tomsmeding> but if you're in the 1%, you typically know
10:05:33 <Maxdamantus> tomsmeding: !! should probably be split out into separate operators depending on what you're actually trying to index.
10:05:51 <tomsmeding> well, take the one that is supposed to return a unicode scalar
10:06:19 <Maxdamantus> tomsmeding: but in general the natural way to index strings would be by code units, since that's the most memory-efficient and the least prone to misuse.
10:06:46 <merijn> I still haven't gotten an answer to why a Haskell program would supposedly crash on encountering ill-formed unicode
10:06:47 <Maxdamantus> ("misuse" meaning doing things like pretending that it makes sense to select individual code points from a string)
10:07:10 <tomsmeding> ok, then what would `length` return?
10:07:56 <Maxdamantus> $ ghci hello$'\xff'.hs
10:07:57 <Maxdamantus> GHCi, version 9.4.7: https://www.haskell.org/ghc/ :? for help
10:07:57 <Maxdamantus> <no location info>: error: recoverEncode: invalid argument (cannot encode character '\56575')
10:08:07 <Maxdamantus> merijn: so why does that crash?L
10:08:16 <tomsmeding> can I roughly reduce what you say to "there should be icu-style toLower methods on ByteStrings"?
10:09:12 <Maxdamantus> tomsmeding: I think having separate types for strings vs. binary data is fine for semantic reasons, but they should be representationally equivalent, and ICU-style methods would make sense on strings.
10:09:36 <Maxdamantus> note that ICU strings are indeed code unit sequences (either 8-bit or 16-bit, and maybe 32-bit but not sure)
10:09:51 hgolden__ joins (~hgolden@146.70.173.165)
10:09:53 <tomsmeding> what does ICU-style toLower do on invalid unicode?
10:10:17 <Maxdamantus> I'd expect the obvious behaviour would be to preserve it, but I'd have to look it up.
10:11:07 <merijn> Maxdamantus: Because the filename API is a fucking mess and it was being worked on with a proper platform portable API, but until that gets wider adoption you're hosed
10:11:22 <merijn> Maxdamantus: The filename API being broken does not mean the approach to strings is broken
10:11:30 <Maxdamantus> I'd say either preserving it or doing the replacement would be acceptable in that case, since it's processing the string, though my preference would be to preserve errors where possible.
10:12:01 <Maxdamantus> merijn: if strings were sequences of bytes, filenames would probably just be strings and we wouldn't have this issue.
10:12:16 <merijn> Maxdamantus: Except that is ALSO wrong
10:12:21 × hgolden_ quits (~hgolden@204.152.216.106) (Ping timeout: 252 seconds)
10:12:35 <merijn> Maxdamantus: Because on Windows and (sorta, it's complicated) on macOS they *are* unicode sequences and not bytes
10:12:38 <Maxdamantus> imo WTF-8 should be used for translating Windows filenames on-the-fly.
10:12:53 <merijn> Maxdamantus: That is incorrect, though
10:13:01 <merijn> Maxdamantus: Windows filenames have a defined encoding
10:13:31 <Maxdamantus> merijn: Windows filenames are UTF-16 strings, ie sequences of 16-bit code units.
10:13:49 <merijn> Maxdamantus: Right, which means that a file API that excepts bytes is wrong
10:13:58 <Maxdamantus> merijn: they don't have a well-defined encoding on top of that (they're not guaranteed to be well-formed UTF-16)
10:14:01 <merijn> Maxdamantus: Also, that is incorrect
10:14:11 <Maxdamantus> merijn: which part?
10:14:17 <merijn> Maxdamantus: There are defined normalisations for windows filenames
10:14:18 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
10:14:31 <merijn> So it's not just "pass arbitrary UTF-16"
10:14:41 <merijn> it's pass UTF-16 with specific normalisations
10:14:52 <Maxdamantus> merijn: dunno what that means, but I'm 99.99% sure that "\uD800.txt" is a valid filename in Windows.
10:15:04 <Maxdamantus> (where "\uD800" is a lone UTF-16 surrogate)
10:15:45 <merijn> Maxdamantus: Anyway, the solution to that whole story is maerwald's baby (which is a properly type-safe way of representing names in a platform specific way)
10:15:52 turlando joins (~turlando@user/turlando)
10:17:53 <Maxdamantus> merijn: when you say "UTF-16 with specific normalisations", are you thinking about macOS? I know that macOS does specific normalisations on filenames.
10:18:40 <Maxdamantus> (though I'm pretty sure Apple regard that as a mistake—I think they've undone that at some level in APFS)
10:18:57 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
10:19:37 <Maxdamantus> anyway, imo it's not worth complicating the string type for Windows, since all these UTF-16 systems are kind of obsolete anyway.
10:19:58 <Maxdamantus> WTF-8 allows you to translate at the boundary in a way that caters to these historical mistakes.
10:20:41 <Square2> Iirc, I listened to a podcast, some 2-3 years ago, where they interviewed a woman who's job it was to onboard companies to Haskell. Like not so much technical but more business oriented in how Haskell industry worked / recruiting etc. Can't seem to find it now though. Sounds like Haskell foundation thing maybe, but when looking at their webpage I can't find anyone having the role this woman had.
10:20:50 <Maxdamantus> chances are Windows will eventually switch at some point too, so it will seem particularly messy when you've got a separate type for "Windows filenames" that doesn't actually apply specifically to Windows.
10:20:50 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
10:21:01 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
10:21:47 <haskellbridge> <maerwald> Maxdamantus: huh?
10:22:01 <haskellbridge> <maerwald> WTF-8 is a private encoding that is not exposed to the user
10:22:21 <haskellbridge> <maerwald> it's irrelevant for the rust API
10:22:46 <haskellbridge> <maerwald> Maxdamantus: no, absolute nonsense... windows API has insane backwards compat
10:23:23 <Maxdamantus> haskellbridge: maerwald: yeah, I guess I'm slightly more lenient than the WTF-8 spec in that regard, probably because I disagree with strings in Rust too (which is where WTF-8 is invented).
10:23:57 <haskellbridge> <maerwald> there are ascii and wide char variants of almost all the api
10:24:00 <haskellbridge> <maerwald> https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea
10:24:06 <haskellbridge> <maerwald> https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew
10:24:29 <haskellbridge> <maerwald> if they'd switch to something else, they will not break anything for sure
10:24:57 <Maxdamantus> maerwald: they can always reject certain filenames, which they already do.
10:25:15 <haskellbridge> <maerwald> no, that depends on how you use the api
10:27:01 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 248 seconds)
10:27:07 <Maxdamantus> maerwald: are there not special characters that are impossible to use in filenames, like quotes or something? I know there are names like "con" that are rejected at a higher level but are still allowed using some lower-level APIs.
10:27:39 <Maxdamantus> actually, I think some of those filenames are still special at a lower level.
10:27:48 <haskellbridge> <maerwald> see https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#skip-normalization
10:27:48 Maxdamantus can't be bothered starting up his Windows VM to test.
10:28:21 <haskellbridge> <maerwald> idk why I spent so much of my free time on filepaths... lmao
10:29:07 <haskellbridge> <maerwald> windows is a maze of historical api
10:29:16 <haskellbridge> <maerwald> they don't break anything
10:29:22 <haskellbridge> <maerwald> and it grows forever
10:29:36 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
10:29:56 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
10:30:19 <Rembane> It's quite fascinating that way, and somewhat of a cosmic horror
10:30:41 <Maxdamantus> Should have just stuck with bytes, like Unix did.
10:30:49 <Maxdamantus> UCS-2 .. oops
10:30:56 <haskellbridge> <maerwald> yes it is bytes
10:31:07 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
10:31:09 <Maxdamantus> well, it's 16-bit units.
10:31:21 <haskellbridge> <maerwald> yes, wide char pointers
10:31:47 <Maxdamantus> since I can create a filename like "\uD800.txt" in Windows, not sure what happens if you list that file using the *a functions.
10:31:51 <haskellbridge> <maerwald> LPCWSTR
10:31:56 <Maxdamantus> (feel free to explain what happens, if you know)
10:32:14 <haskellbridge> <maerwald> https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/76f10dd8-699d-45e6-a53c-5aefc586da20
10:32:55 <haskellbridge> <maerwald> no idea, never used the *a variants and the haskell Win32 package uses the *w variants
10:33:04 <haskellbridge> <maerwald> and that's what the ecosystem depends on
10:33:41 <haskellbridge> <maerwald> I have no idea how they got brick to work on windows
10:33:43 <haskellbridge> <maerwald> lol
10:33:54 acidjnk_new joins (~acidjnk@p200300d6e7283f475911645e2836b524.dip0.t-ipconnect.de)
10:34:00 <haskellbridge> <maerwald> would have expected an absolute clusterf*ck regarding input/encoding and whatnot
10:34:10 <Maxdamantus> actually presumably with the *a variants it should translate the filenames according to the current locale/encoding? eg, CP-1252 or ISO-8859-1 or something?
10:34:31 <Maxdamantus> iirc from utf8everywhere they essentially have a locale where it translates to UTF-8 instead.
10:34:50 <Maxdamantus> maybe the optimal thing would be for them to have a locale where it translates to WTF-8.
10:37:02 <merijn> maerwald: You spent all the free time so we don't have to
10:37:15 <haskellbridge> <maerwald> pff
10:37:18 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
10:37:31 <merijn> And I, for one, appreciate the sacrifice of your sanity ;)
10:38:14 Digitteknohippie joins (~user@user/digit)
10:38:49 × Digit quits (~user@user/digit) (Ping timeout: 260 seconds)
10:38:58 <haskellbridge> <maerwald> that will bring us forward a bit https://github.com/commercialhaskell/stackage/issues/7550
10:40:45 <Square2> What is the status of Haskell and Windows btw? Is it possible to work with it properly?
10:41:06 <ash3en> Square2: 50/50 chance I'd say
10:41:19 <ash3en> WSL was my bet until I switched back to Linux again
10:41:31 <Square2> ash3en, doesn't sound to reassuring. =/
10:41:31 sawilagar joins (~sawilagar@user/sawilagar)
10:41:36 <Square2> too*
10:42:10 Maxdamantus has recently been figuring out how to use Windows for work.
10:42:26 <haskellbridge> <maerwald> Square2: no native toolchain... still depends on mingw
10:42:32 <haskellbridge> <maerwald> but works ok
10:42:57 × CiaoSen quits (~Jura@2a05:5800:47e:3300:ca4b:d6ff:fec1:99da) (Ping timeout: 248 seconds)
10:43:24 <haskellbridge> <maerwald> and there's a pesky posix compat layer in the GHC RTS that unifies across unix and windows
10:43:42 <haskellbridge> <maerwald> the new windows io manager ought to fix that, but I'm not sure how stable it is
10:43:48 <Maxdamantus> the environment I'm using is a bit restrictive, so can't use arbitrary things like msys2, though git bash and WezTerm are allowed.
10:43:52 <haskellbridge> <maerwald> RTS option --io-manager=native I believe
10:43:58 <Square2> maerwald, I'd hoped WSL solve all problems
10:44:10 <haskellbridge> <maerwald> SPJ uses that
10:44:36 Digitteknohippie is now known as Digit
10:44:43 <Maxdamantus> (preferably I'd install tmux through msys2, since WezTerm seems to be extremely slow, but can't figure out another decent way to get tabbed terminals)
10:44:50 <Square2> maerwald: WSL?
10:44:59 <haskellbridge> <maerwald> WSL2
10:45:04 <Square2> gotcha
10:45:08 rosco joins (~rosco@60.53.5.183)
10:45:15 <haskellbridge> <maerwald> WSL1 is unusable afair
10:47:31 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 264 seconds)
10:47:53 <ash3en> WSL2 did good for me with Haskell
10:48:36 <ash3en> it were other things than haskell that drove me back from Windows again :D
10:52:53 × Digit quits (~user@user/digit) (Ping timeout: 244 seconds)
10:55:08 <tomsmeding> WSL2 works fine for haskell
11:00:05 × caconym quits (~caconym@user/caconym) (Quit: bye)
11:02:18 caconym joins (~caconym@user/caconym)
11:02:30 <ash3en> may i ask this again since it was buried in the discussion earlier I guess: in attoparsec, how would I split an input in 4 bytes until the end of input/less than 4 bytes left?
11:04:08 <ash3en> i want to get a list with all 4 byte-pairs, don't need to decode them
11:05:43 <Rembane> ash3en: Do you know how to read 4 bytes using attoparsec?
11:05:46 Rembane is socratic
11:05:56 <ash3en> take 4
11:06:02 <ash3en> i think
11:07:07 <ash3en> combined with many was my first thought. but stopping it was not successfull so far
11:07:13 <ash3en> many'
11:08:24 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
11:09:15 <Rembane> ash3en: If you have a list of 4 byte chunks, and that list is called xs, you can go: zip xs (tail xs)
11:10:30 <Rembane> Or maybe the tail goes on the other argument... hm...
11:11:43 <ash3en> problem is to create these list with take and many. it does not stop on time (when eof is reached or less than 4 byte left)
11:13:13 <Rembane> Got it!
11:13:35 <Rembane> ash3en: What functions/combinators are you using to get 4 bytes?
11:13:49 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds)
11:15:02 <ash3en> i have no problem to figure it out myself with a few hints/best practices : )
11:15:02 <ash3en> for now i use "take 4". just want to repeat this using sth like many but with a conditiion -- to maybe lookAhead and count bytes? -- if there are less than 4 left or EOF give back the result. all that with performance in mind
11:15:31 <ash3en> Attoparsec's take it is
11:15:33 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
11:21:00 zetef joins (~quassel@5.14.132.142)
11:21:00 × zetef quits (~quassel@5.14.132.142) (Client Quit)
11:21:50 <Rembane> Let me rephrase this to see if I understand it, is the problem that many (take 4) will throw away the last fewer than 4 bytes?
11:24:17 <mauke> :t unfoldr (\s -> if BS.length s < 4 then Nothing else Just (BS.splitAt 4 s))
11:24:18 <lambdabot> BSC.ByteString -> [BSC.ByteString]
11:24:42 <mauke> > unfoldr (\s -> if BS.length s < 4 then Nothing else Just (BS.splitAt 4 s)) "\1\2\3\4\5\6\7"
11:24:44 <lambdabot> error:
11:24:44 <lambdabot> • Couldn't match expected type ‘BSC.ByteString’
11:24:44 <lambdabot> with actual type ‘[Char]’
11:25:33 <mauke> > unfoldr (\s -> if BS.length s < 4 then Nothing else Just (BS.splitAt 4 s)) (BSC.pack "\1\2\3\4\5\6\7")
11:25:34 <lambdabot> ["\SOH\STX\ETX\EOT"]
11:26:41 merijn joins (~merijn@77.242.116.146)
11:28:12 <ash3en> Rembane: it results in a "Partial _" this way: many' (take 4)
11:30:14 <Rembane> ash3en: Cool, I think mauke has a reasonable solution. :)
11:30:53 <mauke> very much not using attoparsec, though
11:30:57 <ash3en> Ah! oversaw that! mauke, I will try!
11:31:14 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
11:32:33 <ash3en> maybe I don't need attoparsec after all, but I probably will keep using it for convenience now
11:33:07 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 264 seconds)
11:33:16 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
11:35:42 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
11:45:32 merijn joins (~merijn@77.242.116.146)
11:45:34 L29Ah joins (~L29Ah@wikipedia/L29Ah)
11:50:31 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
11:52:09 × alphazone quits (~alphazone@2.219.56.221) (Ping timeout: 276 seconds)
11:55:36 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
12:00:14 CiaoSen joins (~Jura@2a05:5800:47e:3300:ca4b:d6ff:fec1:99da)
12:01:08 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
12:03:20 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
12:03:50 rvalue joins (~rvalue@user/rvalue)
12:06:43 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 264 seconds)
12:07:39 Digit joins (~user@user/digit)
12:18:52 <tomsmeding> ash3en: that "Partial" suspiciously sounds like you need to tell attoparsec that your end-of-string is really EOF and there is not more data coming
12:19:29 <tomsmeding> ash3en: see the docs for parseOnly, perhaps?
12:20:01 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
12:20:15 <tomsmeding> the docs for 'try' are also relevant, and specifically the part where it says that 'try' is unnecessary because attoparsec always backtracks (try = id)
12:20:22 <tomsmeding> that is to say, many (take 4) should be exactly the thing you want
12:20:35 srazkvt joins (~sarah@user/srazkvt)
12:24:21 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
12:26:34 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
12:27:43 <ash3en> it is parseOnly indeed!
12:28:57 <ash3en> thanks again tomsmeding, mauke and Rembane. better tag geekosaur too just because.
12:29:21 alphazone joins (~alphazone@2.219.56.221)
12:29:47 merijn joins (~merijn@77.242.116.146)
12:30:50 SlackCoder joins (~SlackCode@208.26.70.132)
12:31:12 × SlackCoder quits (~SlackCode@208.26.70.132) (Client Quit)
12:37:30 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
12:38:46 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:49:10 × dilaver_ quits (~dilaver_@user/dilaver-:32218) (Quit: The Lounge - https://thelounge.chat)
12:50:24 petrichor joins (~znc-user@user/petrichor)
12:50:45 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
12:53:50 dilaver_ joins (~dilaver_@user/dilaver-:32218)
12:54:49 xff0x joins (~xff0x@2405:6580:b080:900:dd4:7391:684:d55b)
12:55:56 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds)
12:58:37 madhavanmiui joins (~madhavanm@2409:40f4:3015:fc89:8000::)
12:58:40 × madhavanmiui quits (~madhavanm@2409:40f4:3015:fc89:8000::) (Client Quit)
13:03:22 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
13:08:24 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
13:09:08 ljdarj joins (~Thunderbi@user/ljdarj)
13:10:11 × acidjnk_new quits (~acidjnk@p200300d6e7283f475911645e2836b524.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
13:13:18 × CiaoSen quits (~Jura@2a05:5800:47e:3300:ca4b:d6ff:fec1:99da) (Ping timeout: 246 seconds)
13:13:18 stef204 joins (~stef204@user/stef204)
13:14:39 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
13:14:47 × jrm quits (~jrm@user/jrm) (Ping timeout: 265 seconds)
13:17:29 × paul_j quits (~user@8.190.187.81.in-addr.arpa) (Read error: Connection reset by peer)
13:17:44 paul_j joins (~user@8.190.187.81.in-addr.arpa)
13:19:14 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
13:19:34 dyniec joins (~dyniec@dybiec.info)
13:19:47 × stef204 quits (~stef204@user/stef204) (Quit: WeeChat 4.2.1)
13:24:46 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
13:25:27 sadmax joins (~user@64.130.91.66)
13:25:39 jrm joins (~jrm@user/jrm)
13:33:05 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
13:35:49 Digitteknohippie joins (~user@user/digit)
13:36:07 × Digit quits (~user@user/digit) (Ping timeout: 264 seconds)
13:39:35 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 255 seconds)
13:45:43 acidjnk_new joins (~acidjnk@p200300d6e7283f47b0bede14811a4453.dip0.t-ipconnect.de)
13:46:39 × sadmax quits (~user@64.130.91.66) (Ping timeout: 260 seconds)
14:03:59 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
14:05:25 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Remote host closed the connection)
14:05:44 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
14:07:52 weary-traveler joins (~user@user/user363627)
14:08:30 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
14:09:55 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
14:10:53 <probie> What's the lowest effort library for doing a GUI for a board game/card game without any "art" beyond simple polygons? I was considering threepenny or possibly even codeworld, but I was wondering if anything else is popular these days
14:12:33 <geekosaur> gloss?
14:14:17 user363627 joins (~user@user/user363627)
14:14:40 <tomsmeding> gloss is low-effort enough that it gets given to students in an introductory haskell course to write a simple game in
14:14:48 <tomsmeding> (at our uni)
14:15:42 <tomsmeding> probie: ^
14:16:34 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
14:16:36 <probie> In 2012 (well technically 2011), I wrote an assignment for students at my old university using gloss, so it's certainly not unfamiliar territory. I think I'd just assumed it was a dead and stale project by now
14:16:59 <tomsmeding> not sure if there's much new development, but it certainly still works
14:17:30 <EvanR> new policy, if a hackage package has no updates in 1 year it is removed. Like on google play
14:17:38 <EvanR> doesn't matter how working or useful it is
14:17:58 <EvanR> update or die
14:18:08 <tomsmeding> then I'm going to retroactively make playground pastes expire in a week
14:18:23 × weary-traveler quits (~user@user/user363627) (Ping timeout: 252 seconds)
14:19:18 Digitteknohippie is now known as Digit
14:28:51 × CrunchyFlakes quits (~CrunchyFl@ip1f13e94e.dynamic.kabel-deutschland.de) (Quit: ZNC 1.8.2 - https://znc.in)
14:34:01 CrunchyFlakes joins (~CrunchyFl@ip1f13e94e.dynamic.kabel-deutschland.de)
14:39:20 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
14:39:49 hgolden_ joins (~hgolden@169.150.203.10)
14:42:35 euleritian joins (~euleritia@dynamic-176-006-130-165.176.6.pool.telefonica.de)
14:42:43 × hgolden__ quits (~hgolden@146.70.173.165) (Ping timeout: 264 seconds)
14:45:23 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
14:46:34 × srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!)
14:46:42 <zero> ephemeral internet <3
14:47:12 <geekosaur> more like the (il)logical conclusion of "move fast, break stuff"
14:49:15 <zero> this tangentially reminds me of the Slow Web movement
14:49:26 <merijn> To be fair, gloss targets the extremely brittle and fast evolving GLUT and OpenGL APIs ;)
14:49:37 <merijn> So clearly those would break all the time!
14:49:51 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
14:50:12 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
14:54:08 sadmax joins (~user@64.130.91.66)
14:54:40 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
14:56:27 × euleritian quits (~euleritia@dynamic-176-006-130-165.176.6.pool.telefonica.de) (Ping timeout: 252 seconds)
14:56:38 <zero> gloss still works great, but it's somewhat limited. and 2D only
15:01:20 L29Ah joins (~L29Ah@wikipedia/L29Ah)
15:05:01 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
15:10:12 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
15:13:11 AlexNoo_ joins (~AlexNoo@178.34.150.252)
15:15:53 × AlexZenon quits (~alzenon@178.34.150.78) (Ping timeout: 255 seconds)
15:16:47 × AlexNoo quits (~AlexNoo@178.34.150.78) (Ping timeout: 255 seconds)
15:24:07 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
15:25:35 AlexZenon joins (~alzenon@178.34.150.252)
15:29:54 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 276 seconds)
15:30:16 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
15:30:57 merijn joins (~merijn@77.242.116.146)
15:36:08 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:37:29 AlexNoo_ is now known as AlexNoo
15:38:23 × Digit quits (~user@user/digit) (Ping timeout: 255 seconds)
15:40:48 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
15:42:15 × AlexZenon quits (~alzenon@178.34.150.252) (Ping timeout: 276 seconds)
15:42:46 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
15:46:37 AlexZenon joins (~alzenon@178.34.150.252)
15:48:14 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
15:51:24 euleritian joins (~euleritia@dynamic-176-006-130-165.176.6.pool.telefonica.de)
15:53:13 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:53:39 Digit joins (~user@user/digit)
15:59:37 × rosco quits (~rosco@60.53.5.183) (Quit: Lost terminal)
16:00:04 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
16:00:53 × AlexZenon quits (~alzenon@178.34.150.252) (Ping timeout: 248 seconds)
16:03:30 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
16:05:36 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2)
16:06:17 AlexZenon joins (~alzenon@178.34.150.252)
16:10:57 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
16:11:48 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
16:21:38 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 245 seconds)
16:23:42 × Katarushisu quits (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) (Ping timeout: 246 seconds)
16:23:45 Katarushisu3 joins (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net)
16:24:55 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:26:35 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
16:31:39 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 276 seconds)
16:39:03 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
16:55:18 × euleritian quits (~euleritia@dynamic-176-006-130-165.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
16:55:37 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
16:58:55 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
17:00:05 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
17:00:38 euleritian joins (~euleritia@dynamic-176-007-141-251.176.7.pool.telefonica.de)
17:01:54 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
17:05:22 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
17:07:04 × euleritian quits (~euleritia@dynamic-176-007-141-251.176.7.pool.telefonica.de) (Ping timeout: 252 seconds)
17:09:15 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
17:09:36 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 260 seconds)
17:11:03 euphores joins (~SASL_euph@user/euphores)
17:11:34 gmg joins (~user@user/gehmehgeh)
17:14:00 ljdarj1 joins (~Thunderbi@user/ljdarj)
17:16:12 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 246 seconds)
17:16:12 ljdarj1 is now known as ljdarj
17:17:42 × vglfr quits (~vglfr@c-73-250-25-113.hsd1.md.comcast.net) (Ping timeout: 252 seconds)
17:18:30 vglfr joins (~vglfr@2607:fb90:ea0e:4092:ac39:c391:8228:99c1)
17:18:31 <haskellbridge> <maralorn> I am trying to associate a GADT with a type class. i.e. "class MyClass a where data MyAssociatedGADT a b".
17:18:33 <haskellbridge> Does anyone know how I can make instances Proof that "b" fullfills a a certain constraint. e.g. Show?
17:21:55 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
17:22:00 <haskellbridge> <maralorn> Ah, got it.
17:22:31 <haskellbridge> <maralorn> proofJSON :: ((ToJSON b, FromJSON b) => r) -> MyAssociatedGADT a b -> r
17:22:51 × vglfr quits (~vglfr@2607:fb90:ea0e:4092:ac39:c391:8228:99c1) (Ping timeout: 246 seconds)
17:23:36 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:23:39 vglfr joins (~vglfr@2607:fb91:848:44ab:ad2:e57:e15b:944b)
17:25:30 × vglfr quits (~vglfr@2607:fb91:848:44ab:ad2:e57:e15b:944b) (Read error: Connection reset by peer)
17:28:56 euleritian joins (~euleritia@dynamic-176-003-086-054.176.3.pool.telefonica.de)
17:35:17 × euleritian quits (~euleritia@dynamic-176-003-086-054.176.3.pool.telefonica.de) (Ping timeout: 248 seconds)
17:35:51 × xal quits (~xal@mx1.xal.systems) (Quit: bye)
17:36:10 vglfr joins (~vglfr@c-73-250-25-113.hsd1.md.comcast.net)
17:36:39 euleritian joins (~euleritia@dynamic-176-003-086-054.176.3.pool.telefonica.de)
17:38:44 × euleritian quits (~euleritia@dynamic-176-003-086-054.176.3.pool.telefonica.de) (Read error: Connection reset by peer)
17:39:12 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
17:42:24 spew joins (~spew@201.141.99.170)
17:43:54 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
17:46:47 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
17:47:46 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
17:47:53 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
17:53:28 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
17:59:41 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 255 seconds)
18:02:51 × sawilagar quits (~sawilagar@user/sawilagar) (Remote host closed the connection)
18:04:11 sawilagar joins (~sawilagar@user/sawilagar)
18:07:48 RedFlamingos joins (~RedFlamin@user/RedFlamingos)
18:11:19 wootehfoot joins (~wootehfoo@user/wootehfoot)
18:13:52 ft joins (~ft@p4fc2a216.dip0.t-ipconnect.de)
18:22:06 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
18:24:19 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:24:42 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
18:25:24 × vglfr quits (~vglfr@c-73-250-25-113.hsd1.md.comcast.net) (Ping timeout: 272 seconds)
18:25:40 vglfr joins (~vglfr@2607:fb91:848:44ab:ad2:e57:e15b:944b)
18:28:35 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
18:31:48 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds)
18:32:12 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
18:32:49 L29Ah joins (~L29Ah@wikipedia/L29Ah)
18:34:30 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 276 seconds)
18:39:41 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:46:11 × Nachtgespenst quits (~user@user/siracusa) (Quit: Bye!)
18:46:38 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
18:51:13 × user363627 quits (~user@user/user363627) (Remote host closed the connection)
18:52:53 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds)
18:54:31 euleritian joins (~euleritia@dynamic-176-003-086-054.176.3.pool.telefonica.de)
18:57:45 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:59:42 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:00:05 × caconym quits (~caconym@user/caconym) (Quit: bye)
19:00:41 caconym joins (~caconym@user/caconym)
19:01:20 × euleritian quits (~euleritia@dynamic-176-003-086-054.176.3.pool.telefonica.de) (Ping timeout: 255 seconds)
19:01:48 × vglfr quits (~vglfr@2607:fb91:848:44ab:ad2:e57:e15b:944b) (Ping timeout: 276 seconds)
19:02:15 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
19:02:55 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
19:03:23 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:07:13 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:10:15 mrmr155334346318 joins (~mrmr@user/mrmr)
19:12:33 SlackCoder joins (~SlackCode@64-94-63-8.ip.weststar.net.ky)
19:12:50 weary-traveler joins (~user@user/user363627)
19:13:54 kolay joins (~kolay@79.165.22.215)
19:14:04 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
19:14:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
19:19:25 vglfr joins (~vglfr@c-73-250-25-113.hsd1.md.comcast.net)
19:24:14 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
19:25:12 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:29:18 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
19:29:35 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
19:29:59 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
19:32:22 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
19:34:08 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
19:36:04 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
19:37:00 Everything joins (~Everythin@178-133-213-22.mobile.vf-ua.net)
19:47:01 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:47:23 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
19:49:39 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:49:52 × kolay quits (~kolay@79.165.22.215) (Remote host closed the connection)
19:51:17 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
19:51:42 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
19:54:33 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:55:58 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
20:00:01 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
20:01:01 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
20:01:11 euleritian joins (~euleritia@dynamic-176-003-086-054.176.3.pool.telefonica.de)
20:02:23 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:07:27 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
20:08:17 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:09:51 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
20:12:55 zero is now known as zzz
20:15:15 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
20:16:15 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 265 seconds)
20:17:59 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
20:18:33 × spew quits (~spew@201.141.99.170) (Ping timeout: 246 seconds)
20:21:43 × mantraofpie_ quits (~mantraofp@user/mantraofpie) (Remote host closed the connection)
20:22:06 mantraofpie joins (~mantraofp@user/mantraofpie)
20:22:24 <tomsmeding> maralorn: I think I usually see those kinds of functions flipped
20:22:32 manolops joins (~mafiabot@84.232.148.69)
20:22:34 <tomsmeding> because then it more clearly becomes CPS
20:23:06 <tomsmeding> essentially you're trying to write "proofJSON :: MyAssociatedGADT a b -> (ToJSON b, FromJSON b)", but because Haskell won't let you do that, you CPS it to "flip of what you wrote"
20:23:43 <tomsmeding> alternatively you can write `data Dict c where Dict :: c => Dict c` and have `proofJSON :: MyAssociatedGADT a b -> (Dict (ToJSON b), Dict (FromJSON b))`
20:24:14 × manolops quits (~mafiabot@84.232.148.69) (Client Quit)
20:24:21 <tomsmeding> then pattern matching on such a Dict value reveals the type class evidence
20:26:02 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:29:58 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
20:30:28 × habib quits (~habib@185.195.232.169) (Quit: Textual IRC Client: www.textualapp.com)
20:30:34 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
20:32:06 simendsjo joins (~user@84.211.91.108)
20:41:24 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:46:01 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
20:46:12 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
20:50:12 × EvanR quits (~EvanR@user/evanr) (Quit: Leaving)
20:54:24 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds)
20:56:46 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:58:19 × son0p quits (~ff@186.119.84.216) (Ping timeout: 260 seconds)
21:00:51 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
21:01:22 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
21:01:31 alphazone_ joins (~alphazone@2.219.56.221)
21:04:32 × euleritian quits (~euleritia@dynamic-176-003-086-054.176.3.pool.telefonica.de) (Read error: Connection reset by peer)
21:04:53 × alphazone quits (~alphazone@2.219.56.221) (Ping timeout: 248 seconds)
21:05:04 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
21:06:08 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
21:06:08 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
21:06:28 × petrichor quits (~znc-user@user/petrichor) (Read error: Connection reset by peer)
21:06:42 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:06:47 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
21:09:14 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
21:09:28 petrichor joins (~znc-user@user/petrichor)
21:11:59 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
21:15:57 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
21:16:12 × SlackCoder quits (~SlackCode@64-94-63-8.ip.weststar.net.ky) (Quit: Leaving)
21:17:49 hgolden__ joins (~hgolden@204.152.216.122)
21:20:21 × hgolden_ quits (~hgolden@169.150.203.10) (Ping timeout: 252 seconds)
21:23:39 × simendsjo quits (~user@84.211.91.108) (Ping timeout: 252 seconds)
21:27:17 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
21:27:34 <haskellbridge> <maralorn> tomsmeding: Yeah, thanks.
21:31:29 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
21:32:23 BolzmannPain joins (~BolzmannP@user/BolzmannPain)
21:34:23 <haskellbridge> <maralorn> Opinions please: Associated Type Families vs. FunDeps?
21:35:33 <haskellbridge> <maralorn> I have now basically found three largely equivalent type class setups and can’t decide which one is best.
21:36:21 <haskellbridge> <maralorn> It’s basically "MyRelation a b | a -> b" vs "MyRelation a where RelatedTo a"
21:36:33 <tomsmeding> opinion: ATFs are a bit neater becaues it more explicitly defines the functional relation as an actual function
21:36:36 <haskellbridge> <maralorn> - where type RelatedTo a
21:37:11 <geekosaur> I think it's up to what you're more familar or comfortable with; they should operate identically
21:37:19 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 264 seconds)
21:37:33 <tomsmeding> it is more verbose sometimes, though, for having to write out the name (but with fundeps you have to write out the type parameters even if you don't use them)
21:38:24 <tomsmeding> also with fundeps there's a clear link from the type variable (in some type signature) back to the class; with ATFs, you have to go-to definition the ATF name to find out it's related to the class
21:42:38 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
21:46:28 <kaol> I've used fundeps. I confess that I just tried out combinations blindly until my code compiled.
21:49:14 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
21:50:12 <monochrom> "Why not both?" >:)
21:54:23 <kaol> Are there examples of multi parameter type classes where different fundep definitions can make sense? I'm not sure if what I'm asking is a sensible question even. From my shotgunning I got a feeling that there was only one right solution that I just needed to guess and that left me wondering if GHC should be able to magically do it for me.
21:54:52 <tomsmeding> kaol: ghc might be able to magically guess it given your instances
21:54:57 <tomsmeding> but instances might be defined far from the class
21:55:17 × hc quits (~hc@mail.hce.li) (Remote host closed the connection)
21:55:37 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
21:56:25 spew joins (~spew@201.141.99.170)
21:56:35 <monochrom> It's exactly the same as RDBMS people figuring out what functional dependencies exist in an application domain.
21:58:12 <kaol> Maybe I should have a second look at fundeps some time. Perhaps I'd catch on what they are about this time.
21:59:02 <monochrom> For example if I say "I have student IDs and student names", it is "obvious" that names are a function of IDs. But PostgresQL cannot infer that automatically. GHC cannot infer that automatically. LLMs is coming close to inferring that automatically, but current you don't trust them, do you?
21:59:10 × RedFlamingos quits (~RedFlamin@user/RedFlamingos) (Remote host closed the connection)
22:00:02 <mauke> kaol: class Convert a b where { convert :: a -> b }
22:00:03 <tomsmeding> kaol: if your class has parameters a b c, then the fundep `a -> b` is valid if given a certain 'a', all instances have the same 'b'
22:00:32 <kaol> It's 0:00 here, I didn't mean now.
22:00:36 <tomsmeding> i.e. you could have rewritten your class to having parameters a c, and have an associated type family `type BForA a`, and then write `BForA a` instead of `b` everywhere
22:00:46 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
22:01:18 <kaol> Thanks anyway but I just can't.
22:01:24 <tomsmeding> kaol: now people complain the channel is too quiet, now they complain that we're too helpful!
22:01:29 <tomsmeding> ;)
22:01:34 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
22:01:45 hc joins (~hc@mail.hce.li)
22:01:50 <monochrom> It's a function of time!
22:01:51 <mauke> hey, you asked for an example :-)
22:02:26 <tomsmeding> mauke: I know of a library that defines something akin to your Convert but which does _not_ have a functional dependency
22:02:48 <tomsmeding> (and could not have one)
22:02:49 × michalz quits (~michalz@185.246.207.221) (Read error: Connection reset by peer)
22:03:07 michalz joins (~michalz@185.246.207.203)
22:03:16 <mauke> yes
22:03:28 <mauke> you can imagine no fundeps, or a -> b, or b -> a
22:03:36 <tomsmeding> b -> a would be odd
22:04:31 <mauke> that's Read, basically
22:04:49 <mauke> a -> b is Show
22:05:05 <tomsmeding> well, yes, but those functional dependencies are kind of trivial
22:06:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
22:07:49 × spew quits (~spew@201.141.99.170) (Ping timeout: 248 seconds)
22:09:37 spew joins (~spew@201.141.99.170)
22:13:24 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
22:15:43 × ubert quits (~Thunderbi@178.165.189.55.wireless.dyn.drei.com) (Ping timeout: 264 seconds)
22:19:38 emmanuelux_ joins (~emmanuelu@user/emmanuelux)
22:20:10 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
22:20:38 × emmanuelux_ quits (~emmanuelu@user/emmanuelux) (Remote host closed the connection)
22:21:34 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
22:22:34 habib joins (~habib@185.195.232.169)
22:27:14 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
22:27:53 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
22:31:33 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
22:32:09 random-jellyfish joins (~developer@user/random-jellyfish)
22:34:25 × BolzmannPain quits (~BolzmannP@user/BolzmannPain) (Quit: Client closed)
22:40:04 ljdarj1 joins (~Thunderbi@user/ljdarj)
22:40:51 Nachtgespenst joins (~user@user/siracusa)
22:42:36 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
22:43:24 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds)
22:43:24 ljdarj1 is now known as ljdarj
22:47:25 Sgeo joins (~Sgeo@user/sgeo)
22:48:43 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
22:49:27 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
22:50:12 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:53:05 Lears joins (~Leary@user/Leary/x-0910699)
22:54:18 × noctux quits (~noctux@user/noctux) (Ping timeout: 265 seconds)
22:54:19 × pierrot quits (~pi@user/pierrot) (Ping timeout: 265 seconds)
22:54:19 × flocks quits (~flocks@134.122.90.60) (Ping timeout: 265 seconds)
22:54:25 m5zs7k_ joins (aquares@web10.mydevil.net)
22:54:46 pierrot joins (~pi@user/pierrot)
22:54:48 × sm quits (~znc@plaintextaccounting/sm) (Ping timeout: 265 seconds)
22:54:48 × doyougnu quits (~doyougnu@syn-045-046-170-068.res.spectrum.com) (Ping timeout: 265 seconds)
22:55:16 × Leary quits (~Leary@user/Leary/x-0910699) (Ping timeout: 265 seconds)
22:55:17 × m5zs7k quits (aquares@web10.mydevil.net) (Ping timeout: 265 seconds)
22:55:39 doyougnu joins (~doyougnu@syn-045-046-170-068.res.spectrum.com)
22:55:45 × gentauro quits (~gentauro@user/gentauro) (Ping timeout: 265 seconds)
22:55:59 gentauro joins (~gentauro@user/gentauro)
22:56:02 Square joins (~Square@user/square)
22:56:43 ubert joins (~Thunderbi@178.165.189.55.wireless.dyn.drei.com)
22:56:48 sm joins (~znc@plaintextaccounting/sm)
22:56:49 × tt1231097832435 quits (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee) (Quit: Ping timeout (120 seconds))
22:57:12 tt1231097832435 joins (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee)
22:57:49 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
22:59:10 flocks joins (~flocks@134.122.90.60)
22:59:49 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:00:14 × Square2 quits (~Square4@user/square) (Ping timeout: 260 seconds)
23:01:35 × Everything quits (~Everythin@178-133-213-22.mobile.vf-ua.net) (Quit: leaving)
23:02:51 m5zs7k_ is now known as m5zs7k
23:04:18 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
23:04:21 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
23:07:59 noctux joins (~noctux@user/noctux)
23:08:11 qaotsap joins (~paotsaq@127.209.37.188.rev.vodafone.pt)
23:08:16 zlqrvx_ joins (~zlqrvx@101.175.150.247)
23:08:31 × zlqrvx quits (~zlqrvx@user/zlqrvx) (Read error: Connection reset by peer)
23:09:20 × paotsaq quits (~paotsaq@127.209.37.188.rev.vodafone.pt) (Read error: Connection reset by peer)
23:11:14 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:14:03 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
23:18:29 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
23:19:13 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
23:23:00 × alp quits (~alp@2001:861:e3d6:8f80:f60c:ddc9:c66e:3f2c) (Ping timeout: 246 seconds)
23:30:01 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:33:22 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
23:35:06 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds)
23:38:46 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 265 seconds)
23:41:08 × michalz quits (~michalz@185.246.207.203) (Remote host closed the connection)
23:45:23 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:47:33 × acidjnk_new quits (~acidjnk@p200300d6e7283f47b0bede14811a4453.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
23:50:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
23:52:58 emmanuelux joins (~emmanuelu@user/emmanuelux)
23:53:51 troojg joins (~troojg@user/troojg)
23:55:06 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)

All times are in UTC on 2024-10-29.