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.
2025-05-02 21:47:01 +0200 <monochrom> Alternatively all of humanity die from those car accidents, then it is the highly automated frequent trading machines that will carry on capitalism!
2025-05-02 21:47:42 +0200 <dminuoso> I've read opinions comparing the situation to that of aviation, where autonomous driving enables rolling out changes to improve safety across all drivers.
2025-05-02 21:47:53 +0200remedan_(~remedan@ip-62-245-108-153.bb.vodafone.cz) remedan
2025-05-02 21:48:25 +0200 <monochrom> You know, they said that about CPU firmware too...
2025-05-02 21:48:38 +0200 <dminuoso> :-)
2025-05-02 21:49:09 +0200remedan(~remedan@ip-62-245-108-153.bb.vodafone.cz) (Ping timeout: 276 seconds)
2025-05-02 21:49:58 +0200 <dminuoso> In aviation this works because any single incident can and often does lead to mandated (!) changes.
2025-05-02 21:50:10 +0200 <dminuoso> But it is not software that enabled it, but the fact that those changes were mandated.
2025-05-02 21:50:17 +0200michalz(~michalz@185.246.207.203)
2025-05-02 21:50:36 +0200 <EvanR> except helicopters
2025-05-02 21:50:44 +0200 <EvanR> accidents keep leading to no changes
2025-05-02 21:50:49 +0200 <dminuoso> What do you mean?
2025-05-02 21:51:30 +0200 <EvanR> people just accept the risk with helicopter flights
2025-05-02 21:51:41 +0200jespada(~jespada@r179-25-202-180.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
2025-05-02 21:52:37 +0200jespada(~jespada@r179-25-202-180.dialup.adsl.anteldata.net.uy) jespada
2025-05-02 21:52:44 +0200j1n37-(~j1n37@user/j1n37) j1n37
2025-05-02 21:53:00 +0200remedan_(~remedan@ip-62-245-108-153.bb.vodafone.cz) (Ping timeout: 252 seconds)
2025-05-02 21:53:22 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 252 seconds)
2025-05-02 21:54:44 +0200 <dminuoso> Given that its the same regulation bodies, I find the characterization somewhat unlikely
2025-05-02 21:55:13 +0200 <dminuoso> It is just that commercial helicopters are rather rare.
2025-05-02 21:58:59 +0200m15k47on1c(~m15k47on1@user/m15k47on1c) m15k47on1c
2025-05-02 21:59:13 +0200 <dminuoso> EvanR: Ill dig up some numbers but last I checked helicopters have about 1/10th of the chance for fatal or non-fatal accidents per 100,000 flight hours.
2025-05-02 21:59:27 +0200 <dminuoso> They are exceedingly safe.
2025-05-02 22:00:18 +0200 <hellwolf> It kinda makes intuitive sense. I think most commercial jet crashes during taking off or landing? And helicopter has a much safer landing/taking off procedure?
2025-05-02 22:00:22 +0200 <hellwolf> in comparison.
2025-05-02 22:01:11 +0200 <hellwolf> pardon my sloppy english: most commercial jet crashes happen during....
2025-05-02 22:01:17 +0200 <dminuoso> Sounds plausible. Helicopters - even with engine failure - are still very mobile and need only minimal space for an emergency landing.
2025-05-02 22:02:05 +0200 <dminuoso> With an A320 you need 1.5km of runway...
2025-05-02 22:02:06 +0200 <EvanR> I hope no one hears this and mistakes what you're saying that helicopters are much safer than commercial airliners
2025-05-02 22:02:45 +0200jcarpenter2(~lol@2603:3016:1e01:b960:740e:a7b5:ac86:87b2)
2025-05-02 22:03:40 +0200 <EvanR> when I try to look up stats, I get obvious AI generated articles
2025-05-02 22:04:37 +0200 <dminuoso> EvanR: I have some good sources, but Im behind rubbish internet right now.
2025-05-02 22:04:45 +0200 <EvanR> (used to work for a fake article site company, they're probably loving the AI craze right now)
2025-05-02 22:04:52 +0200 <dminuoso> Will get back to you tomorrow on this. :)
2025-05-02 22:05:35 +0200remedan(~remedan@ip-62-245-108-153.bb.vodafone.cz) remedan
2025-05-02 22:06:21 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu) (Quit: Client closed)
2025-05-02 22:06:32 +0200 <m15k47on1c> Is there any steam game written in haskell?
2025-05-02 22:06:37 +0200Googulator65(~Googulato@2a01-036d-0106-4a24-1dc7-297e-fae3-e794.pool6.digikabel.hu)
2025-05-02 22:06:43 +0200 <EvanR> yes
2025-05-02 22:06:48 +0200 <EvanR> more than 1
2025-05-02 22:07:01 +0200 <EvanR> (uhg. "steam game")
2025-05-02 22:07:09 +0200 <dminuoso> At the same time, this way of "events lead to changes" is also what makes modern clean sheet designs nearly impossible, and it makes it difficult and expensive for new companies to emerge.
2025-05-02 22:07:20 +0200 <m15k47on1c> Can you tell me their names?
2025-05-02 22:07:35 +0200 <dminuoso> If you make an aircraft, you have these 724,012 things to address to prevent past mistakes.
2025-05-02 22:07:48 +0200 <EvanR> defect process, is one
2025-05-02 22:11:42 +0200 <haskellbridge> <sm> and https://store.steampowered.com/app/2495130/Pixelpusher is the other
2025-05-02 22:12:41 +0200 <dminuoso> hellwolf: Come to think of it, I suspect the major reason to be the ability to autorotate
2025-05-02 22:13:29 +0200 <dminuoso> Which means at any point in the flight, you can just abort and land where you want, even if both engines go out.
2025-05-02 22:13:45 +0200 <dminuoso> With planes you are extremely limited.
2025-05-02 22:14:39 +0200 <EvanR> there's a lot more on itch.io
2025-05-02 22:15:15 +0200 <EvanR> like critically acclaimed peoplemon
2025-05-02 22:17:15 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 22:24:19 +0200michalz(~michalz@185.246.207.203) (Remote host closed the connection)
2025-05-02 22:25:38 +0200 <haskellbridge> <sm> https://linearity.itch.io/peoplemon eh
2025-05-02 22:26:41 +0200 <hellwolf> dminuoso: makes sense. both are established technology, so that should be less of a contributor. So, the innate property of the technology, the ones you just mentioned for instances, becomes a more important factor here.
2025-05-02 22:28:38 +0200 <hellwolf> that's brainrot game
2025-05-02 22:28:56 +0200hellwolfhave no idea what does brainrot mean. I just saw the word lately.
2025-05-02 22:29:01 +0200 <EvanR> it's pure art is what it is
2025-05-02 22:29:46 +0200 <EvanR> >I tried to write this game program a number of times. In the end, the only natural way to do it was writing it in Haskell...
2025-05-02 22:30:23 +0200 <hellwolf> so, it was you that wrote it?
2025-05-02 22:30:25 +0200 <EvanR> (quote taken completely out of context)
2025-05-02 22:30:44 +0200 <hellwolf> oh, a quote
2025-05-02 22:31:08 +0200 <haskellbridge> <sm> added to my games list.
2025-05-02 22:31:50 +0200 <haskellbridge> <Liamzee> the humor isn't that dated on peoplemon
2025-05-02 22:31:55 +0200 <haskellbridge> <sm> Peoplemon, Defect Process, Pixelpusher all have pretty good reviews, notably
2025-05-02 22:32:10 +0200 <haskellbridge> <Liamzee> https://youtu.be/8na6mdQAv-0?t=525
2025-05-02 22:32:17 +0200 <tomsmeding> the fact that it says "in Haskell using the Glasgow Haskell Compiler" already dates it
2025-05-02 22:32:46 +0200 <hellwolf> is it finally the glorious haskell compiler now
2025-05-02 22:33:17 +0200 <hellwolf> don't just add to your list. let's buy the game.
2025-05-02 22:33:32 +0200 <tomsmeding> https://www.haskell.org/ghc/ says "Glasgow" still
2025-05-02 22:33:54 +0200 <hellwolf> $ ghc --version
2025-05-02 22:33:54 +0200 <hellwolf> The Glorious Glasgow Haskell Compilation System, version 9.10.1
2025-05-02 22:33:59 +0200 <haskellbridge> <Liamzee> https://haskell-game.dev/games/peoplemon.html
2025-05-02 22:34:00 +0200 <tomsmeding> gghc!
2025-05-02 22:34:12 +0200 <haskellbridge> <Liamzee> that's the haskell game dev roster
2025-05-02 22:34:32 +0200 <haskellbridge> <sm> by list, I meant https://joyful.com/Haskell+games#What%20are%20some%20notable%20Haskell%20games
2025-05-02 22:34:32 +0200 <haskellbridge> I did buy Magic Cookies and Defect Process at least, but don't have time for more games
2025-05-02 22:35:02 +0200 <EvanR> oh yeah magic cookies
2025-05-02 22:35:06 +0200 <hellwolf> I just paid bucks to the game. I am applying social pressure now to this grouo.
2025-05-02 22:37:08 +0200 <haskellbridge> <Liamzee> honestly the other games on the roster look better
2025-05-02 22:37:31 +0200 <EvanR> not a fan of people?
2025-05-02 22:37:32 +0200 <haskellbridge> <Liamzee> https://haskell-game.dev/games/orboros.html
2025-05-02 22:38:37 +0200 <haskellbridge> <Liamzee> Peoplemon's a bit raunch humor, and satire has a tendency to get old
2025-05-02 22:40:01 +0200 <hellwolf> too bad, I can't run with NixOS what I just bought and downloaded. will just touch it with mouse cursor for now.
2025-05-02 22:40:25 +0200traxex(traxex@user/traxex) (Ping timeout: 252 seconds)
2025-05-02 22:41:19 +0200alt-crns(~crns@p200300f1171e03c029e61908ecaeb223.dip0.t-ipconnect.de)
2025-05-02 22:41:20 +0200crns(~crns@user/crns) (Read error: Connection reset by peer)
2025-05-02 22:41:37 +0200 <EvanR> I tried to run it with dosbox and it didn't work either
2025-05-02 22:41:45 +0200 <haskellbridge> <sm> Liamzee let us know what OrboROS is like if you play it
2025-05-02 22:41:46 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
2025-05-02 22:42:19 +0200 <haskellbridge> <Liamzee> don't have time :(
2025-05-02 22:42:30 +0200 <haskellbridge> <Liamzee> i still think that Haskell games seem better than Rust's
2025-05-02 22:42:31 +0200 <haskellbridge> <sm> s/Liamzee/anyone/
2025-05-02 22:44:29 +0200 <hellwolf> Ask your users to buy a bigger computer with more memory and faster CPU - An advise from a ex-C++ user
2025-05-02 22:44:40 +0200 <haskellbridge> <sm> huh, more at https://haskell-game.dev/games.html I haven't seen
2025-05-02 22:47:11 +0200 <hellwolf> Rust is anti-capitalistic movement, don't fix hardware manufacturers' sloppiness without them paying you. Use Haskell to get your mental sanity back and let hardware people fix the limitations :p
2025-05-02 22:47:37 +0200hellwolfcertainly reached Friday peak. Duck now.
2025-05-02 22:48:11 +0200 <m15k47on1c> Is there something close to SDL in Haskell? Pure haskell? No SDL bidings?
2025-05-02 22:52:42 +0200takuan(~takuan@d8D86B601.access.telenet.be) (Remote host closed the connection)
2025-05-02 22:53:28 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-05-02 22:54:09 +0200 <haskellbridge> <sm> https://hackage.haskell.org/packages/search?terms=sdl
2025-05-02 22:54:25 +0200 <haskellbridge> <sm> oh I see.. gloss, maybe
2025-05-02 22:55:44 +0200 <int-e> What's the reason to avoid SDL or other C library bindings?
2025-05-02 22:56:48 +0200 <haskellbridge> <Liamzee> sdl2 at least is broken in recent versions on windows, msys2
2025-05-02 22:57:08 +0200 <haskellbridge> <Liamzee> msys2, unless you can find older versions, won't compile due to GHC on Windows not supporting stack protector
2025-05-02 22:57:15 +0200 <haskellbridge> <Liamzee> erm, excuse me, sdl2
2025-05-02 22:57:31 +0200 <haskellbridge> <Liamzee> you need the older msys2 package for sdl2 to compile as newer versions require stack protector
2025-05-02 22:57:42 +0200 <haskellbridge> <sm> and what's the status / pureness of monomer ?
2025-05-02 22:57:56 +0200 <haskellbridge> <Liamzee> monomer's on sdl2
2025-05-02 22:58:11 +0200 <haskellbridge> <Liamzee> it runs on all platforms (i think) other than windows due to the stack protector issue
2025-05-02 22:58:26 +0200 <int-e> monomer uses sdl2 as a dependency. gloss uses GLFW
2025-05-02 22:58:52 +0200 <haskellbridge> <Liamzee> this version MIGht work, i haven't tested it as i no longer have a windows machine
2025-05-02 22:58:54 +0200 <haskellbridge> <Liamzee> https://cygwin.com/packages/summary/mingw64-x86_64-SDL2-src.html
2025-05-02 22:58:58 +0200 <EvanR> this is haskell, we don't require C libraries be rewritten in haskell before using them
2025-05-02 23:00:31 +0200 <haskellbridge> <sm> m15k47on1c and there's FunGEn, based on opengl
2025-05-02 23:00:40 +0200 <int-e> https://hackage.haskell.org/package/xhb is one thing I can readily think of that is very low-level windowing related but not binding an existing C library. what was that site for looking up reverse dependencies on hackage?
2025-05-02 23:01:06 +0200 <haskellbridge> <Liamzee> evanr: I think the real reason I think Haskell games are better than Rust games is that Haskell games are, well, limited, and also the skills needed to make a Haskell game are relatively rare
2025-05-02 23:01:09 +0200 <haskellbridge> <sm> it's built in to hackage now.. but https://packdeps.haskellers.com
2025-05-02 23:01:24 +0200 <EvanR> that sounds like labor theory of game value
2025-05-02 23:01:28 +0200 <haskellbridge> <Liamzee> so the games people do make seem to have had much more love than the Rust counterparts, quite a few on the Rust games list feel like someone was trying to spam an app store
2025-05-02 23:01:41 +0200alt-crns(~crns@p200300f1171e03c029e61908ecaeb223.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2025-05-02 23:01:46 +0200 <EvanR> the more work it took to make the game, get to the of being able to make the game the way they did, the better the game is?
2025-05-02 23:01:53 +0200 <int-e> And FunGEn binds GLUT for window creation. It's almost as if nobody really wants to reimplement the low-level stuff when an existing C library already does it well enough :P
2025-05-02 23:01:55 +0200 <EvanR> get to the point*
2025-05-02 23:02:35 +0200 <haskellbridge> <Liamzee> i don't believe in LTOV either!
2025-05-02 23:02:44 +0200 <int-e> (For OpenGL you have no choice anyway; the interface is a C API)
2025-05-02 23:03:03 +0200 <EvanR> rewrite opengl in ~~rust~~ haskell!
2025-05-02 23:03:06 +0200 <haskellbridge> <Liamzee> i'm just saying it's an expectations thing, it should be relatively more straightforward to make games in Rust
2025-05-02 23:03:21 +0200 <EvanR> I don't see how you came to that conclusion
2025-05-02 23:03:47 +0200 <EvanR> unless you maybe narrow down the scope of "game" which would easily exclude rust in the process
2025-05-02 23:04:58 +0200 <int-e> sm: Built in, hmm. Oh there it is, just a bit hard to discover. https://hackage.haskell.org/package/xhb/reverse says that there are 2 reverse deps and then lists one called `robot`.
2025-05-02 23:06:05 +0200haskellbridgesm looked for a rust games list, found https://github.com/rust-unofficial/awesome-rust?tab=readme-ov-file#games and https://itch.io/games/made-with-rust
2025-05-02 23:06:28 +0200 <int-e> In contrast, the X11 bindings have 37 reverse deps.
2025-05-02 23:06:54 +0200 <EvanR> roguelike games, well met
2025-05-02 23:09:50 +0200jespada(~jespada@r179-25-202-180.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
2025-05-02 23:11:51 +0200 <haskellbridge> <Liamzee> fine, how about this, haskell games just exceed expectations more than rust games
2025-05-02 23:12:24 +0200 <haskellbridge> <Liamzee> haskell is more, i can't believe how polished it is, even if there's likely bugs somewhere or the gameplay is insipid, rust games, it's rust, isn't this supposed to be more amazing?
2025-05-02 23:12:36 +0200 <EvanR> re expectations there was that talk by carmack where he said functional programming was the future
2025-05-02 23:12:56 +0200nacation(~m-3l4s76@user/nacation) (Ping timeout: 252 seconds)
2025-05-02 23:12:57 +0200 <EvanR> not borrow checking
2025-05-02 23:13:43 +0200 <haskellbridge> <Liamzee> and yeah i guess the expectations aren't there anymore, i mean, godot bindings are old and possibly rusted
2025-05-02 23:14:06 +0200 <EvanR> godot isn't really the kind of thing you bind to anyway, it's not a library (unfortunately, perhaps)
2025-05-02 23:14:19 +0200 <haskellbridge> <Liamzee> spj et al didn't even try to blackmail tim sweeney for unreal bindings
2025-05-02 23:15:10 +0200 <haskellbridge> <Liamzee> rust, on the other hand, i'm surprised people don't jam rustc with issues that "the compiler isn't generating my source code for me"
2025-05-02 23:15:18 +0200__jmcantrell__(~weechat@user/jmcantrell) (Ping timeout: 244 seconds)
2025-05-02 23:15:48 +0200 <monochrom> How a language is used is 99% determined by networking effect seeded by random accidents, only 1% by the language itself.
2025-05-02 23:16:14 +0200 <haskellbridge> <Liamzee> i guess it's just that my expectations are too high for rust, so Haskell can surpass expectations, Rust can fail to meet expectations, at least in game dev
2025-05-02 23:16:16 +0200nacation(~m-3l4s76@user/nacation) nacation
2025-05-02 23:16:49 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds)
2025-05-02 23:18:06 +0200 <EvanR> that article about architect of ruin moving away from rust (2 years ago) wasn't too surprising
2025-05-02 23:18:33 +0200 <EvanR> and how their code shrank by a factor of 5 after rewriting it in a normal language
2025-05-02 23:18:52 +0200 <monochrom> Which normal language did they choose?
2025-05-02 23:18:56 +0200 <EvanR> C#
2025-05-02 23:18:56 +0200 <haskellbridge> <sm> C#
2025-05-02 23:19:09 +0200 <monochrom> I'm surprised at that.
2025-05-02 23:19:31 +0200 <monochrom> C I can believe. C# is not less verbose than Rust.
2025-05-02 23:19:41 +0200 <haskellbridge> <Liamzee> C# gave them Unity bindings
2025-05-02 23:19:46 +0200 <haskellbridge> <Liamzee> https://deadmoney.gg/news/articles/migrating-away-from-rust
2025-05-02 23:19:55 +0200 <haskellbridge> <sm> we discussed in #haskell-game:matrix.org (https://matrix.to/#/#haskell-game:matrix.org) recently.. here's the HN thread, it is quite interesting: https://news.ycombinator.com/item?id=43824640
2025-05-02 23:19:56 +0200 <EvanR> the rust they demonstrated had a lot of lines of type signature
2025-05-02 23:20:14 +0200 <EvanR> C# had less type signature (but also totally different framework)
2025-05-02 23:21:21 +0200 <haskellbridge> <Liamzee> it's more, they lived on a Rust engine, the engine was immature, not to say the least about Rust borrow checker, they moved to a multi-billion dollar commercial C++ engine with C# bindings, they had a better time
2025-05-02 23:22:40 +0200 <EvanR> the article has a more accurate assessment I think
2025-05-02 23:24:18 +0200 <monochrom> I'm glad that GC is now acceptable, nay, preferred, in game dev! >:)
2025-05-02 23:24:49 +0200 <monochrom> 10 years ago game devs scaremongered about "but Haskell uses GC, so no go".
2025-05-02 23:26:06 +0200 <EvanR> I just today "fixed" my space engineers on linux by putting a magic XML line that switches from one GC to the other
2025-05-02 23:26:14 +0200 <EvanR> so yeah
2025-05-02 23:26:15 +0200 <monochrom> If C# is acceptable then Haskell should be even more so! We have better and more optional type sigs.
2025-05-02 23:26:26 +0200 <hellwolf> I was trying to say: human should be more expensive than hardwares. Our mental health is more important than optimizing for machines. So, Haskell, please.
2025-05-02 23:29:02 +0200 <xerox> something like https://i.imgflip.com/9spf4o.jpg
2025-05-02 23:29:35 +0200 <monochrom> They like hand-optimizing things because they are easily nerd-sniped. There may also be some OCD involved.
2025-05-02 23:29:55 +0200 <monochrom> haha xerox
2025-05-02 23:30:15 +0200 <EvanR> gcc contains compilers for languages with gc, like java
2025-05-02 23:30:36 +0200 <hellwolf> it's a exploitation of nerds!
2025-05-02 23:30:43 +0200 <EvanR> so it stands for garbage collecting compiler
2025-05-02 23:30:56 +0200 <hellwolf> Nerds be better off torturing themselves with lenses and parsecs
2025-05-02 23:31:20 +0200 <hellwolf> for their own enjoyment, not others cheapness in investing in hardwares.
2025-05-02 23:36:02 +0200m15k47on1c(~m15k47on1@user/m15k47on1c) (Ping timeout: 252 seconds)
2025-05-02 23:40:43 +0200m15k47on1c(~m15k47on1@189.62.151.15)
2025-05-02 23:40:43 +0200m15k47on1c(~m15k47on1@189.62.151.15) (Changing host)
2025-05-02 23:40:43 +0200m15k47on1c(~m15k47on1@user/m15k47on1c) m15k47on1c
2025-05-02 23:42:34 +0200 <tcard> sm: Thank you! I did not know of that book yet. It is an HTML-only book with no source or publication date, which makes it an edge case. I just emailed the author to discuss.
2025-05-02 23:47:30 +0200ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-05-02 23:48:05 +0200ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-05-02 23:49:34 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich