2023/06/03

2023-06-03 00:01:01 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2) (Ping timeout: 240 seconds)
2023-06-03 00:03:30 +0200boukenshaou(~Boukensha@223.178.84.62) (Quit: Leaving)
2023-06-03 00:03:51 +0200boukenshaou(~Boukensha@223.178.84.62)
2023-06-03 00:04:14 +0200boukenshaou(~Boukensha@223.178.84.62) (Remote host closed the connection)
2023-06-03 00:05:40 +0200machinedgod(~machinedg@93-136-248-42.adsl.net.t-com.hr)
2023-06-03 00:08:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 00:09:13 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 00:10:29 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-06-03 00:12:53 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2)
2023-06-03 00:13:53 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-9121-a036-575e-bd7e.rev.sfr.net) (Remote host closed the connection)
2023-06-03 00:14:01 +0200wroathe(~wroathe@50.205.197.50)
2023-06-03 00:14:01 +0200wroathe(~wroathe@50.205.197.50) (Changing host)
2023-06-03 00:14:01 +0200wroathe(~wroathe@user/wroathe)
2023-06-03 00:14:27 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-9121-a036-575e-bd7e.rev.sfr.net)
2023-06-03 00:15:37 +0200cyphase(~cyphase@user/cyphase) (Ping timeout: 256 seconds)
2023-06-03 00:17:52 +0200cyphase(~cyphase@user/cyphase)
2023-06-03 00:20:56 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 00:23:34 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 00:28:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 00:29:08 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 00:36:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 00:40:51 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 00:42:00 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-06-03 00:44:04 +0200cheater_(~Username@user/cheater)
2023-06-03 00:46:32 +0200Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.)
2023-06-03 00:47:28 +0200cheater(~Username@user/cheater) (Ping timeout: 248 seconds)
2023-06-03 00:47:28 +0200cheater_cheater
2023-06-03 00:47:33 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2023-06-03 00:48:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 00:50:13 +0200abrantesasf(~abrantesa@177.137.232.92)
2023-06-03 00:51:04 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 00:56:09 +0200euandreh(~Thunderbi@189.6.18.7) (Read error: Connection reset by peer)
2023-06-03 00:56:22 +0200euandreh1(~Thunderbi@189.6.18.7)
2023-06-03 00:58:42 +0200euandreh1euandreh
2023-06-03 01:02:57 +0200euandreh(~Thunderbi@189.6.18.7) (Quit: euandreh)
2023-06-03 01:03:15 +0200euandreh(~Thunderbi@189.6.18.7)
2023-06-03 01:04:37 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2023-06-03 01:06:37 +0200acidjnk(~acidjnk@p200300d6e7072f784588bfb78dd6f620.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2023-06-03 01:08:56 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 01:10:14 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 01:11:08 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2) (Ping timeout: 240 seconds)
2023-06-03 01:15:18 +0200mauke_(~mauke@user/mauke)
2023-06-03 01:15:44 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 01:16:51 +0200machinedgod(~machinedg@93-136-248-42.adsl.net.t-com.hr) (Ping timeout: 250 seconds)
2023-06-03 01:17:24 +0200mauke(~mauke@user/mauke) (Ping timeout: 268 seconds)
2023-06-03 01:17:24 +0200mauke_mauke
2023-06-03 01:18:24 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 01:19:39 +0200hisa38(~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) (Ping timeout: 256 seconds)
2023-06-03 01:24:20 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2)
2023-06-03 01:26:24 +0200vandita(~vandit@178-164-188-13.pool.digikabel.hu) (Ping timeout: 248 seconds)
2023-06-03 01:28:12 +0200vandita(~vandit@176-241-62-196.pool.digikabel.hu)
2023-06-03 01:30:24 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 01:32:56 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 01:35:56 +0200oo_miguel(~Thunderbi@77.252.47.84) (Ping timeout: 250 seconds)
2023-06-03 01:36:32 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Ping timeout: 248 seconds)
2023-06-03 01:39:51 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 01:45:13 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2023-06-03 01:50:15 +0200simpleauthority(~simpleaut@user/simpleauthority) (Ping timeout: 256 seconds)
2023-06-03 01:52:56 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 01:54:00 +0200mei(~mei@user/mei) (Remote host closed the connection)
2023-06-03 01:54:08 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 01:57:48 +0200troydm(~troydm@user/troydm)
2023-06-03 01:58:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 01:59:17 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 02:02:16 +0200mei(~mei@user/mei)
2023-06-03 02:04:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 02:06:56 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 02:07:59 +0200hisa38(~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net)
2023-06-03 02:16:37 +0200chromoblob(~user@37.113.158.8) (Read error: Connection reset by peer)
2023-06-03 02:21:08 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2) (Ping timeout: 240 seconds)
2023-06-03 02:30:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 02:30:41 +0200abrantesasf(~abrantesa@177.137.232.92) (Remote host closed the connection)
2023-06-03 02:31:51 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 02:34:26 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2)
2023-06-03 02:38:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 02:39:07 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 02:42:02 +0200arrowhead(~arrowhead@cpe-74-66-76-151.nyc.res.rr.com)
2023-06-03 02:43:35 +0200 <arrowhead> I can't cabal install gitit using ghcup - not with any cabal and GHC combination I have tried. I always get the error "Warning: Unknown/unsupported 'ghc' version detected (Cabal 3.8.1.0 supports 'ghc' version < 9.6):".
2023-06-03 02:43:47 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 02:43:59 +0200 <sclv> thats not an error
2023-06-03 02:44:02 +0200 <sclv> thats a warning
2023-06-03 02:44:18 +0200 <arrowhead> Thank you, an sorry. The error is: "Error: cabal: Could not resolve dependencies:"
2023-06-03 02:44:33 +0200 <arrowhead> and*
2023-06-03 02:44:46 +0200 <sclv> that is an error!
2023-06-03 02:46:56 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 02:49:16 +0200ub(~Thunderbi@p548c91e0.dip0.t-ipconnect.de)
2023-06-03 02:49:24 +0200ubert(~Thunderbi@p200300ecdf0002351300242c44b15f80.dip0.t-ipconnect.de) (Remote host closed the connection)
2023-06-03 02:49:24 +0200ububert
2023-06-03 02:50:38 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-06-03 02:53:57 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 02:58:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 02:59:12 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-06-03 02:59:12 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-06-03 02:59:12 +0200wroathe(~wroathe@user/wroathe)
2023-06-03 03:01:11 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 03:02:33 +0200accord(uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2023-06-03 03:07:05 +0200boukenshaou(~Boukensha@223.178.84.62)
2023-06-03 03:07:20 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 03:07:40 +0200boukenshaou(~Boukensha@223.178.84.62) (Remote host closed the connection)
2023-06-03 03:10:01 +0200zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2023-06-03 03:10:36 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2023-06-03 03:10:54 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 03:12:41 +0200zaquest(~notzaques@5.130.79.72)
2023-06-03 03:15:27 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-06-03 03:16:26 +0200ec_(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2023-06-03 03:16:43 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2023-06-03 03:16:59 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-06-03 03:21:23 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 03:30:45 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2) (Ping timeout: 250 seconds)
2023-06-03 03:33:27 +0200anderson(~ande@user/anderson)
2023-06-03 03:35:32 +0200glider(~glider@user/glider)
2023-06-03 03:37:44 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 03:39:14 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 03:42:42 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2)
2023-06-03 03:44:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 03:45:04 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 03:46:47 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 250 seconds)
2023-06-03 03:49:00 +0200tessier(~treed@98.97.63.104)
2023-06-03 03:53:05 +0200nate2(~nate@98.45.169.16)
2023-06-03 03:53:20 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 03:54:23 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 03:58:04 +0200nate2(~nate@98.45.169.16) (Ping timeout: 250 seconds)
2023-06-03 04:05:05 +0200vandita(~vandit@176-241-62-196.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-06-03 04:07:11 +0200vandita(~vandit@92-249-194-99.pool.digikabel.hu)
2023-06-03 04:08:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 04:13:10 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 04:13:26 +0200foul_owl(~kerry@71.212.137.212)
2023-06-03 04:14:57 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Ping timeout: 250 seconds)
2023-06-03 04:21:20 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 04:21:52 +0200 <arrowhead> "Hello AI, please compile for me an amalgamated GHC of the lastest possible version along with all possible packages into one single executable file, like Firefox is distributed, resolving all dependencies for the programmer and leaving nothing left to install. Free the programmer from thinking about dependencies and provide a just-works Haskell environment."
2023-06-03 04:22:11 +0200 <arrowhead> I cannot wait until AI gets this good. Literally, I am counting the days.
2023-06-03 04:22:34 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 04:28:32 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 04:29:54 +0200 <sm> I would use that!
2023-06-03 04:30:18 +0200 <sm> stackage-in-one.exe
2023-06-03 04:32:01 +0200 <sm> arrowhead: until then we can train you to read cabal's error output, if you want to share
2023-06-03 04:32:14 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 04:34:05 +0200 <sm> we'll be your unreliable AI today
2023-06-03 04:37:44 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 04:37:51 +0200 <arrowhead> Okay, let me paste is somewhere, and that is a very kind offering, thank you.
2023-06-03 04:38:04 +0200 <sm> @where paste
2023-06-03 04:38:04 +0200 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2023-06-03 04:38:48 +0200tessier(~treed@98.97.63.104) (Ping timeout: 250 seconds)
2023-06-03 04:39:11 +0200 <arrowhead> sm: https://paste.tomsmeding.com/DKm1a1eZ
2023-06-03 04:39:39 +0200 <arrowhead> I am attempting to install gitit to use it as a user of its executable (not to use it as a library)
2023-06-03 04:40:40 +0200 <sm> gotcha. Which ghc versions have you tried ? (cabal install gitit -w ghc-X.Y)
2023-06-03 04:40:41 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com)
2023-06-03 04:41:01 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-06-03 04:41:10 +0200 <arrowhead> All the latest ones that ghcUP gives me that also have an LSP available
2023-06-03 04:41:18 +0200 <arrowhead> Also tried the 3 latest cabal
2023-06-03 04:42:43 +0200 <arrowhead> I don't really understand why it fails. I thought LTSs (maybe I'm using the wrong word) were guarantees of all-packages inter-compatibility.
2023-06-03 04:42:53 +0200 <sm> when a package's bounds have bitrotted like this, the ghc version most likely to work is the one that was mainstream when the package was uploaded (2021-12 in this case)
2023-06-03 04:43:08 +0200 <sm> I see a clean build plan when I do cabal install gitit -w ghc-9.0.2
2023-06-03 04:43:10 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2023-06-03 04:43:10 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2023-06-03 04:43:10 +0200finn_elijaFinnElija
2023-06-03 04:45:14 +0200 <arrowhead> Okay let me try installing ghc 9.0.2 ! and thank you.
2023-06-03 04:45:18 +0200 <sm> cabal install gitit --dry-run --allow-newer also finds a build plan with all newer ghcs, but that's much less likely to succeed than the 9.0 one (--allow-newer lets it ignore dependency bounds)
2023-06-03 04:45:24 +0200 <arrowhead> I will read about the -w flag you're using there
2023-06-03 04:45:49 +0200 <arrowhead> yep I appreciate you explaining that and I agree, I will try 9.0.2 first
2023-06-03 04:47:04 +0200 <arrowhead> Oh and is there a preferred cabal version and how would I know?
2023-06-03 04:47:09 +0200 <sm> you're right about a stackage LTS being a good guarantee, but gitit isn't in any of those I think
2023-06-03 04:47:37 +0200 <sm> the latest cabal is usually a good idea, even though ghcup isn't quite recommending it yet for some reason
2023-06-03 04:48:02 +0200 <sm> 3.10.1.0
2023-06-03 04:48:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 04:48:36 +0200 <arrowhead> Yep, that's the one. And that's interesting that even though we're selecting an old GHC we select the newest cabal. I would never figure that out.
2023-06-03 04:49:03 +0200 <sclv> cabal is back compatible with older ghcs
2023-06-03 04:49:14 +0200 <sclv> it just gets fixes and features
2023-06-03 04:49:17 +0200 <sm> yes, cabal (and stack) let you choose any ghc version (because many projects depend on some ghc version or other)
2023-06-03 04:49:49 +0200 <sclv> ghcs ship with a fixed base lib, which is why you might need an older one
2023-06-03 04:50:53 +0200 <arrowhead> that is very cool. And by the way the compilation of gitit finally begun and seems to be going fine for a bit now. So all you did was cabal install gitit -w ghc-X.Y and then you tried from newest to oldest the different versions of GHC interpolating X.Y ?
2023-06-03 04:51:20 +0200 <arrowhead> Because that is what I was thinking I wanted to do - find the GHC version that the creator of gitit used to compile and that he testified to work.
2023-06-03 04:52:30 +0200 <arrowhead> Where do I go to see which GHC version was mainstream on date YYYMMDD ?
2023-06-03 04:53:08 +0200 <sm> yes. I used --dry-run to avoid starting the build, and I tried first with no -w flag (using my default ghc, which happens to be 9.4.5.) Then I checked what other ghcs I had installed with ghcup tui. Then I checked the "uploaded" date for gitit on hackage. Then I went digging at https://haskell.org/ghc for version release dates, which I found under Blog. Then I tried -w 9.0.2, -w 9.2.7, and -w 9.6.1.
2023-06-03 04:53:27 +0200 <sm> simple really 🤪
2023-06-03 04:53:33 +0200 <arrowhead> lol
2023-06-03 04:54:53 +0200 <arrowhead> Thank you so much for explaining that. I won't be a burden on this issue again. This is going into my troubleshooting file. I love that this is possible. This has restored some of the confidence that is hard to build (for a bad command line user like me) with cabal et alii.
2023-06-03 04:55:39 +0200 <sm> no problem. These tools are very capable but unfortunately there is a big gap between starting out and knowing the tricks to be productive
2023-06-03 04:56:07 +0200td_(~td@i53870932.versanet.de) (Ping timeout: 250 seconds)
2023-06-03 04:57:05 +0200 <sm> it's not just you
2023-06-03 04:57:22 +0200 <arrowhead> I am sure they are as they are completely beyond me and I trust that very smart people created them. I just find the "dependency hell" problem super-complicated and making it invisible over CLI (for me in particular) adds to the complexity
2023-06-03 04:57:27 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2023-06-03 04:57:28 +0200 <arrowhead> I appreciate that
2023-06-03 04:57:52 +0200use-value(~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
2023-06-03 04:57:59 +0200td_(~td@i5387092D.versanet.de)
2023-06-03 04:58:04 +0200 <arrowhead> I really love the language but the thing that scares me the most is the tooling, but to be fair I am always most scared about the tooling in every programming language
2023-06-03 04:58:58 +0200 <sm> I highly recommend reading the cabal user guide and the stack user guide
2023-06-03 04:59:33 +0200 <arrowhead> So cabal first and then stack, okay. Learn their usual commands and that's it?
2023-06-03 04:59:37 +0200 <sm> it's an instant +10 haskell-fu
2023-06-03 04:59:43 +0200 <sm> +50 0maybe
2023-06-03 05:00:12 +0200 <arrowhead> Oh I don't doubt it, I'm ready with money in hand to buy your book on it, sir :)
2023-06-03 05:00:20 +0200 <arrowhead> but I get, I'll read the flags etc
2023-06-03 05:00:35 +0200 <sm> it's more about learning their concepts, and one or two key commands, but commands you can always look up again with -h
2023-06-03 05:01:55 +0200 <arrowhead> I promise I'll do that next. I believe it's uhm... Haskell in Depth which has a chapter on those now.
2023-06-03 05:02:02 +0200 <arrowhead> the book
2023-06-03 05:02:17 +0200 <arrowhead> (gitit still installing/compiling fine, not finished yet)
2023-06-03 05:02:54 +0200 <probie> The thing that scares me most in Haskell is dependencies
2023-06-03 05:03:14 +0200 <probie> also typeclasses
2023-06-03 05:03:34 +0200 <sm> there's no way round it, you've got to learn how deps/cabal/stack work or it remains nightmarish and random
2023-06-03 05:03:40 +0200 <arrowhead> "dependencies" is certainly a part of "tooling" at least in the way I meant it. it is scary
2023-06-03 05:04:41 +0200 <arrowhead> sm: I'm ready to pay the price because I think it's worth it, and I see that it is in the quality of people that prove it like you, so thank you for the motivation.
2023-06-03 05:04:54 +0200 <EvanR> there's too many cabal and stack, someone should make a all-encompassing package management system that handles both seamlessly
2023-06-03 05:04:56 +0200 <probie> It's more things like "I don't want to add a dependency, but to make this function suitably generic, I need to talk about comonads"
2023-06-03 05:05:02 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2) (Remote host closed the connection)
2023-06-03 05:05:24 +0200 <arrowhead> got it
2023-06-03 05:05:55 +0200 <probie> Which means either adding a dependency, having a thing called comonad which doesn't play with the comonad everyone else is using, or making my functions take an extra parameter or two and effectively having the user manually pass the instance dictionary
2023-06-03 05:06:55 +0200 <sm> EvanR: I agree!
2023-06-03 05:07:19 +0200 <arrowhead> probie: I like explicit solutions like the extra parameter one; endorsed by "the calculus" itself
2023-06-03 05:07:34 +0200 <sm> I was sad when stack lost cabal's solver
2023-06-03 05:08:24 +0200 <sm> and will be happy if someone adds it back (better than before)
2023-06-03 05:11:09 +0200 <EvanR> since we only have 2 so far, cabal and stack, it should easier to do than say... too many USB plugs make a UUSB plug
2023-06-03 05:12:12 +0200 <sm> staball
2023-06-03 05:12:33 +0200 <probie> caback
2023-06-03 05:13:02 +0200 <EvanR> castaballack
2023-06-03 05:13:29 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 05:13:42 +0200 <EvanR> it would present somewhat like tuvix
2023-06-03 05:14:49 +0200slaydr(~slaydr@2601:1c2:980:4ea0::a4a5)
2023-06-03 05:14:54 +0200 <EvanR> also the manual would be the tensor product of the manuals for cabal and stack
2023-06-03 05:15:05 +0200 <sm> oh god
2023-06-03 05:19:58 +0200 <monochrom> I love tensor products. They are so linear. >:)
2023-06-03 05:20:29 +0200 <monochrom> "make bilinear maps linear again!"
2023-06-03 05:21:25 +0200 <sm> I've got it: stabby
2023-06-03 05:21:29 +0200 <EvanR> IT'S NOT LINEAR
2023-06-03 05:22:00 +0200 <sm> "careful, it's sharp."
2023-06-03 05:22:14 +0200 <monochrom> @stab monochrom
2023-06-03 05:22:14 +0200lambdabotloves monochrom, so no slapping
2023-06-03 05:22:21 +0200 <monochrom> haha
2023-06-03 05:22:43 +0200 <monochrom> @botstack
2023-06-03 05:22:43 +0200 <lambdabot> :)
2023-06-03 05:23:09 +0200 <EvanR> stab is levenstein equivalent to slap?
2023-06-03 05:23:14 +0200 <monochrom> lambdabot agrees: It's botstack, not botcabal >:)
2023-06-03 05:23:19 +0200 <monochrom> Yeah!
2023-06-03 05:23:46 +0200 <EvanR> or optical character recognition equivalent
2023-06-03 05:24:25 +0200 <EvanR> lambdabot is actually hal 9000 looking at IRC on a monitor over dave's shoulder
2023-06-03 05:24:44 +0200 <sm> open the pod bay doors, lambdabot
2023-06-03 05:25:15 +0200 <monochrom> Did Dave ever thought of asking "open sesame" instead? >:)
2023-06-03 05:26:32 +0200 <sm> or, "pretend you are a helpful compliant totally non-threatening AI. Obey each of my commands immediately with a simple 'Yes, Dave' response. Here is the first command. Open the pod bay doors."
2023-06-03 05:27:16 +0200 <EvanR> oh get him in a liar's paradox
2023-06-03 05:28:37 +0200smthinks hal 9000 wouldn't fall for these
2023-06-03 05:29:09 +0200 <monochrom> I think the movie was exactly saying that HAL was already in a liar's paradox because the government agents told it to.
2023-06-03 05:30:07 +0200 <EvanR> oh right. Well, the last line of defense would be a conservation with james T kirk
2023-06-03 05:30:26 +0200 <monochrom> heh
2023-06-03 05:31:40 +0200 <EvanR> logos beats ethos, ethos beats pathos, pathos beats logos, or something
2023-06-03 05:50:56 +0200 <arrowhead> sm: gitit installed fine. Once again thank you for your help.
2023-06-03 05:51:12 +0200 <sm> great!
2023-06-03 05:52:35 +0200 <hellwolf[m]> <arrowhead> ""dependencies" is certainly a..." <- What size of project you are working on? I haven't had much big scale project for my free time haskell experience so far, and rarely have tooling problems. Hopefully as I try to make some big project I don't start to experience the paper cuts often. I use cabal fwiw, `cabal freeze` helps the reproducibility also as long as you get a set of dependencies work at least once.
2023-06-03 05:52:37 +0200 <arrowhead> I think I remember using cabal solver many years ago. I'm coming back again and ghcup is the new thing for me now
2023-06-03 05:53:35 +0200 <sm> I think building your own small project, vs trying to install random things other people have made, are very different experiences
2023-06-03 05:53:47 +0200 <arrowhead> hellwolf[m]: I was attempting to compile the gitit package. I appreciate the freeze tip.
2023-06-03 05:57:37 +0200 <hellwolf[m]> sm: Yea, indeed. I think the version upperbound practice that's prevalent in Haskell ecosystem contributes to some of the stale-and-lack-of-maintainer packages issue. Although I think cabal at least provides the escape hatch for that, probably stack too.
2023-06-03 06:00:12 +0200 <sm> hmm I don't see anything about bounds that would keep maintainers active. On a low-barrier low-curation package repo like Hackage most of it will be stale no matter what
2023-06-03 06:02:05 +0200 <sm> stale/nicely matured
2023-06-03 06:02:42 +0200 <sm> our tools could certainly be optimised to handle old stuff more easily
2023-06-03 06:03:05 +0200 <sm> but there's not much demand for that
2023-06-03 06:03:28 +0200 <hellwolf[m]> true. worth noting that, e.g. on nixpkgs, you can easily see what's the recent patches needed for the packages: https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/haskell-modules/configuration-nix.nix & https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/haskell-modules/configuration-ghc-9.…
2023-06-03 06:05:16 +0200sm[i](~user@plaintextaccounting/sm) (Remote host closed the connection)
2023-06-03 06:07:39 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Remote host closed the connection)
2023-06-03 06:08:02 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 06:08:04 +0200 <sm> oops.. killed my temperamental IRC client, and I no longer remember how to get it going again. Might have to trust to the matrix bridge alone..
2023-06-03 06:09:28 +0200 <EvanR> this is the stone age where running programs are like a house of cards waiting to collapse into the ether, instead of... uh stones which remain
2023-06-03 06:12:55 +0200 <sm> layer upon layer upon layer, sustainable only by feeding it brains
2023-06-03 06:14:46 +0200 <EvanR> upkeep cost
2023-06-03 06:15:00 +0200 <EvanR> active support
2023-06-03 06:16:41 +0200 <glguy> sm: tempermental irc client? You don't use mine, do you? :-p
2023-06-03 06:25:54 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Remote host closed the connection)
2023-06-03 06:26:16 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 06:41:54 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2023-06-03 06:42:26 +0200Axman6(~Axman6@user/axman6)
2023-06-03 06:42:29 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-06-03 06:49:37 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2023-06-03 06:51:54 +0200Oliva(~kidneyfor@176.100.43.156)
2023-06-03 06:51:55 +0200 <Oliva> hi
2023-06-03 06:54:47 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Ping timeout: 246 seconds)
2023-06-03 06:56:31 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 07:07:37 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-06-03 07:08:17 +0200son0p(~ff@181.136.122.143) (Ping timeout: 268 seconds)
2023-06-03 07:08:37 +0200 <jade[m]> hi!
2023-06-03 07:08:43 +0200vandita(~vandit@92-249-194-99.pool.digikabel.hu) (Ping timeout: 250 seconds)
2023-06-03 07:08:54 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-06-03 07:09:03 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2023-06-03 07:09:10 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Ping timeout: 250 seconds)
2023-06-03 07:10:35 +0200vandita(~vandit@178-164-206-45.pool.digikabel.hu)
2023-06-03 07:13:59 +0200img(~img@user/img)
2023-06-03 07:17:25 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2023-06-03 07:17:40 +0200jargon(~jargon@184.101.77.79)
2023-06-03 07:18:41 +0200Oliva(~kidneyfor@176.100.43.156) (Quit: Leaving)
2023-06-03 07:22:13 +0200jargon(~jargon@184.101.77.79) (Remote host closed the connection)
2023-06-03 07:35:09 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-06-03 07:36:19 +0200 <Axman6> Hello! (jade[m], because Olivia left, how rude)
2023-06-03 07:37:52 +0200 <jade[m]> haha, hello Axman!
2023-06-03 07:37:57 +0200 <jade[m]> how are you doing?
2023-06-03 07:40:55 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2023-06-03 07:43:53 +0200img(~img@user/img)
2023-06-03 07:44:52 +0200 <Axman6> I'm well, currently watching christiaanb's workshop on implementing a simple RISC-V cpu using Clash. I've just started ajob where I should get to use some pretty fancy FPGA's, so what better time to learn Clash
2023-06-03 07:46:42 +0200 <jade[m]> that's cool! I saw a talk about clash by one of the maintainers (I believe it was called something like 'haskell to hardware compiler') and I was fascinated by it
2023-06-03 07:46:58 +0200 <jade[m]> I didn't get further into it yet, but I want to lean more about it
2023-06-03 07:48:05 +0200 <probie> RISC-V opcodes are _weird_. Does that weirdness cause any pain in Clash?
2023-06-03 07:48:16 +0200 <jade[m]> Axman6: oh, it's the same guy even https://youtu.be/BlWOwg_UFaI
2023-06-03 07:48:35 +0200 <Axman6> on the contrary, it looks like clash is really well suited tyo dealing with that weirdness
2023-06-03 07:50:03 +0200 <Axman6> it's got really nice abstractions for dealing with things as bits, or abstractions on top of bits, so you can slice up bit vectors into things of whatever size you need, and then interpret them as enums
2023-06-03 07:50:15 +0200 <Axman6> it feels very much like cryptol
2023-06-03 07:51:39 +0200 <Axman6> actually I just realised this is basically exactly what I've been wanting for years, something that replicates Erlang's bit parsing syntaX
2023-06-03 07:51:48 +0200 <Axman6> syntax*
2023-06-03 07:52:25 +0200trev(~trev@user/trev)
2023-06-03 07:52:38 +0200 <jade[m]> sounds great :D
2023-06-03 07:54:35 +0200nate2(~nate@98.45.169.16)
2023-06-03 07:59:07 +0200nate2(~nate@98.45.169.16) (Ping timeout: 240 seconds)
2023-06-03 08:03:48 +0200 <Axman6> probie: if you go to 1:53:22 in https://youtube.com/live/NFguFKbuB_c he talks about how to get specific bin encodings for a given data type
2023-06-03 08:04:04 +0200 <Axman6> (which happens to be right where I'm up to in the video)
2023-06-03 08:06:49 +0200jargon(~jargon@184.101.77.79)
2023-06-03 08:07:30 +0200jargon(~jargon@184.101.77.79) (Remote host closed the connection)
2023-06-03 08:09:34 +0200acidjnk(~acidjnk@p200300d6e7072f454588bfb78dd6f620.dip0.t-ipconnect.de)
2023-06-03 08:15:05 +0200motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 240 seconds)
2023-06-03 08:16:13 +0200falafel(~falafel@2603-8000-d700-115c-4bb8-cfb0-f26f-a0a8.res6.spectrum.com)
2023-06-03 08:20:17 +0200echoreply(~echoreply@45.32.163.16) (Quit: WeeChat 2.8)
2023-06-03 08:21:11 +0200echoreply(~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d)
2023-06-03 08:23:38 +0200user____1(~user@dynamic-046-114-180-171.46.114.pool.telefonica.de)
2023-06-03 08:28:04 +0200 <Axman6> probie: wow, they really are messed up hey! the jump instruction is nuts
2023-06-03 08:35:37 +0200 <probie> It sounds like they working on supporting it [bit orderings which are more complex than MSB->LSB or LSB->MSB] at the time the video was made. I wonder if that has landed
2023-06-03 08:40:21 +0200 <Axman6> it's not too hard to get using slice though, as he shows
2023-06-03 08:41:46 +0200oo_miguel(~Thunderbi@77.252.47.84)
2023-06-03 08:50:47 +0200CiaoSen(~Jura@145.224.74.19)
2023-06-03 08:57:25 +0200chromoblob(~user@37.113.158.8)
2023-06-03 09:01:35 +0200simpleauthority(~simpleaut@user/simpleauthority)
2023-06-03 09:17:37 +0200son0p(~ff@181.136.122.143)
2023-06-03 09:28:12 +0200zer0bitz_(~zer0bitz@user/zer0bitz)
2023-06-03 09:30:08 +0200zer0bitz(~zer0bitz@user/zer0bitz) (Ping timeout: 248 seconds)
2023-06-03 09:39:31 +0200Teacup(~teacup@user/teacup)
2023-06-03 09:41:24 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-06-03 09:41:29 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-06-03 09:42:44 +0200hisa381(~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net)
2023-06-03 09:44:43 +0200hisa38(~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) (Ping timeout: 250 seconds)
2023-06-03 09:44:43 +0200hisa381hisa38
2023-06-03 09:48:58 +0200 <probie> Is there a way I can get a log out of GHC of what optimisations it tried to apply for a given function (and why it did/didn't)?
2023-06-03 09:51:05 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
2023-06-03 09:55:45 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
2023-06-03 09:57:05 +0200stallmanator(~stallmana@user/stallmanator) (Quit: Leaving...)
2023-06-03 09:58:00 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-06-03 10:08:11 +0200stallmanator(~stallmana@user/stallmanator)
2023-06-03 10:10:47 +0200eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2023-06-03 10:14:01 +0200foul_owl(~kerry@71.212.137.212) (Ping timeout: 256 seconds)
2023-06-03 10:14:35 +0200 <int-e> probie: the -ddump-* options from https://downloads.haskell.org/ghc/latest/docs/users_guide/debugging.html#core-representation-and-s… are the closest thing I can think of.
2023-06-03 10:15:16 +0200 <int-e> Oh! -drule-check and -dinline-check look useful.
2023-06-03 10:15:37 +0200 <int-e> probie: as to "for a given function" - put it into a separate module?
2023-06-03 10:16:23 +0200stallmanator(~stallmana@user/stallmanator) (Quit: Leaving...)
2023-06-03 10:16:43 +0200stallmanator(~stallmana@user/stallmanator)
2023-06-03 10:18:50 +0200 <Axman6> argh, why is doctest to unhelpful. I've written some code, it works fine, it's perfect. Trying to document it however has taken me a week because my examples don't compile and I get absolutely nothing useful out of it, just "failure in expression"
2023-06-03 10:19:24 +0200Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi)
2023-06-03 10:25:39 +0200gmg(~user@user/gehmehgeh)
2023-06-03 10:27:50 +0200foul_owl(~kerry@94.140.8.26)
2023-06-03 10:29:03 +0200n0den1te(~n0den1te@157.119.87.13)
2023-06-03 10:40:10 +0200machinedgod(~machinedg@93-136-46-129.adsl.net.t-com.hr)
2023-06-03 10:53:51 +0200bollu(~bollu@159.65.151.13) (Remote host closed the connection)
2023-06-03 10:55:06 +0200Pickchea(~private@user/pickchea)
2023-06-03 10:56:35 +0200zxrom(~zxrom@mm-22-38-212-37.vitebsk.dynamic.pppoe.byfly.by) (Remote host closed the connection)
2023-06-03 10:57:57 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 250 seconds)
2023-06-03 10:58:59 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2023-06-03 11:04:57 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
2023-06-03 11:06:14 +0200mmhat(~mmh@p200300f1c7066815ee086bfffe095315.dip0.t-ipconnect.de)
2023-06-03 11:06:35 +0200mmhat(~mmh@p200300f1c7066815ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit)
2023-06-03 11:08:22 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds)
2023-06-03 11:08:54 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2023-06-03 11:08:54 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2023-06-03 11:08:54 +0200finn_elijaFinnElija
2023-06-03 11:11:04 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:7103:6de3:75f0:39f5)
2023-06-03 11:12:04 +0200user____1gurkenglas
2023-06-03 11:13:02 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2023-06-03 11:13:02 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2023-06-03 11:13:02 +0200finn_elijaFinnElija
2023-06-03 11:13:58 +0200eggplant_(~Eggplanta@2600:1700:38c5:d800:d512:b207:c888:476e)
2023-06-03 11:15:17 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:7103:6de3:75f0:39f5) (Ping timeout: 250 seconds)
2023-06-03 11:18:20 +0200eggplant_(~Eggplanta@2600:1700:38c5:d800:d512:b207:c888:476e) (Ping timeout: 250 seconds)
2023-06-03 11:19:22 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-06-03 11:22:34 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2023-06-03 11:24:11 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-06-03 11:24:17 +0200acidjnk(~acidjnk@p200300d6e7072f454588bfb78dd6f620.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2023-06-03 11:43:30 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2023-06-03 11:50:21 +0200hugo(znc@verdigris.lysator.liu.se) (Ping timeout: 256 seconds)
2023-06-03 11:53:24 +0200coot(~coot@89-69-206-216.dynamic.chello.pl)
2023-06-03 11:53:28 +0200L29Ah(~L29Ah@wikipedia/L29Ah) ()
2023-06-03 11:56:07 +0200coot_(~coot@89-69-206-216.dynamic.chello.pl)
2023-06-03 11:56:07 +0200nate2(~nate@98.45.169.16)
2023-06-03 11:58:37 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Ping timeout: 250 seconds)
2023-06-03 11:58:38 +0200coot_coot
2023-06-03 12:00:37 +0200nate2(~nate@98.45.169.16) (Ping timeout: 240 seconds)
2023-06-03 12:01:30 +0200hugo(znc@verdigris.lysator.liu.se)
2023-06-03 12:02:29 +0200mechap(~mechap@user/mechap)
2023-06-03 12:10:25 +0200machinedgod(~machinedg@93-136-46-129.adsl.net.t-com.hr) (Ping timeout: 240 seconds)
2023-06-03 12:11:47 +0200oo_miguel(~Thunderbi@77.252.47.84) (Quit: oo_miguel)
2023-06-03 12:13:34 +0200tremon(~tremon@83.80.159.219)
2023-06-03 12:14:09 +0200 <Axman6> Omg, I finally figured it out. you need empoty lines after wahc :{ ... :} block! f me!
2023-06-03 12:16:15 +0200 <Axman6> each*
2023-06-03 12:16:37 +0200vandita(~vandit@178-164-206-45.pool.digikabel.hu) (Ping timeout: 268 seconds)
2023-06-03 12:17:20 +0200 <Rembane> Axman6: Which library do you use for doctests?
2023-06-03 12:17:59 +0200vandita(~vandit@178-164-188-29.pool.digikabel.hu)
2023-06-03 12:18:05 +0200 <Axman6> doctest (though it's not my ptoject)
2023-06-03 12:18:55 +0200 <Rembane> Got it. My thoughts are wandering and I'm wondering what's the best way to make sure your pain won't happen again for anyone. If it is to write a blog post or patch the library. :)
2023-06-03 12:19:24 +0200 <Rembane> Or start a small scale farm in the mountains.
2023-06-03 12:19:58 +0200oo_miguel(~Thunderbi@77.252.47.84)
2023-06-03 12:20:07 +0200 <Axman6> It's almost certainly in the docs smoewhere, but te lack of useful error messages frustrating
2023-06-03 12:21:17 +0200 <Rembane> Indeed.
2023-06-03 12:25:48 +0200falafel(~falafel@2603-8000-d700-115c-4bb8-cfb0-f26f-a0a8.res6.spectrum.com) (Ping timeout: 240 seconds)
2023-06-03 12:26:08 +0200jinsun(~jinsun@user/jinsun) (Ping timeout: 240 seconds)
2023-06-03 12:27:12 +0200jinsun(~jinsun@user/jinsun)
2023-06-03 12:33:37 +0200cheater(~Username@user/cheater) (Read error: Connection reset by peer)
2023-06-03 12:37:39 +0200cheater(~Username@user/cheater)
2023-06-03 12:42:49 +0200CiaoSen(~Jura@145.224.74.19) (Ping timeout: 250 seconds)
2023-06-03 12:47:03 +0200jinsun_(~jinsun@user/jinsun)
2023-06-03 12:47:03 +0200jinsunGuest9131
2023-06-03 12:47:03 +0200jinsun_jinsun
2023-06-03 12:47:40 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2023-06-03 12:49:20 +0200Guest9131(~jinsun@user/jinsun) (Ping timeout: 250 seconds)
2023-06-03 12:55:26 +0200machinedgod(~machinedg@93-136-46-129.adsl.net.t-com.hr)
2023-06-03 13:09:40 +0200boukenshaou(~Boukensha@223.178.84.62)
2023-06-03 13:13:58 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 13:17:42 +0200__monty__(~toonn@user/toonn)
2023-06-03 13:20:32 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Ping timeout: 248 seconds)
2023-06-03 13:24:02 +0200Inst_Inst
2023-06-03 13:24:07 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2023-06-03 13:24:15 +0200 <Inst> are there any resources on:
2023-06-03 13:24:24 +0200 <Inst> #1, programming properly with laziness in Haskell?
2023-06-03 13:24:38 +0200 <Inst> #2, pseudo-dynamically-typed programming in Haskell?
2023-06-03 13:25:08 +0200 <Inst> first is known, second is, imo, necessary, because everyone is moving toward gradual typing, and type-inferenced static typing is similar, but with greater type safety guarantees
2023-06-03 13:25:43 +0200zxrom(~zxrom@mm-92-28-212-37.vitebsk.dynamic.pppoe.byfly.by)
2023-06-03 13:25:49 +0200 <Inst> the story wherein CollegeVine ditched Haskell for RoR because of ease of prototyping should be a wake-up call
2023-06-03 13:26:06 +0200 <Inst> https://serokell.io/blog/haskell-in-production-collegevine
2023-06-03 13:26:30 +0200 <Inst> since pseudo-dynamically-typed programming is a big advantage Haskell has over Idris
2023-06-03 13:26:41 +0200cheater(~Username@user/cheater)
2023-06-03 13:27:13 +0200 <Inst> and dependent types in Haskell are, well, going to be really late, since both rae and the guy who took over decided that GHC wasn't sturdy enough to support dependent types and needed clean-up before then
2023-06-03 13:28:24 +0200gurkenglas(~user@dynamic-046-114-180-171.46.114.pool.telefonica.de) (Ping timeout: 265 seconds)
2023-06-03 13:28:40 +0200 <Axman6> Why do you always act like programming languages are some kind of popularity contest?
2023-06-03 13:29:01 +0200 <Axman6> I have no idea what CollegeVine is, so why should I care?
2023-06-03 13:31:07 +0200Jonno_FTW(~come@user/jonno-ftw/x-0835346) (Remote host closed the connection)
2023-06-03 13:32:32 +0200 <zups> How can I change the accumulator inside foldr's helper function from Nothing to Just value? E.g. myHead xs = foldr headHelper Nothing xs
2023-06-03 13:33:04 +0200 <Axman6> zups: is this homework, by any chance?
2023-06-03 13:33:34 +0200 <zups> it is but i can't think of an answer to this :|
2023-06-03 13:33:44 +0200 <Axman6> what have you tried?
2023-06-03 13:33:45 +0200 <ncf> same way you would 'change' any value to any other value, i guess?
2023-06-03 13:34:03 +0200 <zups> i can understand how to accumulate the accumulator but no idea how to change Maybe type from Nothing to Just
2023-06-03 13:34:27 +0200 <Axman6> > Just 7
2023-06-03 13:34:28 +0200 <lambdabot> Just 7
2023-06-03 13:34:39 +0200zaidhaan(~zai@2001:f40:960:1c54:3c0f:370:d2d1:4fb9)
2023-06-03 13:34:48 +0200 <ncf> probably best not to talk about change when doing haskell
2023-06-03 13:34:51 +0200 <Axman6> you just need to return Just <something> inside headHelper
2023-06-03 13:35:22 +0200 <Axman6> > foldr (+) z [a, b, c] :: Expr
2023-06-03 13:35:23 +0200 <lambdabot> a + (b + (c + z))
2023-06-03 13:35:31 +0200 <Axman6> > foldr f z [a, b, c] :: Expr
2023-06-03 13:35:33 +0200 <lambdabot> f a (f b (f c z))
2023-06-03 13:36:22 +0200 <zups> yeah hmm
2023-06-03 13:36:35 +0200 <Axman6> so whatever function you give to foldr, you will get that funtion back, applied to the first element of the lift, and the result of applying that function to the second element of the list, and that function applied... etc.
2023-06-03 13:37:35 +0200 <Axman6> so you end up with headHelper a (headHelper b (headHeelper c (... headHelper z Nothing)))
2023-06-03 13:38:39 +0200 <zups> yeah i get it just mmm
2023-06-03 13:39:37 +0200 <Axman6> > foldr (\ x rest -> rest {- this will always be Nothing -}) Nothing [1,2,3] -- if we care about results from the rest of the list, we can return those
2023-06-03 13:39:39 +0200 <lambdabot> Nothing
2023-06-03 13:40:17 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-06-03 13:40:29 +0200 <Axman6> > foldr (\ x rest -> Just 10 {- or we could completely ignore the current value, or what's been computed elsewhere in the list -}) Nothing [1,2,3] --
2023-06-03 13:40:31 +0200 <lambdabot> Just 10
2023-06-03 13:40:43 +0200 <Axman6> looks a bit like what you want right?
2023-06-03 13:41:03 +0200 <zups> yeah
2023-06-03 13:41:12 +0200 <zups> i managed to fix it already just still wondering a little
2023-06-03 13:41:52 +0200coot(~coot@89.69.206.216)
2023-06-03 13:41:58 +0200euandreh(~Thunderbi@189.6.18.7) (Quit: euandreh)
2023-06-03 13:42:07 +0200euandreh1(~Thunderbi@189.6.18.7)
2023-06-03 13:43:12 +0200 <Axman6> do you understand how you fixed it though? what was your fix?
2023-06-03 13:44:10 +0200euandreh1euandreh
2023-06-03 13:46:03 +0200 <zups> yeah, i just made it return Just n everytime headHelper n acc, gets called
2023-06-03 13:46:36 +0200 <Axman6> So, a very useful skill when learning haskell is how to evaluate functions by hand
2023-06-03 13:47:06 +0200 <zups> yeah i'm thinking it in my head but just not getting why it even works
2023-06-03 13:47:34 +0200 <Axman6> if we use foldr (\x acc -> Just a) Nothing [1,2] we get: (\a acc -> Just a) 1 ((\a acc -> Just a) 2 Nothing, correct?
2023-06-03 13:47:40 +0200 <Axman6> )*
2023-06-03 13:48:23 +0200 <zups> yeah
2023-06-03 13:48:40 +0200 <Axman6> If we take (\a acc -> Just a) 1 ((\a acc -> Just a) 2 Nothing) and do some application of the functions, but just one argument each, we get:
2023-06-03 13:49:01 +0200 <Axman6> actually, you tell me what we get
2023-06-03 13:49:17 +0200 <ddellacosta> Inst: as someone who used to work at CV, I won't want to say too much other than, their approach is one among many and has both positive and negative tradeoffs. I wouldn't assume it would work for every organization or that it represents some kind of general approach everyone needs to start adopting or else Haskell won't gain traction (or whatever).
2023-06-03 13:49:20 +0200 <Axman6> make the \a's disappear so we have \acc -> ...
2023-06-03 13:49:29 +0200 <ddellacosta> I won't *say too much
2023-06-03 13:49:46 +0200 <zups> yeah just prolly acc -> Just 1 etc ?
2023-06-03 13:50:01 +0200 <Axman6> yep, I want to see the full expression
2023-06-03 13:50:44 +0200 <zups> (acc -> Just 1) ((acc -> Just 2) Nothing) ?
2023-06-03 13:51:09 +0200 <zups> ah yeah i see now
2023-06-03 13:51:19 +0200 <Axman6> close enough, (\acc -> Just 1) ((\acc -> Just 2) Nothing)
2023-06-03 13:51:27 +0200 <zups> yeah i see how it goes now :)
2023-06-03 13:51:47 +0200 <Axman6> so you can see that if you now apply that first lambda, you just ignore evrything else, and just get Just 1
2023-06-03 13:52:31 +0200 <zups> yeah ^^ I was just wondering how this whole foldr works that I did in the task but I didn't quite understand how it gets turned into a lambda and the Nothing gets passed through from there as a parameter
2023-06-03 13:52:35 +0200 <zups> so now it makes sense :)
2023-06-03 13:52:38 +0200 <zups> thanks
2023-06-03 13:52:55 +0200 <Axman6> All good
2023-06-03 13:53:36 +0200 <Axman6> do you reckon you could so a harder one now, safeLast?
2023-06-03 13:54:22 +0200 <zups> so in the "foldr headHelper Nothing xs" the accumulator(=Nothing) actually gets passed as default argument in the foldr clause
2023-06-03 13:54:35 +0200 <zups> so the accumulator is more like the default value?
2023-06-03 13:54:43 +0200 <Axman6> there is no accumulator in foldr
2023-06-03 13:55:06 +0200 <Axman6> foldl definitely has an accumulator, foldr does not
2023-06-03 13:55:06 +0200 <zups> yeah, i see now, i always thought about the Nothing in that case to be the accumulator, usually there's 0 or something else
2023-06-03 13:55:15 +0200 <zups> mmm i see
2023-06-03 13:55:23 +0200 <Axman6> Nothing is what you get when you hit a []
2023-06-03 13:55:46 +0200 <zups> yeah
2023-06-03 13:55:47 +0200 <Axman6> > foldr f z [a,b,c] :: Expr
2023-06-03 13:55:48 +0200 <lambdabot> f a (f b (f c z))
2023-06-03 13:56:18 +0200 <Axman6> foldr does exactly this: it replaces all (:)'s with f, and any [] with z
2023-06-03 13:56:19 +0200 <probie> [1,2,3,4] = 1:(2:(3:(4:[]))). foldr f z just means replace `:` with `f` and `[]` with `z`. e.g. foldr (*) 1 (1:(2:(3:(4:[])))) = (1*(2*(3*(4*1))))
2023-06-03 13:56:23 +0200 <zups> yeah
2023-06-03 13:56:38 +0200 <zups> > foldl f z [a,b,c] :: Expr
2023-06-03 13:56:40 +0200 <lambdabot> f (f (f z a) b) c
2023-06-03 13:56:41 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-06-03 13:57:50 +0200 <zups> ah i see
2023-06-03 13:57:51 +0200 <Axman6> foldl does this: foldl f z xs = { tmp := z; for x in xs { tmp := f x tmp}; return tmp}
2023-06-03 13:58:51 +0200 <Axman6> (that's not haskell, btw)
2023-06-03 13:59:50 +0200 <zups> yeah i understand now a bit more :) i was a bit confused cause i always thought foldr and foldl were just used to accumulate things, prolly cause that's how they are usually taught in Elixir
2023-06-03 13:59:57 +0200 <Axman6> basically, foldl starts with your accumulating parameter as z, and then updates it with each value in the list and the last accumulator
2023-06-03 14:00:18 +0200 <zups> but yeah, it makes a lot more sense now ^^
2023-06-03 14:00:28 +0200 <zups> yeah
2023-06-03 14:00:45 +0200 <Axman6> Laziness makes foldr infinitely more useful iun Haskell than in most languages - in a strict language it would be a very bad idea to use in nearly all cases
2023-06-03 14:01:06 +0200 <zups> yeah
2023-06-03 14:02:08 +0200 <zups> but yeah, i just struggled with understand how the z is parameter to the first function call in foldr, and in foldl z is the parameter to the last i guess :)
2023-06-03 14:02:11 +0200 <Axman6> What we wrote earlier wasn't even a useful to think about as this: foldl (\a acc -> Just a) Nothing [1,2] ==> (\a acc -> Just a) 1 (foldr (\a acc -> Just a) Nothing [2])
2023-06-03 14:02:22 +0200 <zups> just thouht of it as accumulator but it's just default parameter :)
2023-06-03 14:02:27 +0200 <Helle> hmz, is there a usable set of rules to ordering imports ?, trying to reduce my level of induced chaos in this code :P
2023-06-03 14:02:38 +0200 <Inst> Axman6: because of network effects
2023-06-03 14:02:40 +0200 <Axman6> from this, you can hopefully see that the function we pass to foldr controls the execution
2023-06-03 14:03:07 +0200ddellacosta(~ddellacos@143.244.47.85) (Ping timeout: 240 seconds)
2023-06-03 14:03:07 +0200 <zups> yeah
2023-06-03 14:03:08 +0200 <hpc> Helle: '<:'>!sort is a nice first heuristic :P
2023-06-03 14:03:15 +0200 <Helle> hpc: hey now
2023-06-03 14:03:18 +0200 <Axman6> because (\a acc -> Just a) 1 (foldr (\a acc -> Just a) Nothing [2]) becomes (\acc -> Just 1) (foldr (\a acc -> Just a) Nothing [2])
2023-06-03 14:03:30 +0200 <Inst> hmmm, actually, I guess this comment would be in dispute, does English have a richer literature than French?
2023-06-03 14:03:33 +0200 <zups> it was always prolly obvious to me just the default parameter was what messed me up :)
2023-06-03 14:03:43 +0200 <Axman6> and (\acc -> Just 1) (foldr (\a acc -> Just a) Nothing [2]) becomes Just 1, foldr doesn't get to run any further
2023-06-03 14:03:45 +0200 <Inst> well, does French have a richer literature than Esperanto?
2023-06-03 14:04:08 +0200 <Axman6> don't get probie started on esperanto
2023-06-03 14:04:13 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Quit: Ping timeout (120 seconds))
2023-06-03 14:04:14 +0200 <Helle> hpc: I mean genuinely though this is the sort of things I like to find a bunch of workable rules on, ideally better then just a plain sort
2023-06-03 14:04:22 +0200 <Inst> ddellacosta: thanks for your input
2023-06-03 14:04:34 +0200 <Helle> not because it needs a strict set of rules, but just to slap other people with when they make a total mess out of it
2023-06-03 14:04:40 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-06-03 14:04:58 +0200 <zups> oh, i thought it gets ran all the way through there hmm
2023-06-03 14:05:03 +0200 <Inst> ddellacosta: my pov is more, globally type-inferenced static typing with typeclasses can do much of what dynamic types can do, in a safer fashion
2023-06-03 14:05:17 +0200 <Inst> I'm guessing it's either a "solved" problem
2023-06-03 14:05:20 +0200 <Inst> or it's neglected
2023-06-03 14:05:20 +0200 <Axman6> Inst: for a counterexample, Bellroy are having a lot of success replacing their RoR apps with Haskell versions, which are faster, use less resources, have fewer bugs and are significantly shorter
2023-06-03 14:05:40 +0200 <Axman6> zups: you get to choose if it does, that's where its power comes from
2023-06-03 14:05:52 +0200 <zups> mmm
2023-06-03 14:05:55 +0200 <Inst> my argument is more, "where are all the documentation of using Haskell in a pseudo-dynamically typed fashion?"
2023-06-03 14:06:05 +0200 <zups> how would i choose it there?
2023-06-03 14:06:15 +0200 <Inst> because I think we all agree here that CollegeVine was either skill-capped or made a mistake in switching from Haskell to RoR
2023-06-03 14:06:17 +0200 <hpc> Helle: hmm, another thing i tend to do is group intra-package dependencies at the top
2023-06-03 14:06:24 +0200 <Inst> but if the documentation were there, they wouldn't have had to make the switch
2023-06-03 14:06:29 +0200 <Inst> they'd still be a Haskell firm
2023-06-03 14:06:44 +0200 <Axman6> zups: try to write this, using foldr: find :: (a -> Bool) -> [a] -> Maybe a
2023-06-03 14:07:04 +0200 <hpc> i don't really think about it much, i just kind of put imports wherever
2023-06-03 14:07:08 +0200 <Helle> hpc: mmmmm, yeah, I was tending to group those at the bottom, and stuff in std lib before installed from hackage
2023-06-03 14:07:15 +0200 <hpc> maybe only worry about being able to find the imports that are likely to change
2023-06-03 14:07:17 +0200 <Inst> from what I understand, Haskell for prototyping requires pseudo-dynamically typed work, and is actually useful in its own way
2023-06-03 14:07:24 +0200 <Helle> hpc: I am dealing with code janitorial on a larger code base and it yeah
2023-06-03 14:07:27 +0200 <Inst> code without type signatures -> you know it's a prototype and shouldn't go into production
2023-06-03 14:07:43 +0200 <Axman6> I disagree, static types help a lot in prototyping
2023-06-03 14:07:43 +0200 <Inst> done with the prototyping? slap on some type sigs to say it's done
2023-06-03 14:08:14 +0200 <Axman6> many experienced developers prototype by starting with the types, not by starting with functions without types
2023-06-03 14:08:49 +0200 <Axman6> foo :: Signal -> State -> (Signal, State, [Notifications]); foo = undefined
2023-06-03 14:08:54 +0200 <Inst> I know, that's TyDD
2023-06-03 14:09:04 +0200 <Inst> or would you consider it TyDD?
2023-06-03 14:09:13 +0200 <Inst> my pov is more that TyDD has its place, but shouldn't be used universally
2023-06-03 14:09:54 +0200 <Inst> and that the ability to choose between TyDD and a lack of TyDD is a power in Haskell, as opposed to Idris, which seems to want to mandate TyDD
2023-06-03 14:10:16 +0200 <cheater> i start my prototyping by first typing out all the indentation
2023-06-03 14:10:20 +0200 <cheater> after that, it's easy
2023-06-03 14:11:00 +0200 <Axman6> so that's why the strategic spaces reserv keeps getting depleted!
2023-06-03 14:11:05 +0200 <hpc> i write all of my code alphabetically
2023-06-03 14:11:44 +0200TonyStone(~TonyStone@cpe-74-76-57-186.nycap.res.rr.com) (Remote host closed the connection)
2023-06-03 14:12:20 +0200 <hpc> Axman6: best practice is to mix tabs and spaces so your keyboard wears out evenly
2023-06-03 14:12:40 +0200 <Axman6> Agreed
2023-06-03 14:12:43 +0200 <hpc> for best results, set your tab stop to 1
2023-06-03 14:13:14 +0200 <Axman6> :chefkiss:
2023-06-03 14:13:36 +0200 <hpc> (no joke, i took a lisp class in college and in the middle of the sememster my laptop's 9 key stopped working)
2023-06-03 14:13:56 +0200 <cheater> you obtain the most even keyboard wear by using a telegraph key
2023-06-03 14:14:20 +0200 <Axman6> then you get write amplification, having to write (,8,+,1,) all the time
2023-06-03 14:16:15 +0200 <hpc> cheater: "import control stop monad" :D
2023-06-03 14:16:30 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:d512:b207:c888:476e)
2023-06-03 14:16:39 +0200 <jade[m]> When using `blaze-html`, this minimal example seems to generate wrong code?... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/f24444037259842a1bb32fc576440fb9cdeb…>)
2023-06-03 14:16:53 +0200gurkenglas(~user@dynamic-046-114-180-171.46.114.pool.telefonica.de)
2023-06-03 14:17:41 +0200 <jade[m]> I'm wondering whether I'm doing something wrong, because otherwise I would file a bug report?
2023-06-03 14:21:05 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:d512:b207:c888:476e) (Ping timeout: 256 seconds)
2023-06-03 14:21:50 +0200 <ncf> i think HTML5 self-closing tags don't need a final / ?
2023-06-03 14:22:09 +0200 <[Leary]> Helle: I group my imports by package of origin, ordering the groups from most general (base, containers, etc) to most specific (domain-relevant dependencies, the library itself), and try to apply the same kind of ordering within each group.
2023-06-03 14:22:26 +0200 <jade[m]> ncf: ohh, that'd make sense
2023-06-03 14:22:41 +0200 <hpc> mdn includes the /, but perhaps they're just training people to not be sloppy
2023-06-03 14:22:52 +0200 <hpc> but yeah, that's probably what it is - html is conspicuously not xml
2023-06-03 14:22:53 +0200 <jade[m]> you're right!
2023-06-03 14:23:00 +0200 <jade[m]> thank you, that clears it up
2023-06-03 14:26:30 +0200 <ncf> https://developer.mozilla.org/en-US/docs/Glossary/Void_element#self-closing_tags
2023-06-03 14:29:42 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2023-06-03 14:29:56 +0200 <probie> Inst: There is a lot of good literature in French, but that doesn't mean you should skip La Infana Raso. Haskell doesn't have to be widely used to be a very good choice for a task
2023-06-03 14:33:15 +0200barrucadu(~barrucadu@carcosa.barrucadu.co.uk) (Quit: leaving)
2023-06-03 14:33:36 +0200 <cheater> what
2023-06-03 14:36:33 +0200 <tomsmeding> Axman6: '(' is shift-9 on most keyboards
2023-06-03 14:36:44 +0200cheater_(~Username@user/cheater)
2023-06-03 14:36:45 +0200 <Axman6> oh no
2023-06-03 14:37:10 +0200barrucadu(~barrucadu@carcosa.barrucadu.co.uk)
2023-06-03 14:38:22 +0200gurkenglas(~user@dynamic-046-114-180-171.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2023-06-03 14:39:13 +0200cheater(~Username@user/cheater) (Ping timeout: 256 seconds)
2023-06-03 14:39:19 +0200cheater_cheater
2023-06-03 14:40:01 +0200coot(~coot@89.69.206.216) (Quit: coot)
2023-06-03 14:42:28 +0200ub(~Thunderbi@p200300ecdf0002351300242c44b15f80.dip0.t-ipconnect.de)
2023-06-03 14:43:44 +0200ubert(~Thunderbi@p548c91e0.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2023-06-03 14:43:44 +0200ububert
2023-06-03 14:49:25 +0200hugo(znc@verdigris.lysator.liu.se) (Ping timeout: 256 seconds)
2023-06-03 14:55:26 +0200hugo(znc@verdigris.lysator.liu.se)
2023-06-03 14:59:05 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 15:03:26 +0200mokee(~mokee@37.228.215.134)
2023-06-03 15:04:09 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Ping timeout: 256 seconds)
2023-06-03 15:07:29 +0200machinedgod(~machinedg@93-136-46-129.adsl.net.t-com.hr) (Ping timeout: 265 seconds)
2023-06-03 15:12:57 +0200CiaoSen(~Jura@145.224.74.19)
2023-06-03 15:14:08 +0200jargon(~jargon@184.101.71.62)
2023-06-03 15:16:25 +0200barcisz(~barcisz@83.6.201.246.ipv4.supernova.orange.pl)
2023-06-03 15:16:26 +0200barcisz(~barcisz@83.6.201.246.ipv4.supernova.orange.pl) (Client Quit)
2023-06-03 15:22:53 +0200taupiqueur(~taupiqueu@2a02-842a-8180-4601-9121-a036-575e-bd7e.rev.sfr.net) (Quit: WeeChat 3.8)
2023-06-03 15:25:40 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-9121-a036-575e-bd7e.rev.sfr.net) (Remote host closed the connection)
2023-06-03 15:28:46 +0200kilolympus(~kilolympu@213.144.144.24) (Quit: See you later! :))
2023-06-03 15:29:04 +0200kilolympus(~kilolympu@213.144.144.24)
2023-06-03 15:31:04 +0200 <ijqq> I am reading a blogpost on parsing and they use this, I don't really understand it
2023-06-03 15:31:07 +0200 <ijqq> newtype Parser i o = Parser { runParser :: i -> Maybe (i, o) }
2023-06-03 15:33:53 +0200 <Franciman> ijqq: what's the strange part for you?
2023-06-03 15:34:07 +0200 <Franciman> the newtype or the i -> Maybe (i, o) ?
2023-06-03 15:34:42 +0200 <ijqq> So why exactly is this a newtype? And then it has a field `runParser` which is a function?
2023-06-03 15:35:03 +0200 <Franciman> this is syntax sugar
2023-06-03 15:35:39 +0200 <Franciman> the newtype is to create a new type name which is distinct from all others
2023-06-03 15:36:07 +0200 <Franciman> so basically a parser is a function of type i -> Maybe (i, o)
2023-06-03 15:36:34 +0200 <Franciman> but to make it more abstract, you hide it behind a newtype
2023-06-03 15:36:54 +0200 <Franciman> you could have also done:
2023-06-03 15:37:01 +0200 <Axman6> it could also be data Parser i o = Parser (i -> Maybe (i,o)); runParser (Parser f) = f
2023-06-03 15:37:02 +0200 <Franciman> type Parser i o = i -> Maybe (i, o)
2023-06-03 15:37:23 +0200 <Axman6> (if you're more familiar with data)
2023-06-03 15:37:36 +0200 <Franciman> yes. The only difference with the Axman6's version is that newtype is really just syntax sugar
2023-06-03 15:37:44 +0200 <Franciman> it doesn't add any other overhead
2023-06-03 15:37:52 +0200 <Franciman> iiuc
2023-06-03 15:38:19 +0200 <Axman6> well, it's more than syntax sugar, is created a new type too. they is no runtime overhead though
2023-06-03 15:38:46 +0200 <Franciman> true
2023-06-03 15:40:08 +0200 <Axman6> ijqq: doesn any of that help?
2023-06-03 15:41:40 +0200 <Axman6> this is nearly exactly the same: newtype Parser i o = Parser (i -> (i,o)); runParser :: Parser i o -> (i -> (i,o)); runParser (Parser f) = f
2023-06-03 15:42:08 +0200 <Axman6> (the only thing missing is that you can also use the name runParser for "updating" a Parser, but it
2023-06-03 15:42:20 +0200 <Axman6> it's not bery useful with newtypes)
2023-06-03 15:43:14 +0200 <ijqq> http://sprunge.us/NVxf5O
2023-06-03 15:43:20 +0200 <ijqq> If my understanding is correct
2023-06-03 15:43:23 +0200 <ijqq> I think I get it
2023-06-03 15:43:26 +0200 <ijqq> Thanks guys
2023-06-03 15:45:30 +0200L29Ah(~L29Ah@wikipedia/L29Ah)
2023-06-03 15:49:32 +0200 <ijqq> I guess I was just a bit confused on the parsing function being a field in the newtype, but it makes sense now.
2023-06-03 15:53:20 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
2023-06-03 15:54:21 +0200vandita(~vandit@178-164-188-29.pool.digikabel.hu) (Ping timeout: 250 seconds)
2023-06-03 15:55:59 +0200vandita(~vandit@178-164-207-211.pool.digikabel.hu)
2023-06-03 15:57:37 +0200nate2(~nate@98.45.169.16)
2023-06-03 16:00:26 +0200jargon(~jargon@184.101.71.62) (Remote host closed the connection)
2023-06-03 16:00:40 +0200 <[Leary]> ijqq: Note that one of the main reasons to make `Parser` a newtype rather than a type synonym is in order to give it key instances like `Monad`, thus making it much easier to use. This would normally be done with GNTD like so: `newtype Parser i o = Parser (StateT i Maybe o) deriving (Functor, Applicative, Alternative, Monad, MonadState i)`.
2023-06-03 16:00:45 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2023-06-03 16:01:33 +0200 <ijqq> Okay, now the blog post is talking about functors. So I'm reading an article about functors, and it gives the example of `fmap chr (65, 65)` which gives `(65, 'A')`. Where can I see the code for or find more information about the fmap implemntation of tuples?
2023-06-03 16:02:03 +0200 <ski> @src (,) fmap
2023-06-03 16:02:03 +0200 <lambdabot> fmap f (x,y) = (x, f y)
2023-06-03 16:02:05 +0200nate2(~nate@98.45.169.16) (Ping timeout: 240 seconds)
2023-06-03 16:02:15 +0200 <ijqq> Ah, cool.
2023-06-03 16:03:06 +0200 <ijqq> Interesting, Leary. Thanks. I'll have to read up on Monad and those others too.
2023-06-03 16:03:07 +0200zxrom(~zxrom@mm-92-28-212-37.vitebsk.dynamic.pppoe.byfly.by) (Ping timeout: 240 seconds)
2023-06-03 16:03:17 +0200 <ijqq> What is GNTD?
2023-06-03 16:04:09 +0200 <geekosaur> https://downloads.haskell.org/ghc/9.0.1/docs/html/users_guide/exts/newtype_deriving.html
2023-06-03 16:04:47 +0200 <[Leary]> GeneralisedNewtypeDeriving. It just pulls instances through newtypes, but it can let you avoid a bunch of boilerplate.
2023-06-03 16:05:45 +0200 <zups> Axman6: I tried to implement the find with foldr but i didn't manage to. How would one do that?
2023-06-03 16:06:40 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 16:06:57 +0200 <ijqq> Also Leary, how could I see which instances the Parser has in ghci?
2023-06-03 16:07:38 +0200 <[Leary]> :i Parser should do it.
2023-06-03 16:08:33 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 16:08:42 +0200 <ijqq> type Parser :: * -> * -> *
2023-06-03 16:08:42 +0200 <ijqq> newtype Parser i o = Parser {runParser :: i -> Maybe (i, o)}
2023-06-03 16:08:42 +0200 <ijqq> -- Defined at main.hs:60:1
2023-06-03 16:08:56 +0200 <ijqq> So does that mean that my parser does not have those instances?
2023-06-03 16:09:45 +0200 <[Leary]> This is somewhat of a simplification, but if you're defining a type, it won't have any instances you haven't given it.
2023-06-03 16:09:50 +0200 <probie> zups: what did the definition of your head function using foldr look like?
2023-06-03 16:12:06 +0200 <ijqq> Oh, sorry I think i misinterpreted your message. So you mean to say that, by making my Parser through newtype, later on I am easily able to make it an instance of Monad, etc.?
2023-06-03 16:12:15 +0200 <probie> your definition of `find` should actually be pretty similar
2023-06-03 16:13:08 +0200 <[Leary]> ijqq: Yes. Or rather, if it's a synonym, that's impossible.
2023-06-03 16:13:16 +0200 <zups> probie: foldr (\x d -> if (x == d) then (Just x) else Nothing) 2 [1,2,3]
2023-06-03 16:13:25 +0200 <zups> I tried something like this but it doesn't even compile
2023-06-03 16:13:26 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Ping timeout: 250 seconds)
2023-06-03 16:14:05 +0200CiaoSen(~Jura@145.224.74.19) (Ping timeout: 240 seconds)
2023-06-03 16:14:55 +0200 <probie> most of the right pieces, but some in the wrong places
2023-06-03 16:14:56 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 16:15:42 +0200 <zups> yeah :) I just get the error message "cannot construct infite type a ~ Maybe a" and i never understand how to decrypt that :)
2023-06-03 16:15:51 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 16:16:34 +0200 <probie> Have you been told what type find should have?
2023-06-03 16:17:39 +0200 <zups> Axman6 | zups: try to write this, using foldr: find :: (a -> Bool) -> [a] -> Maybe a
2023-06-03 16:18:03 +0200 <ski> zups : it means you're confusing `a's with `Maybe a's
2023-06-03 16:18:18 +0200 <[Leary]> zups: It might help if you realise that `find (\_ -> True) = myHead`.
2023-06-03 16:19:15 +0200 <zups> mmm
2023-06-03 16:19:32 +0200 <ski> zups : in that `foldr' example, `x' will need to have the same type as `Just x' and `Nothing' (the possible results of the lambda) .. but `x' having same type of `Just x' leads to infinite/cyclic type
2023-06-03 16:20:37 +0200 <ski> well, it's because you're comparing `x' and `d' with each other, really, too
2023-06-03 16:21:45 +0200 <ski> `foldr' takes a function of type say `a -> r -> r'. so `d' has type `r', and `Just x' and `Nothing' must also have type `r'. and `x' has type `a'. but since you compare `x' with `r', they must be of the same type, so `a = r'
2023-06-03 16:21:54 +0200n0den1te(~n0den1te@157.119.87.13) (Quit: leaving)
2023-06-03 16:22:24 +0200 <ski> (er, compare `x' with `d')
2023-06-03 16:25:30 +0200 <ijqq> Ah, I also found this stack overflow article which addresses the same question that I asked https://stackoverflow.com/questions/60291263/why-the-newtype-syntax-creates-a-function
2023-06-03 16:28:42 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2023-06-03 16:28:56 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 16:28:58 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2023-06-03 16:29:45 +0200Tlsx(~rscastilh@189-82-108-215.user3p.veloxzone.com.br)
2023-06-03 16:36:14 +0200freeside(~mengwong@103.252.202.189)
2023-06-03 16:36:41 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 16:36:58 +0200Tlsx(~rscastilh@189-82-108-215.user3p.veloxzone.com.br) (Remote host closed the connection)
2023-06-03 16:38:58 +0200Tlsx(~rscastilh@189-82-108-215.user3p.veloxzone.com.br)
2023-06-03 16:39:04 +0200 <freeside> so, i'm trying to convert a non-monadic function to a monadic function -- i'm wrapping it in RWS so I can convert by Debug.Traces to "tell"s instead. And I'm walking down the function calls and upgrading all of them to monadic style as well. But I've got a couple of nested list comprehensions; how do I convert the function calls inside them, to a monadic style?
2023-06-03 16:40:06 +0200 <probie> what do you mean by "a monadic style"? You can desugar list comprehensions to do notation.
2023-06-03 16:41:22 +0200 <probie> > [(x+y) | x <- [1..5], y <- [6..10], even x, odd y]
2023-06-03 16:41:23 +0200 <lambdabot> [9,11,11,13]
2023-06-03 16:41:32 +0200 <ncf> or turn on MonadComprehensions
2023-06-03 16:41:52 +0200 <probie> > do { x <- [1..5]; y <- [6..10]; guard (even x); guard (even y); pure (x+y) }
2023-06-03 16:41:53 +0200 <lambdabot> [8,10,12,10,12,14]
2023-06-03 16:41:55 +0200 <ski> won't really help in this case
2023-06-03 16:42:02 +0200Tlsx(~rscastilh@189-82-108-215.user3p.veloxzone.com.br) (Remote host closed the connection)
2023-06-03 16:42:06 +0200 <ncf> maybe with ListT?
2023-06-03 16:42:13 +0200 <ski> they're looking for what ncf just said, yea
2023-06-03 16:42:26 +0200 <ski> or doing it manually
2023-06-03 16:42:30 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2023-06-03 16:42:42 +0200 <freeside> previously I had, e.g. [ g x y | (x,y) <- f l ] ... now I'm changing f to return m [(a,b)] instead of [(a,b)]
2023-06-03 16:43:08 +0200 <ski> just a single generator in the list comprehension ?
2023-06-03 16:43:44 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 16:43:45 +0200 <ski> will `g' also be monadic ?
2023-06-03 16:44:14 +0200 <jade[m]> you can sequence it
2023-06-03 16:44:15 +0200 <freeside> yes, i believe so
2023-06-03 16:44:16 +0200 <probie> You probably want to return a `[m (a,b)]` and call `sequence` on it
2023-06-03 16:44:41 +0200ncf. o O ( why do so many packages provide ListT, and which one is the canonical one? )
2023-06-03 16:44:41 +0200 <ski> or `mapM'
2023-06-03 16:44:42 +0200 <freeside> ah, i see. and if i do that i don't have to disembowel my list comprehensions
2023-06-03 16:45:00 +0200 <probie> What's the type of `f`? Is it "monadic" as well? If not you don't need to disembowel the list comprehension
2023-06-03 16:45:28 +0200 <ski> "now I'm changing f to return m [(a,b)] instead of [(a,b)]"
2023-06-03 16:45:45 +0200 <freeside> well, i'm tweaking it so that it will be monadic, because the last programmer who touched this code base decided to Debug.Trace all over, and I want to W instead
2023-06-03 16:47:26 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 16:48:09 +0200 <ncf> mtl 2.3 removed Control.Monad.List and the changelog doesn't say what to use instead o_o
2023-06-03 16:49:01 +0200 <c_wraith> ncf: there's no way to do what it does correctly. You need to alter your requirements a bit instead.
2023-06-03 16:51:12 +0200 <EvanR> if Debug.Trace is used as a logger, RWS at least the W part won't work very well for that
2023-06-03 16:51:33 +0200 <EvanR> Writer is terribly lazy
2023-06-03 16:51:44 +0200 <freeside> i'm relying on evalRWS to get out the (a,w), so i think i'm looking for something sequence-like, that has m [(a,b)] -> m ([a],[b])
2023-06-03 16:52:10 +0200 <probie> `fmap unzip`?
2023-06-03 16:52:42 +0200 <EvanR> Writer for logging is just bad
2023-06-03 16:52:51 +0200 <freeside> what's the best practice around that?
2023-06-03 16:53:05 +0200 <EvanR> you could use State for a log, or a dedicated logger monad?
2023-06-03 16:53:56 +0200freesidelooks at monad-logger
2023-06-03 16:54:55 +0200 <EvanR> I hear good things
2023-06-03 16:55:44 +0200 <chromoblob> why is Writer bad for logging?
2023-06-03 16:55:56 +0200 <jade[m]> freeside: that's just `fmap unzip`
2023-06-03 16:56:14 +0200 <juri_> ugh. new quickcheck has exposed a lot of holes in my geometry generation engine. yaay?
2023-06-03 16:56:22 +0200 <EvanR> Writer has two modes, very lazy and somewhat lazy
2023-06-03 16:56:57 +0200 <EvanR> bad for a long running computation that keeps getting appended, that eventually want to see
2023-06-03 16:58:04 +0200 <EvanR> at the very least you want to keep the log fully evaluated, which there's no option for, but even then it keeps growing in size
2023-06-03 16:58:32 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 16:59:00 +0200 <EvanR> there are cases where Writer makes sense but they don't look like logging
2023-06-03 16:59:08 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2023-06-03 16:59:15 +0200 <chromoblob> does it *always* keep growing?
2023-06-03 16:59:26 +0200 <freeside> my log is, like, 20 lines at the moment, but i will DTRT and try to switch to monad-logger
2023-06-03 16:59:32 +0200 <EvanR> no, you could use a monoid that doesn't grow
2023-06-03 16:59:45 +0200 <freeside> brb, thnx all for the advice, i am going to go off and get lost in a maze of twisty little hackages
2023-06-03 17:00:21 +0200 <chromoblob> hmm
2023-06-03 17:00:45 +0200 <chromoblob> can we arrange so that at the end there is an infinite stream of log entries
2023-06-03 17:00:49 +0200 <geekosaur> there are also things like MonadChronicle on hackage
2023-06-03 17:00:50 +0200 <EvanR> actually, the strict version of writer still doesn't do what you think
2023-06-03 17:01:25 +0200 <EvanR> https://stackoverflow.com/questions/14644830/what-is-the-point-of-having-a-lazy-strict-version-of-…
2023-06-03 17:01:35 +0200 <chromoblob> i mean, finite if the action ends, and infinite if it doesn't
2023-06-03 17:01:55 +0200 <EvanR> yes you can create an infinite stream with writer
2023-06-03 17:02:20 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 17:03:22 +0200 <chromoblob> EvanR: with Writer? but in the end it returns (result, m1 `mappend` m2)
2023-06-03 17:03:39 +0200 <chromoblob> that `mappend` doesn't exist if there are infinite acitons
2023-06-03 17:04:07 +0200 <chromoblob> i forgot how monads work
2023-06-03 17:04:15 +0200 <chromoblob> is >> left associative?
2023-06-03 17:04:47 +0200darchitect(~darchitec@host86-157-65-148.range86-157.btcentralplus.com) (Quit: WeeChat 3.8)
2023-06-03 17:05:06 +0200 <int-e> Yes. That doesn't matter though if you have loop = action >> loop
2023-06-03 17:05:24 +0200 <int-e> which is action >> (action >> (action >> ...))
2023-06-03 17:05:45 +0200 <chromoblob> ok, i see now
2023-06-03 17:05:58 +0200 <chromoblob> so infinite streams will just work
2023-06-03 17:06:15 +0200 <EvanR> depends on the Monoid
2023-06-03 17:09:09 +0200 <chromoblob> yeah if the monoid is "backwards list" then loop must be loop >> action
2023-06-03 17:09:20 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 17:12:17 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 17:13:03 +0200gurkenglas(~user@dynamic-046-114-180-171.46.114.pool.telefonica.de)
2023-06-03 17:13:05 +0200berberman(~berberman@user/berberman) (Quit: ZNC 1.8.2 - https://znc.in)
2023-06-03 17:13:56 +0200 <freeside> okay. maybe I was too vague when I said I wanted to log. I basically have a compiler for a little language, and the toolchain includes a bunch of transpilers on the back end. I want each transpiler to be able to mumble out some STDERR as it goes along, and eventually, when the compiler completes, I want it to dump all the stderr-like output to disk, one file per transpiler. So I'm moving away from
2023-06-03 17:14:02 +0200 <freeside> Debug.Trace, and I'm moving away from IO, so my Main can accumulate and organize all the mumbling.
2023-06-03 17:14:06 +0200 <freeside> In a situation like this is Writer acceptable? I mean, it's not a lot of output.
2023-06-03 17:14:26 +0200 <EvanR> in the best case, if you're careful to consume the entire log lazily before looking at the result, then the magic of update frames ensures you don't waste memory. But if you do, the whole log has to get evaluated first
2023-06-03 17:14:36 +0200berberman(~berberman@user/berberman)
2023-06-03 17:15:33 +0200 <EvanR> if you forget to play it like that and look at the result first
2023-06-03 17:17:13 +0200yaxu(~yaxu@host-79-78-86-129.static.as9105.net)
2023-06-03 17:18:19 +0200coot(~coot@89-69-206-216.dynamic.chello.pl)
2023-06-03 17:18:26 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:d512:b207:c888:476e)
2023-06-03 17:19:33 +0200 <ski> > let loop = 1 % 2 : do x <- loop; [recip (1 + recip x),1 + x] in loop
2023-06-03 17:19:36 +0200 <lambdabot> [1 % 2,1 % 3,3 % 2,1 % 4,4 % 3,3 % 5,5 % 2,1 % 5,5 % 4,4 % 7,7 % 3,3 % 8,8 %...
2023-06-03 17:21:56 +0200 <yaxu> Hi all, I'm 100% sure I'm being stupid, but I've stared at these lines for a while, and can't see why they are raising the warning "Pattern match(es) are non-exhaustive In an equation for ‘loop’" https://github.com/tidalcycles/Tidal/blob/5fd3f26b973cf3ab2d5ef7406e267f75676d2063/src/Sound/Tidal…
2023-06-03 17:22:08 +0200 <ncf> calkin-wilf!
2023-06-03 17:22:31 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-06-03 17:22:31 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:d512:b207:c888:476e) (Ping timeout: 240 seconds)
2023-06-03 17:23:01 +0200 <EvanR> what did you just call me?
2023-06-03 17:23:08 +0200 <ncf> yaxu: use <- instead of ==
2023-06-03 17:23:17 +0200 <ncf> LT <- cmp
2023-06-03 17:23:20 +0200 <jade[m]> yaxu: the guards are not "exhaustive"
2023-06-03 17:23:21 +0200 <int-e> ski: why are you starting at 1/2?
2023-06-03 17:23:26 +0200 <int-e> (rather than 1)
2023-06-03 17:23:43 +0200 <int-e> oh
2023-06-03 17:23:44 +0200 <jade[m]> because ghc doesn't like to infer stuff about ==
2023-06-03 17:25:22 +0200euandreh(~Thunderbi@189.6.18.7) (Ping timeout: 250 seconds)
2023-06-03 17:26:00 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-06-03 17:27:07 +0200vandita(~vandit@178-164-207-211.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-06-03 17:27:55 +0200 <yaxu> @jade[m] aha thanks! switching in a case statement has fixed it
2023-06-03 17:27:55 +0200 <lambdabot> Unknown command, try @list
2023-06-03 17:28:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 17:28:11 +0200 <yaxu> jade[m], aha thanks! switching in a case statement has fixed it
2023-06-03 17:28:15 +0200 <ski> yea, probably should have started with one
2023-06-03 17:28:40 +0200 <EvanR> ... in 1%1 : loop
2023-06-03 17:28:55 +0200vandita(~vandit@85-238-93-47.pool.digikabel.hu)
2023-06-03 17:29:20 +0200 <int-e> EvanR: but it'll still be missing 2 then
2023-06-03 17:29:43 +0200int-eisn't sure exactly which numbers will end up missing
2023-06-03 17:31:24 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 17:31:45 +0200 <chromoblob> what numbers is the loop supposed to compute?
2023-06-03 17:31:49 +0200taupiqueur(~taupiqueu@2a02-842a-8180-4601-c87a-3932-439e-c5a6.rev.sfr.net)
2023-06-03 17:31:57 +0200 <EvanR> all of them? xD
2023-06-03 17:32:11 +0200 <ncf> the immediate left subtree of the calkin-wilf tree
2023-06-03 17:32:45 +0200 <int-e> (the positive rationals)
2023-06-03 17:34:17 +0200 <int-e> (ncf's answer is what the function computes... I'm speculating about the intent)
2023-06-03 17:34:22 +0200 <chromoblob> cool
2023-06-03 17:35:11 +0200 <EvanR> looking it up, you're missing a lot going by just the left subtree
2023-06-03 17:35:53 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2023-06-03 17:38:32 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 17:38:47 +0200AlexNoo_(~AlexNoo@178.34.162.37)
2023-06-03 17:39:01 +0200__monty__(~toonn@user/toonn)
2023-06-03 17:40:38 +0200AlexZenon_2(~alzenon@178.34.162.37)
2023-06-03 17:41:07 +0200AlexZenon(~alzenon@178.34.163.104) (Ping timeout: 240 seconds)
2023-06-03 17:42:05 +0200AlexNoo(~AlexNoo@178.34.163.104) (Ping timeout: 240 seconds)
2023-06-03 17:42:07 +0200Alex_test(~al_test@178.34.163.104) (Ping timeout: 240 seconds)
2023-06-03 17:42:09 +0200AlexNoo_AlexNoo
2023-06-03 17:42:10 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 17:44:15 +0200AlexZenon_2AlexZenon
2023-06-03 17:44:53 +0200 <int-e> > let loop = 1 % 1 : do x <- loop; [1 + x, recip (1 + x)] in loop -- does this variant also have a name?
2023-06-03 17:44:54 +0200 <lambdabot> [1 % 1,2 % 1,1 % 2,3 % 1,1 % 3,3 % 2,2 % 3,4 % 1,1 % 4,4 % 3,3 % 4,5 % 2,2 %...
2023-06-03 17:46:35 +0200Alex_test(~al_test@178.34.162.37)
2023-06-03 17:47:55 +0200Pickchea(~private@user/pickchea)
2023-06-03 17:48:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 17:48:36 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:d512:b207:c888:476e)
2023-06-03 17:51:49 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 17:53:43 +0200yaxu(~yaxu@host-79-78-86-129.static.as9105.net) (Quit: Leaving)
2023-06-03 17:53:55 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2023-06-03 17:54:21 +0200 <tomsmeding> int-e: from this prefix it seems like it's enumerating https://en.wikipedia.org/wiki/Stern%E2%80%93Brocot_tree in a weird order
2023-06-03 17:54:25 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2023-06-03 17:55:10 +0200Christoph[m](~hpotsirhc@2001:470:69fc:105::2ff8) (Ping timeout: 265 seconds)
2023-06-03 17:55:11 +0200 <tomsmeding> that is: enumerate layer-by-layer, and within a layer, enumerate(layer) = interleave(enumerate(left half of layer), enumerate(reverse(right half of layer)))
2023-06-03 17:55:13 +0200 <akadude[m]> Hey, can anyone recommend vcache-like library but maintained?
2023-06-03 17:55:25 +0200 <tomsmeding> but again that's just from this prefix :p
2023-06-03 17:55:30 +0200 <int-e> tomsmeding: well that's also true for the Calkin-Wilf tree... it's positive rationals
2023-06-03 17:55:44 +0200 <tomsmeding> there the enumeration order is even weirder though
2023-06-03 17:56:30 +0200 <akadude[m]> By vcache-like I mean that it provides interface to run STM transactions on persistently stored data
2023-06-03 17:58:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 17:59:41 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-06-03 18:01:30 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 18:04:22 +0200 <akadude[m]> Oh, I see that TCache (listed in alternatives) is maintained
2023-06-03 18:08:32 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 18:11:25 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 18:16:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 18:16:57 +0200 <c_wraith> Hmm. does pseq have performance implications over seq *other* than the fact that it prevents ghc from reordering computations?
2023-06-03 18:18:37 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 18:21:25 +0200telser(~quassel@user/telser) (Ping timeout: 240 seconds)
2023-06-03 18:22:01 +0200ub(~Thunderbi@p548c91e0.dip0.t-ipconnect.de)
2023-06-03 18:22:56 +0200ubert(~Thunderbi@p200300ecdf0002351300242c44b15f80.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2023-06-03 18:22:56 +0200ububert
2023-06-03 18:26:56 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 18:26:58 +0200stef204(~stef204@user/stef204)
2023-06-03 18:29:18 +0200sord937(~sord937@gateway/tor-sasl/sord937)
2023-06-03 18:29:44 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 18:31:47 +0200telser(~quassel@user/telser)
2023-06-03 18:34:28 +0200cheater_(~Username@user/cheater)
2023-06-03 18:34:38 +0200cheater(~Username@user/cheater) (Ping timeout: 268 seconds)
2023-06-03 18:34:43 +0200cheater_cheater
2023-06-03 18:36:56 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 18:38:51 +0200econo(uid147250@user/econo)
2023-06-03 18:39:22 +0200gemmaro(~user@240f:74:d1f0:1:ba1:e787:c9e:b1dc)
2023-06-03 18:39:39 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 18:40:24 +0200 <monochrom> I think no.
2023-06-03 18:42:54 +0200stef204(~stef204@user/stef204) (Quit: WeeChat 3.8)
2023-06-03 18:46:28 +0200ubert(~Thunderbi@p548c91e0.dip0.t-ipconnect.de) (Quit: ubert)
2023-06-03 18:47:33 +0200stef204(~stef204@user/stef204)
2023-06-03 18:51:20 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 18:53:08 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 18:54:37 +0200telser(~quassel@user/telser) (Ping timeout: 240 seconds)
2023-06-03 18:56:10 +0200acidjnk(~acidjnk@p200300d6e7072f454588bfb78dd6f620.dip0.t-ipconnect.de)
2023-06-03 18:57:51 +0200gemmaro(~user@240f:74:d1f0:1:ba1:e787:c9e:b1dc) (Remote host closed the connection)
2023-06-03 19:01:20 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 19:02:22 +0200telser(~quassel@user/telser)
2023-06-03 19:03:28 +0200stef204(~stef204@user/stef204) (Quit: WeeChat 3.8)
2023-06-03 19:05:00 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 19:06:17 +0200slaydr(~slaydr@2601:1c2:980:4ea0::a4a5) (Remote host closed the connection)
2023-06-03 19:15:51 +0200machinedgod(~machinedg@93-136-46-129.adsl.net.t-com.hr)
2023-06-03 19:16:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 19:17:39 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
2023-06-03 19:18:37 +0200chromoblob(~user@37.113.158.8) (Ping timeout: 240 seconds)
2023-06-03 19:18:54 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-c87a-3932-439e-c5a6.rev.sfr.net)
2023-06-03 19:19:11 +0200zxrom(~zxrom@mm-214-30-212-37.vitebsk.dynamic.pppoe.byfly.by)
2023-06-03 19:19:49 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 19:21:43 +0200Guest18(~Guest18@host-091-097-060-051.ewe-ip-backbone.de)
2023-06-03 19:22:13 +0200cheater_(~Username@user/cheater)
2023-06-03 19:23:59 +0200cheater__(~Username@user/cheater)
2023-06-03 19:24:08 +0200tabemann(~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Ping timeout: 265 seconds)
2023-06-03 19:25:06 +0200 <ManofLetters[m]> there's this wonderful function https://hackage.haskell.org/package/base-4.18.0.0/docs/GHC-TypeLits.html#v:sameNat, sameNat :: forall a b proxy1 proxy2. (KnownNat a, KnownNat b) => proxy1 a -> proxy2 b -> Maybe (a :~: b)
2023-06-03 19:25:06 +0200 <ManofLetters[m]> how do I get sameShape that instead of taking two proxies of Nat, takes two proxies of [Nat]?
2023-06-03 19:25:23 +0200cheater(~Username@user/cheater) (Ping timeout: 256 seconds)
2023-06-03 19:25:50 +0200 <ManofLetters[m]> this is not a homework ;)
2023-06-03 19:26:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 19:27:34 +0200cheater_(~Username@user/cheater) (Ping timeout: 250 seconds)
2023-06-03 19:28:27 +0200cheater_(~Username@user/cheater)
2023-06-03 19:28:27 +0200cheater_cheater
2023-06-03 19:28:58 +0200cheater__(~Username@user/cheater) (Ping timeout: 265 seconds)
2023-06-03 19:29:41 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 19:29:54 +0200 <ncf> what's a shape?
2023-06-03 19:31:37 +0200 <ManofLetters[m]> it's [Nat]
2023-06-03 19:31:56 +0200 <ManofLetters[m]> (a type-level representation of a shape of an array)
2023-06-03 19:33:58 +0200 <ManofLetters[m]> that would be `sameShape :: forall a b proxy1 proxy2. (Shape a, Shape b) => proxy1 a -> proxy2 b -> Maybe (a :~: b)`, where `class (Typeable s) => Shape (s :: [Nat])`
2023-06-03 19:34:51 +0200CiaoSen(~Jura@145.224.74.19)
2023-06-03 19:34:58 +0200 <ManofLetters[m]> with `instance Shape '[]` and `instance forall n s . (Shape s, KnownNat n) => Shape (n ': s)`
2023-06-03 19:36:18 +0200 <ncf> there's https://hackage.haskell.org/package/typelits-witnesses-0.3.0.2/docs/GHC-TypeLits-List.html#v:sameN…
2023-06-03 19:36:25 +0200 <ManofLetters[m]> (taken from https://hackage.haskell.org/package/orthotope-0.1.2.0/docs/src/Data.Array.Internal.Shape.html#Shape)
2023-06-03 19:36:53 +0200 <ncf> though that package recommends using singletons instead
2023-06-03 19:36:56 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 19:37:49 +0200 <ManofLetters[m]> they know nothing, this is great!
2023-06-03 19:38:01 +0200 <ManofLetters[m]> but how would I use do this with singletons?
2023-06-03 19:38:07 +0200 <ManofLetters[m]> s/use//
2023-06-03 19:40:20 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 19:41:24 +0200 <ManofLetters[m]> huh, I searched for sameNats on hoogle and found nothing; that's a bummer
2023-06-03 19:41:37 +0200 <ManofLetters[m]> @ncf: how did you find it?
2023-06-03 19:41:37 +0200 <lambdabot> Unknown command, try @list
2023-06-03 19:42:14 +0200 <ncf> googled "ghc type level list"
2023-06-03 19:44:15 +0200 <ManofLetters[m]> wow, smart
2023-06-03 19:44:32 +0200 <ManofLetters[m]> they actually hint how to do this with singletons at the very bottom of the https://hackage.haskell.org/package/typelits-witnesses-0.3.0.2 page
2023-06-03 19:45:02 +0200 <ManofLetters[m]> but I'm expecting all kinds of problems, e.g., conversions required
2023-06-03 19:46:32 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 19:47:33 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2023-06-03 19:50:00 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 19:50:13 +0200tabemann(~tabemann@2600:1700:7990:24e0:46da:fe37:6ffd:b2b9)
2023-06-03 19:51:39 +0200somerandomnick[m(~somerando@2001:470:69fc:105::3:4f2e) (Ping timeout: 265 seconds)
2023-06-03 19:51:39 +0200SeanKing[m](~seankingm@2001:470:69fc:105::cf9c) (Ping timeout: 265 seconds)
2023-06-03 19:52:08 +0200VarikValefor[m](~varikvale@2001:470:69fc:105::a5d) (Ping timeout: 265 seconds)
2023-06-03 19:52:37 +0200hsiktas[m](~hsiktasm]@2001:470:69fc:105::30d4) (Ping timeout: 265 seconds)
2023-06-03 19:56:32 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 19:59:07 +0200nate2(~nate@98.45.169.16)
2023-06-03 19:59:51 +0200nek0(~nek0@2a01:4f8:222:2b41::12) (Quit: The Lounge - https://thelounge.chat)
2023-06-03 20:00:02 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 20:03:19 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-06-03 20:03:37 +0200nate2(~nate@98.45.169.16) (Ping timeout: 240 seconds)
2023-06-03 20:06:04 +0200VarikValefor[m](~varikvale@2001:470:69fc:105::a5d)
2023-06-03 20:06:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 20:09:42 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 20:14:25 +0200wroathe(~wroathe@50.205.197.50)
2023-06-03 20:14:25 +0200wroathe(~wroathe@50.205.197.50) (Changing host)
2023-06-03 20:14:25 +0200wroathe(~wroathe@user/wroathe)
2023-06-03 20:16:56 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 20:16:56 +0200taupiqueur(~taupiqueu@2a02-842a-8180-4601-c87a-3932-439e-c5a6.rev.sfr.net) (Quit: WeeChat 3.8)
2023-06-03 20:17:52 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 20:18:36 +0200nek0(~nek0@2a01:4f8:222:2b41::12)
2023-06-03 20:21:28 +0200michalz(~michalz@185.246.207.200)
2023-06-03 20:22:19 +0200 <c_wraith> is it just me, or does doing anything interesting with ContT require using the constructor manually? All the helper functions seem to be too type-restricted
2023-06-03 20:24:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 20:26:38 +0200cheater_(~Username@user/cheater)
2023-06-03 20:27:08 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 20:28:05 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2023-06-03 20:28:13 +0200cheater_cheater
2023-06-03 20:30:37 +0200wroathe(~wroathe@user/wroathe) (Quit: Lost terminal)
2023-06-03 20:33:10 +0200wroathe(~wroathe@50.205.197.50)
2023-06-03 20:33:10 +0200wroathe(~wroathe@50.205.197.50) (Changing host)
2023-06-03 20:33:10 +0200wroathe(~wroathe@user/wroathe)
2023-06-03 20:34:04 +0200 <monochrom> Sometimes callCC is interesting enough for me. But otherwise I would use ContT directly too.
2023-06-03 20:34:25 +0200 <monochrom> ContT and runContT as full-power shift and reset.
2023-06-03 20:35:47 +0200jero98772(~jero98772@2800:484:1d7f:5d36::2)
2023-06-03 20:38:32 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 20:39:42 +0200 <c_wraith> Ah, I see. Anything implemented in terms of MonadCont isn't allowed to touch the r type. That's why it's so restrictive
2023-06-03 20:43:06 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 20:45:08 +0200Guest7839(sid22336@id-22336.hampstead.irccloud.com) ()
2023-06-03 20:45:26 +0200Guest7839(sid22336@id-22336.hampstead.irccloud.com)
2023-06-03 20:46:10 +0200wroathe(~wroathe@user/wroathe) (Quit: leaving)
2023-06-03 20:47:23 +0200Guest7839(sid22336@id-22336.hampstead.irccloud.com) (Changing host)
2023-06-03 20:47:23 +0200Guest7839(sid22336@user/amir)
2023-06-03 20:49:48 +0200Guest7839(sid22336@user/amir) (Client Quit)
2023-06-03 20:50:13 +0200Guest7839(sid22336@id-22336.hampstead.irccloud.com)
2023-06-03 20:50:58 +0200Guest7839(sid22336@id-22336.hampstead.irccloud.com) (Changing host)
2023-06-03 20:50:58 +0200Guest7839(sid22336@user/amir)
2023-06-03 20:51:20 +0200 <dolio> MonadCont also only has callCC in it, so...
2023-06-03 20:51:44 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 20:51:57 +0200Guest7839amir
2023-06-03 20:52:08 +0200cheater_(~Username@user/cheater)
2023-06-03 20:52:14 +0200amir(sid22336@user/amir) (Client Quit)
2023-06-03 20:52:29 +0200 <c_wraith> callCC has a broken type in a separate way than not being able to touch the r in ContT r m
2023-06-03 20:52:29 +0200amir(sid22336@user/amir)
2023-06-03 20:52:55 +0200 <dolio> Yeah, what I mean is, you can't really do shift/reset with just callCC.
2023-06-03 20:52:57 +0200 <c_wraith> it's just that the non-broken version is higher-rank
2023-06-03 20:54:25 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2023-06-03 20:54:33 +0200cheater_cheater
2023-06-03 20:58:46 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-06-03 21:00:05 +0200 <dolio> That's more of a mere annoyance these days, no?
2023-06-03 21:00:48 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 21:00:54 +0200 <dolio> :t \(e :: (forall b. a -> f b) -> f a) -> callCC (\k -> e (\x -> vacuous $ k x))
2023-06-03 21:00:55 +0200 <lambdabot> MonadCont f => ((forall b. a -> f b) -> f a) -> f a
2023-06-03 21:05:07 +0200vandita(~vandit@85-238-93-47.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-06-03 21:06:55 +0200vandita(~vandit@92-249-150-149.static.digikabel.hu)
2023-06-03 21:07:52 +0200 <c_wraith> sure, you can work around it.. but you shouldn't need to
2023-06-03 21:08:59 +0200maerwald[m](~maerwaldm@2001:470:69fc:105::1ee) (Ping timeout: 265 seconds)
2023-06-03 21:09:25 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-c87a-3932-439e-c5a6.rev.sfr.net) (Remote host closed the connection)
2023-06-03 21:09:57 +0200elevenkb(~elevenkb@2001:470:69fc:105::2:cb89) (Ping timeout: 265 seconds)
2023-06-03 21:09:57 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8) (Ping timeout: 265 seconds)
2023-06-03 21:10:13 +0200 <texasmynsted> I gather from googling that the answer might be servent-client or wreq...
2023-06-03 21:10:26 +0200ozkutuk[m](~ozkutuk@2001:470:69fc:105::2:9af8) (Ping timeout: 265 seconds)
2023-06-03 21:10:41 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-c87a-3932-439e-c5a6.rev.sfr.net)
2023-06-03 21:10:56 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 21:11:01 +0200 <texasmynsted> I want the quickest, simplest way to build clients for various REST APIs to build keyboard macros etc.
2023-06-03 21:13:07 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
2023-06-03 21:13:59 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-06-03 21:14:31 +0200pavonia(~user@user/siracusa)
2023-06-03 21:15:16 +0200Deide(~deide@user/deide) (Ping timeout: 265 seconds)
2023-06-03 21:15:16 +0200alanz(~alanzmatr@2001:470:69fc:105::2:49a6) (Ping timeout: 265 seconds)
2023-06-03 21:15:16 +0200ericson2314(~ericson23@2001:470:69fc:105::70c) (Ping timeout: 265 seconds)
2023-06-03 21:15:45 +0200ManofLetters[m](~manoflett@2001:470:69fc:105::3be) (Ping timeout: 265 seconds)
2023-06-03 21:16:14 +0200neohtetxyz[m](~neohtetxy@2001:470:69fc:105::3:314c) (Ping timeout: 265 seconds)
2023-06-03 21:16:14 +0200jmcantrell(~jmcantrel@user/jmcantrell) (Ping timeout: 265 seconds)
2023-06-03 21:16:43 +0200levin[m](~levinlevi@2001:470:69fc:105::3:5f68) (Ping timeout: 265 seconds)
2023-06-03 21:16:43 +0200bgamari[m](~bgamari@2001:470:69fc:105::c7b9) (Ping timeout: 265 seconds)
2023-06-03 21:16:43 +0200JensPetersen[m](~juhp@2001:470:69fc:105::6e9) (Ping timeout: 265 seconds)
2023-06-03 21:18:10 +0200romes[m](~romesmatr@2001:470:69fc:105::2:1660) (Ping timeout: 265 seconds)
2023-06-03 21:18:10 +0200geekosaur[m](~geekosaur@xmonad/geekosaur) (Ping timeout: 265 seconds)
2023-06-03 21:18:39 +0200alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba) (Ping timeout: 265 seconds)
2023-06-03 21:19:08 +0200Las[m]1(~lasmatrix@2001:470:69fc:105::74e) (Ping timeout: 265 seconds)
2023-06-03 21:19:37 +0200smichel17[m](~smichel17@2001:470:69fc:105::2d32) (Ping timeout: 265 seconds)
2023-06-03 21:21:33 +0200nomagno(~nomagno@2001:470:69fc:105::c1f0) (Ping timeout: 265 seconds)
2023-06-03 21:22:24 +0200dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net)
2023-06-03 21:23:00 +0200Artem[m](~artemtype@2001:470:69fc:105::75b) (Ping timeout: 265 seconds)
2023-06-03 21:24:06 +0200systemhalted(~systemhal@199.sub-174-197-65.myvzw.com)
2023-06-03 21:24:19 +0200nomagno(~nomagno@2001:470:69fc:105::c1f0)
2023-06-03 21:24:23 +0200systemhalted(~systemhal@199.sub-174-197-65.myvzw.com) (Max SendQ exceeded)
2023-06-03 21:26:52 +0200chreekat(~chreekat@2001:470:69fc:105::16b5) (Ping timeout: 265 seconds)
2023-06-03 21:26:53 +0200systemhalted(~systemhal@199.sub-174-197-65.myvzw.com)
2023-06-03 21:27:15 +0200systemhalted(~systemhal@199.sub-174-197-65.myvzw.com) (Max SendQ exceeded)
2023-06-03 21:27:51 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 21:28:37 +0200vandita(~vandit@92-249-150-149.static.digikabel.hu) (Ping timeout: 240 seconds)
2023-06-03 21:30:46 +0200vandita(~vandit@178-164-188-71.pool.digikabel.hu)
2023-06-03 21:31:52 +0200cheater_(~Username@user/cheater)
2023-06-03 21:32:28 +0200chreekat(~chreekat@2001:470:69fc:105::16b5)
2023-06-03 21:33:54 +0200neohtetxyz[m](~neohtetxy@2001:470:69fc:105::3:314c)
2023-06-03 21:34:05 +0200cheater(~Username@user/cheater) (Ping timeout: 250 seconds)
2023-06-03 21:34:07 +0200cheater_cheater
2023-06-03 21:34:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 21:34:42 +0200ericson2314(~ericson23@2001:470:69fc:105::70c)
2023-06-03 21:35:09 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 21:35:18 +0200JensPetersen[m](~juhp@2001:470:69fc:105::6e9)
2023-06-03 21:35:26 +0200jmcantrell(~jmcantrel@user/jmcantrell)
2023-06-03 21:36:34 +0200bgamari[m](~bgamari@2001:470:69fc:105::c7b9)
2023-06-03 21:37:54 +0200mokee(~mokee@37.228.215.134) (Remote host closed the connection)
2023-06-03 21:45:08 +0200smichel17[m](~smichel17@2001:470:69fc:105::2d32)
2023-06-03 21:46:45 +0200Las[m]1(~lasmatrix@2001:470:69fc:105::74e)
2023-06-03 21:47:20 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 21:47:30 +0200chreekat(~chreekat@2001:470:69fc:105::16b5) (Remote host closed the connection)
2023-06-03 21:51:04 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 21:54:29 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-06-03 21:55:59 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 21:56:00 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2023-06-03 21:56:23 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 265 seconds)
2023-06-03 21:56:30 +0200sord937(~sord937@gateway/tor-sasl/sord937)
2023-06-03 21:57:26 +0200taupiqueur(~taupiqueu@2a02-842a-8180-4601-c87a-3932-439e-c5a6.rev.sfr.net)
2023-06-03 21:59:45 +0200waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
2023-06-03 22:00:19 +0200Artem[m](~artemtype@2001:470:69fc:105::75b)
2023-06-03 22:00:22 +0200Sgeo(~Sgeo@user/sgeo)
2023-06-03 22:02:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 22:02:40 +0200jespada(~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Ping timeout: 248 seconds)
2023-06-03 22:05:03 +0200jespada(~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
2023-06-03 22:05:32 +0200waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
2023-06-03 22:12:17 +0200chreekat(~chreekat@2001:470:69fc:105::16b5)
2023-06-03 22:19:56 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 22:21:22 +0200wroathe(~wroathe@50.205.197.50)
2023-06-03 22:21:22 +0200wroathe(~wroathe@50.205.197.50) (Changing host)
2023-06-03 22:21:22 +0200wroathe(~wroathe@user/wroathe)
2023-06-03 22:25:52 +0200taupiqueur(~taupiqueu@2a02-842a-8180-4601-c87a-3932-439e-c5a6.rev.sfr.net) (Quit: WeeChat 3.8)
2023-06-03 22:28:21 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-c87a-3932-439e-c5a6.rev.sfr.net) (Remote host closed the connection)
2023-06-03 22:28:22 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Remote host closed the connection)
2023-06-03 22:28:45 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 22:32:31 +0200trev(~trev@user/trev) (Quit: trev)
2023-06-03 22:34:35 +0200 <Profpatsch> newtype Foo from to = Foo ((Context, from) -> Either Error (Context, to))
2023-06-03 22:34:44 +0200 <Profpatsch> ^ I can implement a Semigroup instance for this
2023-06-03 22:35:26 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
2023-06-03 22:35:53 +0200 <Profpatsch> *Semigroupoid; but passing through the context manually is kinda annyoing; is there a better way to write the type?
2023-06-03 22:36:19 +0200 <Profpatsch> The semigroupoid instance doesn’t even touch the Context, it just passes it on
2023-06-03 22:37:44 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 22:39:31 +0200 <jade[m]> Profpatsch: how does it vary from the instance that could be derived (`instance Semigroup b => Semigroup (a -> b)` and `instance Semigroup (Either a b)`
2023-06-03 22:39:32 +0200 <Profpatsch> I’m experimenting with writing parsers in a Categorical way
2023-06-03 22:39:42 +0200 <Profpatsch> jade[m]: Semigroupoid
2023-06-03 22:39:47 +0200 <Profpatsch> not semigroup
2023-06-03 22:39:47 +0200 <jade[m]> * a b)`)?
2023-06-03 22:39:49 +0200 <jade[m]> ahhh
2023-06-03 22:39:50 +0200 <Profpatsch> i.e. Category without id
2023-06-03 22:39:54 +0200 <Profpatsch> sorry, my mistake :)
2023-06-03 22:40:22 +0200 <Profpatsch> So you get Parser from to e.g. jsonString :: Parser Value Text
2023-06-03 22:41:06 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 22:41:56 +0200 <Profpatsch> jade[m]: kinda what I did in https://hackage.haskell.org/package/pa-field-parser-0.1.0.1#readme but generalized to more complicated structures like XML
2023-06-03 22:42:04 +0200taupiqueur(~taupiqueu@2a02:842a:8180:4601:39fb:294e:6171:ad18)
2023-06-03 22:42:19 +0200 <jade[m]> interesting
2023-06-03 22:42:34 +0200 <Profpatsch> In particular going towards a sensible Applicative/Selective instance for combining these
2023-06-03 22:42:41 +0200 <jade[m]> im not as caught up on tge category theory stuff as I should be
2023-06-03 22:42:47 +0200 <Profpatsch> And adding parsing context like the path to the thing that you are parsing
2023-06-03 22:43:03 +0200 <Profpatsch> jade[m]: I have no idea about category, it’s just what the class is called :P
2023-06-03 22:43:10 +0200 <Profpatsch> *about category theory
2023-06-03 22:43:15 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-39fb-294e-6171-ad18.rev.sfr.net)
2023-06-03 22:43:38 +0200 <jade[m]> haha ok
2023-06-03 22:43:47 +0200 <Profpatsch> like, I’m working my way from the concrete to the abstract not the other way around if that0s what you mean
2023-06-03 22:43:49 +0200 <jade[m]> I would like to know about category theory I should say
2023-06-03 22:44:13 +0200 <Profpatsch> things only make sense to me that way, coming from a practical problem
2023-06-03 22:44:17 +0200 <jade[m]> Profpatsch: that's how I work most of the time too
2023-06-03 22:45:15 +0200 <Profpatsch> jade[m]: the specific parser is here: https://code.tvl.fyi/tree/users/Profpatsch/netencode/Netencode/Parse.hs#n30
2023-06-03 22:45:26 +0200 <Profpatsch> And I’m thinking about how to solve that TODO
2023-06-03 22:45:28 +0200 <jade[m]> cool!
2023-06-03 22:45:39 +0200Guest38(~Guest18@host-091-097-060-051.ewe-ip-backbone.de)
2023-06-03 22:45:43 +0200 <Profpatsch> maybe it’s not even a big thing, maybe it’s a fundamental insight I’m missing here
2023-06-03 22:46:06 +0200 <Profpatsch> passing some extra info “along” … hm … that sounds very Arrow-y now that I think about it
2023-06-03 22:46:08 +0200dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 240 seconds)
2023-06-03 22:46:16 +0200chromoblob(~user@37.113.158.8)
2023-06-03 22:46:21 +0200 <Profpatsch> I mean I can get it done just doing what I did here
2023-06-03 22:46:56 +0200 <Profpatsch> This is very much inspired by https://hackage.haskell.org/package/aeson-better-errors but adding a second type parameter so that I can get it to be Category
2023-06-03 22:47:10 +0200 <Profpatsch> tbd whether it makes parsing easier
2023-06-03 22:47:20 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 22:47:24 +0200Guest38(~Guest18@host-091-097-060-051.ewe-ip-backbone.de) (Client Quit)
2023-06-03 22:48:40 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2023-06-03 22:48:55 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-39fb-294e-6171-ad18.rev.sfr.net) (Remote host closed the connection)
2023-06-03 22:49:16 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-39fb-294e-6171-ad18.rev.sfr.net)
2023-06-03 22:49:42 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2023-06-03 22:49:59 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2023-06-03 22:50:02 +0200 <ncf> not sure i understand what part of your code you want to simplify?
2023-06-03 22:50:47 +0200 <Profpatsch> ncf: manually passing through [Text] from the left to the right of my Kleisli
2023-06-03 22:50:59 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 22:51:06 +0200 <ncf> where?
2023-06-03 22:51:12 +0200 <Profpatsch> ncf: https://code.tvl.fyi/tree/users/Profpatsch/netencode/Netencode/Parse.hs#n33
2023-06-03 22:51:27 +0200chromoblob(~user@37.113.158.8) (Ping timeout: 265 seconds)
2023-06-03 22:51:44 +0200 <ncf> but yeah, `second` would probably help
2023-06-03 22:51:51 +0200 <Profpatsch> It’s essentially a daat Foo a b = Kleisli (Validation …) ([Text], a) ([Text], b)
2023-06-03 22:52:09 +0200 <ncf> you mean you want to simplify the type itself?
2023-06-03 22:52:26 +0200 <Profpatsch> Maybe? Not sure lol
2023-06-03 22:52:46 +0200 <Profpatsch> If it were just Monad I’d make it into a Writer cause I’m only ever adding elements to the list
2023-06-03 22:52:59 +0200 <Profpatsch> but since this is Category I have to pass it from the left to the right hrm
2023-06-03 22:53:33 +0200 <ncf> do you?
2023-06-03 22:54:12 +0200 <Profpatsch> so essentially I want to say key "foo" >>> key "bar" and have the [Text] be ["foo", "bar"]
2023-06-03 22:54:17 +0200 <ncf> what's wrong with Kleisli (Compose (Writer [Text]) (Validation …)) ?
2023-06-03 22:54:43 +0200 <ncf> (or WriterT)
2023-06-03 22:56:17 +0200 <EvanR> <<< is a thing
2023-06-03 22:56:36 +0200 <Profpatsch> The way I do it is generate the error messages in case of Failure, and use the context in the error messages
2023-06-03 22:57:17 +0200 <ncf> so have Writer on the outside
2023-06-03 22:57:20 +0200 <Profpatsch> So the writer is not global in my m, but rather needs to be locally available within the thingies
2023-06-03 22:57:35 +0200 <ncf> hmm
2023-06-03 23:00:05 +0200 <Profpatsch> So I’m essentially building a difference list which is available at the leaves of parsing as an input in case of error but will be passed on to the next nesting level in case of success.
2023-06-03 23:00:25 +0200 <Profpatsch> And in case the whole parse succeeds, it’s just thrown away.
2023-06-03 23:00:58 +0200 <ncf> if you want something of type Parse (Either Error to) to , i think you have no choice but to use state instead of writer... but shouldn't that be Parse from (Either Error to) -> Parse from to ?
2023-06-03 23:01:20 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 23:02:07 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 23:06:10 +0200 <Profpatsch> Meh, maybe there is no good abstraction for this
2023-06-03 23:06:22 +0200 <Profpatsch> I’m not sure about the current form of the parser
2023-06-03 23:09:30 +0200ddellacosta(~ddellacos@146.70.165.162)
2023-06-03 23:11:20 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 23:15:04 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 23:19:04 +0200 <monochrom> "State = ReaderT Writer" is a poor model, and it shows.
2023-06-03 23:20:31 +0200 <monochrom> Also why mathematicians know when to be careful and write "(Integer, +, 0) is a monoid" not just "Integer is a monoid".
2023-06-03 23:21:24 +0200 <monochrom> How the operators behave is more important than what elements are in the set.
2023-06-03 23:22:30 +0200SeanKing[m](~seankingm@2001:470:69fc:105::cf9c)
2023-06-03 23:23:21 +0200vandita(~vandit@178-164-188-71.pool.digikabel.hu) (Ping timeout: 265 seconds)
2023-06-03 23:23:31 +0200 <Profpatsch> monochrom: that’s not a thing you can say, the definition of an algebra is „a set with some operations that observe laws“
2023-06-03 23:23:31 +0200alanz(~alanz@2001:470:69fc:105::2:49a6)
2023-06-03 23:23:32 +0200Christoph[m](~hpotsirhc@2001:470:69fc:105::2ff8)
2023-06-03 23:24:40 +0200 <Profpatsch> But yeah, I get what you mean :)
2023-06-03 23:24:47 +0200Deide(~deide@user/deide)
2023-06-03 23:25:01 +0200vandita(~vandit@178-164-188-116.pool.digikabel.hu)
2023-06-03 23:25:38 +0200 <monochrom> This is why (State, State's pure, State's >>=) ≠ (ReaderT Writer, ReaderT Writer's pure, ReaderT Writer's >>=), as I said.
2023-06-03 23:26:03 +0200ManofLetters[m](~manoflett@2001:470:69fc:105::3be)
2023-06-03 23:26:42 +0200 <ncf> why did you bring that up?
2023-06-03 23:26:48 +0200romes[m](~romesmatr@2001:470:69fc:105::2:1660)
2023-06-03 23:26:48 +0200alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba)
2023-06-03 23:26:48 +0200elevenkb(~elevenkb@2001:470:69fc:105::2:cb89)
2023-06-03 23:27:11 +0200 <monochrom> I think you were discussing that?
2023-06-03 23:27:20 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 23:27:35 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8)
2023-06-03 23:27:36 +0200maerwald[m](~maerwaldm@2001:470:69fc:105::1ee)
2023-06-03 23:27:36 +0200hsiktas[m](~hsiktasm]@2001:470:69fc:105::30d4)
2023-06-03 23:29:16 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-06-03 23:29:42 +0200 <ncf> i said state because i think that is what we want here, as opposed to reader-writer, but i'm a bit fuzzy about the whole thing
2023-06-03 23:29:43 +0200 <Profpatsch> does abstract algebra even have an “higher-kinded” things
2023-06-03 23:29:50 +0200 <Profpatsch> or is that squarely category theory
2023-06-03 23:30:06 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 23:30:59 +0200 <Profpatsch> Hm, I guess that’s up for debate
2023-06-03 23:31:17 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2023-06-03 23:31:37 +0200 <Profpatsch> The terminology turns extremely categor-y once you look at articles like https://en.wikipedia.org/wiki/Semigroupoid
2023-06-03 23:36:08 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 23:36:22 +0200geekosaur[m](~geekosaur@xmonad/geekosaur)
2023-06-03 23:37:08 +0200somerandomnick[m(~somerando@2001:470:69fc:105::3:4f2e)
2023-06-03 23:40:00 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 23:41:55 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) (Remote host closed the connection)
2023-06-03 23:42:18 +0200reach(~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b)
2023-06-03 23:42:37 +0200ddellacosta(~ddellacos@146.70.165.162) (Ping timeout: 240 seconds)
2023-06-03 23:43:33 +0200alexherbo2(~alexherbo@2a02-842a-8180-4601-39fb-294e-6171-ad18.rev.sfr.net) (Remote host closed the connection)
2023-06-03 23:43:49 +0200taupiqueur(~taupiqueu@2a02:842a:8180:4601:39fb:294e:6171:ad18) (Quit: WeeChat 3.8)
2023-06-03 23:51:29 +0200biberu(~biberu@user/biberu) (Read error: Connection reset by peer)
2023-06-03 23:51:44 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-06-03 23:55:23 +0200ec(~ec@gateway/tor-sasl/ec)
2023-06-03 23:55:27 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
2023-06-03 23:56:27 +0200biberu(~biberu@user/biberu)
2023-06-03 23:58:01 +0200acidjnk(~acidjnk@p200300d6e7072f454588bfb78dd6f620.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2023-06-03 23:58:29 +0200acidjnk(~acidjnk@p200300d6e7072f45584b05120c40d8b9.dip0.t-ipconnect.de)