2024/11/08

2024-11-08 00:00:45 +0100notzmv(~daniel@user/notzmv) notzmv
2024-11-08 00:04:34 +0100ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2024-11-08 00:04:38 +0100pnotequalnp(~pnotequal@user/pnotequalnp) pnotequalnp
2024-11-08 00:06:47 +0100 <yin> this is fun!: i have a bidirectional pattern synonym and try to use record update syntax like `MyPattern { x = ... }` i can get the error `constructor MyPattern does not have field 'x'`
2024-11-08 00:07:10 +0100 <yin> the solution: `(MyPattern) { x = ... }`
2024-11-08 00:07:46 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 272 seconds)
2024-11-08 00:07:47 +0100ljdarj1ljdarj
2024-11-08 00:08:19 +0100xff0x(~xff0x@2405:6580:b080:900:759a:e3d6:c0c3:b78a) (Ping timeout: 260 seconds)
2024-11-08 00:08:24 +0100 <yin> this feels kind of lispy
2024-11-08 00:09:42 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 00:10:51 +0100 <yin> also feels like PatternSynonyms could be patched to allow the former
2024-11-08 00:11:07 +0100pnotequalnp44(~pnotequal@user/pnotequalnp) pnotequalnp
2024-11-08 00:11:57 +0100pnotequalnp(~pnotequal@user/pnotequalnp) (Ping timeout: 256 seconds)
2024-11-08 00:13:02 +0100pavonia(~user@user/siracusa) siracusa
2024-11-08 00:13:49 +0100pnotequalnp44(~pnotequal@user/pnotequalnp) (Client Quit)
2024-11-08 00:15:00 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
2024-11-08 00:21:07 +0100xff0x(~xff0x@2405:6580:b080:900:759a:e3d6:c0c3:b78a)
2024-11-08 00:21:18 +0100supercode(~supercode@user/supercode) supercode
2024-11-08 00:23:29 +0100CoolMa7(~CoolMa7@ip5f5b8957.dynamic.kabel-deutschland.de) (Quit: My Mac has gone to sleep. ZZZzzz…)
2024-11-08 00:23:46 +0100supercode(~supercode@user/supercode) (Client Quit)
2024-11-08 00:25:29 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 00:30:29 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 00:31:59 +0100son0p(~ff@186.121.30.70) son0p
2024-11-08 00:32:34 +0100 <c_wraith> that definitely sounds like a feature it should have.
2024-11-08 00:32:54 +0100 <c_wraith> If it allows you to create a record pattern, it should use the same syntax as a record pattern...
2024-11-08 00:33:05 +0100 <monochrom> To me it feels like kind of CPP. "#define add(x,y) ((x)+(y))" :)
2024-11-08 00:33:49 +0100 <monochrom> PPP = pattern pre-processor >:)
2024-11-08 00:36:51 +0100 <geekosaur> record update syntax is a bit weird
2024-11-08 00:37:38 +0100 <c_wraith> like at the parser level?
2024-11-08 00:37:41 +0100 <monochrom> It's probably a simple oversight in the parser.
2024-11-08 00:38:00 +0100Leary(~Leary@user/Leary/x-0910699) Leary
2024-11-08 00:39:37 +0100 <geekosaur> yeh, it's probably missing a case for patsyns so it makes you fall into the parenthesized expression case
2024-11-08 00:42:09 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 00:44:33 +0100JuanDaugherty(~juan@user/JuanDaugherty) JuanDaugherty
2024-11-08 00:44:34 +0100 <geekosaur> they left
2024-11-08 00:44:38 +0100 <geekosaur> whoops
2024-11-08 00:47:13 +0100 <geekosaur> anyway it sounds like someone should file a bug on gitlab
2024-11-08 00:50:57 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 00:57:10 +0100L29Ah(~L29Ah@wikipedia/L29Ah) L29Ah
2024-11-08 01:00:29 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2024-11-08 01:00:49 +0100jero98772(~jero98772@2800:484:1d7c:cc00::1) (Remote host closed the connection)
2024-11-08 01:00:54 +0100ChaiTRex(~ChaiTRex@user/chaitrex) ChaiTRex
2024-11-08 01:01:47 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 01:02:52 +0100machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 272 seconds)
2024-11-08 01:07:06 +0100troojg(~troojg@user/troojg) troojg
2024-11-08 01:11:38 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
2024-11-08 01:14:18 +0100sourcetarius(~sourcetar@user/sourcetarius) (Ping timeout: 244 seconds)
2024-11-08 01:19:32 +0100FeuermagierGuest603
2024-11-08 01:19:32 +0100Guest603(~Feuermagi@user/feuermagier) (Killed (platinum.libera.chat (Nickname regained by services)))
2024-11-08 01:21:25 +0100acidjnk(~acidjnk@p200300d6e7283f9509f155732eb456c8.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2024-11-08 01:22:09 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2024-11-08 01:23:31 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 01:26:25 +0100xff0x(~xff0x@2405:6580:b080:900:759a:e3d6:c0c3:b78a) (Ping timeout: 248 seconds)
2024-11-08 01:26:42 +0100comonad(~comonad@p200300d0272bda000e01a379c24cc428.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
2024-11-08 01:28:34 +0100comonad(~comonad@p200300d027186300edf824b7b80a34ff.dip0.t-ipconnect.de)
2024-11-08 01:28:49 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 01:37:02 +0100user363627(~user@user/user363627) user363627
2024-11-08 01:39:18 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 01:40:45 +0100weary-traveler(~user@user/user363627) (Ping timeout: 252 seconds)
2024-11-08 01:41:46 +0100Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) Tuplanolla
2024-11-08 01:44:03 +0100jero98772(~jero98772@2800:484:1d7c:cc00::1)
2024-11-08 01:44:38 +0100jero98772(~jero98772@2800:484:1d7c:cc00::1) (Remote host closed the connection)
2024-11-08 01:44:42 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
2024-11-08 01:44:56 +0100 <yin> point me to the right place to file it and i will
2024-11-08 01:46:01 +0100 <geekosaur> https://gitlab.haskell.org/ghc/ghc/-/issues you will need a GitLab account
2024-11-08 01:46:26 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 01:51:03 +0100 <yin> why am i being asked for gitlab login credentials on haskell.org?
2024-11-08 01:51:10 +0100 <yin> this can't be right
2024-11-08 01:51:51 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
2024-11-08 01:52:42 +0100 <geekosaur> because browsers are dumb? I get that all the time, chrome asks me whether I want to use wiki or gitlab creds
2024-11-08 01:53:00 +0100 <geekosaur> because "obviously" a subdomain is the same auth domain
2024-11-08 01:53:18 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds)
2024-11-08 01:56:14 +0100 <yin> no this is not the right way to do auth
2024-11-08 01:56:49 +0100 <yin> either someone made a mistake or i'm misunderstanding something
2024-11-08 01:56:49 +0100sprotte24(~sprotte24@p200300d16f05e000c862cdd7b290d75c.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2024-11-08 01:59:19 +0100 <geekosaur> that might be a question for #haskell-infrastructure then
2024-11-08 01:59:42 +0100 <yin> ah, this is not OAuth for gitlab.com. it's just for haskell.org's gitlab instance
2024-11-08 01:59:45 +0100 <user363627> yin: the gitlab login credentials being asked would be for the instance being served at gitlab.haskell.org as opposed to gitlab.com
2024-11-08 01:59:54 +0100 <user363627> yes
2024-11-08 02:00:16 +0100 <yin> so i was misunderstanding something after all :)
2024-11-08 02:00:25 +0100 <user363627> :)
2024-11-08 02:01:08 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
2024-11-08 02:01:53 +0100 <monochrom> Tangentailly, a few days ago some of us learned that DNS is not suffix-closed, i.e., subscriptions.techstreet.com resolves fine, but techstreet.com does not exist at all.
2024-11-08 02:02:13 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 02:02:23 +0100 <geekosaur> …approved
2024-11-08 02:02:52 +0100 <yin> yeah you can mess with DNS records in a myriad of ways
2024-11-08 02:04:01 +0100 <yin> i personaly thing the whole of DNS is broken in more ways than one, but yeah...
2024-11-08 02:04:08 +0100 <monochrom> Haha I need to make a website such that www.monochrom.org says "Haskell is great!" and yet monochrom.org says "Haskell sucks!"
2024-11-08 02:07:13 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 02:09:51 +0100troojg(~troojg@user/troojg) (Remote host closed the connection)
2024-11-08 02:17:34 +0100 <yin> better yet, make http:// suck and https:// great
2024-11-08 02:17:59 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 02:18:14 +0100JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-11-08 02:19:02 +0100xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2024-11-08 02:22:32 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) Unicorn_Princess
2024-11-08 02:23:14 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 02:27:49 +0100 <probie> monochrom: you don't need to mess with DNS records for that, you just need to speak HTTP >= 1.1
2024-11-08 02:28:59 +0100 <monochrom> That's true.
2024-11-08 02:33:47 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 02:34:06 +0100paddymahoney(~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com) (Ping timeout: 276 seconds)
2024-11-08 02:36:00 +0100califax(~califax@user/califx) (Remote host closed the connection)
2024-11-08 02:37:10 +0100califax(~califax@user/califx) califx
2024-11-08 02:38:29 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 02:40:09 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 02:44:54 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
2024-11-08 02:55:57 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 02:58:28 +0100paddymahoney(~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com)
2024-11-08 03:00:46 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 03:03:09 +0100 <yin> it depends on how much you want it to suck >:)
2024-11-08 03:11:41 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 03:12:49 +0100Pixi(~Pixi@user/pixi) (Quit: Leaving)
2024-11-08 03:16:14 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
2024-11-08 03:17:29 +0100notzmv(~daniel@user/notzmv) (Ping timeout: 260 seconds)
2024-11-08 03:18:25 +0100sam113101(~sam@modemcable220.199-203-24.mc.videotron.ca) sam113101
2024-11-08 03:18:52 +0100Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2024-11-08 03:25:01 +0100Pixi(~Pixi@user/pixi) Pixi
2024-11-08 03:25:32 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2024-11-08 03:26:24 +0100euleritian(~euleritia@77.22.252.56)
2024-11-08 03:27:30 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 03:28:09 +0100euleritian(~euleritia@77.22.252.56) (Remote host closed the connection)
2024-11-08 03:29:00 +0100euleritian(~euleritia@77.22.252.56)
2024-11-08 03:32:24 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 03:33:37 +0100euleritian(~euleritia@77.22.252.56) (Remote host closed the connection)
2024-11-08 03:33:56 +0100euleritian(~euleritia@77.22.252.56)
2024-11-08 03:34:43 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2024-11-08 03:37:30 +0100lol_(~lol@2603:3016:1e01:b9c0:ecfb:26af:1f31:67a5)
2024-11-08 03:41:42 +0100jcarpenter2(~lol@2603:3016:1e01:b9c0:c43d:6fb:2607:cd8b) (Ping timeout: 276 seconds)
2024-11-08 03:43:00 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Ping timeout: 276 seconds)
2024-11-08 03:43:17 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 03:50:00 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
2024-11-08 04:01:25 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 04:05:10 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2024-11-08 04:09:20 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 04:20:54 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 04:25:47 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
2024-11-08 04:33:54 +0100Tisoxin(~Ikosit@user/ikosit) (Ping timeout: 252 seconds)
2024-11-08 04:36:42 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 04:40:37 +0100bastelfreak(bastelfrea@libera/staff/VoxPupuli.bastelfreak) (Ping timeout: 620 seconds)
2024-11-08 04:41:42 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 04:46:46 +0100bastelfreak(bastelfrea@libera/staff/VoxPupuli.bastelfreak) bastelfreak
2024-11-08 04:47:02 +0100Tisoxin(~Ikosit@user/ikosit) Ikosit
2024-11-08 04:50:52 +0100td_(~td@i5387092D.versanet.de) (Ping timeout: 272 seconds)
2024-11-08 04:52:00 +0100xdminsy(~xdminsy@117.147.71.147) xdminsy
2024-11-08 04:52:08 +0100td_(~td@i53870904.versanet.de) td_
2024-11-08 04:52:30 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 04:57:38 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 05:00:21 +0100cjay(cjay@nerdbox.nerd2nerd.org) (Ping timeout: 248 seconds)
2024-11-08 05:01:09 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds)
2024-11-08 05:05:03 +0100user363627weary-traveler
2024-11-08 05:08:17 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 05:11:55 +0100cjay(cjay@nerdbox.nerd2nerd.org) cjay
2024-11-08 05:13:24 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 05:24:04 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 05:24:06 +0100ih1d_(~ih1d@24.139.109.18)
2024-11-08 05:24:22 +0100 <ih1d_> hello!
2024-11-08 05:25:05 +0100 <ih1d_> anybody have good resources for ffi and linking c libraries to projects (using pkg-config etc.)
2024-11-08 05:31:33 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
2024-11-08 05:42:07 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 05:45:07 +0100aforemny(~aforemny@2001:9e8:6cda:5700:b93:b66b:84fb:f5e8) aforemny
2024-11-08 05:46:20 +0100aforemny_(~aforemny@i59F4C67C.versanet.de) (Ping timeout: 255 seconds)
2024-11-08 05:47:06 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
2024-11-08 05:47:49 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 05:49:34 +0100 <jackdk> ih1d_: if you don't mind GPL, you could crib https://git.sr.ht/~jack/libtelnet-haskell - it's a simple lib with a pkg-config dependency
2024-11-08 05:50:07 +0100 <jackdk> https://www.youtube.com/watch?v=y95WtkWCmKg I think this FFI talk was the one I saw years ago and thought was valuable
2024-11-08 05:52:39 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 05:54:57 +0100 <int-e> There are many FFI bindings on Hackage that you could base this on. There's a question of scale... if there are many functions to bind, looking into c2hs may be worthwhile. Or, if it's humongous, adapting c2hs (gtk does that with gtk2hs-buildtools ...)
2024-11-08 05:58:25 +0100poscat(~poscat@user/poscat) (Ping timeout: 248 seconds)
2024-11-08 06:03:33 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 06:05:20 +0100poscat(~poscat@user/poscat) poscat
2024-11-08 06:10:10 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 06:21:40 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 06:27:04 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 06:37:29 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 06:40:08 +0100michalz(~michalz@185.246.207.217)
2024-11-08 06:42:23 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
2024-11-08 06:45:14 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2024-11-08 06:53:17 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 06:54:29 +0100Square(~Square4@user/square) (Ping timeout: 260 seconds)
2024-11-08 06:58:20 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
2024-11-08 07:02:32 +0100poscat0x04(~poscat@user/poscat) poscat
2024-11-08 07:03:29 +0100poscat(~poscat@user/poscat) (Ping timeout: 248 seconds)
2024-11-08 07:07:08 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 07:14:15 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
2024-11-08 07:17:54 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2024-11-08 07:22:56 +0100jle`(~jle`@syn-023-240-075-236.res.spectrum.com) (Ping timeout: 252 seconds)
2024-11-08 07:24:54 +0100jle`(~jle`@2603:8001:3b02:84d4:71c9:147c:d31f:c8d0) jle`
2024-11-08 07:25:10 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 07:29:53 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 07:32:45 +0100euleritian(~euleritia@77.22.252.56) (Ping timeout: 252 seconds)
2024-11-08 07:33:45 +0100euleritian(~euleritia@dynamic-176-006-132-027.176.6.pool.telefonica.de)
2024-11-08 07:41:00 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 07:42:10 +0100rvalue-(~rvalue@user/rvalue) rvalue
2024-11-08 07:43:19 +0100rvalue(~rvalue@user/rvalue) (Ping timeout: 260 seconds)
2024-11-08 07:45:38 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 07:48:09 +0100rvalue-rvalue
2024-11-08 07:50:39 +0100acidjnk(~acidjnk@p200300d6e7283f561805fdf183b39650.dip0.t-ipconnect.de) acidjnk
2024-11-08 07:54:50 +0100housemate(~housemate@146.70.66.228) (Ping timeout: 252 seconds)
2024-11-08 07:56:44 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 07:56:49 +0100housemate(~housemate@146.70.66.228) housemate
2024-11-08 08:01:26 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
2024-11-08 08:01:58 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-08 08:05:26 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 08:07:30 +0100xff0x_(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2024-11-08 08:07:59 +0100xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 260 seconds)
2024-11-08 08:08:09 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 08:13:09 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 08:21:09 +0100ft(~ft@p4fc2a216.dip0.t-ipconnect.de) (Quit: leaving)
2024-11-08 08:23:55 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 08:28:43 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
2024-11-08 08:29:03 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-11-08 08:30:45 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Ping timeout: 252 seconds)
2024-11-08 08:34:50 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 08:36:45 +0100misterfish(~misterfis@84.53.85.146) misterfish
2024-11-08 08:39:42 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 08:44:57 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
2024-11-08 08:45:12 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds)
2024-11-08 08:48:53 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2024-11-08 08:49:36 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds)
2024-11-08 08:49:37 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection)
2024-11-08 08:50:04 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 08:50:51 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection)
2024-11-08 08:51:49 +0100Lord_of_Life_Lord_of_Life
2024-11-08 08:52:36 +0100tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving)
2024-11-08 08:55:30 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 08:55:37 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2024-11-08 09:00:04 +0100caconym(~caconym@user/caconym) (Quit: bye)
2024-11-08 09:00:42 +0100caconym(~caconym@user/caconym) caconym
2024-11-08 09:01:05 +0100Sgeo__(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2024-11-08 09:02:21 +0100tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) tcard
2024-11-08 09:02:24 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 09:02:39 +0100xff0x_(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 252 seconds)
2024-11-08 09:05:09 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 09:05:28 +0100misterfish(~misterfis@84.53.85.146) (Ping timeout: 272 seconds)
2024-11-08 09:08:17 +0100euleritian(~euleritia@dynamic-176-006-132-027.176.6.pool.telefonica.de) (Ping timeout: 248 seconds)
2024-11-08 09:09:08 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-11-08 09:09:10 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 09:10:17 +0100alexherbo2(~alexherbo@2a02-8440-3208-7a55-0804-3604-71e5-a155.rev.sfr.net) alexherbo2
2024-11-08 09:11:29 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Ping timeout: 248 seconds)
2024-11-08 09:13:10 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 09:14:09 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 09:21:40 +0100kenran(~void@user/kenran) kenran
2024-11-08 09:24:58 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 09:25:42 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-08 09:28:48 +0100ham2(~ham@user/ham) (Ping timeout: 252 seconds)
2024-11-08 09:30:04 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 09:30:07 +0100alexherbo2(~alexherbo@2a02-8440-3208-7a55-0804-3604-71e5-a155.rev.sfr.net) (Remote host closed the connection)
2024-11-08 09:32:26 +0100ham2(~ham@user/ham) ham
2024-11-08 09:40:45 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 09:45:34 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 09:52:15 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 246 seconds)
2024-11-08 09:54:57 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection)
2024-11-08 09:56:10 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 09:56:29 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 09:59:57 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection)
2024-11-08 10:00:03 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2024-11-08 10:10:46 +0100xff0x(~xff0x@om126254173224.33.openmobile.ne.jp)
2024-11-08 10:11:11 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 10:20:31 +0100paddymahoney(~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com) (Quit: Leaving)
2024-11-08 10:22:25 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection)
2024-11-08 10:26:14 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 10:30:47 +0100tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2024-11-08 10:32:50 +0100ih1d_(~ih1d@24.139.109.18) (Quit: leaving)
2024-11-08 10:37:27 +0100rembo10(~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2024-11-08 10:38:01 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection)
2024-11-08 10:38:57 +0100rembo10(~rembo10@main.remulis.com) rembo10
2024-11-08 10:41:22 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 10:42:05 +0100lxsameer(~lxsameer@Serene/lxsameer) lxsameer
2024-11-08 10:42:43 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 264 seconds)
2024-11-08 10:52:14 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) kuribas
2024-11-08 10:59:45 +0100driib318(~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
2024-11-08 11:00:23 +0100driib318(~driib@vmi931078.contaboserver.net) driib
2024-11-08 11:04:02 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-11-08 11:05:18 +0100ih1d_(~ih1d@24.139.109.18)
2024-11-08 11:05:38 +0100ih1d_(~ih1d@24.139.109.18) (Client Quit)
2024-11-08 11:12:19 +0100mulk(~mulk@pd95146e9.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2024-11-08 11:12:50 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2024-11-08 11:13:39 +0100mulk(~mulk@pd95146e9.dip0.t-ipconnect.de) mulk
2024-11-08 11:28:06 +0100Flow_(~none@gentoo/developer/flow) (Quit: WeeChat 4.4.2)
2024-11-08 11:28:22 +0100Flow_(~none@gentoo/developer/flow) flow
2024-11-08 11:28:48 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) Smiles
2024-11-08 11:29:47 +0100ubert(~Thunderbi@178.165.164.236.wireless.dyn.drei.com) ubert
2024-11-08 11:32:25 +0100Flow_flow
2024-11-08 11:35:58 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-08 11:38:34 +0100kenran(~void@user/kenran) (Remote host closed the connection)
2024-11-08 11:40:44 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Ping timeout: 260 seconds)
2024-11-08 11:43:10 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2)
2024-11-08 11:47:52 +0100ih1d(~ih1d@24.139.109.18) (Remote host closed the connection)
2024-11-08 11:50:14 +0100xff0x(~xff0x@om126254173224.33.openmobile.ne.jp) (Read error: Connection reset by peer)
2024-11-08 11:50:47 +0100sord937(~sord937@gateway/tor-sasl/sord937) sord937
2024-11-08 11:51:44 +0100mulk(~mulk@pd95146e9.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
2024-11-08 11:55:28 +0100mulk(~mulk@pd95146e9.dip0.t-ipconnect.de) mulk
2024-11-08 12:15:00 +0100chele(~chele@user/chele) chele
2024-11-08 12:18:43 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2024-11-08 12:18:56 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2024-11-08 12:31:13 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
2024-11-08 12:31:22 +0100vpan(~vpan@212.117.1.172)
2024-11-08 12:36:52 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) lortabac
2024-11-08 12:44:17 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 12:45:21 +0100euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds)
2024-11-08 12:45:39 +0100euleritian(~euleritia@dynamic-176-006-140-137.176.6.pool.telefonica.de)
2024-11-08 12:51:08 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
2024-11-08 12:51:53 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 13:00:23 +0100mulk(~mulk@pd95146e9.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2024-11-08 13:02:33 +0100mulk(~mulk@pd95146e9.dip0.t-ipconnect.de) mulk
2024-11-08 13:13:20 +0100xff0x(~xff0x@2405:6580:b080:900:833e:a4a2:2f15:5b32)
2024-11-08 13:24:03 +0100euleritian(~euleritia@dynamic-176-006-140-137.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2024-11-08 13:24:14 +0100euleritian(~euleritia@77.22.252.56)
2024-11-08 13:28:08 +0100sourcetarius(~sourcetar@user/sourcetarius) sourcetarius
2024-11-08 13:32:09 +0100visilii(~visilii@85.172.77.90) (Ping timeout: 260 seconds)
2024-11-08 13:35:48 +0100poscat0x04(~poscat@user/poscat) (Ping timeout: 276 seconds)
2024-11-08 13:35:58 +0100 <yin> turns out record update syntax is weirder than i thought https://gitlab.haskell.org/ghc/ghc/-/issues/25456
2024-11-08 13:43:22 +0100poscat(~poscat@user/poscat) poscat
2024-11-08 13:43:27 +0100 <yin> i thought i got over my hate for record syntax...
2024-11-08 13:44:16 +0100 <Rembane> Welcome back yin! :/
2024-11-08 13:45:06 +0100poscat(~poscat@user/poscat) (Client Quit)
2024-11-08 13:47:09 +0100poscat(~poscat@user/poscat) poscat
2024-11-08 13:51:33 +0100mceresa(~mceresa@user/mceresa) (Read error: error:0A000119:SSL routines::decryption failed or bad record mac)
2024-11-08 13:52:04 +0100 <yin> philosophically, are records just a data structure that we give the compiler permission to optimize however it sees fit or is there something more to it?
2024-11-08 13:52:24 +0100 <kqr> Text.Printf does not come with an instance for Text. When I poke around I see some suggestions to use Data.Text.Format instead. Is this actually preferred? I find very little comparison online. The use case is not large templating but creating a Show instance for a custom numeric type – so I'm hesitant to reach for something that's not in base.
2024-11-08 13:53:22 +0100 <Rembane> yin: IIRC it's syntactic sugar for not having to write out all the access functions and save functions for a datatype.
2024-11-08 13:54:13 +0100poscat(~poscat@user/poscat) (Quit: Bye)
2024-11-08 13:54:21 +0100alexherbo2(~alexherbo@2a02-8440-3309-f88a-dc43-ac5e-6a5b-79bd.rev.sfr.net) alexherbo2
2024-11-08 13:56:39 +0100 <yin> Rembane: yes but how is their structure implemented internally?
2024-11-08 13:56:57 +0100poscat(~poscat@user/poscat) poscat
2024-11-08 13:57:06 +0100BolzmannPain(~BolzmannP@user/BolzmannPain) BolzmannPain
2024-11-08 13:57:13 +0100 <opqdonut> I wouldn't expect using or not using record syntax to affect the runtime characteristics
2024-11-08 13:57:39 +0100 <opqdonut> but I have no idea what GHC actually does
2024-11-08 13:57:45 +0100 <Rembane> yin: As product types plus some functions. Like the `data` types with many arguments without the record stuff.
2024-11-08 13:57:57 +0100 <Leary> yin: It's a matter of interface, not representation. With regular product types, you only have positional notation for manipulating contained values. Records just let you specify them with names instead.
2024-11-08 13:59:04 +0100ih1d(~ih1d@24.139.109.18)
2024-11-08 14:00:21 +0100ih1d(~ih1d@24.139.109.18) (Client Quit)
2024-11-08 14:01:14 +0100 <yin> i guess i'm thinking about the performance of product types in general comparing to, say, HashMap
2024-11-08 14:01:38 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) ash3en
2024-11-08 14:03:14 +0100 <yin> maybe i abuse record updating
2024-11-08 14:07:14 +0100BolzmannPain(~BolzmannP@user/BolzmannPain) (Quit: Client closed)
2024-11-08 14:08:19 +0100mceresa(~mceresa@user/mceresa) mceresa
2024-11-08 14:08:31 +0100manwithluck(manwithluc@gateway/vpn/protonvpn/manwithluck) (Remote host closed the connection)
2024-11-08 14:13:27 +0100manwithluck(manwithluc@gateway/vpn/protonvpn/manwithluck) manwithluck
2024-11-08 14:13:49 +0100rvalue-(~rvalue@user/rvalue) rvalue
2024-11-08 14:14:29 +0100rvalue(~rvalue@user/rvalue) (Ping timeout: 248 seconds)
2024-11-08 14:16:06 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Ping timeout: 276 seconds)
2024-11-08 14:21:43 +0100rvalue-rvalue
2024-11-08 14:27:50 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2024-11-08 14:29:02 +0100sand-witch(~m-mzmz6l@vmi833741.contaboserver.net) (Remote host closed the connection)
2024-11-08 14:30:39 +0100hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Ping timeout: 260 seconds)
2024-11-08 14:33:00 +0100sand-witch(~m-mzmz6l@vmi833741.contaboserver.net)
2024-11-08 14:33:37 +0100L29Ah(~L29Ah@wikipedia/L29Ah) (Ping timeout: 248 seconds)
2024-11-08 14:34:48 +0100weary-traveler(~user@user/user363627) (Remote host closed the connection)
2024-11-08 14:36:48 +0100euleritian(~euleritia@77.22.252.56) (Ping timeout: 252 seconds)
2024-11-08 14:37:41 +0100euleritian(~euleritia@dynamic-176-006-140-137.176.6.pool.telefonica.de)
2024-11-08 14:38:27 +0100sourcetarius(~sourcetar@user/sourcetarius) (Quit: sourcetarius)
2024-11-08 14:38:58 +0100hughjfchen(~hughjfche@vmi556545.contaboserver.net) hughjfchen
2024-11-08 14:46:47 +0100euleritian(~euleritia@dynamic-176-006-140-137.176.6.pool.telefonica.de) (Ping timeout: 255 seconds)
2024-11-08 14:47:33 +0100euleritian(~euleritia@dynamic-176-007-148-106.176.7.pool.telefonica.de)
2024-11-08 14:50:05 +0100euleritian(~euleritia@dynamic-176-007-148-106.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-11-08 14:50:23 +0100euleritian(~euleritia@77.22.252.56)
2024-11-08 14:50:37 +0100AwoobisgAy_Dragon
2024-11-08 14:51:41 +0100dontdieych2(~quassel@user/dontdieych2) dontdieych2
2024-11-08 14:51:55 +0100dontdieych2_(~quassel@user/dontdieych2) dontdieych2
2024-11-08 14:54:34 +0100dontdieych2(~quassel@user/dontdieych2) (Client Quit)
2024-11-08 14:54:58 +0100dontdieych2_(~quassel@user/dontdieych2) (Client Quit)
2024-11-08 14:55:34 +0100user363627(~user@user/user363627) user363627
2024-11-08 14:56:06 +0100user363627weary-traveler
2024-11-08 14:56:35 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-11-08 14:56:55 +0100dontdieych2(~quassel@user/dontdieych2) dontdieych2
2024-11-08 14:58:51 +0100dontdieych2(~quassel@user/dontdieych2) (Client Quit)
2024-11-08 15:01:05 +0100emfrom(~emfrom@37.170.21.237)
2024-11-08 15:01:34 +0100 <yin> maybe not
2024-11-08 15:05:59 +0100 <Rembane> yin: How are you using records?
2024-11-08 15:10:08 +0100ubert(~Thunderbi@178.165.164.236.wireless.dyn.drei.com) (Quit: ubert)
2024-11-08 15:10:30 +0100ubert(~Thunderbi@178.165.164.236.wireless.dyn.drei.com) ubert
2024-11-08 15:10:57 +0100Digitteknohippie(~user@user/digit) Digit
2024-11-08 15:11:10 +0100Digit(~user@user/digit) (Ping timeout: 252 seconds)
2024-11-08 15:13:33 +0100 <yin> i think my MO is passing state around as a huge record with all the "global" variables
2024-11-08 15:14:07 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2024-11-08 15:14:31 +0100sord937(~sord937@gateway/tor-sasl/sord937) sord937
2024-11-08 15:14:54 +0100emfrom(~emfrom@37.170.21.237) (Remote host closed the connection)
2024-11-08 15:17:18 +0100DigitteknohippieDigit
2024-11-08 15:17:38 +0100 <yin> state that gets updated many times a second. stuff like this: `... = (step st { μ = Play , θ = now (θ st) }) { μ = Pause }`
2024-11-08 15:19:14 +0100alexherbo2(~alexherbo@2a02-8440-3309-f88a-dc43-ac5e-6a5b-79bd.rev.sfr.net) (Remote host closed the connection)
2024-11-08 15:19:33 +0100alexherbo2(~alexherbo@2a02-8440-3309-f88a-dc43-ac5e-6a5b-79bd.rev.sfr.net) alexherbo2
2024-11-08 15:19:34 +0100 <yin> (weird example that was just right in front of me) (also i try to avoid optics like the plague)
2024-11-08 15:20:19 +0100JuanDaugherty(~juan@user/JuanDaugherty) JuanDaugherty
2024-11-08 15:24:33 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) Smiles
2024-11-08 15:25:21 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-08 15:26:12 +0100 <Rembane> yin: That sounds reasonable. Have you checked out some of the language extensions that were created to make records a byt more ergonomic?
2024-11-08 15:26:31 +0100L29Ah(~L29Ah@wikipedia/L29Ah) L29Ah
2024-11-08 15:28:05 +0100 <yin> such as?
2024-11-08 15:28:18 +0100euleritian(~euleritia@77.22.252.56) (Ping timeout: 245 seconds)
2024-11-08 15:28:33 +0100euleritian(~euleritia@dynamic-176-007-148-106.176.7.pool.telefonica.de)
2024-11-08 15:28:51 +0100 <yin> i recently started using pattern synonyms, but just because the use case *really* asked for it, not because i like it
2024-11-08 15:28:59 +0100JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-11-08 15:31:48 +0100ft(~ft@p4fc2a216.dip0.t-ipconnect.de) ft
2024-11-08 15:33:12 +0100notzmv(~daniel@user/notzmv) notzmv
2024-11-08 15:34:46 +0100 <Rembane> yin: These: https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/records.html
2024-11-08 15:37:00 +0100ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2024-11-08 15:38:25 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 15:38:45 +0100ubert(~Thunderbi@178.165.164.236.wireless.dyn.drei.com) (Ping timeout: 246 seconds)
2024-11-08 15:40:14 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
2024-11-08 15:40:14 +0100ljdarj1ljdarj
2024-11-08 15:57:13 +0100enikar(~enikar@user/enikar) (Quit: WeeChat 3.0)
2024-11-08 15:57:37 +0100enikar(~enikar@user/enikar) enikar
2024-11-08 16:00:27 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-11-08 16:01:28 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-08 16:05:23 +0100alexherbo2(~alexherbo@2a02-8440-3309-f88a-dc43-ac5e-6a5b-79bd.rev.sfr.net) (Remote host closed the connection)
2024-11-08 16:07:10 +0100 <merijn> kqr: I mean, Printf is kinda yikes, so I would definitely avoid that
2024-11-08 16:07:37 +0100son0p(~ff@186.121.30.70) (Ping timeout: 244 seconds)
2024-11-08 16:08:18 +0100 <merijn> kqr: ah, wait, custom numeric types suggest what you *really* want is "convert number to string with control over decimals, etc." yes?
2024-11-08 16:09:28 +0100 <merijn> kqr: Which suggest what you really want might be in base's Numeric module :)
2024-11-08 16:12:17 +0100 <merijn> yin: Why avoid optics like the plague?
2024-11-08 16:15:48 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) ash3en
2024-11-08 16:15:57 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
2024-11-08 16:25:00 +0100Square2(~Square@user/square) Square
2024-11-08 16:28:14 +0100willscripted(~willscrip@72.85.164.116)
2024-11-08 16:30:39 +0100lxsameer(~lxsameer@Serene/lxsameer) (Ping timeout: 260 seconds)
2024-11-08 16:34:01 +0100willscripted(~willscrip@72.85.164.116) (Changing host)
2024-11-08 16:34:01 +0100willscripted(~willscrip@user/willscripted) willscripted
2024-11-08 16:46:22 +0100misterfish(~misterfis@84.53.85.146) misterfish
2024-11-08 16:55:09 +0100misterfish(~misterfis@84.53.85.146) (Ping timeout: 244 seconds)
2024-11-08 16:55:56 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-11-08 17:00:50 +0100GdeVolpiano(~GdeVolpia@user/GdeVolpiano) (Quit: WeeChat 4.4.2)
2024-11-08 17:05:08 +0100JuanDaugherty(~juan@user/JuanDaugherty) JuanDaugherty
2024-11-08 17:06:04 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2)
2024-11-08 17:12:33 +0100willx(~willscrip@72.85.164.116)
2024-11-08 17:13:52 +0100willx(~willscrip@72.85.164.116) (Changing host)
2024-11-08 17:13:52 +0100willx(~willscrip@user/willscripted) willscripted
2024-11-08 17:14:07 +0100GdeVolpiano(~GdeVolpia@user/GdeVolpiano) GdeVolpiano
2024-11-08 17:15:27 +0100JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-11-08 17:15:56 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-08 17:16:58 +0100willx(~willscrip@user/willscripted) (Client Quit)
2024-11-08 17:17:51 +0100rachelambda(~rachelamb@cust-95-80-25-71.csbnet.se) rachelambda
2024-11-08 17:19:38 +0100 <yin> merijn: i could write a dozen paragraphs about it but it all comes down to personal stylistic preferences (mostly)
2024-11-08 17:21:38 +0100 <merijn> I mean, I rarely use optics, but sometimes they just make things infinitely easier :)
2024-11-08 17:26:26 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 17:27:24 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 17:31:19 +0100L29Ah(~L29Ah@wikipedia/L29Ah) (Ping timeout: 260 seconds)
2024-11-08 17:32:03 +0100 <haskellbridge> <Bowuigi> yin "mostly" implies that you have non-stylistic arguments too, what are they?
2024-11-08 17:32:16 +0100user363627(~user@user/user363627) user363627
2024-11-08 17:32:20 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 17:34:32 +0100willscripted(~willscrip@user/willscripted) (Quit: Client closed)
2024-11-08 17:35:25 +0100willscripted(~willscrip@user/willscripted) willscripted
2024-11-08 17:36:22 +0100weary-traveler(~user@user/user363627) (Ping timeout: 252 seconds)
2024-11-08 17:41:06 +0100lxsameer(~lxsameer@Serene/lxsameer) lxsameer
2024-11-08 17:42:11 +0100willscripted(~willscrip@user/willscripted) (Quit: willscripted)
2024-11-08 17:42:21 +0100user363627(~user@user/user363627) (Quit: Konversation terminated!)
2024-11-08 17:43:09 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 17:45:56 +0100willscripted(~willscrip@user/willscripted) willscripted
2024-11-08 17:46:22 +0100willscripted(~willscrip@user/willscripted) (Client Quit)
2024-11-08 17:46:41 +0100willscripted(~willscrip@user/willscripted) willscripted
2024-11-08 17:46:47 +0100 <yin> apart from introducing complexity, hard to reason about performance penalties and arguably inevitably leaky abstractions, which i guess you can say still belongs to the realm of stylistic preference, i think it goes against one of the main reasons why *I* choose to use Haskell, which is managing complexity and making things more maintainable (for some definition of maintainable)
2024-11-08 17:47:52 +0100 <EvanR> leaky abstractions? in optics?
2024-11-08 17:48:28 +0100 <EvanR> I guess I heard of this or that "lens that's not a true lens" or something
2024-11-08 17:49:57 +0100willscripted(~willscrip@user/willscripted) (Client Quit)
2024-11-08 17:49:59 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 17:50:15 +0100willscripted(~willscrip@user/willscripted) willscripted
2024-11-08 17:51:46 +0100 <yin> that starts getting into the dozen paragraphs i can't commit to writing right now
2024-11-08 17:53:02 +0100euleritian(~euleritia@dynamic-176-007-148-106.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-11-08 17:53:20 +0100euleritian(~euleritia@77.22.252.56)
2024-11-08 17:53:33 +0100 <yin> i think that if i get myself into a place where optics would make thing easier, it's because i'm doing something wrong. structured the program the wrong way or something like that
2024-11-08 17:53:53 +0100 <yin> but i completely accept that people find it useful
2024-11-08 17:54:16 +0100 <EvanR> leaky abstractions is just a strong relatively verifiable claim
2024-11-08 17:54:27 +0100 <haskellbridge> <magic_rb> I need help with parsing, ive been banging my head against this one for far too long, ive the following simple DSL https://paste.tomsmeding.com/s7OHAeBW and while i can parse "("people" -> tags)" i cannot parse "("bar" -> tags) || ("foo" -> tags)" and i for the life of me cannot figure out why
2024-11-08 17:54:51 +0100 <EvanR> nested quotation marks?
2024-11-08 17:55:11 +0100 <EvanR> sounds tricky
2024-11-08 17:55:14 +0100 <haskellbridge> <magic_rb> uh, my bridge may have screwed it up, ignore the out ones
2024-11-08 17:55:18 +0100 <geekosaur> yin, I think optics or not is more of a stylistic choice. and Haskell is not Python with its "there is only One True Way" mentality
2024-11-08 17:55:27 +0100 <haskellbridge> <magic_rb> ("bar" -> tags) || ("foo" -> tags) like that
2024-11-08 17:55:49 +0100 <EvanR> are -> and || operators with precedence
2024-11-08 17:56:01 +0100 <EvanR> or not because parens required
2024-11-08 17:56:13 +0100 <haskellbridge> <magic_rb> i have no idea how to do that, i now assume that parens are gonna be there
2024-11-08 17:56:25 +0100 <EvanR> ok then ignore me
2024-11-08 17:56:40 +0100 <haskellbridge> <magic_rb> its just: between (symbol "(") (symbol ")") parseOp <|> parseOpEqual <|> parseOpNot <|> parseOpIn <|> parseOpOr <|> parseOpAnd
2024-11-08 17:59:40 +0100 <EvanR> magic_rb is it that your have too many "space" in your parser for parseOpIn and symbol...
2024-11-08 18:00:17 +0100 <EvanR> kind of hard to follow the logic at that level
2024-11-08 18:00:29 +0100 <haskellbridge> <magic_rb> Left (ParseErrorBundle {bundleErrors = TrivialError 17 (Just (Tokens ('|' :| ""))) (fromList [Label ('w' :| "hite space"),EndOfInput]) :| [], bundlePosState = PosState {pstateInput = "("bar" -> tags ) || ("foo" -> tags )", pstateOffset = 0, pstateSourcePos = SourcePos {sourceName = "", sourceLine = Pos 1, sourceColumn = Pos 1}, pstateTabWidth = Pos 8, pstateLinePrefix = ""}})
2024-11-08 18:00:35 +0100 <haskellbridge> <magic_rb> thats the failure
2024-11-08 18:00:50 +0100 <haskellbridge> <magic_rb> and 17 is the first | char
2024-11-08 18:01:11 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 18:01:14 +0100 <EvanR> there's gotta be a human readable version of that error
2024-11-08 18:02:46 +0100 <haskellbridge> <sm> Yes megaparsec can give a very pretty version
2024-11-08 18:02:54 +0100 <EvanR> but if it fails on the first or second | character the problem must be something to do with the "or" expression parser
2024-11-08 18:03:21 +0100 <EvanR> does `symbol "||"` do what you think it does
2024-11-08 18:03:37 +0100 <haskellbridge> <magic_rb> sm: im trying to figure out that now
2024-11-08 18:03:39 +0100 <EvanR> and is space being consumed at the end of each construction properly
2024-11-08 18:04:07 +0100 <tomsmeding> megaparsec doesn't backtrack unless you tell it to
2024-11-08 18:04:28 +0100 <tomsmeding> magic_rb: your parser is going to see the '(' which makes the first alternative of parseOp happy, so you recurse into parseOp
2024-11-08 18:04:46 +0100 <tomsmeding> then it tries the 'between' again which fails, but it makes progress in parseOpEqual by parsing `"bar"`
2024-11-08 18:04:51 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-11-08 18:05:00 +0100 <tomsmeding> so then it expects `==` but it gets something else (namely `||`) and it bails out
2024-11-08 18:05:15 +0100 <tomsmeding> wrap `try` around the parse* alternatives in your <|> sequence in parseOp
2024-11-08 18:05:58 +0100 <mauke> shouldn't the between "(" ")" parser be listed last?
2024-11-08 18:06:15 +0100user363627(~user@user/user363627) user363627
2024-11-08 18:06:21 +0100 <tomsmeding> mauke: why?
2024-11-08 18:06:26 +0100 <haskellbridge> <magic_rb> if i do that it gets into an infinite loop (putting it last)
2024-11-08 18:06:29 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 18:06:39 +0100 <haskellbridge> <sm> Also use megaparsec’s dbg to see what’s happening
2024-11-08 18:06:43 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1))
2024-11-08 18:06:55 +0100 <tomsmeding> magic_rb: yes because you also have left recursion
2024-11-08 18:07:04 +0100 <mauke> ok, I might have misunderstood the structure of the parser ... right
2024-11-08 18:07:11 +0100 <haskellbridge> <magic_rb> im so lost lmao
2024-11-08 18:07:22 +0100 <tomsmeding> parseOpOr starts by parsing parseOp, so if the between, parseOpEqual, parseOpNot and parseOpIn parsers fail, then you're going to loop parseOp -> parseOpOr -> parseOp -> parseOpOr -> ...
2024-11-08 18:07:36 +0100 <tomsmeding> this is called "left recursion" in a grammar
2024-11-08 18:08:44 +0100 <tomsmeding> magic_rb: this doesn't use a parser library, it does things manually, but it's a nice intro into multiple precedence levels (* goes before +, etc.) and how to handle them in a parser
2024-11-08 18:09:10 +0100 <EvanR> since parens are required you don't have to know anything about precedence but you do need to avoid left recursion
2024-11-08 18:09:39 +0100 <tomsmeding> that hfm article cheats out by parsing all operators as right-associative (i.e. `a + b + c` means `a + (b + c)`, not `(a + b) + c`), which avoids the left-recursion problem
2024-11-08 18:09:43 +0100acidjnk(~acidjnk@p200300d6e7283f561805fdf183b39650.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2024-11-08 18:09:52 +0100 <tomsmeding> but I suspect the same cheating solution would work for you too
2024-11-08 18:09:52 +0100 <EvanR> did you link something
2024-11-08 18:10:02 +0100 <tomsmeding> did I not? oh
2024-11-08 18:10:04 +0100 <tomsmeding> http://learn.hfm.io/expressions.html
2024-11-08 18:10:24 +0100 <haskellbridge> <sm> Thank you EvanR 😅
2024-11-08 18:11:14 +0100 <haskellbridge> <magic_rb> ok ill read that thing over the weekend and come back to my thing after it... i did not anticipate parsing being so difficult
2024-11-08 18:11:58 +0100 <EvanR> i.e. (a == tags) || (c -> tags) || (e -> tags) can get away with not associating or precedencing
2024-11-08 18:12:29 +0100 <mauke> left recursion is basically just a function unconditionally calling itself
2024-11-08 18:12:37 +0100 <mauke> which obviously cannot terminate
2024-11-08 18:12:39 +0100 <EvanR> and these operators except for == seem to make no sense when chained xD
2024-11-08 18:12:45 +0100 <EvanR> er except for ||
2024-11-08 18:12:55 +0100vpan(~vpan@212.117.1.172) (Quit: Leaving.)
2024-11-08 18:13:03 +0100 <EvanR> (ignore for the moment we chain -> in haskell and potentially == in C)
2024-11-08 18:14:17 +0100 <EvanR> magic_rb, your language seems pretty straightforward, it's probably just a small bug somewhere
2024-11-08 18:14:30 +0100 <tomsmeding> I think there are two bugs: missing 'try', and left recursion
2024-11-08 18:14:50 +0100 <haskellbridge> <magic_rb> i have try
2024-11-08 18:15:16 +0100 <tomsmeding> magic_rb: your parser for `||` wants an op on both sides
2024-11-08 18:15:17 +0100 <haskellbridge> <magic_rb> https://paste.tomsmeding.com/hq0SOVbH
2024-11-08 18:15:20 +0100 <tomsmeding> that isn't going to work
2024-11-08 18:15:42 +0100 <tomsmeding> because you're already parsing an op, and when you're at the beginning of parseOpOr you don't know yet if there will be a `||` coming
2024-11-08 18:15:42 +0100 <EvanR> something like, term = try p1 <|> try p2 <|> try p3 <|> try p4, if any of those might test more than 1 character before failing
2024-11-08 18:16:21 +0100 <haskellbridge> <magic_rb> tomsmeding: ok so what do i do to make it work :)
2024-11-08 18:16:31 +0100 <tomsmeding> magic_rb: I think the 'try' around the between parser is technically unnecessary because megaparsec does backtrack if the very first primitive parser in a branch fails, and `symbol` does only one primitive thing
2024-11-08 18:16:58 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 18:17:06 +0100 <tomsmeding> magic_rb: honestly the easiest is to make some precedence levels
2024-11-08 18:17:16 +0100 <tomsmeding> like in arithmetic, you have +,- and */=
2024-11-08 18:17:20 +0100 <tomsmeding> er, *,/
2024-11-08 18:17:20 +0100 <haskellbridge> <magic_rb> because i could probably parse this manually, as in tokenize the thing and then hammer it into a tree. I wanted to do megaparsec tho
2024-11-08 18:17:20 +0100ubert(~Thunderbi@178.165.164.236.wireless.dyn.drei.com) ubert
2024-11-08 18:17:34 +0100 <haskellbridge> <magic_rb> tomsmeding: okay, yeah sure, how do i do that in megaparsec :)
2024-11-08 18:17:44 +0100 <tomsmeding> make one function for each precedence level
2024-11-08 18:18:05 +0100 <mauke> wasn't there a precedence parser generator somewhere?
2024-11-08 18:18:05 +0100 <haskellbridge> <magic_rb> ah so split "parseOp" into multiple levels
2024-11-08 18:18:35 +0100 <tomsmeding> e.g. in arithmetic, make parsePlusMinus, parseTimesDivide, parseAtom; parsePlusMinus first calls parseTimesDivide to get the a non-`+-` thing, then it tries + or -
2024-11-08 18:18:36 +0100 <EvanR> are we just ignoring the information that there will only ever be (a op b), two things parenthesized
2024-11-08 18:18:44 +0100 <tomsmeding> EvanR: that's irrelevant
2024-11-08 18:18:51 +0100son0p(~ff@186.115.69.167) son0p
2024-11-08 18:18:53 +0100 <EvanR> sure it will still work but be unnecessary
2024-11-08 18:19:16 +0100 <tomsmeding> if you want every single binary op to be parenthesised, you're just saying "I have two precedence levels: operators and parentheses"
2024-11-08 18:19:20 +0100 <EvanR> by seeing if the first character is ( or " you know what to do
2024-11-08 18:19:22 +0100 <tomsmeding> you still need to put parentheses in a separate thing
2024-11-08 18:19:41 +0100 <tomsmeding> because otherwise what is the parser going to do if it sees "a && b || c"
2024-11-08 18:19:45 +0100 <EvanR> recurse or begin a binary term
2024-11-08 18:19:48 +0100 <tomsmeding> sure, it's invalid, but currently it'll loop
2024-11-08 18:20:07 +0100 <EvanR> got it, ignoring the information about there only ever being (a op b)
2024-11-08 18:20:10 +0100 <tomsmeding> the very easiest version is to require _every_ binary operation to be wrapped in parentheses
2024-11-08 18:20:17 +0100 <tomsmeding> including the top level
2024-11-08 18:20:17 +0100 <EvanR> that's what I said
2024-11-08 18:20:22 +0100 <EvanR> no
2024-11-08 18:20:23 +0100 <tomsmeding> but then you still have two functions!
2024-11-08 18:20:37 +0100 <tomsmeding> parseParenthesised, which calls out to parseOp which does the <|> chain
2024-11-08 18:20:43 +0100 <tomsmeding> which calls parseParenthesised again
2024-11-08 18:21:00 +0100 <EvanR> as long as you don't have an infinite series of ((((((... that's fine
2024-11-08 18:21:08 +0100 <tomsmeding> if you then want parentheses at the top level to be optional, you can start with parseParenthesised <|> parseOp at the top level
2024-11-08 18:21:14 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds)
2024-11-08 18:21:16 +0100 <tomsmeding> EvanR: how would the parser look then :p
2024-11-08 18:21:38 +0100 <EvanR> I think they just need try around several choices in the <|> chain
2024-11-08 18:21:48 +0100 <tomsmeding> EvanR: they already have that, now there's left recursion
2024-11-08 18:21:53 +0100 <tomsmeding> in || and in &&
2024-11-08 18:21:53 +0100 <haskellbridge> <magic_rb> ^
2024-11-08 18:22:17 +0100 <EvanR> not in the version I'm seeing
2024-11-08 18:22:23 +0100 <tomsmeding> they posted a new paste
2024-11-08 18:22:26 +0100 <tomsmeding> https://paste.tomsmeding.com/hq0SOVbH
2024-11-08 18:22:44 +0100 <EvanR> that's not doing direct left recursion it tests for ( first
2024-11-08 18:22:58 +0100 <EvanR> it can fail before recursing
2024-11-08 18:23:04 +0100 <mauke> that's only half the code
2024-11-08 18:23:14 +0100 <mauke> I suspect mutual recursion
2024-11-08 18:23:15 +0100 <tomsmeding> okay so for `a || b`, the first character is not (
2024-11-08 18:23:29 +0100 <haskellbridge> <magic_rb> https://paste.tomsmeding.com/wsx4oGSc so now have that, how exactly does that get me anywhere
2024-11-08 18:23:29 +0100 <tomsmeding> so then it enters, at some point, parseOpOr, because the previous ones fail
2024-11-08 18:23:35 +0100 <tomsmeding> then it recurses to parseOp immediately
2024-11-08 18:23:37 +0100 <tomsmeding> this is left recursion
2024-11-08 18:24:01 +0100 <EvanR> the structure is a bit weird, this is supposedly "parse operator expression, parseOp" but it's try to parse a "primary" (parenthesized expression)
2024-11-08 18:24:08 +0100 <tomsmeding> magic_rb: what is the top level?
2024-11-08 18:24:10 +0100 <EvanR> which is something else
2024-11-08 18:24:23 +0100 <haskellbridge> <magic_rb> tomsmeding: i dont have that yet, not sure what is it supposed to be
2024-11-08 18:24:38 +0100 <mauke> https://markkarpov.com/tutorial/megaparsec.html#parsing-expressions
2024-11-08 18:24:47 +0100 <mauke> has anyone mentioned this yet?
2024-11-08 18:25:05 +0100 <tomsmeding> that's cheating, that uses buildExpressionParser :p
2024-11-08 18:25:26 +0100 <tomsmeding> uh, makeExprParser (it's called buildExpressionParser in parsec)
2024-11-08 18:25:29 +0100 <EvanR> sorry, I brought that up first but, but since it's just (a op b), it's overkill
2024-11-08 18:25:48 +0100 <EvanR> but I see that might be wrong because you can do term || term || term || term
2024-11-08 18:25:54 +0100 <mauke> works, though
2024-11-08 18:26:02 +0100 <haskellbridge> <magic_rb> (and i think id like to know how to do it myself, because im completely lost right now)
2024-11-08 18:26:15 +0100 <haskellbridge> <magic_rb> mauke: if i cared about what works only i wouldnt be writing haskell :)
2024-11-08 18:26:33 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
2024-11-08 18:26:54 +0100 <tomsmeding> magic_rb: is it `==` and `->` are at the same level, they go before `&&`, and `&&` goes before `||`?
2024-11-08 18:26:59 +0100 <EvanR> the classic way is to divide the term language into primary expression and operator expression, and (...) is a primary not an operator
2024-11-08 18:27:50 +0100 <EvanR> so those two kinds of expression correspond with 2 parsers
2024-11-08 18:27:53 +0100 <haskellbridge> <magic_rb> tomsmeding: uh, ive no clue, ive confused myself beyond reason. Ill pick this up later, i gotta run anyway
2024-11-08 18:28:14 +0100 <haskellbridge> <magic_rb> thanks everyone for trying to help me :)
2024-11-08 18:28:30 +0100 <EvanR> I confused myself by try to dumb down the language xD
2024-11-08 18:28:43 +0100 <EvanR> without chaining different operators
2024-11-08 18:28:48 +0100 <haskellbridge> <sm> hello, I am once again urging you to insert dbg or at least trace calls in every parse step so you can see operationally what is happening, it’s very difficult to mentally debug parser combinators
2024-11-08 18:28:56 +0100 <haskellbridge> <sm> :)
2024-11-08 18:29:15 +0100 <haskellbridge> <magic_rb> will do, after i figure out how to actually use that :) and read it :)
2024-11-08 18:29:37 +0100 <haskellbridge> <sm> 👍
2024-11-08 18:29:49 +0100 <haskellbridge> <magic_rb> tom asked me what bound tighter and my brains response was "uh, && before || yes"
2024-11-08 18:30:05 +0100 <haskellbridge> <magic_rb> i think im done for now 😂, thanks again
2024-11-08 18:30:08 +0100 <mauke> the traditional way to do rec-descent infix expressions is to have a hierarchy of expression parsers. like expr3 = do { expr2; op "+"; expr3 }; expr2 = do { expr1; op "*"; expr 2 }; expr1 = do { expr0; op "**"; expr1 } expr0 = between "(" ")" expr3 <|> term
2024-11-08 18:30:37 +0100 <haskellbridge> <magic_rb> wouldnt that mean you cant have "(4 + 3) + 2"?
2024-11-08 18:30:53 +0100 <haskellbridge> <sm> You are worthy opponent, parser combinators, but they shall return ✊
2024-11-08 18:31:07 +0100 <mauke> no, that would work fine
2024-11-08 18:31:27 +0100 <mauke> we start in expr3 (the top level)
2024-11-08 18:32:26 +0100 <mauke> then we immediately climb down the hierarchy to expr0, which consumes the leading "("
2024-11-08 18:33:11 +0100 <mauke> then we try expr3 again. (current call stack: expr3 -> expr2 -> expr1 -> expr0 -> between -> expr3)
2024-11-08 18:33:53 +0100 <mauke> the inner instance of expr3 climbs down the hierarchy again, but this time there is no "(" to be consumed, so expr0 tries term
2024-11-08 18:34:00 +0100 <mauke> which presumably successfully consumes 4
2024-11-08 18:34:01 +0100 <EvanR> so basically, try "(" term ")" last
2024-11-08 18:34:42 +0100 <mauke> then we return all the way back up the hierarchy, trying all operators in turn (and failing), until we arrive at expr3 again and op "+" succeeds
2024-11-08 18:35:20 +0100 <mauke> then expr3 calls itself (because for simplicity, all of my operators are right associative)
2024-11-08 18:35:34 +0100briandaed(~root@185.234.210.211)
2024-11-08 18:35:47 +0100 <mauke> which adds another round of expr3 -> expr2 -> expr1 -> expr0 -> term, where we consume 3
2024-11-08 18:36:13 +0100wootehfoot(~wootehfoo@user/wootehfoot) wootehfoot
2024-11-08 18:36:34 +0100 <mauke> on the way back up, no operator parser succeeds in consuming ")", so expr3 returns back into 'between'
2024-11-08 18:36:47 +0100 <mauke> which does consume ")"
2024-11-08 18:36:48 +0100wootehfoot(~wootehfoo@user/wootehfoot) (Max SendQ exceeded)
2024-11-08 18:37:10 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 18:37:42 +0100wootehfoot(~wootehfoo@user/wootehfoot) wootehfoot
2024-11-08 18:38:05 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-08 18:38:07 +0100 <mauke> btw, call stack at the point where we consume "3": expr3 -> expr2 -> expr1 -> expr0 -> between -> expr3 -> expr3 -> expr2 -> expr1 -> expr0 -> term
2024-11-08 18:39:08 +0100 <mauke> after "3": expr3 -> expr2 -> expr1 -> expr0 -> between
2024-11-08 18:39:52 +0100 <mauke> so when 'between' consumes ")", we return back up the expr hierarchy and try all the possible operators on the way up
2024-11-08 18:40:12 +0100acidjnk(~acidjnk@p200300d6e7283f5628026389afde3b8f.dip0.t-ipconnect.de) acidjnk
2024-11-08 18:40:19 +0100 <mauke> which only succeeds at the top level, with expr3 -> op "+", because the next symbol is a "+"
2024-11-08 18:41:06 +0100 <mauke> for the final "2", we basically do the same thing again: expr3 -> expr3 -> expr2 -> expr1 -> expr0 -> term
2024-11-08 18:41:21 +0100 <mauke> (two expr3 at the start because after seeing "+", expr3 calls itself)
2024-11-08 18:42:09 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 18:42:59 +0100econo_(uid147250@id-147250.tinside.irccloud.com)
2024-11-08 18:43:01 +0100 <mauke> (I hope at least some of this made some sense)
2024-11-08 18:45:35 +0100 <EvanR> *parsing made easy* xD
2024-11-08 18:47:14 +0100Sgeo(~Sgeo@user/sgeo) Sgeo
2024-11-08 18:48:34 +0100shapr(~user@4.30.215.226) shapr
2024-11-08 18:50:44 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection)
2024-11-08 18:52:22 +0100 <haskellbridge> <magic_rb> mauke i kind of get what youre saying. But ill have to bang my head against it some more to actually make sense of it
2024-11-08 18:52:56 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 18:53:30 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 18:54:05 +0100misterfish(~misterfis@84.53.85.146) misterfish
2024-11-08 18:57:53 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
2024-11-08 19:04:19 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-11-08 19:08:06 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) Unicorn_Princess
2024-11-08 19:08:20 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2024-11-08 19:08:23 +0100chele(~chele@user/chele) (Remote host closed the connection)
2024-11-08 19:08:44 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 19:09:19 +0100xdminsy(~xdminsy@117.147.71.147) (Read error: Connection reset by peer)
2024-11-08 19:13:38 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 19:14:35 +0100tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) tzh
2024-11-08 19:19:41 +0100mud(~mud@user/kadoban) (Quit: quit)
2024-11-08 19:22:51 +0100mud(~mud@user/kadoban) kadoban
2024-11-08 19:23:18 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 19:24:57 +0100pointlessslippe1(~pointless@62.106.85.17) (Read error: Connection reset by peer)
2024-11-08 19:25:46 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection)
2024-11-08 19:28:08 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 19:30:01 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 19:30:03 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection)
2024-11-08 19:30:18 +0100pointlessslippe1(~pointless@62.106.85.17) pointlessslippe1
2024-11-08 19:37:54 +0100misterfish(~misterfis@84.53.85.146) (Ping timeout: 260 seconds)
2024-11-08 19:39:56 +0100AWizzArd(~code@user/awizzard) (Ping timeout: 252 seconds)
2024-11-08 19:40:03 +0100AWizzArd(~code@gehrels.uberspace.de)
2024-11-08 19:40:18 +0100noctux(~noctux@user/noctux) (Ping timeout: 252 seconds)
2024-11-08 19:40:21 +0100shapr(~user@4.30.215.226) (Quit: walk home)
2024-11-08 19:41:20 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 19:41:49 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a)
2024-11-08 19:42:27 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2024-11-08 19:42:33 +0100Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) Tuplanolla
2024-11-08 19:42:58 +0100noctux(~noctux@user/noctux) noctux
2024-11-08 19:45:53 +0100 <kqr> merijn, Numeric looks good for what I need. Thanks!
2024-11-08 19:46:39 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 19:46:41 +0100longlongdouble(~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer)
2024-11-08 19:47:01 +0100longlongdouble(~longlongd@169.150.196.101)
2024-11-08 19:50:41 +0100longlongdouble(~longlongd@169.150.196.101) (Remote host closed the connection)
2024-11-08 19:51:12 +0100user363627(~user@user/user363627) (Quit: Konversation terminated!)
2024-11-08 19:51:13 +0100 <famubu> I was looking at the wikipedia page for monad in category theory: https://en.wikipedia.org/wiki/Monad_(category_theory)#Formal_definition
2024-11-08 19:51:16 +0100 <famubu> The commutative diagram and properties mention both `T ηand `η T`.
2024-11-08 19:51:19 +0100 <famubu> What is the difference between the two?
2024-11-08 19:51:31 +0100 <famubu> I could understand `η T` part. It does the 'opposite' of flattening.
2024-11-08 19:51:35 +0100 <famubu> is a functor. That means it's like a function whose 'argument' is a category, right? And `η` is a natural transformation, not a category.
2024-11-08 19:51:49 +0100 <famubu> * `T` is a functor.
2024-11-08 19:51:56 +0100 <famubu> I am not that familiar with category theory.
2024-11-08 19:56:51 +0100 <tomsmeding> famubu: a functor from C to C' consists of a mapping from Ob C to Ob C' and a mapping from the arrows in C to the arrows in C'
2024-11-08 19:57:09 +0100longlongdouble(~longlongd@169.150.196.101)
2024-11-08 19:57:56 +0100 <tomsmeding> if you have a natural transformation between two functors T1 and T2, and a functor T, then you can build a natural transformation from T . T1 to T . T2
2024-11-08 19:58:10 +0100 <tomsmeding> they denote that by applying T to the natural transformation
2024-11-08 19:58:37 +0100 <tomsmeding> see e.g. the third commutative diagram: you have mu_X on the bottom arrow, and T(mu_X) on the top arrow
2024-11-08 19:58:51 +0100 <tomsmeding> the difference is that the source and target of T(mu_X) have an additional T() around them
2024-11-08 19:59:51 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 20:00:09 +0100 <tomsmeding> I'm not sure what I just said is correct
2024-11-08 20:00:18 +0100 <tomsmeding> perhaps wait until someone like ncf comes along lol
2024-11-08 20:03:09 +0100 <ncf> famubu: those are whiskerings
2024-11-08 20:03:29 +0100 <ncf> also called horizontal compositions: https://en.wikipedia.org/wiki/Natural_transformation#Operations_with_natural_transformations
2024-11-08 20:04:06 +0100 <ncf> in haskell, Tη is fmap @T pure, while ηT is pure @(T a)
2024-11-08 20:04:30 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 20:04:40 +0100shapr(~user@2601:19c:417e:5434:6d2c:aeb2:81b3:3df4) shapr
2024-11-08 20:05:10 +0100 <ncf> or pure @T @(T a)
2024-11-08 20:06:05 +0100 <famubu> Okay, looks like I got a few terms to look up. Thanks. Had seen horizonatal composition mentioned in the wikipedia article. Reading nlab now.
2024-11-08 20:06:06 +0100 <ncf> ah, https://en.wikipedia.org/wiki/Natural_transformation#Whiskering
2024-11-08 20:07:03 +0100longlongdouble(~longlongd@169.150.196.101) (Ping timeout: 245 seconds)
2024-11-08 20:07:43 +0100 <kqr> Hm. I'm looking at doing some validation in an Attoparsec parser and I want to fail the parse if the validation fails – ideally with a value of some custom error type. I feel like I have done this before but I cannot for the life of me figure out how I did it now.
2024-11-08 20:11:15 +0100 <kaol> ExceptT is one option.
2024-11-08 20:11:41 +0100 <kqr> Hm. I'd hoped I could hook into the parser monad itself, but maybe it doesn't support failure in the way I think of it?
2024-11-08 20:11:50 +0100 <tomsmeding> it has `fail` if you're okay with strings
2024-11-08 20:12:57 +0100 <tomsmeding> and the type that `fail` uses in the parser monad looks pretty monomorphically String
2024-11-08 20:13:19 +0100 <geekosaur> afaik `fail` itself requires it?
2024-11-08 20:13:43 +0100 <tomsmeding> "requires"?
2024-11-08 20:13:57 +0100 <geekosaur> https://downloads.haskell.org/ghc/latest/docs/libraries/base-4.20.0.0-1f57/Control-Monad-Fail.html…
2024-11-08 20:14:09 +0100 <geekosaur> `fail :: String -> m a`
2024-11-08 20:14:16 +0100 <tomsmeding> sure, but the Parser monad doesn't support anything more general than String
2024-11-08 20:14:17 +0100 <kaol> Are you sure you didn't do it with megaparsec the last time? It has more knobs including type variable for the error type.
2024-11-08 20:14:19 +0100 <tomsmeding> is what I meant
2024-11-08 20:15:14 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 20:17:50 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2024-11-08 20:20:17 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 20:24:37 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-08 20:28:37 +0100JuanDaugherty(~juan@user/JuanDaugherty) JuanDaugherty
2024-11-08 20:29:58 +0100user363627(~user@user/user363627) user363627
2024-11-08 20:31:01 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 20:32:01 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2024-11-08 20:34:25 +0100 <darkling> I are Beard.
2024-11-08 20:34:33 +0100 <darkling> *Beered.
2024-11-08 20:36:02 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 20:40:04 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) Smiles
2024-11-08 20:45:34 +0100 <EvanR> .oO( parse don't validate ? )
2024-11-08 20:46:49 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 20:46:55 +0100alexherbo2(~alexherbo@2a02-8440-3200-3777-6c66-54b5-7b86-7066.rev.sfr.net) alexherbo2
2024-11-08 20:47:11 +0100misterfish(~misterfis@84.53.85.146) misterfish
2024-11-08 20:47:54 +0100JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-11-08 20:49:10 +0100 <darkling> -ECHANNEL
2024-11-08 20:49:12 +0100 <darkling> Sorry.
2024-11-08 20:49:42 +0100 <briandaed> no need to sorry
2024-11-08 20:50:01 +0100 <yin> is there a better way to write ` f x | Pattern <- g x , y <- g x = h y ; ...` ?
2024-11-08 20:50:38 +0100 <geekosaur> use an as-pattern?
2024-11-08 20:50:56 +0100 <yin> p@Pattern ?
2024-11-08 20:50:59 +0100 <geekosaur> `| y@Pattern <- g x = …`
2024-11-08 20:51:07 +0100 <yin> nice, that works. ty
2024-11-08 20:51:13 +0100 <geekosaur> with parens around `Pattern` as needed
2024-11-08 20:51:30 +0100 <mauke> f (g -> y@Pattern) =
2024-11-08 20:51:37 +0100 <yin> makes sense. i'm still getting used to patterns
2024-11-08 20:51:48 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 20:56:23 +0100alexherbo2(~alexherbo@2a02-8440-3200-3777-6c66-54b5-7b86-7066.rev.sfr.net) (Remote host closed the connection)
2024-11-08 20:56:42 +0100alexherbo2(~alexherbo@2a02-8440-3200-3777-6c66-54b5-7b86-7066.rev.sfr.net) alexherbo2
2024-11-08 21:00:01 +0100caconym(~caconym@user/caconym) (Quit: bye)
2024-11-08 21:00:40 +0100caconym(~caconym@user/caconym) caconym
2024-11-08 21:02:21 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
2024-11-08 21:02:37 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 21:07:45 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
2024-11-08 21:07:55 +0100 <shapr> I use Nix and I switch GHC and cabal versions between projects, I think that's the cause of this warning? Warning: Parsing the index cache failed (Data.Binary.Get.runGet at position 16: Non-matching structured hashes:
2024-11-08 21:08:37 +0100 <shapr> Is there a 'fix' ? Maybe Cabal can save an index cache per version?
2024-11-08 21:10:22 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-11-08 21:11:24 +0100 <briandaed> https://github.com/haskell/cabal/issues/6659
2024-11-08 21:13:22 +0100 <shapr> briandaed: thanks!
2024-11-08 21:15:31 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-11-08 21:15:34 +0100L29Ah(~L29Ah@wikipedia/L29Ah) L29Ah
2024-11-08 21:18:24 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 21:18:26 +0100Natch(~natch@c-92-34-7-158.bbcust.telenor.se) (Read error: Connection reset by peer)
2024-11-08 21:19:17 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2024-11-08 21:19:19 +0100 <yin> what about `f x | y@Pattern { z = minBound } = ...` ?
2024-11-08 21:19:32 +0100 <yin> is there an ergonomic way of achieving this?
2024-11-08 21:20:21 +0100 <yin> sorry i mean
2024-11-08 21:20:35 +0100 <yin> f x | y@Pattern { z = minBound } <- g x = ...
2024-11-08 21:21:01 +0100 <tomsmeding> yin: you mean matching on a constant instead of a constructor?
2024-11-08 21:21:11 +0100 <tomsmeding> patterns don't allow thus, use a separate guard
2024-11-08 21:21:16 +0100 <tomsmeding> *this
2024-11-08 21:21:45 +0100 <tomsmeding> | y@Pattern { z = zval } <- g x, zval == minBound = ...
2024-11-08 21:22:00 +0100 <tomsmeding> or | y <- g x, z y == minBound = ...
2024-11-08 21:22:37 +0100 <tomsmeding> if you want to get funky you can also `| y@Pattern { z = ((== minBound) -> True) } <- g x = ...` using ViewPatterns but... perhaps don't :D
2024-11-08 21:23:20 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 21:34:12 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 21:34:53 +0100 <sm> @where+ stack-ghcup https://www.haskell.org/ghcup/guide/#stack-integration
2024-11-08 21:34:53 +0100 <lambdabot> Done.
2024-11-08 21:35:26 +0100 <sm> briandaed your nick is breaking my brain :)
2024-11-08 21:37:16 +0100 <briandaed> I stole it from someone probably, not sure from whom
2024-11-08 21:38:17 +0100 <yin> tomsmeding: ty. i'm trying to avoid funkyness
2024-11-08 21:38:45 +0100 <yin> just restructured everything so i don't have to match any of that
2024-11-08 21:38:48 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
2024-11-08 21:50:01 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 21:53:48 +0100haskellbridge(~hackager@syn-024-093-192-219.res.spectrum.com) (Remote host closed the connection)
2024-11-08 21:54:37 +0100haskellbridge(~hackager@syn-024-093-192-219.res.spectrum.com) hackager
2024-11-08 21:54:37 +0100ChanServ+v haskellbridge
2024-11-08 21:55:09 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
2024-11-08 21:56:28 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 22:01:06 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
2024-11-08 22:05:44 +0100 <hololeap> % :t Node
2024-11-08 22:05:44 +0100 <yahb2> <interactive>:1:1: error: [GHC-88464] ; Data constructor not in scope: Node
2024-11-08 22:05:55 +0100 <hololeap> % import Data.Tree
2024-11-08 22:05:55 +0100 <yahb2> <no output>
2024-11-08 22:05:57 +0100 <hololeap> % :t Node
2024-11-08 22:05:57 +0100 <yahb2> Node :: a -> [Tree a] -> Tree a
2024-11-08 22:08:20 +0100 <hololeap> could (toList :: Tree a -> [a]) be considered a forgetful functor?
2024-11-08 22:11:32 +0100briandaed(~root@185.234.210.211) (Remote host closed the connection)
2024-11-08 22:12:10 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) merijn
2024-11-08 22:14:20 +0100machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2024-11-08 22:16:15 +0100 <SrPx> is it not possible to import a static string into a haskell executable?
2024-11-08 22:16:19 +0100 <SrPx> at compile time
2024-11-08 22:16:31 +0100 <tomsmeding> SrPx: https://hackage.haskell.org/package/file-embed
2024-11-08 22:16:38 +0100 <SrPx> ty
2024-11-08 22:17:14 +0100merijn(~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)