2025/05/02

2025-05-02 00:01:28 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 00:04:05 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-02 00:05:34 +0200sprotte24(~sprotte24@p200300d16f04420079bd62a2defad9dd.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2025-05-02 00:14:45 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 00:15:04 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 00:15:30 +0200j1n37-(~j1n37@user/j1n37) (Ping timeout: 244 seconds)
2025-05-02 00:19:08 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich)
2025-05-02 00:19:32 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 00:19:54 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-05-02 00:22:43 +0200euleritian(~euleritia@77.23.248.47) (Read error: Connection reset by peer)
2025-05-02 00:23:33 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 00:26:24 +0200todi(~todi@p57803331.dip0.t-ipconnect.de) (Quit: ZNC - https://znc.in)
2025-05-02 00:26:37 +0200manwithluck(~manwithlu@2a09:bac5:5081:2dc::49:f6) (Remote host closed the connection)
2025-05-02 00:30:34 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 00:30:50 +0200manwithluck(~manwithlu@2a09:bac5:5081:2dc::49:f6) manwithluck
2025-05-02 00:37:31 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
2025-05-02 00:47:24 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2025-05-02 00:47:48 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 00:47:48 +0200target_i(~target_i@user/target-i/x-6023099) (Quit: leaving)
2025-05-02 00:48:36 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 00:49:50 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2025-05-02 00:50:41 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 00:53:30 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 01:01:34 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-02 01:04:22 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 01:08:52 +0200acidjnk_new(~acidjnk@p200300d6e71c4f767dcf0a605c28f3a7.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
2025-05-02 01:09:16 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 01:12:33 +0200xff0x(~xff0x@2409:251:9040:2c00:1c47:7f78:37e8:e2a1)
2025-05-02 01:14:55 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
2025-05-02 01:16:27 +0200weary-traveler(~user@user/user363627) user363627
2025-05-02 01:20:11 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 01:25:02 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 01:29:08 +0200JuanDaugherty(~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
2025-05-02 01:35:57 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 01:38:36 +0200tomboy64(~tomboy64@user/tomboy64) (Ping timeout: 252 seconds)
2025-05-02 01:41:22 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2025-05-02 01:41:35 +0200tomboy64(~tomboy64@user/tomboy64) tomboy64
2025-05-02 01:42:02 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 01:45:53 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 01:47:13 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
2025-05-02 01:47:26 +0200ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-05-02 01:49:37 +0200sajenim(~sajenim@user/sajenim) sajenim
2025-05-02 01:50:13 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 248 seconds)
2025-05-02 01:50:13 +0200ljdarj1ljdarj
2025-05-02 01:56:51 +0200tabaqui(~tabaqui@167.71.80.236) (Ping timeout: 252 seconds)
2025-05-02 01:57:44 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 01:58:43 +0200sajenim(~sajenim@user/sajenim) (Quit: WeeChat 4.4.3)
2025-05-02 01:59:30 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
2025-05-02 02:00:56 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 02:02:45 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-05-02 02:03:10 +0200nitrix(~nitrix@user/meow/nitrix) (Ping timeout: 252 seconds)
2025-05-02 02:05:12 +0200LainIwakura(~LainIwaku@user/LainIwakura) LainIwakura
2025-05-02 02:07:11 +0200nitrix(~nitrix@user/meow/nitrix) nitrix
2025-05-02 02:13:30 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 02:17:37 +0200Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2025-05-02 02:18:09 +0200j1n37-(~j1n37@user/j1n37) j1n37
2025-05-02 02:18:54 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 260 seconds)
2025-05-02 02:19:18 +0200tremon(~tremon@83.80.159.219) (Quit: getting boxed in)
2025-05-02 02:20:24 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 02:22:57 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2025-05-02 02:31:34 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 02:36:37 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2025-05-02 02:38:12 +0200otto_s(~user@p4ff271c5.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2025-05-02 02:39:29 +0200otto_s(~user@p4ff270d6.dip0.t-ipconnect.de)
2025-05-02 02:47:20 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 02:51:55 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
2025-05-02 02:52:52 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2025-05-02 02:53:36 +0200 <sim590> How much time after you pushed a new package version to hackage does it take usually for cabal update to pick the new version?
2025-05-02 02:55:38 +0200__jmcantrell__(~weechat@user/jmcantrell) jmcantrell
2025-05-02 02:56:33 +0200ttybitnik(~ttybitnik@user/wolper) (Quit: Fading out...)
2025-05-02 02:57:29 +0200 <sim590> nvm. it was pretty quick. I guess it might have been my version rule that wasn't right.
2025-05-02 02:59:11 +0200 <geekosaur> all I can say is that it takes several minutes
2025-05-02 02:59:25 +0200 <geekosaur> I thought I had a discussion in my backscroll but I'm not finding it now
2025-05-02 02:59:43 +0200 <sim590> So, I just made a package release with `cabal sdist`, but it didn't include the `cabal.project` file. Which ignores my previous fix. What cabal field should I use to include that file?
2025-05-02 03:00:23 +0200 <sim590> extra-source-files?
2025-05-02 03:02:03 +0200 <geekosaur> /home/allbery/.config/hexchat/logs/irccloud bnc/#hackage.log-Apr 09 03:12:12 <sclv> probably a brief delay, no more than five minutes
2025-05-02 03:02:43 +0200 <geekosaur> cabal.project isn't normally uploaded at all, since hackage doesn't understand projects, only packages
2025-05-02 03:03:08 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 03:03:08 +0200 <geekosaur> projects are a development thing, not a deployment thing
2025-05-02 03:03:10 +0200 <sim590> But, my package needs to build on other people's computer. And for that it needs the fix for GCC 15.
2025-05-02 03:04:06 +0200 <sim590> I need to have `c2hs-options: -C -std=gnu18` shipped with my package.
2025-05-02 03:04:37 +0200 <geekosaur> then you need to find a way to get that into the cabal file, because a project file, even if you manage to include one, won't be used when building as a transitive dependency
2025-05-02 03:05:58 +0200a_fantom(~fantom@33be818f.skybroadband.com)
2025-05-02 03:06:18 +0200fantom(~fantom@2.219.56.221) (Ping timeout: 244 seconds)
2025-05-02 03:08:04 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-02 03:09:32 +0200cyphase(~cyphase@user/cyphase) (Ping timeout: 252 seconds)
2025-05-02 03:11:55 +0200 <sim590> hmmmm. I tried many things with the cabal file but it didn't work. :/ Are you 100% sure cabal.project won't be used when compiling as transitive dependency? If the file is there, why would it work differently when it's build as a transitive dependency?
2025-05-02 03:12:02 +0200xff0x(~xff0x@2409:251:9040:2c00:1c47:7f78:37e8:e2a1) (Ping timeout: 265 seconds)
2025-05-02 03:13:12 +0200 <geekosaur> 100% sure
2025-05-02 03:13:33 +0200 <geekosaur> what's supposed to happen if it's already using `cabal.project`?
2025-05-02 03:13:53 +0200 <sim590> I don't understand the question.
2025-05-02 03:14:27 +0200 <geekosaur> someone's using your package as a dependency in a development tree with a `cabal.project`. what happens?
2025-05-02 03:15:09 +0200 <geekosaur> fwiw I just asked about `c2hs-options` not working in the cabal dev channel; it seems very wrong that it works in a project file but not the cabal file
2025-05-02 03:15:39 +0200 <sim590> OK, thanks for the initiative.
2025-05-02 03:15:47 +0200 <geekosaur> (unfortunately most of the dev team is asleep at this time of their night)
2025-05-02 03:16:12 +0200 <sim590> So for your question, I guess it both files could be nested. The user's file and the dependency's file?
2025-05-02 03:17:30 +0200 <geekosaur> but you need to include a `packages:` entry, which would override the main one and result it the package being installed in its own project's `dist-newstyle` where it won't be found by the main project
2025-05-02 03:18:26 +0200Typedfern(~Typedfern@135.red-83-37-43.dynamicip.rima-tde.net)
2025-05-02 03:18:56 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 03:21:28 +0200typedfern_(~Typedfern@135.red-83-37-43.dynamicip.rima-tde.net) (Ping timeout: 276 seconds)
2025-05-02 03:23:44 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-05-02 03:24:09 +0200Typedfern(~Typedfern@135.red-83-37-43.dynamicip.rima-tde.net) (Remote host closed the connection)
2025-05-02 03:25:20 +0200 <sim590> Hmmmm. OK. I don't really know why, but I guess I need prerequisites to undestand it. I don't really know how the build system does its thing, so I don't see the logic here, but OK. So I guess, my only chance now, is to have a fix from the cabal team so that c2hs-options be added to a cabal release.
2025-05-02 03:25:47 +0200 <geekosaur> I told you, it's a development thing. You're trying to use it for something else
2025-05-02 03:26:28 +0200Typedfern(~Typedfern@135.red-83-37-43.dynamicip.rima-tde.net) typedfern
2025-05-02 03:34:42 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 03:35:17 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2025-05-02 03:37:47 +0200cyphase(~cyphase@user/cyphase) cyphase
2025-05-02 03:40:19 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2025-05-02 03:40:33 +0200 <sim590> I don't know if I'm at the right spot, but I see hsc2hs-options seems to be be part of the list of recognized fields here: https://github.com/haskell/cabal/blob/7e0f040d1147770b57e76b2e51123f01e83ce263/Cabal-syntax/src/Di…
2025-05-02 03:40:40 +0200 <sim590> But c2hs is not there.
2025-05-02 03:43:34 +0200 <sim590> It might be an easy PR for me to make. I could basically mimic pretty much everything that's done for hsc2hs-options, but do it for c2hs-options.
2025-05-02 03:46:12 +0200j1n37-(~j1n37@user/j1n37) (Ping timeout: 252 seconds)
2025-05-02 03:46:45 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 03:47:47 +0200sajenim(~sajenim@user/sajenim) sajenim
2025-05-02 03:49:04 +0200 <geekosaur> 👍
2025-05-02 03:50:29 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 03:50:38 +0200volsand(~volsand@2804:1b1:1080:da6:192e:6849:5950:90dd) (Quit: volsand)
2025-05-02 03:51:49 +0200 <sim590> Thanks again for the support
2025-05-02 03:52:17 +0200 <geekosaur> what's puzzling me is, if it's not supported there, it shouldn't work in `cabal.project` either
2025-05-02 03:57:12 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 03:57:52 +0200 <sim590> hmmmm. So, there are references in the code about `c2hs-options`, but they're not in the FieldGrammar module under the PackageDescription dir. I think that explains the difference.
2025-05-02 03:58:42 +0200stef204(~stef204@user/stef204) stef204
2025-05-02 03:58:52 +0200 <sim590> So, actually, the only references I saw seems to be in test files. And they are related to the $HOME/.cabal/config file interpreter I think.
2025-05-02 03:58:57 +0200 <geekosaur> it explains the parsing, but not why it works at all
2025-05-02 03:59:41 +0200 <sim590> Yeah I agree.
2025-05-02 03:59:43 +0200 <geekosaur> did someone put it in the LBI but not then add a field for parsing?
2025-05-02 04:00:28 +0200 <geekosaur> makes me wonder how many other fields might be missing
2025-05-02 04:01:47 +0200 <geekosaur> (sorry, that might not be clear: LocalBuildInfo. the central data structures are abbreviated all over the codebase)
2025-05-02 04:02:18 +0200 <geekosaur> er, LocalBuildInformation
2025-05-02 04:06:13 +0200 <sim590> So, in the whole codebase, the string c2hs-optins only appears in test files.
2025-05-02 04:06:55 +0200 <sim590> Or could it be that c2hs actually reads the `cabal.project` file and parses the options himself? That would not have been cool, but it's just a thought.
2025-05-02 04:07:21 +0200typedfern_(~Typedfern@135.red-83-37-43.dynamicip.rima-tde.net) typedfern
2025-05-02 04:07:37 +0200Typedfern(~Typedfern@135.red-83-37-43.dynamicip.rima-tde.net) (Ping timeout: 276 seconds)
2025-05-02 04:08:16 +0200 <geekosaur> highly unlikely. most probable to me is that it's simply ignored when parsing a cabal file, but it's in LocalBuildInformation so when the cabal.project parser sees it it can add it there
2025-05-02 04:08:32 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 04:10:57 +0200 <geekosaur> and I will not be surprised to find that various others (probably in the same class: build-tool-depends) are also missing
2025-05-02 04:10:59 +0200 <int-e> AFAICS for config-like files (that includes cabal.project.local?) the field names are computed here: https://github.com/haskell/cabal/blob/master/cabal-install/src/Distribution/Client/ProjectConfig/L…
2025-05-02 04:12:09 +0200werneta(~werneta@syn-071-083-160-242.res.spectrum.com) werneta
2025-05-02 04:13:49 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-05-02 04:14:00 +0200 <int-e> which should eventually trace back to https://github.com/haskell/cabal/blob/master/Cabal/src/Distribution/Simple/Program/Builtin.hs#L67 and since the most obvious thing works when you add a new program there... it's easy to miss that the .cabal file syntax is completely separate
2025-05-02 04:14:07 +0200 <sim590> So may be the `cabal.project` file is agnostic about the program name and it just passes arguments to whatever you tell it to? But inside, `*.cabal`, it's not.
2025-05-02 04:15:24 +0200 <geekosaur> it has to be in the programDb. but cabal files are more specific, yes
2025-05-02 04:15:25 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 276 seconds)
2025-05-02 04:15:49 +0200 <sim590> Yeah, that's what I just realized. I couldn't properly phrase it. Thanks. :P
2025-05-02 04:15:50 +0200 <geekosaur> I mentioned earlier that the project file parser is a bit half-assed; here, that's working in your favor 🙂
2025-05-02 04:17:04 +0200td_(~td@i53870904.versanet.de) (Ping timeout: 245 seconds)
2025-05-02 04:17:38 +0200 <geekosaur> (it does still have to be in the progDb or it wouldn't have anywhere to store the option)
2025-05-02 04:19:12 +0200td_(~td@i53870923.versanet.de) td_
2025-05-02 04:19:16 +0200 <int-e> (and progDb is populated from the builtinPrograms list)
2025-05-02 04:24:19 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 04:25:19 +0200stef204(~stef204@user/stef204) (Quit: WeeChat 4.2.1)
2025-05-02 04:29:06 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 04:31:06 +0200todi(~todi@p57803331.dip0.t-ipconnect.de) todi
2025-05-02 04:35:45 +0200lambdabot(~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection)
2025-05-02 04:35:52 +0200lambdabot(~lambdabot@haskell/bot/lambdabot) lambdabot
2025-05-02 04:35:52 +0200ChanServ+v lambdabot
2025-05-02 04:39:40 +0200todi1(~todi@183.96.168.66)
2025-05-02 04:40:07 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 04:40:28 +0200todi(~todi@p57803331.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2025-05-02 04:44:52 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 04:49:09 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 04:52:34 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2025-05-02 04:52:52 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 04:55:54 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 04:56:14 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds)
2025-05-02 05:00:29 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-02 05:01:03 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2025-05-02 05:01:14 +0200stef204(~stef204@user/stef204) stef204
2025-05-02 05:02:04 +0200stef204(~stef204@user/stef204) (Client Quit)
2025-05-02 05:02:19 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 05:06:39 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu) (Quit: Client closed)
2025-05-02 05:06:56 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu)
2025-05-02 05:20:48 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 05:26:09 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-05-02 05:36:34 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 05:43:49 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2025-05-02 05:48:48 +0200nacation(~m-3l4s76@user/nacation) (Remote host closed the connection)
2025-05-02 05:49:29 +0200nacation(~m-3l4s76@user/nacation) nacation
2025-05-02 05:54:37 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 05:58:07 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds)
2025-05-02 05:59:25 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 06:07:48 +0200j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-02 06:10:24 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 06:10:44 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 06:11:13 +0200gorignak(~gorignak@user/gorignak) (Quit: quit)
2025-05-02 06:14:00 +0200gorignak(~gorignak@user/gorignak) gorignak
2025-05-02 06:15:26 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 06:22:05 +0200michalz(~michalz@185.246.207.203)
2025-05-02 06:26:12 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 06:31:12 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 06:39:59 +0200takuan(~takuan@d8D86B601.access.telenet.be)
2025-05-02 06:41:58 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 06:47:14 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-05-02 06:52:33 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds)
2025-05-02 06:56:22 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 06:57:45 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 06:58:46 +0200dontdieych2(~quassel@user/dontdieych2) dontdieych2
2025-05-02 07:00:28 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2025-05-02 07:02:44 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 07:03:10 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
2025-05-02 07:05:44 +0200euleritian(~euleritia@dynamic-176-006-131-036.176.6.pool.telefonica.de)
2025-05-02 07:06:00 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 07:08:22 +0200euleritian(~euleritia@dynamic-176-006-131-036.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-02 07:08:42 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 07:10:48 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 07:11:27 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2025-05-02 07:12:10 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 07:12:16 +0200__jmcantrell__(~weechat@user/jmcantrell) (Quit: WeeChat 4.6.2)
2025-05-02 07:15:38 +0200Square3(~Square@user/square) (Ping timeout: 265 seconds)
2025-05-02 07:16:05 +0200dontdieych2(~quassel@user/dontdieych2) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2025-05-02 07:21:46 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 07:25:42 +0200LainIwakura(~LainIwaku@user/LainIwakura) (Ping timeout: 240 seconds)
2025-05-02 07:26:18 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2025-05-02 07:28:24 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 07:30:08 +0200euleritian(~euleritia@dynamic-176-006-131-036.176.6.pool.telefonica.de)
2025-05-02 07:34:48 +0200weary-traveler(~user@user/user363627) (Remote host closed the connection)
2025-05-02 07:39:01 +0200noctux(~noctux@user/noctux) (Ping timeout: 248 seconds)
2025-05-02 07:39:15 +0200noctux(~noctux@user/noctux) noctux
2025-05-02 07:39:50 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 07:40:07 +0200Natch(~natch@c-92-34-7-158.bbcust.telenor.se) (Ping timeout: 252 seconds)
2025-05-02 07:41:13 +0200m1dnight(~m1dnight@d8D861908.access.telenet.be) (Ping timeout: 252 seconds)
2025-05-02 07:42:19 +0200disconnect3d(~disconnec@user/disconnect3d) (Ping timeout: 252 seconds)
2025-05-02 07:42:27 +0200disconnect3d(~disconnec@user/disconnect3d) disconnect3d
2025-05-02 07:43:09 +0200mrmr(~mrmr@user/mrmr) (Ping timeout: 272 seconds)
2025-05-02 07:43:11 +0200Natch(~natch@c-92-34-7-158.bbcust.telenor.se)
2025-05-02 07:43:32 +0200mrmr(~mrmr@user/mrmr) mrmr
2025-05-02 07:44:59 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-05-02 07:47:52 +0200haritz(~hrtz@user/haritz) (Remote host closed the connection)
2025-05-02 07:55:38 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 08:00:52 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2025-05-02 08:07:02 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 08:08:49 +0200LainIwakura(~LainIwaku@user/LainIwakura) LainIwakura
2025-05-02 08:11:39 +0200todi1(~todi@183.96.168.66) (Ping timeout: 272 seconds)
2025-05-02 08:12:05 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-02 08:12:14 +0200todi(~todi@p57803331.dip0.t-ipconnect.de) todi
2025-05-02 08:22:49 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 08:22:54 +0200LainIwakura(~LainIwaku@user/LainIwakura) (Ping timeout: 240 seconds)
2025-05-02 08:24:21 +0200iteratee_(~kyle@199.119.84.78) (Ping timeout: 268 seconds)
2025-05-02 08:26:24 +0200iteratee(~kyle@199.119.84.78)
2025-05-02 08:28:08 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-05-02 08:29:33 +0200biberu(~biberu@user/biberu) biberu
2025-05-02 08:30:46 +0200iteratee(~kyle@199.119.84.78) (Ping timeout: 244 seconds)
2025-05-02 08:34:55 +0200amadaluzia(~amadaluzi@user/amadaluzia) amadaluzia
2025-05-02 08:38:37 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 08:38:48 +0200LainIwakura(~LainIwaku@user/LainIwakura) LainIwakura
2025-05-02 08:43:56 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2025-05-02 08:44:05 +0200LainIwakura(~LainIwaku@user/LainIwakura) (Quit: Client closed)
2025-05-02 08:46:27 +0200iteratee(~kyle@199.119.84.78) iteratee
2025-05-02 08:49:49 +0200michalz_(~michalz@185.246.207.197)
2025-05-02 08:50:50 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 08:51:16 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
2025-05-02 08:51:18 +0200acidjnk_new(~acidjnk@p200300d6e71c4f9799b2fc54a11dfedb.dip0.t-ipconnect.de)
2025-05-02 08:51:38 +0200michalz(~michalz@185.246.207.203) (Ping timeout: 252 seconds)
2025-05-02 08:53:08 +0200Katarushisu2(~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) Katarushisu
2025-05-02 08:54:20 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 08:54:56 +0200adamCS(~adamCS@70.19.85.77) (Ping timeout: 252 seconds)
2025-05-02 08:54:56 +0200Katarushisu(~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) (Ping timeout: 252 seconds)
2025-05-02 08:54:56 +0200Katarushisu2Katarushisu
2025-05-02 08:55:44 +0200euleritian(~euleritia@dynamic-176-006-131-036.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-02 08:56:03 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 08:58:03 +0200adamCS(~adamCS@70.19.85.77) adamCS
2025-05-02 08:58:12 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-05-02 08:59:15 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-05-02 09:00:02 +0200caconym7(~caconym@user/caconym) (Quit: bye)
2025-05-02 09:00:34 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2025-05-02 09:00:44 +0200caconym7(~caconym@user/caconym) caconym
2025-05-02 09:05:03 +0200fp(~Thunderbi@2001:708:20:1406::10c5) fp
2025-05-02 09:05:09 +0200ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-05-02 09:06:06 +0200CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-05-02 09:06:29 +0200nacation(~m-3l4s76@user/nacation) (Read error: Connection reset by peer)
2025-05-02 09:08:02 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 09:08:14 +0200nacation(~m-3l4s76@user/nacation) nacation
2025-05-02 09:14:00 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu) (Quit: Client closed)
2025-05-02 09:14:14 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu)
2025-05-02 09:14:44 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 09:18:51 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e)
2025-05-02 09:20:27 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 268 seconds)
2025-05-02 09:20:50 +0200nadja(~dequbed@banana-new.kilobyte22.de) (Ping timeout: 260 seconds)
2025-05-02 09:20:50 +0200hsw(~hsw@112-104-12-126.adsl.dynamic.seed.net.tw) (Ping timeout: 260 seconds)
2025-05-02 09:20:56 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 09:21:55 +0200hsw(~hsw@112-104-12-126.adsl.dynamic.seed.net.tw) hsw
2025-05-02 09:23:45 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
2025-05-02 09:24:57 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-05-02 09:26:06 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 09:26:42 +0200amadaluzia(~amadaluzi@user/amadaluzia) (Ping timeout: 248 seconds)
2025-05-02 09:27:50 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds)
2025-05-02 09:30:23 +0200nadja(~dequbed@banana-new.kilobyte22.de) dequbed
2025-05-02 09:30:55 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-02 09:34:53 +0200amadaluzia(~amadaluzi@user/amadaluzia) amadaluzia
2025-05-02 09:41:50 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 09:46:43 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-02 09:52:35 +0200j1n37-(~j1n37@user/j1n37) j1n37
2025-05-02 09:53:36 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 272 seconds)
2025-05-02 09:54:57 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 09:58:37 +0200amadaluzia(~amadaluzi@user/amadaluzia) (Ping timeout: 276 seconds)
2025-05-02 09:59:13 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-02 10:09:02 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 10:13:46 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-02 10:14:30 +0200xff0x(~xff0x@2405:6580:b080:900:70da:5e:441c:b741)
2025-05-02 10:15:20 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-02 10:16:10 +0200nacation(~m-3l4s76@user/nacation) (Ping timeout: 276 seconds)
2025-05-02 10:17:42 +0200pabs3(~pabs3@user/pabs3) (Read error: Connection reset by peer)
2025-05-02 10:18:36 +0200pabs3(~pabs3@user/pabs3) pabs3
2025-05-02 10:18:48 +0200nacation(~m-3l4s76@user/nacation) nacation
2025-05-02 10:19:52 +0200nacation(~m-3l4s76@user/nacation) (Remote host closed the connection)
2025-05-02 10:22:54 +0200nacation(~m-3l4s76@user/nacation) nacation
2025-05-02 10:27:20 +0200tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2025-05-02 10:29:58 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-02 10:35:21 +0200chele(~chele@user/chele) chele
2025-05-02 10:36:51 +0200fp(~Thunderbi@2001:708:20:1406::10c5) (Ping timeout: 252 seconds)
2025-05-02 10:41:59 +0200xff0x(~xff0x@2405:6580:b080:900:70da:5e:441c:b741) (Ping timeout: 252 seconds)
2025-05-02 10:43:44 +0200fp(~Thunderbi@wireless-86-50-140-117.open.aalto.fi) fp
2025-05-02 10:44:31 +0200m1dnight(~m1dnight@d8D861908.access.telenet.be) m1dnight
2025-05-02 10:45:33 +0200poscat(~poscat@user/poscat) (Remote host closed the connection)
2025-05-02 10:48:42 +0200poscat(~poscat@user/poscat) poscat
2025-05-02 10:49:37 +0200xff0x(~xff0x@2405:6580:b080:900:70da:5e:441c:b741)
2025-05-02 10:53:15 +0200sabathan2(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer)
2025-05-02 10:56:33 +0200sabathan2(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr)
2025-05-02 10:57:55 +0200gmg(~user@user/gehmehgeh) gehmehgeh
2025-05-02 10:58:36 +0200JuanDaugherty(~juan@user/JuanDaugherty) JuanDaugherty
2025-05-02 11:00:19 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds)
2025-05-02 11:02:35 +0200m1dnight_(~m1dnight@d8D861908.access.telenet.be) m1dnight
2025-05-02 11:03:19 +0200m1dnight(~m1dnight@d8D861908.access.telenet.be) (Ping timeout: 260 seconds)
2025-05-02 11:03:46 +0200ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-05-02 11:08:54 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Ping timeout: 276 seconds)
2025-05-02 11:09:14 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de)
2025-05-02 11:09:35 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-02 11:10:11 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 11:16:05 +0200nacation(~m-3l4s76@user/nacation) (Remote host closed the connection)
2025-05-02 11:19:02 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2025-05-02 11:20:08 +0200nacation(~m-3l4s76@user/nacation) nacation
2025-05-02 11:21:46 +0200dhil(~dhil@openvpn-125-1069.inf.ed.ac.uk) dhil
2025-05-02 11:21:48 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de)
2025-05-02 11:25:20 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-05-02 11:25:37 +0200nadja(~dequbed@banana-new.kilobyte22.de) (Ping timeout: 244 seconds)
2025-05-02 11:25:53 +0200JuanDaughertyColinRobinson
2025-05-02 11:27:33 +0200nadja(~dequbed@banana-new.kilobyte22.de) dequbed
2025-05-02 11:28:58 +0200xff0x(~xff0x@2405:6580:b080:900:70da:5e:441c:b741) (Ping timeout: 276 seconds)
2025-05-02 11:29:24 +0200xff0x(~xff0x@2405:6580:b080:900:eadd:b346:77f9:cfbc)
2025-05-02 11:33:15 +0200nadja(~dequbed@banana-new.kilobyte22.de) (Ping timeout: 265 seconds)
2025-05-02 11:36:19 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e)
2025-05-02 11:37:02 +0200nadja(~dequbed@banana-new.kilobyte22.de) dequbed
2025-05-02 11:46:45 +0200tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving)
2025-05-02 11:46:57 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-02 11:47:25 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de)
2025-05-02 11:48:01 +0200xff0x(~xff0x@2405:6580:b080:900:eadd:b346:77f9:cfbc) (Quit: xff0x)
2025-05-02 11:50:32 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-02 11:51:15 +0200xff0x(~xff0x@2405:6580:b080:900:7099:7f52:1441:1e43)
2025-05-02 11:51:36 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-02 11:51:54 +0200euleritian(~euleritia@77.23.248.47)
2025-05-02 11:51:58 +0200hellwolfjust realized that I need Cont, after getting cute and trying to come up some clever jigsaw mechanism.
2025-05-02 11:52:43 +0200 <hellwolf> Cont is both easy and hard to understand at the same time. I remember geek o saur said something about that too
2025-05-02 11:55:02 +0200 <merijn> @quote didn't.you.write
2025-05-02 11:55:02 +0200 <lambdabot> dobblego says: <dobblego> Cale, didn't you write one? :) <Cale> dobblego: two actually, and a half.
2025-05-02 11:55:05 +0200 <merijn> aww
2025-05-02 11:55:07 +0200 <merijn> wrong quote
2025-05-02 11:55:13 +0200 <merijn> @quote stares.at
2025-05-02 11:55:14 +0200 <lambdabot> autrijus says: * autrijus stares at type Eval x = forall r. ContT r (ReaderT x IO) (ReaderT x IO x) and feels very lost <shapr> Didn't you write that code? <autrijus> yeah. and it works <autrijus> I
2025-05-02 11:55:14 +0200 <lambdabot> just don't know what it means.
2025-05-02 11:55:18 +0200 <merijn> That one :)
2025-05-02 11:55:55 +0200hellwolffeeling every day I am just discovering new programs; I have not created much new things.
2025-05-02 11:58:32 +0200 <hellwolf> @quote cute
2025-05-02 11:58:32 +0200 <lambdabot> Jafet says: In Soviet Russia, State executes you
2025-05-02 11:59:27 +0200 <hellwolf> @quote SovietT
2025-05-02 11:59:27 +0200 <lambdabot> No quotes match. And you call yourself a Rocket Scientist!
2025-05-02 11:59:51 +0200euleritian(~euleritia@77.23.248.47) (Read error: Connection reset by peer)
2025-05-02 11:59:59 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de)
2025-05-02 12:00:08 +0200tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
2025-05-02 12:00:21 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-02 12:00:36 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2025-05-02 12:00:38 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 12:00:56 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-05-02 12:03:15 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e)
2025-05-02 12:09:08 +0200 <haskellbridge> <hellwolf> Thanks haskellbridge, leaking my location.
2025-05-02 12:09:08 +0200 <haskellbridge> <hellwolf> again
2025-05-02 12:09:19 +0200zmt01(~zmt00@user/zmt00) (Ping timeout: 244 seconds)
2025-05-02 12:14:44 +0200zmt00(~zmt00@user/zmt00) zmt00
2025-05-02 12:14:59 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 12:15:03 +0200zmt00(~zmt00@user/zmt00) (Remote host closed the connection)
2025-05-02 12:15:28 +0200zmt00(~zmt00@user/zmt00) zmt00
2025-05-02 12:15:52 +0200j1n37-(~j1n37@user/j1n37) (Ping timeout: 252 seconds)
2025-05-02 12:16:33 +0200malte(~malte@mal.tc) (Ping timeout: 244 seconds)
2025-05-02 12:29:33 +0200malte(~malte@mal.tc) malte
2025-05-02 12:32:22 +0200fp(~Thunderbi@wireless-86-50-140-117.open.aalto.fi) (Ping timeout: 252 seconds)
2025-05-02 12:35:06 +0200alecs(~alecs@61.pool85-58-154.dynamic.orange.es) alecs
2025-05-02 12:36:46 +0200poscat0x04(~poscat@user/poscat) poscat
2025-05-02 12:37:13 +0200poscat(~poscat@user/poscat) (Ping timeout: 244 seconds)
2025-05-02 12:37:51 +0200ColinRobinson(~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
2025-05-02 12:39:10 +0200acidjnk_new(~acidjnk@p200300d6e71c4f9799b2fc54a11dfedb.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2025-05-02 12:39:34 +0200acidjnk_new(~acidjnk@p200300d6e71c4f9778386121231aa5f9.dip0.t-ipconnect.de)
2025-05-02 12:44:42 +0200connrs(~connrs@conners.plus.com) (Read error: Connection reset by peer)
2025-05-02 12:45:11 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2025-05-02 12:45:52 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 12:49:03 +0200connrs(~connrs@user/connrs) connrs
2025-05-02 12:51:05 +0200ljdarj(~Thunderbi@user/ljdarj) (Quit: ljdarj)
2025-05-02 12:51:23 +0200ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-05-02 12:52:42 +0200j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-02 12:53:16 +0200zmt01(~zmt00@user/zmt00) zmt00
2025-05-02 12:54:07 +0200zmt00(~zmt00@user/zmt00) (Ping timeout: 276 seconds)
2025-05-02 12:55:39 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 12:56:19 +0200j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-02 12:59:23 +0200zmt00(~zmt00@user/zmt00) zmt00
2025-05-02 13:00:18 +0200swamp_(~zmt00@user/zmt00) zmt00
2025-05-02 13:01:35 +0200alecs(~alecs@61.pool85-58-154.dynamic.orange.es) (Quit: Client closed)
2025-05-02 13:01:42 +0200zmt01(~zmt00@user/zmt00) (Ping timeout: 272 seconds)
2025-05-02 13:01:59 +0200haritz(~hrtz@2a01:4b00:bc2e:7000::2)
2025-05-02 13:01:59 +0200haritz(~hrtz@2a01:4b00:bc2e:7000::2) (Changing host)
2025-05-02 13:01:59 +0200haritz(~hrtz@user/haritz) haritz
2025-05-02 13:02:07 +0200zmt01(~zmt00@user/zmt00) zmt00
2025-05-02 13:02:19 +0200jespada(~jespada@r179-25-202-180.dialup.adsl.anteldata.net.uy) jespada
2025-05-02 13:03:32 +0200zmt00(~zmt00@user/zmt00) (Ping timeout: 252 seconds)
2025-05-02 13:04:38 +0200swamp_(~zmt00@user/zmt00) (Ping timeout: 252 seconds)
2025-05-02 13:06:52 +0200tabaqui(~tabaqui@167.71.80.236) tabaqui
2025-05-02 13:09:02 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu) (Quit: Client closed)
2025-05-02 13:09:20 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu)
2025-05-02 13:17:03 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 13:31:28 +0200ljdarj(~Thunderbi@user/ljdarj) (Quit: ljdarj)
2025-05-02 13:31:45 +0200ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-05-02 13:51:04 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-02 13:59:33 +0200ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-05-02 14:02:59 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds)
2025-05-02 14:02:59 +0200ljdarj1ljdarj
2025-05-02 14:15:11 +0200acidjnk_new(~acidjnk@p200300d6e71c4f9778386121231aa5f9.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2025-05-02 14:18:42 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 244 seconds)
2025-05-02 14:20:39 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 14:21:22 +0200acidjnk_new(~acidjnk@p200300d6e71c4f9778386121231aa5f9.dip0.t-ipconnect.de)
2025-05-02 14:24:46 +0200la1n23(~la1n@176.59.57.19) (Read error: Connection reset by peer)
2025-05-02 14:28:17 +0200la1n(~la1n@176.59.162.120)
2025-05-02 14:28:40 +0200fp(~Thunderbi@2001:708:20:1406::1370) fp
2025-05-02 14:32:09 +0200volsand(~volsand@2804:1b1:1080:da6:b270:c4db:8a27:6d61)
2025-05-02 14:33:10 +0200jespada(~jespada@r179-25-202-180.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
2025-05-02 14:35:05 +0200jespada(~jespada@r179-25-202-180.dialup.adsl.anteldata.net.uy) jespada
2025-05-02 14:44:22 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2025-05-02 14:45:31 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de)
2025-05-02 14:48:19 +0200fp(~Thunderbi@2001:708:20:1406::1370) (Quit: fp)
2025-05-02 14:48:23 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de) (Remote host closed the connection)
2025-05-02 14:49:13 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de)
2025-05-02 14:49:49 +0200fp(~Thunderbi@2001:708:20:1406::1370) fp
2025-05-02 14:50:04 +0200fp(~Thunderbi@2001:708:20:1406::1370) (Client Quit)
2025-05-02 14:51:46 +0200fp(~Thunderbi@2001:708:20:1406::1370) fp
2025-05-02 14:56:24 +0200fp(~Thunderbi@2001:708:20:1406::1370) (Remote host closed the connection)
2025-05-02 14:57:21 +0200fp(~Thunderbi@2001:708:20:1406::1370) fp
2025-05-02 15:02:49 +0200gabriel_sevecek(~gabriel@188-167-229-200.dynamic.chello.sk) (Ping timeout: 276 seconds)
2025-05-02 15:05:25 +0200dhil(~dhil@openvpn-125-1069.inf.ed.ac.uk) (Ping timeout: 276 seconds)
2025-05-02 15:09:18 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2025-05-02 15:09:31 +0200gabriel_sevecek(~gabriel@188-167-229-200.dynamic.chello.sk) gabriel_sevecek
2025-05-02 15:16:16 +0200weary-traveler(~user@user/user363627) user363627
2025-05-02 15:17:32 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu) (Quit: Client closed)
2025-05-02 15:17:46 +0200CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 276 seconds)
2025-05-02 15:17:49 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu)
2025-05-02 15:18:11 +0200dhil(~dhil@5.151.29.138) dhil
2025-05-02 15:32:25 +0200fp(~Thunderbi@2001:708:20:1406::1370) (Quit: fp)
2025-05-02 15:41:13 +0200gorignak(~gorignak@user/gorignak) (Quit: quit)
2025-05-02 15:41:35 +0200gorignak(~gorignak@user/gorignak) gorignak
2025-05-02 15:44:23 +0200la1n(~la1n@176.59.162.120) (Read error: Connection reset by peer)
2025-05-02 15:44:34 +0200la1n(~la1n@176.59.162.120)
2025-05-02 15:46:15 +0200acidjnk_new(~acidjnk@p200300d6e71c4f9778386121231aa5f9.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2025-05-02 15:49:45 +0200Square3(~Square@user/square) Square
2025-05-02 15:50:41 +0200michalz_(~michalz@185.246.207.197) (Remote host closed the connection)
2025-05-02 15:51:33 +0200acidjnk_new(~acidjnk@p200300d6e71c4f9778386121231aa5f9.dip0.t-ipconnect.de)
2025-05-02 15:54:41 +0200xdej(~xdej@quatramaran.salle-s.org) (Remote host closed the connection)
2025-05-02 15:58:35 +0200rvalue(~rvalue@user/rvalue) (Read error: Connection reset by peer)
2025-05-02 15:59:08 +0200rvalue(~rvalue@user/rvalue) rvalue
2025-05-02 16:03:45 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e)
2025-05-02 16:07:44 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu) (Quit: Client closed)
2025-05-02 16:08:03 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu)
2025-05-02 16:13:02 +0200xdej(~xdej@quatramaran.salle-s.org) xdej
2025-05-02 16:18:36 +0200dhil(~dhil@5.151.29.138) (Ping timeout: 252 seconds)
2025-05-02 16:31:03 +0200Sgeo(~Sgeo@user/sgeo) Sgeo
2025-05-02 16:31:52 +0200michalz(~michalz@185.246.207.200)
2025-05-02 16:40:53 +0200euleritian(~euleritia@dynamic-176-006-138-168.176.6.pool.telefonica.de) (Ping timeout: 248 seconds)
2025-05-02 16:40:55 +0200JuanDaugherty(~juan@user/JuanDaugherty) JuanDaugherty
2025-05-02 16:42:24 +0200mrmr8(~mrmr@user/mrmr) mrmr
2025-05-02 16:43:09 +0200michalz(~michalz@185.246.207.200) (Remote host closed the connection)
2025-05-02 16:43:50 +0200euleritian(~euleritia@dynamic-176-006-129-211.176.6.pool.telefonica.de)
2025-05-02 16:43:51 +0200mrmr(~mrmr@user/mrmr) (Ping timeout: 268 seconds)
2025-05-02 16:43:51 +0200mrmr8mrmr
2025-05-02 16:57:06 +0200euleritian(~euleritia@dynamic-176-006-129-211.176.6.pool.telefonica.de) (Ping timeout: 252 seconds)
2025-05-02 16:57:21 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-02 16:58:47 +0200euleritian(~euleritia@dynamic-176-000-197-165.176.0.pool.telefonica.de)
2025-05-02 17:01:52 +0200econo_(uid147250@id-147250.tinside.irccloud.com)
2025-05-02 17:16:11 +0200crns(~crns@user/crns) crns
2025-05-02 17:18:27 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer)
2025-05-02 17:23:32 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2025-05-02 17:28:35 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 17:41:50 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
2025-05-02 17:44:55 +0200crns(~crns@user/crns) (Read error: Connection reset by peer)
2025-05-02 17:45:06 +0200crns(~crns@user/crns) crns
2025-05-02 17:51:03 +0200m5zs7k(aquares@web10.mydevil.net) (Ping timeout: 244 seconds)
2025-05-02 17:53:49 +0200m5zs7k(aquares@web10.mydevil.net) m5zs7k
2025-05-02 17:55:27 +0200ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-05-02 17:57:01 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds)
2025-05-02 17:57:01 +0200ljdarj1ljdarj
2025-05-02 17:58:19 +0200typedfern_(~Typedfern@135.red-83-37-43.dynamicip.rima-tde.net) (Ping timeout: 276 seconds)
2025-05-02 17:58:36 +0200JuanDaughertyColinRobinaon
2025-05-02 17:59:55 +0200Typedfern(~Typedfern@135.red-83-37-43.dynamicip.rima-tde.net)
2025-05-02 18:00:00 +0200acidjnk_new(~acidjnk@p200300d6e71c4f9778386121231aa5f9.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2025-05-02 18:01:24 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 18:01:53 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e)
2025-05-02 18:10:29 +0200alt-crns(~crns@185.238.219.102)
2025-05-02 18:10:29 +0200crns(~crns@user/crns) (Read error: Connection reset by peer)
2025-05-02 18:20:37 +0200__jmcantrell__(~weechat@user/jmcantrell) jmcantrell
2025-05-02 18:24:31 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Quit: leaving)
2025-05-02 18:26:45 +0200tolgo(~Thunderbi@199.115.144.130)
2025-05-02 18:31:17 +0200lol_(~lol@2603:3016:1e01:b960:3123:2ba5:494b:dfbe) (Read error: Connection reset by peer)
2025-05-02 18:37:08 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds)
2025-05-02 18:52:19 +0200swamp_(~zmt00@user/zmt00) zmt00
2025-05-02 18:52:38 +0200Sgeo_(~Sgeo@user/sgeo) Sgeo
2025-05-02 18:53:52 +0200amadaluzia(~amadaluzi@user/amadaluzia) amadaluzia
2025-05-02 18:55:32 +0200Sgeo(~Sgeo@user/sgeo) (Ping timeout: 252 seconds)
2025-05-02 18:55:32 +0200zmt01(~zmt00@user/zmt00) (Ping timeout: 252 seconds)
2025-05-02 18:57:43 +0200euleritian(~euleritia@dynamic-176-000-197-165.176.0.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-02 18:58:02 +0200euleritian(~euleritia@77.23.248.47)
2025-05-02 18:59:29 +0200sajenim(~sajenim@user/sajenim) (Ping timeout: 248 seconds)
2025-05-02 18:59:30 +0200alt-crns(~crns@185.238.219.102) (Read error: Connection reset by peer)
2025-05-02 18:59:45 +0200crns(~crns@user/crns) crns
2025-05-02 19:04:10 +0200alt-crns(~crns@dynamic-176-000-052-024.176.0.pool.telefonica.de)
2025-05-02 19:06:54 +0200crns(~crns@user/crns) (Ping timeout: 252 seconds)
2025-05-02 19:07:29 +0200euleritian(~euleritia@77.23.248.47) (Ping timeout: 260 seconds)
2025-05-02 19:08:13 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 19:09:55 +0200tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) tzh
2025-05-02 19:11:08 +0200__jmcantrell__(~weechat@user/jmcantrell) (Ping timeout: 244 seconds)
2025-05-02 19:11:12 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 276 seconds)
2025-05-02 19:16:10 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2025-05-02 19:18:35 +0200ColinRobinaon(~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
2025-05-02 19:18:50 +0200wootehfoot(~wootehfoo@user/wootehfoot) wootehfoot
2025-05-02 19:22:40 +0200tolgo(~Thunderbi@199.115.144.130) (Ping timeout: 252 seconds)
2025-05-02 19:24:40 +0200ttybitnik(~ttybitnik@user/wolper) ttybitnik
2025-05-02 19:28:01 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de) (Ping timeout: 276 seconds)
2025-05-02 19:28:12 +0200euleritian(~euleritia@dynamic-176-000-197-165.176.0.pool.telefonica.de)
2025-05-02 19:30:56 +0200 <haskellbridge> <sm> tcard do you have https://web.cs.dal.ca/~nzeh/Teaching/3137/haskell/ in your books list ? I don't think so
2025-05-02 19:32:54 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-02 19:35:11 +0200tolgo(~Thunderbi@199.115.144.130)
2025-05-02 19:36:33 +0200pavonia(~user@user/siracusa) siracusa
2025-05-02 19:37:19 +0200todi(~todi@p57803331.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2025-05-02 19:39:33 +0200todi(~todi@p57803331.dip0.t-ipconnect.de) todi
2025-05-02 19:44:59 +0200todi(~todi@p57803331.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2025-05-02 19:44:59 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e)
2025-05-02 19:45:02 +0200haskellbridge(~hackager@syn-024-093-192-219.res.spectrum.com) (Remote host closed the connection)
2025-05-02 19:47:49 +0200haskellbridge(~hackager@syn-024-093-192-219.res.spectrum.com) hackager
2025-05-02 19:47:49 +0200ChanServ+v haskellbridge
2025-05-02 19:49:04 +0200euleritian(~euleritia@dynamic-176-000-197-165.176.0.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-02 19:49:22 +0200euleritian(~euleritia@ip4d17f82f.dynamic.kabel-deutschland.de)
2025-05-02 19:51:37 +0200alt-crns(~crns@dynamic-176-000-052-024.176.0.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-02 19:52:00 +0200crns(~crns@user/crns) crns
2025-05-02 19:55:08 +0200 <yin> ok, time to learn parser combinators
2025-05-02 19:55:09 +0200acidjnk_new(~acidjnk@p200300d6e71c4f97b8ab1cde68040873.dip0.t-ipconnect.de) acidjnk
2025-05-02 19:57:34 +0200 <yin> should i start with parsec, megaparsec, attoparsec... ?
2025-05-02 19:59:40 +0200 <haskellbridge> <hellwolf> Text.ParserCombinators.Read
2025-05-02 19:59:40 +0200 <haskellbridge> from base to ease in?
2025-05-02 19:59:54 +0200 <haskellbridge> <hellwolf> *ReadP
2025-05-02 20:00:14 +0200nurupo(~nurupo.ga@user/nurupo) (Quit: nurupo.ga)
2025-05-02 20:00:31 +0200nurupo(~nurupo.ga@user/nurupo) nurupo
2025-05-02 20:01:20 +0200 <monochrom> Depending on what "learn" means, there is also: start with writing your own.
2025-05-02 20:01:58 +0200 <yin> monochrom: i understand the theory pretty well. what i mean by learn is "learn how to use the libraries"
2025-05-02 20:01:58 +0200 <haskellbridge> <Liamzee> why is it that programming languages don't const their objects?
2025-05-02 20:02:19 +0200 <haskellbridge> <Liamzee> learn flatparse-applicative ;)
2025-05-02 20:02:25 +0200 <haskellbridge> <Liamzee> erm, flatparse
2025-05-02 20:02:44 +0200 <monochrom> Then start with what you will finally use. :)
2025-05-02 20:02:47 +0200 <haskellbridge> <Liamzee> i'm confusing it with optparse-applicative
2025-05-02 20:02:50 +0200 <haskellbridge> <Liamzee> https://hackage.haskell.org/package/flatparse-0.5.2.1
2025-05-02 20:03:02 +0200 <yin> what's the most performant library and what are its main downsides?
2025-05-02 20:03:08 +0200 <haskellbridge> <Liamzee> https://gist.github.com/chrisdone/8551675bb99a0d66cf075fdcb1e6b757
2025-05-02 20:03:26 +0200 <yin> monochrom: that's the problem. i don't know what the options are
2025-05-02 20:03:53 +0200 <yin> that's what i'm trying to learn
2025-05-02 20:04:15 +0200 <monochrom> But if you don't have a choice yet and don't mind following popularity, megaparsec is more popular generally, attoparsec is more popular for those who want speed, and parsec or ReadP is more popular among the minority of us who just want what comes with GHC.
2025-05-02 20:04:28 +0200 <haskellbridge> <Liamzee> I don't think flatparse backtracks? Not sure about it.
2025-05-02 20:04:28 +0200 <yin> Liamzee: ty
2025-05-02 20:04:48 +0200 <haskellbridge> <Liamzee> oh, it backtracks
2025-05-02 20:04:52 +0200 <haskellbridge> <Liamzee> but it's bytestring specialized
2025-05-02 20:05:11 +0200 <yin> that's not a bad thing :)
2025-05-02 20:05:16 +0200 <haskellbridge> <Liamzee> someone ghosted me once for saying attoparsec can be treated as a default when they responded megaparsec is text parser, attoparsec is a bytestring parser
2025-05-02 20:05:51 +0200 <haskellbridge> <Liamzee> also, you can read about the downsides in the readme
2025-05-02 20:05:55 +0200 <haskellbridge> <Liamzee> but faster than nom!!111
2025-05-02 20:06:23 +0200 <monochrom> Most don't backtrack unless you tell it to. ReadP does BFS altogether so it "doesn't" backtrack but it sidetracks.
2025-05-02 20:07:03 +0200 <monochrom> So for example even in parsec if you don't say "try" it doesn't backtrack.
2025-05-02 20:07:34 +0200 <haskellbridge> <Liamzee> i'm just curious, though, why don't you have non-mutable objects by default?
2025-05-02 20:07:43 +0200 <haskellbridge> <Liamzee> even Haskell's records are (spiritually) mutable
2025-05-02 20:08:17 +0200 <monochrom> And if you say "try" but it is some "try p" where p just consumes O(1) characters, you effectively stay within LL(k).
2025-05-02 20:08:30 +0200 <haskellbridge> <Liamzee> i mean, i feel like screw this, even though it's not a solution, but ConstRef
2025-05-02 20:08:47 +0200 <haskellbridge> <Liamzee> IORef except read-only, no exposed constructors, interface only allows you to set an object
2025-05-02 20:09:28 +0200 <haskellbridge> <Liamzee> maybe this? https://hackage.haskell.org/package/const
2025-05-02 20:09:34 +0200 <EvanR> supposedly you can change the token type in megaparsec so it's not just text
2025-05-02 20:09:35 +0200 <monochrom> I have immutable objects by default.
2025-05-02 20:10:02 +0200 <EvanR> why stop there, make the database immutable by default
2025-05-02 20:10:14 +0200 <EvanR> pass whole databases around
2025-05-02 20:10:42 +0200 <monochrom> Even when I have two concurrent threads accessing the same BST, I have an immutable BST, the sharing is done by an IORef and atomicModifyIORef.
2025-05-02 20:11:08 +0200 <dminuoso> 18:04:52 +haskellbridge │ <Liamzee> but it's bytestring specialized
2025-05-02 20:11:14 +0200 <monochrom> Completely sidesteps all the desire for lock-free data structures. Who needs those?
2025-05-02 20:11:31 +0200 <haskellbridge> <Liamzee> EvanR: Transaction a in the hasql ecosystem is a thing
2025-05-02 20:11:34 +0200 <dminuoso> Note that being "bytestring specialized" is not as restrictive as it might sound.
2025-05-02 20:11:51 +0200 <dminuoso> flatparse comes with unicode combinators, so you can consume say UTF8 encoded strings easily too
2025-05-02 20:11:56 +0200 <EvanR> transaction != immutable database
2025-05-02 20:13:15 +0200 <haskellbridge> <Liamzee> you can model a database as a transaction
2025-05-02 20:13:23 +0200 <haskellbridge> <Morj> Huh, never heard about flatparse, looks cool with the speed. I already try to write non-backtracking attoparsec, so should be a good replacement
2025-05-02 20:13:26 +0200 <dminuoso> Personally I would recommend flatparse over megaparsec or attoparsec both because it has nom-style error/failure disambiguation, and internally it is simple and has very customizable errors this way
2025-05-02 20:13:41 +0200 <dminuoso> The one thing it cant do out of th ebox easily is streaming, however.
2025-05-02 20:14:12 +0200 <haskellbridge> <Morj> Ah mince
2025-05-02 20:14:38 +0200 <dminuoso> Also whats really nice about flatparse is that you can interleave it with IO or ST
2025-05-02 20:14:54 +0200 <dminuoso> attoparsec cant, and with megaparsec its very painful.
2025-05-02 20:15:29 +0200 <EvanR> nom-style?
2025-05-02 20:16:23 +0200 <dminuoso> EvanR: unrecoverable failure and recoverable errors.
2025-05-02 20:16:34 +0200 <dminuoso> (And some machinery to convert between one and another)
2025-05-02 20:17:10 +0200 <dminuoso> The idea is that failure represent exceptions, and `error` represents some "backtrack" path in the parser tree.
2025-05-02 20:17:32 +0200__jmcantrell__(~weechat@user/jmcantrell) jmcantrell
2025-05-02 20:18:14 +0200 <dminuoso> So one of the most common primitives you end up using is
2025-05-02 20:18:20 +0200 <dminuoso> cutting :: ParserT st e a -> e -> (e -> e -> e) -> ParserT st e a
2025-05-02 20:19:26 +0200 <EvanR> -ing form of a verb means anything in particular here?
2025-05-02 20:19:32 +0200 <dminuoso> Which essentially does "run the parser, propagate failure as an error e, or merge errors"
2025-05-02 20:20:03 +0200 <dminuoso> There is also
2025-05-02 20:20:07 +0200 <dminuoso> cut :: ParserT st e a -> e -> ParserT st e a
2025-05-02 20:20:23 +0200 <dminuoso> And you can think of `cut` as similar to say prolog
2025-05-02 20:20:27 +0200 <EvanR> but what is "nom"
2025-05-02 20:20:34 +0200 <dminuoso> nom is a rust library for parsing
2025-05-02 20:20:37 +0200 <EvanR> oh
2025-05-02 20:21:44 +0200 <dminuoso> The really cool thing here is that error merge function in cutting.
2025-05-02 20:21:53 +0200 <dminuoso> Which allows you to build up context when errors occur.
2025-05-02 20:22:39 +0200 <dminuoso> For very rich error reporting, explaining the context (say to report surrounding text, or what it is you were trying to parse, or why you were trying to parse it in the first place)
2025-05-02 20:22:57 +0200 <dminuoso> You can literally build up error context level by level this way.
2025-05-02 20:23:13 +0200todi(~todi@183.96.168.66) todi
2025-05-02 20:23:18 +0200 <dminuoso> In any way you want by just supplying your own function `e -> e -> e`
2025-05-02 20:23:49 +0200 <EvanR> bag of errors
2025-05-02 20:25:13 +0200 <monochrom> That is very neat.
2025-05-02 20:27:47 +0200dsrt^(ceuasyyyl@c-71-199-187-173.hsd1.ga.comcast.net)
2025-05-02 20:28:27 +0200alethkitPutin
2025-05-02 20:28:40 +0200Putinalethkit
2025-05-02 20:30:19 +0200 <haskellbridge> <Liamzee> here's a problem i have, basically, let's say, i want to pass configs to a library
2025-05-02 20:30:58 +0200 <EvanR> reflection
2025-05-02 20:31:02 +0200 <haskellbridge> <Liamzee> i mean tbh i could do it via TH
2025-05-02 20:31:03 +0200EvanRhides
2025-05-02 20:31:45 +0200j1n37-(~j1n37@user/j1n37) j1n37
2025-05-02 20:31:58 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 252 seconds)
2025-05-02 20:32:08 +0200 <haskellbridge> <Liamzee> reflection?
2025-05-02 20:32:11 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2025-05-02 20:32:30 +0200 <EvanR> I guess that trick has become forgotten lore
2025-05-02 20:32:39 +0200 <haskellbridge> <Liamzee> the user wants to plug in two things, database settings, including a login, possibly from a config file
2025-05-02 20:33:30 +0200 <haskellbridge> <Liamzee> i mean since the mutability is intended as one-time, and it's IO anyways, it's not like I can't tell people to IORef it
2025-05-02 20:33:51 +0200 <haskellbridge> <Liamzee> but that's smelly
2025-05-02 20:34:17 +0200 <EvanR> taking literally what you're saying, the requirement of passing in settings and a login to a thing, that is literally just a function
2025-05-02 20:34:22 +0200 <haskellbridge> <Liamzee> i feel like ocaml functors might solve this problem
2025-05-02 20:34:23 +0200 <haskellbridge> <sm> what's wrong with passing arguments ?
2025-05-02 20:34:33 +0200 <EvanR> pass it as a normal argument
2025-05-02 20:34:36 +0200 <haskellbridge> <Liamzee> verbose and error prone, no?
2025-05-02 20:34:39 +0200 <EvanR> so there's gotta be some unspoken complication
2025-05-02 20:35:05 +0200 <haskellbridge> <sm> I would say it's the simplest and least error prone, and you can reduce verbosity by bundling args into larger values
2025-05-02 20:35:39 +0200 <EvanR> perhaps the implicitness is that your library returns some kind of state that needs to be returned to it to do anything else
2025-05-02 20:35:52 +0200 <EvanR> and passing any other state would be broken
2025-05-02 20:36:07 +0200 <haskellbridge> <sm> it's not always the most convenient, but when it's inconvenient it's forcing you to clarify your program's data flows
2025-05-02 20:36:20 +0200 <EvanR> so I don't think the problem description was very good
2025-05-02 20:37:09 +0200 <haskellbridge> <Liamzee> i'm just trying to do that bad idea, hasql login backend as a library
2025-05-02 20:37:40 +0200 <haskellbridge> <Liamzee> right now, i need database settings, as well as settings for what tablenames you want and potentially field names
2025-05-02 20:37:49 +0200 <haskellbridge> <Liamzee> then you feed it passwords, hashes, usernames, emails, etc
2025-05-02 20:37:56 +0200 <haskellbridge> <Liamzee> you see why i want to pack a config instead?
2025-05-02 20:38:04 +0200 <EvanR> so pass in a config
2025-05-02 20:38:10 +0200 <haskellbridge> <Liamzee> fully expanded, it's like 16 arguments
2025-05-02 20:38:12 +0200 <EvanR> no reason to do that via IO refs
2025-05-02 20:38:18 +0200 <haskellbridge> <Liamzee> the config is mutable so i feel like it's ick
2025-05-02 20:38:25 +0200 <EvanR> why is the config mutable
2025-05-02 20:38:33 +0200 <haskellbridge> <Liamzee> spiritually mutable
2025-05-02 20:38:37 +0200 <EvanR> that makes no sense
2025-05-02 20:38:44 +0200 <haskellbridge> <Liamzee> if you expose the constructors to the config record, you can mutate it
2025-05-02 20:38:52 +0200 <haskellbridge> <Liamzee> well, change it
2025-05-02 20:39:05 +0200 <hellwolf> :quote spiritually mutable - Liamzu
2025-05-02 20:39:07 +0200 <haskellbridge> <Liamzee> that is giving me an anxiety attack
2025-05-02 20:39:09 +0200 <EvanR> why are you passing the config in more than 1 time
2025-05-02 20:39:37 +0200 <haskellbridge> <Liamzee> to avoid creating a global constant?
2025-05-02 20:39:38 +0200 <haskellbridge> <sm> do the simplest thing that could possibly work, and iterate. I don't think you'll need anything fancy in the end
2025-05-02 20:39:52 +0200 <EvanR> you're making no sense
2025-05-02 20:39:55 +0200 <haskellbridge> <Liamzee> yeah, okay, i should finish the hardcoded table settings version
2025-05-02 20:40:03 +0200 <hellwolf> @quote spiritually mutable - Liamzu
2025-05-02 20:40:03 +0200 <lambdabot> No quotes for this person. It can only be attributed to human error.
2025-05-02 20:40:06 +0200 <haskellbridge> <Liamzee> then figure out what to do with mutable configs
2025-05-02 20:40:33 +0200 <EvanR> "global constants" "mutable configs" "IOrefs" but not talking about the actual problem to be solved
2025-05-02 20:40:49 +0200 <EvanR> while without any information we just say "function argument"
2025-05-02 20:40:58 +0200 <EvanR> and it gets rejected mysteriously
2025-05-02 20:41:46 +0200 <haskellbridge> <Liamzee> it's already done with function arguments, the version that was going to be mutable until i realized hasql doesn't come with sanitizers
2025-05-02 20:41:57 +0200 <haskellbridge> <Liamzee> was going to take in records containing the config
2025-05-02 20:42:16 +0200 <monochrom> If you call it "config" not "state", I don't see why someone wants it mutable, or why someone wants it mutable frequently enough that an immutable record is unacceptable.
2025-05-02 20:42:17 +0200 <EvanR> what is "it" that is already done
2025-05-02 20:42:18 +0200 <haskellbridge> <Liamzee> the problem is that it feels ugly to input the config and settings each time
2025-05-02 20:42:29 +0200 <haskellbridge> <Liamzee> so the answer is readerT?
2025-05-02 20:42:42 +0200 <EvanR> to what question
2025-05-02 20:43:08 +0200 <haskellbridge> <sm> my answer is 👉 https://wiki.c2.com/?DoTheSimplestThingThatCouldPossiblyWork 👈
2025-05-02 20:43:13 +0200 <haskellbridge> <Liamzee> to not wanting to pass in an ugly config every time the function is called, or making a top-level partial application of the function
2025-05-02 20:43:29 +0200 <EvanR> that's an opinion about an answer to the unknown question
2025-05-02 20:43:40 +0200 <monochrom> Why is config ugly? Unless your app is ugly in the first place.
2025-05-02 20:43:43 +0200 <EvanR> you might as well give your feelings about 42
2025-05-02 20:44:02 +0200 <hellwolf> there is always a GHC extensions for you: https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/implicit_parameters.html
2025-05-02 20:44:02 +0200 <monochrom> Oh 42 is totally ugly. :)
2025-05-02 20:44:11 +0200 <monochrom> 43 is a beautiful prime.
2025-05-02 20:44:13 +0200 <haskellbridge> <Liamzee> monochrom the pessimist
2025-05-02 20:44:16 +0200 <haskellbridge> <Liamzee> oh
2025-05-02 20:44:17 +0200 <hellwolf> I am not a "fan" of it, because I don't understand why its needed.
2025-05-02 20:44:32 +0200 <hellwolf> but I knew of it and people using it for a yet another kind of effect system.
2025-05-02 20:44:36 +0200 <EvanR> reflection and implicit parameters and ReaderT and ... and ... are all forms of "pass in an argument"
2025-05-02 20:44:40 +0200chele(~chele@user/chele) (Remote host closed the connection)
2025-05-02 20:44:46 +0200 <hellwolf> yea, transformers
2025-05-02 20:44:53 +0200 <hellwolf> maybe you need a ConfigT
2025-05-02 20:44:56 +0200 <hellwolf> that'd make you happy?
2025-05-02 20:45:01 +0200 <haskellbridge> <Liamzee> fyi, the level of library simplicity i want is to be able to use a single 🍅 emoji to call the database accessor functions
2025-05-02 20:45:08 +0200 <EvanR> Config -> IO ()
2025-05-02 20:45:10 +0200 <haskellbridge> <sm> if you want to go straight to https://academy.fpblock.com/blog/2017/06/readert-design-pattern you can
2025-05-02 20:45:14 +0200 <monochrom> So far I have only needed implicit param for HasCallStack. That one looks like a good use case. But yeah I haven't seen another good use case.
2025-05-02 20:45:45 +0200 <hellwolf> oh, you can use implicit param for HasCallStack?
2025-05-02 20:45:59 +0200 <EvanR> so you want to somehow avoid passing in the database connection everywhere
2025-05-02 20:46:12 +0200 <hellwolf> CC @sm who recently mentioned some pay related to HasCallStack
2025-05-02 20:46:20 +0200 <monochrom> I mean that HasCallStack is implemented as an implicit param.
2025-05-02 20:46:23 +0200 <haskellbridge> <Liamzee> he's already here
2025-05-02 20:46:36 +0200 <hellwolf> is he spiritually here?
2025-05-02 20:46:50 +0200haskellbridgesm contemplates
2025-05-02 20:47:22 +0200 <hellwolf> "05-02 21:46 [haskellbridge sm contemplates]" <-- if someone is named "is" that'd be a funny IRC message.
2025-05-02 20:47:30 +0200 <haskellbridge> <Liamzee> you know what
2025-05-02 20:47:34 +0200 <haskellbridge> <Liamzee> IVar
2025-05-02 20:47:40 +0200 <monochrom> type HasCallStack = ?callStack :: CallStack
2025-05-02 20:47:52 +0200 <haskellbridge> <Liamzee> initialize the functions by calling a function calling an ivar
2025-05-02 20:47:57 +0200 <haskellbridge> <Liamzee> writing to an ivar
2025-05-02 20:48:05 +0200 <haskellbridge> <Liamzee> that loads the config
2025-05-02 20:48:08 +0200 <EvanR> IVar is good when you have a value that is not yet known and your evaluation can wait
2025-05-02 20:48:11 +0200 <haskellbridge> <Liamzee> the ivar is global scoped in the library
2025-05-02 20:48:20 +0200 <EvanR> ...
2025-05-02 20:48:24 +0200 <monochrom> i.e., if you write "foo :: HasCallStack => ()" it becomes "foo :: ?callStack :: CallStack => Int" so the stack is an implicit param.
2025-05-02 20:48:40 +0200 <EvanR> global variables are bad mkay
2025-05-02 20:48:49 +0200bilegeek(~bilegeek@2600:1008:b01d:f38b:e9d6:efbc:7794:17cd) bilegeek
2025-05-02 20:48:51 +0200 <haskellbridge> <Liamzee> hummm, crap, this is unsafePerformIO shenanigans
2025-05-02 20:49:03 +0200 <haskellbridge> <sm> implicit params hurt my brain. They feel like arguments by another name
2025-05-02 20:49:10 +0200 <EvanR> they are
2025-05-02 20:49:11 +0200 <monochrom> Yeah IVar does not relieve you from unsafePerformIO.
2025-05-02 20:49:28 +0200 <monochrom> Only parameter passing can relieve you from unsafePerformIO.
2025-05-02 20:49:47 +0200 <haskellbridge> <Liamzee> only unsafePerformIO can relieve me from parameter passing?
2025-05-02 20:49:56 +0200 <haskellbridge> <Liamzee> although tbh I feel like doing it because it's transgressive and i'm an edgelord
2025-05-02 20:49:56 +0200 <monochrom> That is also true.
2025-05-02 20:50:02 +0200 <EvanR> your library actions need to know which connection to use
2025-05-02 20:50:04 +0200 <hellwolf> you need to go to a ayahuasca session and puke all your imperative toxic out.
2025-05-02 20:50:11 +0200 <haskellbridge> <loonycyborg> unsafePerformIO is ok if you can prove that it always actually returns the same thing
2025-05-02 20:50:34 +0200 <EvanR> which it doesn't in the case of global refs
2025-05-02 20:50:43 +0200 <EvanR> which is why it's tricky
2025-05-02 20:50:59 +0200 <haskellbridge> <Liamzee> {-# NOINLINE liamIsGoingToHell #-}
2025-05-02 20:51:15 +0200 <EvanR> I feel like you're trolling the channel now
2025-05-02 20:51:41 +0200 <hellwolf> it's friday
2025-05-02 20:52:12 +0200 <haskellbridge> <loonycyborg> I think it would be acceptable to access global constants, but not variables.
2025-05-02 20:52:16 +0200weary-traveler(~user@user/user363627) (Remote host closed the connection)
2025-05-02 20:52:16 +0200 <EvanR> a more object oriented way to do this is when you connect to the database, it returns to you a record of database accessing routines which close over the connection
2025-05-02 20:52:23 +0200 <monochrom> It's basic information theory. If a procedure knows which filename to open, there are only one of 3 reasons: It knows from the source code, it knows from an argument, it knows from I/O, it knows from the black market.
2025-05-02 20:52:25 +0200 <haskellbridge> <sm> wait, isn't HasCallStack a type constraint, not an implicit parameter, monochrom ? https://www.stackage.org/haddock/lts-20.20/base-4.16.4.0/GHC-Exception.html#t:CallStack
2025-05-02 20:52:40 +0200 <monochrom> I can't count. s/3/4/
2025-05-02 20:52:57 +0200 <haskellbridge> <sm> loonycyborg I use it for accessing low level command line flags like --color and --debug
2025-05-02 20:53:13 +0200 <monochrom> Do you accept: A type constraint that describes an implicit param?
2025-05-02 20:53:42 +0200 <EvanR> that's also where reflection comes up stuff like the global config you don't want to pass around (this is different from "a database connection I got later")
2025-05-02 20:54:02 +0200 <haskellbridge> <sm> ah: "The intrepid user may notice that HasCallStack is just an alias for an implicit parameter ?callStack :: CallStack. This is an implementation detail and should not be considered part of the CallStack API, we may decide to change the implementation in the future."
2025-05-02 20:54:06 +0200 <monochrom> All implicit params are specified by constraints, i.e., at the same place as class constraints. foo :: (?x :: X, Num a) => a
2025-05-02 20:54:32 +0200 <haskellbridge> <loonycyborg> implicit params aren't too popular afaik
2025-05-02 20:55:14 +0200 <haskellbridge> <Liamzee> the interface I want is just createUser username password email, okay?
2025-05-02 20:55:38 +0200 <EvanR> and how does it know what database in the world to do that on
2025-05-02 20:55:41 +0200 <haskellbridge> <Liamzee> so how do I guarantee this on the library side
2025-05-02 20:55:56 +0200 <haskellbridge> <Liamzee> the iVar unsafePerformIO solution works
2025-05-02 20:56:18 +0200 <EvanR> to access another database you need to close the program and reopen?
2025-05-02 20:56:48 +0200 <haskellbridge> <Liamzee> or you use a different set of variables
2025-05-02 20:56:49 +0200Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) Tuplanolla
2025-05-02 20:56:51 +0200 <haskellbridge> <Liamzee> erm, functions
2025-05-02 20:56:58 +0200 <haskellbridge> <Liamzee> you can wrap normal parameter-based functions
2025-05-02 20:57:11 +0200 <haskellbridge> <Liamzee> and have a convenience set based around an unsafeperformIO-ed ivar somewhere
2025-05-02 20:57:12 +0200 <EvanR> there's only ever 1 IVar because you made it global
2025-05-02 20:57:29 +0200 <haskellbridge> <Liamzee> and the convenience set calls the normal parameter based functions
2025-05-02 20:57:30 +0200 <haskellbridge> <loonycyborg> yes that's the inherent problem of global variables, that you can't easily generalize it to multiple of the same object
2025-05-02 20:57:50 +0200 <haskellbridge> <Liamzee> using readIVar to get the data once the IVAR has been set by the user
2025-05-02 20:57:51 +0200 <haskellbridge> <Liamzee> ugh
2025-05-02 20:58:03 +0200 <monochrom> I am fine with unsafePerfomIO (newIORef foo) tbh. Look, stdin :: Handle is already an example. It can be legitimate.
2025-05-02 20:58:04 +0200 <EvanR> having tried to "take a shortcut" and use globals in haskell for things, ime it always turns out terrible
2025-05-02 20:58:05 +0200 <haskellbridge> <Liamzee> maybe i'll just do it normally with parameter passing, and leave the ivar nutjobbery as a secondary lib
2025-05-02 20:58:16 +0200tolgo(~Thunderbi@199.115.144.130) (Ping timeout: 265 seconds)
2025-05-02 20:58:17 +0200 <EvanR> it always makes things works, (ime)
2025-05-02 20:58:22 +0200 <haskellbridge> <loonycyborg> it's kinda nice that haskell is so hostile to global variables, so it actually forces you to be more general than you could get away with in C
2025-05-02 20:58:24 +0200 <haskellbridge> <Liamzee> Geta.Login.IVarNutJobbery
2025-05-02 20:58:26 +0200 <haskellbridge> <Liamzee> the name sells itself
2025-05-02 21:00:04 +0200caconym7(~caconym@user/caconym) (Quit: bye)
2025-05-02 21:00:26 +0200 <monochrom> Oh yeah the C/Unix world had to suffer a transition in the DNS library from "settings are in a global var" to "oh sh*t not thread-safe, every function has to be changed to take one more argument".
2025-05-02 21:00:43 +0200caconym7(~caconym@user/caconym) caconym
2025-05-02 21:00:53 +0200 <hellwolf> I am wondering with ghc-wasm, how you expose nowadays anything to javascript runtime from haskell wasm runtime; I had to use some global ref and unsafePerformanceIO
2025-05-02 21:01:09 +0200 <hellwolf> maybe now it has its own mechanism. (I was only doing experiment, so not serious dabbling with it)
2025-05-02 21:01:37 +0200 <monochrom> Likewise for the PRNG library, and a few others.
2025-05-02 21:01:47 +0200 <hellwolf> Global is a implicit parameter to those languages
2025-05-02 21:01:55 +0200 <hellwolf> Global.xxx
2025-05-02 21:02:00 +0200 <monochrom> And oh errno was a lot of fun, too.
2025-05-02 21:02:05 +0200 <hellwolf> like, in javascript, it's called "window"
2025-05-02 21:02:26 +0200 <haskellbridge> <Liamzee> thanks monochrom for not blowing up at me for wanting to try heretic haskell
2025-05-02 21:02:53 +0200 <EvanR> in electrician speak, "you need to get shocked at least once"
2025-05-02 21:03:13 +0200 <hellwolf> I thought it was at most once
2025-05-02 21:03:26 +0200 <haskellbridge> <Liamzee> that said, it does make me wonder if it's possible to use the type system to ensure that the codebase uses the loader for the ivar exactly once in an executed codepath
2025-05-02 21:03:28 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-02 21:03:34 +0200 <monochrom> It had to transition from "simply `extern int errno;`" to "it is now an elaborate macro that accesses a thread-local store, so please please please #include <errno.h> and not write your own `extern int errno;` because it no longer works"
2025-05-02 21:03:51 +0200 <EvanR> use the IVar exactly once?
2025-05-02 21:04:25 +0200 <haskellbridge> <loonycyborg> like with linear haskell? :P
2025-05-02 21:04:33 +0200 <monochrom> Oh exactly once? That's linear type then!
2025-05-02 21:04:36 +0200 <haskellbridge> <Liamzee> use the loader
2025-05-02 21:04:46 +0200 <EvanR> (it can be treated like a normal value, why would you care if someone looks at it more than once)
2025-05-02 21:04:46 +0200 <haskellbridge> <Liamzee> no, but that means you can only use it in linear types, no?
2025-05-02 21:05:08 +0200 <haskellbridge> <Liamzee> making it idiot proof
2025-05-02 21:05:09 +0200 <haskellbridge> <loonycyborg> in haskel there's no linear types
2025-05-02 21:05:12 +0200 <monochrom> But linear type requires an argument so you are back to not making it global.
2025-05-02 21:05:15 +0200 <haskellbridge> <loonycyborg> only linear arrows
2025-05-02 21:05:29 +0200 <haskellbridge> <Liamzee> sorry, thanks for the help
2025-05-02 21:09:19 +0200 <haskellbridge> <loonycyborg> can you combine linear haskell with implicit params?
2025-05-02 21:09:19 +0200 <haskellbridge> <Liamzee> the underlying logic, evanr, is that everyone told me that it's a bad idea to try to create backend libraries automating common backend tasks, and tomsmeding said it's an idea that seems good to people who've written 1-2 crud programs but seems silly to people who've written 10, so the target would be people who've written 1-2 crud programs, hence the desire both for simplicity and idiot-proofing
2025-05-02 21:10:48 +0200 <EvanR> why is web programming assuming everybody is an idiot
2025-05-02 21:11:13 +0200 <tomsmeding> the fact that it does, does enable many idiots to write programs that are useful to them
2025-05-02 21:11:20 +0200 <tomsmeding> whether they are also useful to others is perhaps questionable
2025-05-02 21:11:21 +0200 <monochrom> I know why driver exams assume that everybody is an idiot.
2025-05-02 21:11:23 +0200 <tomsmeding> them being idiots
2025-05-02 21:11:41 +0200 <haskellbridge> <sm> Liamzee I like simple beginner friendly idiot friendly libs, even if they're only for learning. Why not write down the api, that will clarify things
2025-05-02 21:11:47 +0200 <EvanR> a license to write web apps does sound sensible
2025-05-02 21:12:04 +0200 <monochrom> Hey I also know why car insurance companies assume that even those who passed driver exams are still idiots. >:)
2025-05-02 21:12:17 +0200 <haskellbridge> <loonycyborg> driving is serious thing, you can actually die if you mess up
2025-05-02 21:12:20 +0200 <EvanR> do not give anyone web app insurance ideas
2025-05-02 21:12:35 +0200 <haskellbridge> <loonycyborg> programmning is somewhat more forgiving
2025-05-02 21:12:58 +0200 <haskellbridge> <sm> most programming
2025-05-02 21:13:01 +0200 <EvanR> if you mess up programming you get bot nets and stolen identity
2025-05-02 21:13:01 +0200marinelli(~weechat@gateway/tor-sasl/marinelli) marinelli
2025-05-02 21:13:05 +0200 <monochrom> Oh I'm sure insurances companies have actually thought about web dev and concluded "nah we'll lose money".
2025-05-02 21:13:08 +0200 <EvanR> without being alerted
2025-05-02 21:13:23 +0200 <monochrom> or rather s/we'll/we'd/ # I hate English
2025-05-02 21:13:25 +0200 <tomsmeding> lol, monochrom
2025-05-02 21:13:32 +0200 <int-e> EvanR: dead patients, crashing airplanes
2025-05-02 21:14:05 +0200 <tomsmeding> there's a difference, though, between "programming" and "using code written by others in a product where correct functioning is vital"
2025-05-02 21:14:32 +0200bilegeek(~bilegeek@2600:1008:b01d:f38b:e9d6:efbc:7794:17cd) (Remote host closed the connection)
2025-05-02 21:14:35 +0200 <tomsmeding> I would not be surprised if being a software engineer on a team for constructing an airplane needs certain certifications. And personally I'd not trust the certifications very much either.
2025-05-02 21:14:52 +0200 <haskellbridge> <Liamzee> loonycyborg: knight capital
2025-05-02 21:14:52 +0200 <tomsmeding> I don't think it's a good idea to require certification before being allowed to touch a compiler
2025-05-02 21:15:37 +0200 <hellwolf> inspector crusoe asking for a proper license.
2025-05-02 21:15:42 +0200 <tomsmeding> unless your goal is to ensure job security for those who already know programming, that is -- because by doing so, you'll lose 80% of the people interested in programming. :)
2025-05-02 21:16:03 +0200 <haskellbridge> <Liamzee> https://en.wikipedia.org/wiki/Knight_Capital_Group
2025-05-02 21:16:27 +0200marinelli(~weechat@gateway/tor-sasl/marinelli) (Client Quit)
2025-05-02 21:16:52 +0200 <EvanR> you're right, might as well put the plane's avionics in a browser and save some money on developers, but in this case I think web dev should stop assuming idiots
2025-05-02 21:16:57 +0200marinelli(~weechat@gateway/tor-sasl/marinelli) marinelli
2025-05-02 21:17:15 +0200 <tomsmeding> EvanR: who said "put the plane's avionics in a browser"?
2025-05-02 21:17:32 +0200 <int-e> . o O ( electron app )
2025-05-02 21:17:43 +0200 <haskellbridge> <Liamzee> IIRC the F-35 was supposed to have cut costs by moving from Ada, the defense industry standard semi-safe programming language, to commercial languages like C++
2025-05-02 21:18:09 +0200 <int-e> EvanR: surely not all web development assumes that
2025-05-02 21:18:17 +0200 <tomsmeding> int-e: part of "knowing what you're doing", to me, is knowing what benefits and downsides certain tools bring. Electron brings benefits in certain domains, but not in this one. :p
2025-05-02 21:18:27 +0200 <tomsmeding> (I know you do too)
2025-05-02 21:18:35 +0200 <EvanR> I hope not. And don't call me shirley
2025-05-02 21:18:44 +0200 <int-e> but if, when writing, you want to capture the biggest imaginable audience, then you have to go for the idiots
2025-05-02 21:19:18 +0200 <int-e> and then consider making it audiovisual instead of text
2025-05-02 21:19:31 +0200 <tomsmeding> also, what are we arguing about here, exactly? :p
2025-05-02 21:19:37 +0200 <tomsmeding> what's the problem with some people writing for idiots?
2025-05-02 21:19:43 +0200 <int-e> I'm not sure.
2025-05-02 21:19:45 +0200 <tomsmeding> just don't read their text!
2025-05-02 21:19:59 +0200 <tomsmeding> (assuming you're not an idiot, that is)
2025-05-02 21:20:00 +0200otto_s(~user@p4ff270d6.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2025-05-02 21:20:04 +0200 <haskellbridge> <Liamzee> int-e: I've considered making an emoji interface
2025-05-02 21:20:09 +0200 <int-e> I /think/ it's that it's hard to find documentation that isn't either a pure reference or targeted at idiots
2025-05-02 21:20:17 +0200 <int-e> but maybe I'm misinterpreting the context
2025-05-02 21:20:21 +0200j1n37-(~j1n37@user/j1n37) (Ping timeout: 248 seconds)
2025-05-02 21:20:21 +0200 <tomsmeding> right
2025-05-02 21:20:40 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 21:20:56 +0200 <tomsmeding> I think mdn is usually fair, though it's certainly very referency sometimes
2025-05-02 21:23:31 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 21:26:31 +0200 <monochrom> The context is how to design a library API that is both safe for inexperienced people and convenient. Current the tension between them is, for example, a hidden global var under the hood is more convenient because fewer arguments to set up and pass, but then you can't use linear haskell to ensure certain uniqueness.
2025-05-02 21:27:58 +0200 <tomsmeding> thank you monochrom for allowing us to be lazy and not read scrollback
2025-05-02 21:28:07 +0200 <dminuoso> 19:14:35 tomsmeding │ I would not be surprised if being a software engineer on a team for constructing an airplane needs certain certifications. And personally I'd not trust the certifications very much either.
2025-05-02 21:28:11 +0200 <dminuoso> I can talk from experience here:
2025-05-02 21:28:15 +0200 <dminuoso> You dont.
2025-05-02 21:28:19 +0200 <monochrom> <-- Generatvie AI >:)
2025-05-02 21:28:47 +0200 <tomsmeding> dminuoso: as in, you don't need certifications?
2025-05-02 21:28:53 +0200 <dminuoso> Correct.
2025-05-02 21:29:05 +0200 <tomsmeding> persumably the company has some internal standards for abilities of their software engineers, though
2025-05-02 21:29:13 +0200j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-02 21:29:16 +0200 <monochrom> Oh derp I wrote in my course policy "don't use generative AI". I should have said "don't use generative AI except me". >:)
2025-05-02 21:29:22 +0200 <dminuoso> tomsmeding: Yes, just like any other companies.
2025-05-02 21:29:36 +0200 <dminuoso> Some have better standards, others have the front of the ship fall off.
2025-05-02 21:29:41 +0200 <tomsmeding> then all comes down to what those standards are. :)
2025-05-02 21:30:21 +0200 <tomsmeding> on the one hand, it's worrying that no such certifications are required; on the other hand, I'm not sure the certifications would really have much signal anyway
2025-05-02 21:30:24 +0200rvalue-(~rvalue@user/rvalue) rvalue
2025-05-02 21:30:25 +0200 <dminuoso> That said, the actual products undergo very strict ceritification tests (whether those are physical or software products)
2025-05-02 21:30:37 +0200 <tomsmeding> right
2025-05-02 21:30:51 +0200 <haskellbridge> <Liamzee> i'm curious, though, why isn't there more literature on how to design library APIs in Haskell?
2025-05-02 21:30:59 +0200 <monochrom> I'm under the impression that ISO 9001 is all you need and all the buzz. >:)
2025-05-02 21:31:13 +0200rvalue(~rvalue@user/rvalue) (Ping timeout: 268 seconds)
2025-05-02 21:31:25 +0200 <tomsmeding> Liamzee: is there literature on how to design library APIs in other languages?
2025-05-02 21:31:33 +0200 <monochrom> People are too busy writing software to write books?
2025-05-02 21:31:54 +0200 <monochrom> Either that or not enough money to make from writing books.
2025-05-02 21:31:57 +0200 <haskellbridge> <Liamzee> JS
2025-05-02 21:31:59 +0200 <haskellbridge> <Liamzee> https://staltz.com/api-design-tips-for-libraries
2025-05-02 21:33:00 +0200 <monochrom> You know how Ian Stewart make enough money to buy a luxurious house in a luxurious neighbourhood by just writing a calculus textbook that's inflicted on everybody?
2025-05-02 21:33:01 +0200 <tomsmeding> just skimming the headings (sorry), that sounds generalisable
2025-05-02 21:33:16 +0200 <monochrom> One can't say that for Haskell book authors. Not remotely close.
2025-05-02 21:33:22 +0200 <haskellbridge> <Liamzee> James Stewart, I think
2025-05-02 21:33:31 +0200 <monochrom> Oops yeah.
2025-05-02 21:33:45 +0200 <dminuoso> tomsmeding: That said, I was able to do work that ended on aircraft without having any type of credentials.
2025-05-02 21:33:54 +0200 <monochrom> BTW it's neighbourhood with "u" because it's Toronto Canada. >:)
2025-05-02 21:34:00 +0200 <tomsmeding> dminuoso: cool! :)
2025-05-02 21:34:06 +0200 <dminuoso> And given the average quality of some universities that hand out compsci degrees Im not sure that means anything.
2025-05-02 21:34:23 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-02 21:35:24 +0200 <dminuoso> Meaning, holding a M.Sc does not by itself carry any meaning whether you are useful or not.
2025-05-02 21:35:35 +0200 <tomsmeding> agreed
2025-05-02 21:36:07 +0200 <tomsmeding> I think standardised certifications for the abilities of _people_ are either very expensive or low-signal
2025-05-02 21:36:46 +0200 <dminuoso> Well, I think for starters we lack the necessary feedback loops to create incentives for training people the right way.
2025-05-02 21:36:46 +0200 <geekosaur> or both 😈
2025-05-02 21:37:00 +0200 <haskellbridge> <sm> dminuoso which part of the aircraft was it for ?
2025-05-02 21:37:09 +0200 <dminuoso> If my code causes aircraft to fall out of the sky, I will not be liable in any way.
2025-05-02 21:37:32 +0200 <tomsmeding> is that because someone else in the company would be, instead?
2025-05-02 21:37:41 +0200 <dminuoso> But if I do some gross mistakes when designing a bridge, some legislations allow for criminal charges.
2025-05-02 21:37:58 +0200 <dminuoso> Nobody has ever gone to prison for faulty software, irrespective of how many people died.
2025-05-02 21:38:20 +0200 <dminuoso> You can always blame it on the software and mitigate the PR disaster, it is amazing.
2025-05-02 21:38:20 +0200tromp(~textual@2001:1c00:3487:1b00:31c9:5f27:18bf:4d4e)
2025-05-02 21:38:32 +0200 <dminuoso> "Its the software!"
2025-05-02 21:38:43 +0200 <tomsmeding> "Well who made that software?!"
2025-05-02 21:38:57 +0200rvalue-rvalue
2025-05-02 21:38:57 +0200 <dminuoso> Does not matter. Look at crowdstrike.
2025-05-02 21:39:11 +0200 <tomsmeding> oh but that's big corporate taking services from other big corporate
2025-05-02 21:39:28 +0200 <tomsmeding> money and interpersonal relations are more important than services rendered or product quality
2025-05-02 21:39:54 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich)
2025-05-02 21:40:02 +0200 <tomsmeding> oh, and being table to tick something off a checklist
2025-05-02 21:40:06 +0200 <tomsmeding> *able, not table
2025-05-02 21:40:12 +0200 <monochrom> It's why I still refuse to say "software engineers". If you are not liable to go to prison, you are not an engineer.
2025-05-02 21:40:13 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 21:40:28 +0200 <monochrom> Because all other engineers are.
2025-05-02 21:40:48 +0200 <dminuoso> Fun fact, in Germany it is illegal to call yourself Softwareingenieur without a degree in mechanical engineering.
2025-05-02 21:41:04 +0200 <dminuoso> (The job title "ingenieur" is protected by law)
2025-05-02 21:41:18 +0200 <tomsmeding> however much you think there should be a feedback loop, I find it somewhat awkward to send an engineer (any engineer) to _prison_ for faulty engineering -- assuming the faulty engineering was unintentional
2025-05-02 21:41:35 +0200 <tomsmeding> prison is for intentionally committed crimes, not for incompetence
2025-05-02 21:41:44 +0200 <dminuoso> tomsmeding: Sure, lawmakers have notions like gross negligence for that.
2025-05-02 21:41:48 +0200 <haskellbridge> <Liamzee> "criminal negligence"
2025-05-02 21:41:53 +0200 <tomsmeding> right
2025-05-02 21:42:18 +0200 <monochrom> Well there is this notion of crimincal negligence. But we can debate why we need it.
2025-05-02 21:43:17 +0200sprotte24(~sprotte24@p200300d16f0dd100892d07af958b891b.dip0.t-ipconnect.de)
2025-05-02 21:43:52 +0200 <monochrom> There is also manslaughter.
2025-05-02 21:44:08 +0200 <dminuoso> Software has led us up to a point of time, where cars are driving autonomously with software, provoke an accident and a split second before impact they turn off their autopilot so legally you were driving with AP off.
2025-05-02 21:44:20 +0200 <monochrom> Yikes
2025-05-02 21:44:20 +0200 <dminuoso> End-stage capitalism. :-)
2025-05-02 21:44:46 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds)
2025-05-02 21:45:26 +0200 <monochrom> But end-stage? We'll see about that. :)
2025-05-02 21:46:11 +0200 <monochrom> There is still a chance that people can evolve and carry on because they learned to either not buy AP or not buy cars at all.