2025/12/01

2025-12-01 00:07:16 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 00:10:50 +0100Googulator91(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 00:10:50 +0100Googulator60(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 00:13:44 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 00:15:02 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 244 seconds)
2025-12-01 00:17:01 +0100ttybitnik(~ttybitnik@user/wolper) (Quit: Fading out...)
2025-12-01 00:25:17 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 00:27:17 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2025-12-01 00:29:34 +0100Tuplanolla(~Tuplanoll@91-152-225-194.elisa-laajakaista.fi) (Quit: Leaving.)
2025-12-01 00:29:35 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 00:30:40 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 272 seconds)
2025-12-01 00:32:31 +0100ChaiTRex(~ChaiTRex@user/chaitrex) ChaiTRex
2025-12-01 00:34:55 +0100peterbecich(~Thunderbi@172.222.148.214) (Ping timeout: 245 seconds)
2025-12-01 00:40:39 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 00:44:54 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-01 00:50:48 +0100img(~img@user/img) (Quit: ZNC 1.10.1 - https://znc.in)
2025-12-01 00:52:04 +0100img(~img@user/img) img
2025-12-01 00:52:07 +0100 <iqubic> Is it just me, or are people being slow to look at GitHub issues for the Emacs Haskell-Mode repo?
2025-12-01 00:52:15 +0100 <iqubic> https://github.com/haskell/haskell-mode/issues/1884
2025-12-01 00:56:03 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 00:57:00 +0100 <iqubic> Also, has the Haskell LSP changed how it classifies module names in imports? Something about my setup changed and I can't seem to figure out why. See the GH issue for more info.
2025-12-01 01:01:13 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-01 01:10:24 +0100Googulator91(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 01:10:35 +0100Googulator91(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 01:11:20 +0100 <haskellbridge> <zoil> https://kf8nh.com/_heisenbridge/media/matrix.org/KqFuFIwAGSfriqoeASQNmzLj/Cb2ngaXEBrk/image.png
2025-12-01 01:11:25 +0100 <geekosaur> the easy way to test that is to downgrade to 2.11.0.0 and aee if it changes
2025-12-01 01:11:47 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 01:11:50 +0100 <haskellbridge> <zoil> help! it rejects the instance if it is recursive
2025-12-01 01:11:54 +0100 <haskellbridge> <zoil> it demands it as a constraint
2025-12-01 01:12:06 +0100 <iqubic> How do I tell Nix to downgrade my Haskell Language Server?
2025-12-01 01:12:41 +0100 <haskellbridge> <zoil> can everyone see the image or should i upload a paste?
2025-12-01 01:13:51 +0100 <iqubic> No. No one on the IRC can see your image.
2025-12-01 01:13:56 +0100 <haskellbridge> <zoil> derp
2025-12-01 01:14:03 +0100 <iqubic> Or actually, yes we can.
2025-12-01 01:14:07 +0100 <geekosaur> we get the image (as a link on the IRC side), but a paste is usually better especially if it's to a pastebin where someone can fork it and show you a modified version to test or etc.
2025-12-01 01:14:07 +0100 <iqubic> I'm dumb.
2025-12-01 01:14:20 +0100 <iqubic> Yeah... It's an image of text.
2025-12-01 01:14:22 +0100 <geekosaur> we generally recommend https://paste.tomsmeding.com
2025-12-01 01:15:29 +0100 <geekosaur> or download it and try things locally
2025-12-01 01:16:07 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 01:16:35 +0100mreh(~matthew@host86-146-25-125.range86-146.btcentralplus.com) (Ping timeout: 245 seconds)
2025-12-01 01:17:14 +0100 <EvanR> this is like someone taking a phone picture of an image of text someone posted
2025-12-01 01:18:05 +0100 <EvanR> who let these hairless apes on the internet
2025-12-01 01:19:53 +0100 <haskellbridge> <zoil> https://paste.tomsmeding.com/prZTHuAw\
2025-12-01 01:20:35 +0100 <haskellbridge> <zoil> well, the image combines both the error and the sourcecode neatly...
2025-12-01 01:21:44 +0100 <geekosaur> both the pastebin I suggested and gist (and some others) let you include multiple "files"/pastes
2025-12-01 01:22:31 +0100 <jackdk> The pastebin makes it easier for people to noodle around with the code if they have to, run their screenreader over it (if required), copy it into their editor (where they have proper syntax highlighting) etc. It's just so much easier to work with than the screenshot tool, though I appreciate the effort in slicing out the relevant parts of the error and the source.
2025-12-01 01:22:59 +0100 <haskellbridge> <zoil> ok
2025-12-01 01:23:13 +0100 <haskellbridge> <zoil> well the paste isnt going to compile, but its readable
2025-12-01 01:24:00 +0100 <haskellbridge> <zoil> tldr: if you define an instance recursively it isnt "exhaustive" in some sense, and it asks for the constraint to be supplied and the deriving statement doesnt work
2025-12-01 01:24:25 +0100 <haskellbridge> <zoil> it needs the standalone deriving statement so there is a place to put the constraint. but then this constraint appears everywhere
2025-12-01 01:24:37 +0100 <haskellbridge> <zoil> iv run into this a bunch of times when having to write recursive instances
2025-12-01 01:24:48 +0100 <haskellbridge> <zoil> like, FromNat n appears everywhere
2025-12-01 01:24:53 +0100 <haskellbridge> <zoil> or like, Length xs
2025-12-01 01:26:12 +0100 <haskellbridge> <zoil> i need to assert to the compiler "this instance is complete!"
2025-12-01 01:27:25 +0100 <haskellbridge> <zoil> idk some kind of "exhaustiveness checks for matching cases of sum datatypes in instance declarations" proposal or smt
2025-12-01 01:28:20 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 01:28:31 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2025-12-01 01:28:56 +0100ChaiTRex(~ChaiTRex@user/chaitrex) ChaiTRex
2025-12-01 01:30:02 +0100 <haskellbridge> <zoil> but to do so, this is the placement of the constraint! i mean, thats literally how to convey that the instance is required to exist. i just dont know how to assert that it _does_ exist. which is normally automatic, but this exhaustiveness business seems to induce
2025-12-01 01:30:41 +0100 <haskellbridge> <zoil> any ideas?
2025-12-01 01:31:05 +0100 <monochrom> "It wouldn't compile anyway" is not a good reason to post a screenshot instead of actually downloading editable code.
2025-12-01 01:31:29 +0100 <monochrom> Because, with luck, someone could have made an easy change and make it compilable.
2025-12-01 01:31:57 +0100 <haskellbridge> <zoil> im not sure what your asking of me?
2025-12-01 01:32:52 +0100 <haskellbridge> <zoil> im kind of in the middle of something, otherwise id happily write up a least sufficient example
2025-12-01 01:32:57 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-01 01:33:21 +0100 <haskellbridge> <zoil> i figured people would be able to read the paste or image and that would suffice, i dont have time to make a full proposal
2025-12-01 01:33:28 +0100 <haskellbridge> <zoil> is it a known issue?
2025-12-01 01:33:41 +0100 <haskellbridge> <zoil> im sure people have encountered this before...
2025-12-01 01:34:22 +0100 <jreicher> hololeap: Maybe https://en.wikipedia.org/wiki/Witness_(mathematics) will interest you?
2025-12-01 01:35:49 +0100 <haskellbridge> <zoil> you would have to say exactly in what way
2025-12-01 01:36:04 +0100 <haskellbridge> <zoil> i cant see from skimming how its relavent
2025-12-01 01:36:22 +0100 <haskellbridge> <zoil> there is an Exists symbol and my eyes kind of bounce off it...
2025-12-01 01:36:31 +0100X-Scale(~ARM@6.67.114.89.rev.vodafone.pt) (Ping timeout: 240 seconds)
2025-12-01 01:36:40 +0100 <haskellbridge> <zoil> we had all kinds of discussions back in the day about existential quantification
2025-12-01 01:36:49 +0100 <haskellbridge> <iqubic (she/her)> Well, if someone wants to take your code and try it out on their own and make changes to it, their first step would be "type it all out in their own text editor". However, the code already exists on your computer, so you can share the textual version on https://paste.tomsmeding.com easily by copy and paste. Then all we'd have to do is copy and paste it into our text editor and then we could easily make changes to it.
2025-12-01 01:36:54 +0100 <haskellbridge> <zoil> theres even an extension no?
2025-12-01 01:37:25 +0100 <iqubic> Also, yes, I do have this channel open in two different forms. Emacs and Firefox.
2025-12-01 01:37:27 +0100 <haskellbridge> <zoil> iqubic: again, im not sure what your asking. iv stated i dont have the wherewithall to write up a proposal
2025-12-01 01:37:29 +0100 <EvanR> you're all spoiled now a days. We should return to a time when men were men and copied code char by char out of a magazine
2025-12-01 01:37:54 +0100 <haskellbridge> <zoil> im sure the image and paste are sufficient, im not sure whats the problem.
2025-12-01 01:38:06 +0100 <glguy> zoil: You can just merge the two instances into one, can't you?
2025-12-01 01:38:18 +0100 <monochrom> True, I was one of those readers of those magazines, and typed in the code myself.
2025-12-01 01:38:25 +0100 <haskellbridge> <zoil> glguy: i think not
2025-12-01 01:38:28 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2025-12-01 01:38:37 +0100 <haskellbridge> <zoil> it requires both to match
2025-12-01 01:38:41 +0100 <glguy> zoil: then that's why the compiler can't do it fo ryou
2025-12-01 01:39:06 +0100 <haskellbridge> <zoil> but i want to say to it "i have done the exhaustiveness check, its all there, dont worry"
2025-12-01 01:39:14 +0100 <glguy> that won't help it know which one to use
2025-12-01 01:39:15 +0100 <monochrom> The magazine publisher also offered to sell floppy diskettes containing the code. I was able to buy some of that when I had some petty cash.
2025-12-01 01:39:20 +0100 <iqubic> The compiler is not smart. It just does simple rewriting and instance creation.
2025-12-01 01:39:34 +0100 <EvanR> monochrom, smh... you BOUGHT the code? smh
2025-12-01 01:39:42 +0100 <iqubic> If you can't tell which instance to choose, then how the heck do you expect the compiler to do it for you?
2025-12-01 01:39:48 +0100 <monochrom> copies! just copies.
2025-12-01 01:39:58 +0100 <EvanR> that's like buying food
2025-12-01 01:40:18 +0100 <monochrom> It was also the latter days when those programs became very long.
2025-12-01 01:40:18 +0100 <haskellbridge> <zoil> wait wait, im trying to seperate the people talking about floppy disks from the people staying ontopic, i think it might be a mod, im not sure.
2025-12-01 01:40:26 +0100 <haskellbridge> <zoil> THANKS!
2025-12-01 01:40:38 +0100 <EvanR> yes I had this flight simulator program which was several pages
2025-12-01 01:40:43 +0100 <EvanR> cool program
2025-12-01 01:40:46 +0100 <haskellbridge> <zoil> _facepalm_
2025-12-01 01:40:47 +0100 <glguy> zoil: you can probably combine the Show case just fine, it's the Read one that you'll struggle with
2025-12-01 01:41:00 +0100 <haskellbridge> <zoil> how so?
2025-12-01 01:41:20 +0100 <haskellbridge> <zoil> it needs to diferentiate between if its the basecase (S Z) or the recursive case (S (S n))
2025-12-01 01:41:28 +0100 <glguy> because show gets an argument that let's it learn what the type is
2025-12-01 01:41:37 +0100 <haskellbridge> <zoil> (im going to start counting from one for nonempty containers in future versions...)
2025-12-01 01:42:08 +0100 <haskellbridge> <zoil> it throws an error for both the read and show case
2025-12-01 01:42:39 +0100 <haskellbridge> <zoil> also, the type ambiguity doesnt inhibit the read instance
2025-12-01 01:43:35 +0100 <haskellbridge> <zoil> i would think basically, that if i gave it a newtype, that this would serve as such an assertion
2025-12-01 01:43:42 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 01:43:46 +0100 <haskellbridge> <zoil> but it just looks underneath and still demands the underlying constraint
2025-12-01 01:44:08 +0100 <Leary> zoil: This kind of exhaustiveness doesn't exist at the type level in GHC for the same reason we don't have "eta-rules" <https://gitlab.haskell.org/ghc/ghc/-/issues/7259>; it isn't sound. You want to say that `xs :: NonEmpty _` implies `xs ~ Cons _ _` or `Last _`, but that isn't true until you successfully pattern match on `Transfers xs`.
2025-12-01 01:44:53 +0100 <haskellbridge> <zoil> thanks! i thought it would be a known issue
2025-12-01 01:45:44 +0100 <Leary> There is a kind-of workaround for `Read`-like cases by taking a singleton as a constraint and matching on it, but then you have to supply that singleton constraint everywhere instead.
2025-12-01 01:46:11 +0100 <glguy> zoil: merging Show would be like: https://paste.tomsmeding.com/UEfrQUiN
2025-12-01 01:47:07 +0100 <haskellbridge> <zoil> oh wow! thats awesome, i never thought thats what you meant when you said it could go in one instance
2025-12-01 01:47:14 +0100 <haskellbridge> <zoil> so you just put a type family for the constraint
2025-12-01 01:47:15 +0100 <haskellbridge> <zoil> thats cool
2025-12-01 01:47:23 +0100 <haskellbridge> <zoil> and your saying thats not possible for the readd instance?
2025-12-01 01:47:34 +0100 <glguy> right
2025-12-01 01:47:58 +0100 <haskellbridge> <zoil> forgive me, i dont imidiately see the difference
2025-12-01 01:48:06 +0100 <glguy> One has a https://en.wikipedia.org/wiki/Witness_(mathematics)
2025-12-01 01:48:15 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 01:48:25 +0100 <glguy> the argument to show witnesses what type show is being instantiated at
2025-12-01 01:48:32 +0100 <haskellbridge> <zoil> but i can supply a type application?
2025-12-01 01:48:48 +0100 <glguy> No, that's not enough
2025-12-01 01:48:57 +0100 <haskellbridge> <zoil> read @(Cons Int (Last Bool))
2025-12-01 01:49:16 +0100 <glguy> That that's not usable information in the implementation of read itself on this type
2025-12-01 01:49:26 +0100 <haskellbridge> <zoil> * @(HList (Cons
2025-12-01 01:49:54 +0100 <glguy> the argument to show is a value that's going to exist at runtime
2025-12-01 01:50:33 +0100 <haskellbridge> <zoil> well i could provide a proxy...
2025-12-01 01:51:12 +0100 <haskellbridge> <zoil> btw, does your show instance pick up the requirement for the constraint to be specified each time, like if it was recursive in different classes?
2025-12-01 01:51:18 +0100 <haskellbridge> <zoil> because of the type family?
2025-12-01 01:51:27 +0100 <glguy> You couldn't but that won't help if it's as simple as a Data.Proxy.Proxy (which contains no type information at runtime)
2025-12-01 01:51:29 +0100 <haskellbridge> <zoil> or does it just work the way id like it too! :_D
2025-12-01 01:51:47 +0100 <haskellbridge> <zoil> no type information at runtime! oh no!
2025-12-01 01:51:56 +0100 <glguy> You'd have to make a new GADTs so that at runtime you can learn which type is needed via case
2025-12-01 01:52:00 +0100 <haskellbridge> <zoil> that sounds like the kind of thing the compiler is fussy about
2025-12-01 01:52:08 +0100 <Leary> zoil: You would need e.g. `data WhichNE xs where { IsCons :: WhichNE (Cons x xs); IsLast :: WhichNE (Last x) }; class KnownNE ne where { knownNE :: WhichNE ne }; <both instances>; instance KnownNE xs => Read (Transfers xs) where { read s = case knownNE of { ... } }`.
2025-12-01 01:52:21 +0100 <glguy> It's not that it's fussy; it's just that it if the information has been erased, you can't use it
2025-12-01 01:52:35 +0100 <haskellbridge> <zoil> glguy: I could do that! i just dont want constraints all over the place from recusrive classes that cant be asserted to be exhaustive
2025-12-01 01:53:03 +0100 <haskellbridge> <zoil> i dont see why it would erase type information from a proxy, thats all they are for! crazy compiler
2025-12-01 01:53:07 +0100 <glguy> read doesn't have a place to put the runtime type witness, it's type is fixed by the type class definition
2025-12-01 01:53:19 +0100 <glguy> proxies are not for runtime type information
2025-12-01 01:53:41 +0100 <glguy> singletons are
2025-12-01 01:54:47 +0100 <haskellbridge> <zoil> thats what learys answer looks like its managing to acheive
2025-12-01 01:54:48 +0100glguyponders if that's exactly right, but anyway, the way to get type information from a value is using a GADT
2025-12-01 01:55:33 +0100 <haskellbridge> <zoil> i mean, this is all super interesting, and i think it might even work, but im hardly going to be able to do it
2025-12-01 01:55:43 +0100 <glguy> yeah, it's better to just not overcomplicate your program
2025-12-01 01:55:46 +0100 <haskellbridge> <zoil> but, iiuc your saying its theoretically possivle
2025-12-01 01:55:51 +0100 <haskellbridge> <zoil> possible*
2025-12-01 01:56:07 +0100 <haskellbridge> <zoil> id rather do it right at the onset, than have these constraints following me around
2025-12-01 01:56:28 +0100 <glguy> this route leads to brittle programs that are hard to update and refactor
2025-12-01 01:56:37 +0100 <haskellbridge> <zoil> basically, anything that requires more than one instance, like some kind of recusion matching on the tail or something, and then im in constraints hell
2025-12-01 01:56:49 +0100 <glguy> and a mess of complicated error messages and special utility functions to manage it all
2025-12-01 01:57:15 +0100 <haskellbridge> <zoil> https://kf8nh.com/_heisenbridge/media/matrix.org/hTIHFOzGuFAqswyfkLuIVoBL/yfXyRcmB1_8/image.png
2025-12-01 01:57:50 +0100 <haskellbridge> <zoil> id rather just be able to read off constraints that arent insane
2025-12-01 01:58:04 +0100 <haskellbridge> <zoil> like, the stateful constraints make sense, but the length constraint is just garbage
2025-12-01 01:59:16 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 02:00:32 +0100 <haskellbridge> <zoil> maybe it would be worth trying the length version, thats really common
2025-12-01 02:01:00 +0100X-Scale(~ARM@6.67.114.89.rev.vodafone.pt) X-Scale
2025-12-01 02:01:12 +0100peterbecich(~Thunderbi@172.222.148.214) peterbecich
2025-12-01 02:01:31 +0100 <haskellbridge> <zoil> https://paste.tomsmeding.com/gHFMMx2t
2025-12-01 02:03:32 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-01 02:04:44 +0100 <haskellbridge> <zoil> i have to go actually
2025-12-01 02:05:00 +0100 <haskellbridge> <zoil> so anyway, possibly singlestons help but in a way that ill probably never understand
2025-12-01 02:05:04 +0100 <haskellbridge> <zoil> _le sigh_
2025-12-01 02:10:27 +0100 <haskellbridge> <zoil> monochrom: you cat get back to talking about the 1950's now
2025-12-01 02:11:53 +0100trickard(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 02:12:07 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 02:12:47 +0100ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2025-12-01 02:14:39 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 02:16:56 +0100sindu(~sindu@2.148.32.207.tmi.telenormobil.no) (Ping timeout: 240 seconds)
2025-12-01 02:18:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 02:18:57 +0100Pozyomka(~pyon@user/pyon) (Quit: brb)
2025-12-01 02:19:10 +0100Pozyomka(~pyon@user/pyon) pyon
2025-12-01 02:19:10 +0100 <EvanR> lol
2025-12-01 02:19:49 +0100 <EvanR> the 1950s when you had like cathode ray tubes and such
2025-12-01 02:22:08 +0100omidmash3(~omidmash@user/omidmash) omidmash
2025-12-01 02:24:12 +0100omidmash(~omidmash@user/omidmash) (Ping timeout: 244 seconds)
2025-12-01 02:24:12 +0100omidmash3omidmash
2025-12-01 02:30:01 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 02:30:30 +0100jmcantrell_(~weechat@user/jmcantrell) jmcantrell
2025-12-01 02:34:26 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-01 02:35:44 +0100 <geekosaur> some of us were still using them in the early 2000s
2025-12-01 02:35:55 +0100 <geekosaur> degaussing my monitor every month was fun
2025-12-01 02:41:59 +0100 <monochrom> The most bonkers was when CRT was memory rather than display. >:)
2025-12-01 02:43:03 +0100 <haskellbridge> <iqubic (she/her)> WHAT?!?!?!
2025-12-01 02:43:30 +0100 <glguy> HE SAID: "THE MOST BONKERS WAS WHEN...
2025-12-01 02:43:30 +0100 <monochrom> (In general, any output device combined with a sensor could be memory: To store 1, output 1 and have the sensor read back that 1, repeat.)
2025-12-01 02:43:59 +0100 <monochrom> (The two popular choices were mercury tube and CRT.)
2025-12-01 02:45:08 +0100 <monochrom> (More precisely, there must also be a non-zero time delay between sending output and reading back input. Today, you use logic gates to make flip flops, same difference.)
2025-12-01 02:45:24 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 02:50:25 +0100jmcantrell_(~weechat@user/jmcantrell) (Ping timeout: 264 seconds)
2025-12-01 02:51:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 02:52:03 +0100 <monochrom> I hadn't thought of it that way until I read both a Turing biography (so there was his team using CRTs and mercury tubes for early computers) and Harper's PFPL in which he pointed out "state comes from self-reference" and exemplified with using recursion to make an RS latch.
2025-12-01 02:53:45 +0100Pozyomka(~pyon@user/pyon) (Read error: Connection reset by peer)
2025-12-01 02:54:18 +0100Guest62(~Guest62@38.49.92.193)
2025-12-01 02:55:01 +0100 <Guest62> I'm profiling my haskell functions (pitting them against each other to compare their memory usages). Could someone help me understand how profiling works? I have basically never done this before.
2025-12-01 02:55:44 +0100 <glguy> Have you seen this already? https://ghc.gitlab.haskell.org/ghc/doc/users_guide/profiling.html
2025-12-01 02:58:01 +0100cattiesCatty
2025-12-01 02:58:11 +0100 <Guest62> uh yes. I think I need heap profiling. I think my primary question is "Does the total memory allocated section count reuse of memory as a separate additional allocation?" and how to not make it do that if it does.
2025-12-01 02:58:45 +0100 <jreicher> monochrom: delay line memory was always my favourite.
2025-12-01 02:58:55 +0100peterbecich(~Thunderbi@172.222.148.214) (Ping timeout: 240 seconds)
2025-12-01 02:59:00 +0100iqubic(~sophia@2601:602:9203:1660:c137:59bd:3f5b:b4a7) (Remote host closed the connection)
2025-12-01 03:00:45 +0100 <monochrom> I mean, I worked like that when I was a child, too. Whenever required to memorize a story or a poem, I read aloud and listened to myself, repeat.
2025-12-01 03:01:11 +0100iqubic(~sophia@2601:602:9203:1660:c137:59bd:3f5b:b4a7) iqubic
2025-12-01 03:01:13 +0100 <EvanR> this would be like, read the poem aloud really loud in the grand canyon, then wait
2025-12-01 03:01:22 +0100monochromis an echo relay memory and a large language model.
2025-12-01 03:01:33 +0100 <jreicher> DRAM's pretty crazy too actually. As funky as flip-flops are, they are probably the most straightforward of all the techs.
2025-12-01 03:01:47 +0100wickedjargon(~user@64.114.24.74)
2025-12-01 03:02:03 +0100wickedjargon(~user@64.114.24.74) (Remote host closed the connection)
2025-12-01 03:03:26 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 03:08:24 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-01 03:18:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 03:21:07 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Remote host closed the connection)
2025-12-01 03:21:46 +0100 <Guest62> okay, I was able to learn heap profiling, but my graphs seem empty....
2025-12-01 03:22:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 03:24:55 +0100 <EvanR> what is the program
2025-12-01 03:25:35 +0100haskellbridge(~hackager@96.28.224.214) (Ping timeout: 240 seconds)
2025-12-01 03:25:57 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-12-01 03:26:33 +0100haskellbridge(~hackager@96.28.224.214) hackager
2025-12-01 03:26:33 +0100ChanServ+v haskellbridge
2025-12-01 03:27:28 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Excess Flood)
2025-12-01 03:27:41 +0100jrm(~jrm@user/jrm) (Read error: Connection reset by peer)
2025-12-01 03:27:55 +0100jrm(~jrm@user/jrm) jrm
2025-12-01 03:28:10 +0100firesquidwao(~a@2600:3c06::f03c:93ff:fea6:ef0e)
2025-12-01 03:28:40 +0100Pozyomka(~pyon@user/pyon) pyon
2025-12-01 03:28:48 +0100tuxpaint(~a@put.gay) (Read error: Connection reset by peer)
2025-12-01 03:31:54 +0100Googulator91Googulator
2025-12-01 03:32:01 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-12-01 03:34:12 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 03:38:35 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 03:41:57 +0100 <Guest62> It is essentially comparing an equation solver using ST Monad to one without
2025-12-01 03:49:34 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 03:52:55 +0100peterbecich(~Thunderbi@172.222.148.214) peterbecich
2025-12-01 03:53:25 +0100inline__(~inlinE@2001-4dd3-7fc8-0-8721-eee6-e05a-14dd.ipv6dyn.netcologne.de) Inline
2025-12-01 03:54:29 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-01 03:55:39 +0100Inline(~inlinE@2001-4dd7-868d-0-2e24-c46e-4393-27fd.ipv6dyn.netcologne.de) (Ping timeout: 244 seconds)
2025-12-01 03:55:50 +0100 <Guest62> Okay I now have data but I still can't make sense of this data :(
2025-12-01 04:00:38 +0100Googulator(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 04:00:51 +0100Googulator(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 04:01:43 +0100Guest62(~Guest62@38.49.92.193) (Quit: Client closed)
2025-12-01 04:04:41 +0100chiselfuse(~chiselfus@user/chiselfuse) (Remote host closed the connection)
2025-12-01 04:05:04 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 04:05:20 +0100chiselfuse(~chiselfus@user/chiselfuse) chiselfuse
2025-12-01 04:09:19 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 04:21:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 04:24:15 +0100trickard_trickard
2025-12-01 04:26:39 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-01 04:31:06 +0100td_(~td@i5387091E.versanet.de) (Ping timeout: 256 seconds)
2025-12-01 04:31:07 +0100Googulator26(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 04:31:27 +0100Googulator(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 04:32:55 +0100td_(~td@i53870926.versanet.de) td_
2025-12-01 04:34:18 +0100Sgeo_(~Sgeo@user/sgeo) Sgeo
2025-12-01 04:36:01 +0100shr\ke(~shrike@user/shrke:31298) (Ping timeout: 264 seconds)
2025-12-01 04:36:01 +0100oppili(~oppili@user/nerdypepper) (Ping timeout: 264 seconds)
2025-12-01 04:36:15 +0100srk_(~sorki@user/srk) srk
2025-12-01 04:36:23 +0100dysfigured(~dfg@50.116.28.89)
2025-12-01 04:36:37 +0100nitrix_(~nitrix@user/meow/nitrix) nitrix
2025-12-01 04:36:37 +0100srk(~sorki@user/srk) (Ping timeout: 264 seconds)
2025-12-01 04:36:40 +0100sajith_(~sajith@user/sajith) sajith
2025-12-01 04:36:46 +0100natto17(~natto@129.154.243.159) natto
2025-12-01 04:36:47 +0100mstruebing_(~mstruebin@ns343649.ip-188-165-193.eu)
2025-12-01 04:37:01 +0100Googulator26Googulator
2025-12-01 04:37:09 +0100opencircuit(~quassel@user/opencircuit) (Read error: Connection reset by peer)
2025-12-01 04:37:11 +0100Athas_(athas@sigkill.dk)
2025-12-01 04:37:12 +0100oppili(~oppili@lewi-27-b2-v4wan-165682-cust505.vm4.cable.virginm.net)
2025-12-01 04:37:12 +0100oppili(~oppili@lewi-27-b2-v4wan-165682-cust505.vm4.cable.virginm.net) (Changing host)
2025-12-01 04:37:12 +0100oppili(~oppili@user/nerdypepper) nerdy
2025-12-01 04:37:13 +0100simplystuart(~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 264 seconds)
2025-12-01 04:37:13 +0100tomboy64(~tomboy64@user/tomboy64) (Ping timeout: 264 seconds)
2025-12-01 04:37:13 +0100machinedgod(~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 264 seconds)
2025-12-01 04:37:13 +0100nitrix(~nitrix@user/meow/nitrix) (Ping timeout: 264 seconds)
2025-12-01 04:37:13 +0100Miroboru(~myrvoll@84.215.250.50) (Ping timeout: 264 seconds)
2025-12-01 04:37:13 +0100natto-(~natto@129.154.243.159) (Ping timeout: 264 seconds)
2025-12-01 04:37:14 +0100juri_(~juri@implicitcad.org) (Ping timeout: 264 seconds)
2025-12-01 04:37:14 +0100sajith(~sajith@user/sajith) (Ping timeout: 264 seconds)
2025-12-01 04:37:14 +0100dfg(~dfg@user/dfg) (Ping timeout: 264 seconds)
2025-12-01 04:37:14 +0100antti_(~antti@82-181-183-83.bb.dnainternet.fi) (Ping timeout: 264 seconds)
2025-12-01 04:37:23 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 04:37:24 +0100cstml3(~cstml@user/cstml) cstml
2025-12-01 04:37:37 +0100simplystuart(~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
2025-12-01 04:37:39 +0100benkard(~mulk@pd9514972.dip0.t-ipconnect.de) mulk
2025-12-01 04:37:46 +0100shr\ke(~shrike@user/paxhumana) paxhumana
2025-12-01 04:37:46 +0100shr\ke(~shrike@user/paxhumana) (Changing host)
2025-12-01 04:37:46 +0100shr\ke(~shrike@user/shrke:31298) shr\ke
2025-12-01 04:37:49 +0100Sgeo(~Sgeo@user/sgeo) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100cstml(~cstml@user/cstml) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100mulk(~mulk@pd9514972.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100typedfern_(~Typedfern@15.red-83-37-26.dynamicip.rima-tde.net) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100Ranhir(~Ranhir@157.97.53.139) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100tessier_(~tessier@184.72.149.67) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100Wanderer(~wanderer@user/wanderer) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100mstruebing(~mstruebin@ns343649.ip-188-165-193.eu) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100Athas(athas@sigkill.dk) (Ping timeout: 264 seconds)
2025-12-01 04:37:49 +0100benkardmulk
2025-12-01 04:38:03 +0100opencircuit(~quassel@user/opencircuit) opencircuit
2025-12-01 04:38:23 +0100nitrix_nitrix
2025-12-01 04:38:30 +0100Wanderer(~wanderer@user/wanderer) Wanderer
2025-12-01 04:38:39 +0100juri_(~juri@implicitcad.org) juri_
2025-12-01 04:38:45 +0100machinedgod(~machinedg@d75-159-126-101.abhsia.telus.net) machinedgod
2025-12-01 04:38:54 +0100antti_(~antti@82-181-183-83.bb.dnainternet.fi)
2025-12-01 04:39:02 +0100Miroboru(~myrvoll@84.215.250.50) Miroboru
2025-12-01 04:39:02 +0100srk_srk
2025-12-01 04:39:24 +0100tessier(~tessier@ec2-184-72-149-67.compute-1.amazonaws.com) tessier
2025-12-01 04:41:35 +0100 <iqubic> Is it possible to dynamically see what type of token HLS thinks different things in my code are?
2025-12-01 04:41:51 +0100oppili-(~oppili@lewi-27-b2-v4wan-165682-cust505.vm4.cable.virginm.net)
2025-12-01 04:41:52 +0100benkard(~mulk@pd9514972.dip0.t-ipconnect.de) mulk
2025-12-01 04:42:01 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2025-12-01 04:42:01 +0100oppili(~oppili@user/nerdypepper) (Ping timeout: 264 seconds)
2025-12-01 04:42:01 +0100natto17(~natto@129.154.243.159) (Ping timeout: 264 seconds)
2025-12-01 04:42:37 +0100opencircuit(~quassel@user/opencircuit) (Ping timeout: 264 seconds)
2025-12-01 04:42:37 +0100mulk(~mulk@pd9514972.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2025-12-01 04:42:37 +0100benkardmulk
2025-12-01 04:42:45 +0100opencircuit_(~quassel@user/opencircuit) opencircuit
2025-12-01 04:43:51 +0100natto17(~natto@129.154.243.159) natto
2025-12-01 04:44:25 +0100Miroboru(~myrvoll@84.215.250.50) (Ping timeout: 264 seconds)
2025-12-01 04:45:01 +0100antti_(~antti@82-181-183-83.bb.dnainternet.fi) (Ping timeout: 264 seconds)
2025-12-01 04:45:01 +0100juri_(~juri@implicitcad.org) (Ping timeout: 264 seconds)
2025-12-01 04:45:17 +0100Miroboru(~myrvoll@84.215.250.50) Miroboru
2025-12-01 04:45:33 +0100juri_(~juri@implicitcad.org) juri_
2025-12-01 04:46:32 +0100antti_(~antti@82-181-183-83.bb.dnainternet.fi)
2025-12-01 04:47:54 +0100natto-(~natto@129.154.243.159) natto
2025-12-01 04:48:37 +0100natto17(~natto@129.154.243.159) (Ping timeout: 264 seconds)
2025-12-01 04:50:29 +0100tomboy64(~tomboy64@user/tomboy64) tomboy64
2025-12-01 04:50:35 +0100Ranhir(~Ranhir@157.97.53.139) Ranhir
2025-12-01 04:50:36 +0100typedfern_(~Typedfern@15.red-83-37-26.dynamicip.rima-tde.net) typedfern
2025-12-01 04:51:37 +0100antti_(~antti@82-181-183-83.bb.dnainternet.fi) (Ping timeout: 264 seconds)
2025-12-01 04:51:37 +0100juri_(~juri@implicitcad.org) (Ping timeout: 264 seconds)
2025-12-01 04:52:08 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 04:52:28 +0100juri_(~juri@implicitcad.org) juri_
2025-12-01 04:53:10 +0100antti_(~antti@82-181-183-83.bb.dnainternet.fi)
2025-12-01 04:56:37 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
2025-12-01 04:57:15 +0100 <geekosaur> probably if you run it in debug mode and monitor its debug output
2025-12-01 04:58:44 +0100Sgeo_(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2025-12-01 05:00:39 +0100Googulator31(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 05:00:43 +0100Googulator(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 05:07:37 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 05:08:35 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-01 05:12:01 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-01 05:19:30 +0100Sgeo(~Sgeo@user/sgeo) Sgeo
2025-12-01 05:20:14 +0100Square(~Square@user/square) Square
2025-12-01 05:23:00 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 05:28:15 +0100peterbecich(~Thunderbi@172.222.148.214) (Ping timeout: 240 seconds)
2025-12-01 05:30:08 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-01 05:35:40 +0100Googulator31(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 05:35:45 +0100Googulator39(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 05:41:04 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 05:45:45 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-12-01 05:53:35 +0100machinedgod(~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 240 seconds)
2025-12-01 05:55:17 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 05:59:39 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-12-01 06:05:43 +0100Googulator77(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 06:05:45 +0100Googulator39(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 06:06:23 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 06:10:12 +0100peterbecich(~Thunderbi@172.222.148.214) peterbecich
2025-12-01 06:10:31 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 06:21:45 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 06:24:29 +0100trickard(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 06:24:43 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 06:26:03 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-12-01 06:30:56 +0100X-Scale(~ARM@6.67.114.89.rev.vodafone.pt) (Ping timeout: 240 seconds)
2025-12-01 06:35:37 +0100Googulator94(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 06:35:43 +0100Googulator77(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 06:37:07 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 06:41:24 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-01 06:43:54 +0100Square2(~Square4@user/square) Square
2025-12-01 06:52:30 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 06:57:08 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-12-01 07:00:33 +0100Square(~Square@user/square) (Ping timeout: 260 seconds)
2025-12-01 07:04:21 +0100jreicher(~user@user/jreicher) (Quit: In transit)
2025-12-01 07:05:43 +0100haritz(~hrtz@user/haritz) (Remote host closed the connection)
2025-12-01 07:06:27 +0100takuan(~takuan@d8D86B9E9.access.telenet.be)
2025-12-01 07:07:54 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 07:12:48 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-12-01 07:15:19 +0100larsivi(~larsivi@user/larsivi) (Ping timeout: 264 seconds)
2025-12-01 07:23:26 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 07:28:00 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-01 07:31:14 +0100dhil(~dhil@5.151.29.137) dhil
2025-12-01 07:32:16 +0100driib3180(~driib@vmi931078.contaboserver.net) (Ping timeout: 246 seconds)
2025-12-01 08:03:33 +0100peterbecich(~Thunderbi@172.222.148.214) (Ping timeout: 244 seconds)
2025-12-01 08:07:15 +0100tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2025-12-01 08:07:22 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 08:11:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-12-01 08:12:46 +0100jreicher(~user@user/jreicher) jreicher
2025-12-01 08:21:16 +0100annamalai(~annamalai@2409:4042:4dc7:b66e::9eca:ef08) (Ping timeout: 246 seconds)
2025-12-01 08:21:18 +0100bggd(~bgg@2a01:e0a:fd5:f510:9b09:80f:2f26:e3ad)
2025-12-01 08:22:46 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 08:27:44 +0100annamalai(~annamalai@2409:4042:4dc2:f11::9e8a:e814) annamalai
2025-12-01 08:28:57 +0100sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-12-01 08:29:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-01 08:32:03 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
2025-12-01 08:34:20 +0100Athas_Athas
2025-12-01 08:40:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 08:40:59 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 08:41:13 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 08:44:10 +0100chele(~chele@user/chele) chele
2025-12-01 08:45:34 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-12-01 08:46:51 +0100lucabtz(~lucabtz@user/lucabtz) lucabtz
2025-12-01 08:51:14 +0100 <lucabtz> hello, in https://hackage-content.haskell.org/package/adjunctions-4.4.3/docs/Data-Functor-Adjunction.html shouldn't it be saying "Any implementation is required to ensure that leftAdjunct and rightAdjunct witness an isomorphism from Hom(f a, b) to Hom(a, g b)" (replacing Nat with Hom)?
2025-12-01 08:56:06 +0100absence(torgeihe@hildring.pvv.ntnu.no)
2025-12-01 08:56:18 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 09:00:32 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2025-12-01 09:01:03 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 09:01:16 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 09:09:07 +0100chiselfuse(~chiselfus@user/chiselfuse) (Remote host closed the connection)
2025-12-01 09:09:41 +0100chiselfuse(~chiselfus@user/chiselfuse) chiselfuse
2025-12-01 09:13:42 +0100Googulator20(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 09:13:50 +0100Googulator94(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 09:18:07 +0100kuribas(~user@2a02-1810-2825-6000-91ce-6f5d-5219-16e3.ip6.access.telenet.be) kuribas
2025-12-01 09:24:31 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-01 09:30:37 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2025-12-01 09:30:37 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2025-12-01 09:34:57 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 250 seconds)
2025-12-01 09:44:54 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
2025-12-01 09:51:45 +0100emmanuelux(~emmanuelu@user/emmanuelux) (Remote host closed the connection)
2025-12-01 09:51:49 +0100 <lucabtz> also ive been having this issue with the haskell language server on windows + vscode https://paste.tomsmeding.com/WH7UrKNr
2025-12-01 09:52:03 +0100 <lucabtz> may ask also on #haskell-language-server if more appropriate
2025-12-01 09:52:55 +0100emmanuelux(~emmanuelu@user/emmanuelux) emmanuelux
2025-12-01 09:53:04 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Ping timeout: 272 seconds)
2025-12-01 09:54:44 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net)
2025-12-01 09:57:31 +0100sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-12-01 09:59:39 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 260 seconds)
2025-12-01 10:00:22 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 10:06:58 +0100emmanuelux(~emmanuelu@user/emmanuelux) (Remote host closed the connection)
2025-12-01 10:07:42 +0100vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 256 seconds)
2025-12-01 10:24:40 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 255 seconds)
2025-12-01 10:27:26 +0100mreh(~matthew@host86-146-25-125.range86-146.btcentralplus.com)
2025-12-01 10:27:50 +0100vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-12-01 10:30:13 +0100 <kuribas> Is there evidence that static functional typing leads to less defects and faster development time?
2025-12-01 10:30:53 +0100inline__Inline
2025-12-01 10:31:07 +0100 <kuribas> I believe I am twice as efficient in haskell as in python/clojure/whatever.
2025-12-01 10:31:11 +0100 <kuribas> But it's hard to convince others.
2025-12-01 10:32:55 +0100 <kuribas> And for some tasks there is less advantages, like low level programming, complicated algorithms, ...
2025-12-01 10:35:50 +0100Googulator47(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 10:35:50 +0100Googulator20(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 10:36:18 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 10:40:37 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 244 seconds)
2025-12-01 10:43:08 +0100 <lortabac> kuribas: that's very hard to determine in general
2025-12-01 10:43:55 +0100 <lortabac> for lots of tasks I'd probably be less efficient in Haskell due to a lack of libraries
2025-12-01 10:44:40 +0100 <lortabac> which of course isn't due to the programming paradigm but is still a factor
2025-12-01 10:44:55 +0100 <kuribas> Even worse in idris2.
2025-12-01 10:45:34 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 10:46:39 +0100 <kuribas> But for our usecases haskell would do just as well.
2025-12-01 10:46:46 +0100 <kuribas> Except maybe missing dataframe libraries.
2025-12-01 10:46:58 +0100 <lortabac> in order to get some evidence you may measure performance on a specific task
2025-12-01 10:47:31 +0100 <lortabac> but I think it would be very hard to get the full picture
2025-12-01 10:47:34 +0100 <Hecate> kuribas: I feel like we're having this discussion every year haha
2025-12-01 10:47:53 +0100 <lortabac> you need to take into account how the code evolves over time etc.
2025-12-01 10:48:53 +0100 <kuribas> Yeah, I did some database queries in python using pypika, which isn't typed, and I didn't have a lot of problems with it.
2025-12-01 10:49:12 +0100 <kuribas> But refactoring would be a pita, where it would be trivial in haskell.
2025-12-01 10:49:22 +0100 <kuribas> Changing to another schema.
2025-12-01 10:49:57 +0100michalz(~michalz@185.246.207.193)
2025-12-01 10:50:35 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 265 seconds)
2025-12-01 10:51:08 +0100 <kuribas> I spend a whole day once refactoring clojure database queries, because the schema changed.
2025-12-01 10:55:02 +0100semifunctor(~omnifunct@user/semifunctor) (Leaving)
2025-12-01 10:56:23 +0100poscat(~poscat@user/poscat) (Remote host closed the connection)
2025-12-01 10:57:15 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 10:57:29 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 10:59:16 +0100trickard_trickard
2025-12-01 10:59:30 +0100poscat(~poscat@user/poscat) poscat
2025-12-01 11:01:12 +0100Katarushisu(~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) Katarushisu
2025-12-01 11:01:15 +0100 <kuribas> I suppose there are always trade-offs.
2025-12-01 11:02:22 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 11:05:15 +0100karenw(~karenw@user/karenw) karenw
2025-12-01 11:05:46 +0100Googulator47(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 11:05:49 +0100Googulator50(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 11:06:31 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 240 seconds)
2025-12-01 11:09:22 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 11:10:24 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 252 seconds)
2025-12-01 11:11:13 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-01 11:12:19 +0100Ging_(46fea76d80@2001:bc8:1210:2cd8::470) (Ping timeout: 264 seconds)
2025-12-01 11:12:56 +0100Ging_(46fea76d80@2001:bc8:1210:2cd8::470)
2025-12-01 11:12:59 +0100FANTOM(~fantom@212.228.181.156) (Ping timeout: 240 seconds)
2025-12-01 11:13:21 +0100 <kuribas> Something I never felt is that exploring is easier in a dynamic language.
2025-12-01 11:14:38 +0100yin(~zero@user/zero) (Max SendQ exceeded)
2025-12-01 11:14:39 +0100srk(~sorki@user/srk) (Max SendQ exceeded)
2025-12-01 11:14:56 +0100pavonia(~user@user/siracusa) (Ping timeout: 240 seconds)
2025-12-01 11:15:20 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 244 seconds)
2025-12-01 11:15:26 +0100yin(~zero@user/zero) zero
2025-12-01 11:16:10 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-01 11:16:16 +0100srk(~sorki@user/srk) srk
2025-12-01 11:17:25 +0100FANTOM(~fantom@212.228.181.156)
2025-12-01 11:17:26 +0100statusbot(~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
2025-12-01 11:17:33 +0100statusbot(~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) statusbot
2025-12-01 11:19:43 +0100euphores(~SASL_euph@user/euphores) (Ping timeout: 240 seconds)
2025-12-01 11:20:58 +0100statusbot(~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
2025-12-01 11:21:28 +0100statusbot(~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) statusbot
2025-12-01 11:22:36 +0100FANTOM(~fantom@212.228.181.156) (Max SendQ exceeded)
2025-12-01 11:22:47 +0100 <jreicher> What do you mean by a "dynamic language" (it's an ambiguous term in my experience)
2025-12-01 11:22:51 +0100EvanR(~EvanR@user/evanr) (Remote host closed the connection)
2025-12-01 11:22:51 +0100chele(~chele@user/chele) (Remote host closed the connection)
2025-12-01 11:22:57 +0100fgarcia(~lei@user/fgarcia) (Max SendQ exceeded)
2025-12-01 11:23:01 +0100chele(~chele@user/chele) chele
2025-12-01 11:23:29 +0100EvanR(~EvanR@user/evanr) EvanR
2025-12-01 11:24:30 +0100euphores(~SASL_euph@user/euphores) euphores
2025-12-01 11:25:44 +0100markasoftware(~quassel@107.161.26.124) (Ping timeout: 240 seconds)
2025-12-01 11:26:21 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-01 11:26:40 +0100FANTOM(~fantom@212.228.181.156)
2025-12-01 11:26:40 +0100fgarcia(~lei@user/fgarcia) (Max SendQ exceeded)
2025-12-01 11:27:24 +0100absentia(~henricus@user/absentia) (Remote host closed the connection)
2025-12-01 11:27:42 +0100absentia(~henricus@user/institor) institor
2025-12-01 11:29:52 +0100 <kuribas> jreicher: dynamically typed
2025-12-01 11:30:08 +0100 <jreicher> No such thing. :D
2025-12-01 11:33:08 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-01 11:34:32 +0100fgarcia(~lei@user/fgarcia) (Max SendQ exceeded)
2025-12-01 11:34:45 +0100pavonia(~user@user/siracusa) siracusa
2025-12-01 11:34:55 +0100markasoftware(~quassel@2604:180:f2::217) markasoftware
2025-12-01 11:35:10 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-01 11:35:29 +0100fgarcia(~lei@user/fgarcia) (Max SendQ exceeded)
2025-12-01 11:35:41 +0100Googulator50(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 11:35:49 +0100Googulator50(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 11:41:49 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-01 11:42:25 +0100X-Scale(~ARM@6.67.114.89.rev.vodafone.pt) X-Scale
2025-12-01 11:42:26 +0100fgarcia(~lei@user/fgarcia) (Max SendQ exceeded)
2025-12-01 11:46:34 +0100vanishingideal(~vanishing@user/vanishingideal) (Remote host closed the connection)
2025-12-01 11:48:15 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-01 11:48:36 +0100fgarcia(~lei@user/fgarcia) (Max SendQ exceeded)
2025-12-01 11:49:11 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-01 11:49:42 +0100fgarcia(~lei@user/fgarcia) (Max SendQ exceeded)
2025-12-01 11:53:53 +0100oxapentane(~oxapentan@user/oxapentane) (Remote host closed the connection)
2025-12-01 11:54:26 +0100oxapentane(~oxapentan@user/oxapentane) oxapentane
2025-12-01 11:55:39 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-01 11:56:00 +0100fgarcia(~lei@user/fgarcia) (Max SendQ exceeded)
2025-12-01 11:58:32 +0100timide(~timide@user/timide) timide
2025-12-01 12:02:06 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-01 12:02:34 +0100fgarcia(~lei@user/fgarcia) (Max SendQ exceeded)
2025-12-01 12:03:20 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 240 seconds)
2025-12-01 12:05:50 +0100Googulator50(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 12:05:51 +0100Googulator24(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 12:06:33 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
2025-12-01 12:09:13 +0100qqe(~qqq@185.54.20.98)
2025-12-01 12:09:44 +0100 <kuribas> What do you mean?
2025-12-01 12:09:57 +0100 <kuribas> You don't like the term?
2025-12-01 12:10:32 +0100 <kuribas> It generally means lack of static typing, or at least static types that are completely optional.
2025-12-01 12:10:48 +0100 <kuribas> I also think the term is pretty bad.
2025-12-01 12:15:13 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 12:17:32 +0100gustrb(~gustrb@user/gustrb) (Quit: gustrb)
2025-12-01 12:17:55 +0100qqe(~qqq@185.54.20.98) (Ping timeout: 240 seconds)
2025-12-01 12:19:21 +0100qqe(~qqq@185.54.20.98)
2025-12-01 12:19:55 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 240 seconds)
2025-12-01 12:23:51 +0100fp1(~Thunderbi@2001:708:20:1406::1370) fp
2025-12-01 12:24:34 +0100 <jreicher> No. I mean that the entire point of types is to facilitate a check that picks up errors before they happen at runtime. If you're doing that at runtime, then you're not doing any better than an untyped system.
2025-12-01 12:24:53 +0100qqe(~qqq@185.54.20.98) (Ping timeout: 260 seconds)
2025-12-01 12:25:24 +0100qqe(~qqq@213.87.150.45)
2025-12-01 12:31:22 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 12:36:10 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 245 seconds)
2025-12-01 12:37:09 +0100traxex(traxex@user/traxex) (Ping timeout: 260 seconds)
2025-12-01 12:42:55 +0100trickard(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 12:43:09 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 12:45:35 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 12:46:12 +0100qqe(~qqq@213.87.150.45) (Read error: Connection reset by peer)
2025-12-01 12:49:55 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 240 seconds)
2025-12-01 12:55:03 +0100fp1(~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 244 seconds)
2025-12-01 12:56:05 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 13:01:06 +0100comerijn(~merijn@77.242.116.146) merijn
2025-12-01 13:02:03 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 265 seconds)
2025-12-01 13:02:40 +0100larsivi(~larsivi@2001:2020:8341:7f8b:6585:e3fb:fff4:fe3f)
2025-12-01 13:03:24 +0100 <lortabac> the point of types is also to provide a meaning to the raw bytes
2025-12-01 13:04:29 +0100 <lortabac> if you don't check them at runtime you end up with segmentation faults
2025-12-01 13:06:06 +0100 <mniip> unityped perhaps?
2025-12-01 13:06:39 +0100 <lortabac> a completely untyped system would probably be unusable
2025-12-01 13:09:40 +0100 <lortabac> isn't unityped what dynamically-typed languages usually are? That is what they were criticising
2025-12-01 13:10:45 +0100 <lortabac> for context, I was replying to "if you are doing [checks] at runtime, then you are not doing any better than an untyped system"
2025-12-01 13:11:29 +0100 <dminuoso> I think the unityped/dynamically-typed differentiation is a kind of disjoint argument because they arise from fundamental different assumptions. At the core, both "type systems in the type theoretic sense" and "runtime tag checking" are both intended to prevent certain abnormal behaviors during runtime.
2025-12-01 13:12:05 +0100 <dminuoso> The presence of a static type system does not invalidate runtime assertions or checks either.
2025-12-01 13:13:38 +0100 <lortabac> "unityped" is "dynamically typed" from the point of view of static type checking
2025-12-01 13:13:58 +0100 <dminuoso> Sure, but that differentiation is only useful in the context of a type theory class at uni.
2025-12-01 13:13:58 +0100 <lortabac> statically they are all the same type
2025-12-01 13:14:12 +0100 <mniip> don't you love when the static typechecker disagrees with the runtime typechecker
2025-12-01 13:14:16 +0100 <mniip> many such cases in python
2025-12-01 13:14:19 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-01 13:14:22 +0100 <lortabac> :)
2025-12-01 13:15:22 +0100 <dminuoso> One of the established rough description is that the type systems intention is to filter out as many bad programs, while filtering out as few good programs as possible. The false positive/negative rate is not perfect in any language.
2025-12-01 13:16:03 +0100 <dminuoso> As long as the type checker in python saves me more time on average than it wastes on account being wrong, its useful.
2025-12-01 13:33:23 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-12-01 13:38:24 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
2025-12-01 13:39:29 +0100 <kuribas> jreicher: So you don't like the term...
2025-12-01 13:39:53 +0100 <kuribas> jreicher: But dynamic language proponents don't think of types in terms of type theory.
2025-12-01 13:40:15 +0100 <kuribas> For example a type may be a class, which is a runtime entity.
2025-12-01 13:43:10 +0100wootehfoot(~wootehfoo@user/wootehfoot) wootehfoot
2025-12-01 13:54:44 +0100yin(~zero@user/zero) (Ping timeout: 260 seconds)
2025-12-01 13:54:58 +0100yin(~zero@user/zero) zero
2025-12-01 13:55:54 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au) (Ping timeout: 260 seconds)
2025-12-01 13:58:07 +0100ttybitnik(~ttybitnik@user/wolper) ttybitnik
2025-12-01 13:58:47 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 14:05:10 +0100Googulator24Googulator
2025-12-01 14:10:04 +0100fp1(~Thunderbi@2001:708:20:1406::10c5) fp
2025-12-01 14:13:56 +0100Googulator(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 14:14:16 +0100Googulator(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 14:18:37 +0100fp1(~Thunderbi@2001:708:20:1406::10c5) (Ping timeout: 246 seconds)
2025-12-01 14:19:16 +0100karenw(~karenw@user/karenw) (Ping timeout: 244 seconds)
2025-12-01 14:22:08 +0100X-Scale(~ARM@6.67.114.89.rev.vodafone.pt) (Ping timeout: 240 seconds)
2025-12-01 14:25:04 +0100larsivi(~larsivi@2001:2020:8341:7f8b:6585:e3fb:fff4:fe3f) (Ping timeout: 260 seconds)
2025-12-01 14:25:46 +0100fp1(~Thunderbi@2001:708:20:1406::1370) fp
2025-12-01 14:34:37 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 14:35:30 +0100Googulator(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 14:35:42 +0100Googulator(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 14:37:08 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 14:37:39 +0100X-Scale(~ARM@6.67.114.89.rev.vodafone.pt) X-Scale
2025-12-01 14:38:43 +0100fp1(~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 265 seconds)
2025-12-01 14:42:31 +0100turlando_(~turlando@user/turlando) (Ping timeout: 244 seconds)
2025-12-01 14:42:45 +0100turlando(~turlando@user/turlando) turlando
2025-12-01 14:45:48 +0100wootehfoot(~wootehfoo@user/wootehfoot) (Quit: Leaving)
2025-12-01 14:47:10 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 244 seconds)
2025-12-01 14:47:45 +0100wootehfoot(~wootehfoo@user/wootehfoot) wootehfoot
2025-12-01 14:50:05 +0100haritz(~hrtz@140.228.70.141)
2025-12-01 14:50:05 +0100haritz(~hrtz@140.228.70.141) (Changing host)
2025-12-01 14:50:05 +0100haritz(~hrtz@user/haritz) haritz
2025-12-01 14:54:10 +0100__monty__(~toonn@user/toonn) toonn
2025-12-01 14:54:11 +0100__monty__(~toonn@user/toonn) (Client Quit)
2025-12-01 14:54:49 +0100comerijn(~merijn@77.242.116.146) (Ping timeout: 260 seconds)
2025-12-01 14:57:36 +0100__monty__(~toonn@user/toonn) toonn
2025-12-01 15:06:14 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 15:10:18 +0100vgtw_(~vgtw@user/vgtw) (Ping timeout: 256 seconds)
2025-12-01 15:10:45 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 245 seconds)
2025-12-01 15:13:05 +0100vgtw(~vgtw@user/vgtw) vgtw
2025-12-01 15:13:45 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 15:16:20 +0100infinity0(~infinity0@pwned.gg) (Quit: WeeChat 4.6.3)
2025-12-01 15:17:00 +0100infinity0(~infinity0@pwned.gg) infinity0
2025-12-01 15:20:44 +0100spew(~spew@user/spew) spew
2025-12-01 15:31:39 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2025-12-01 15:35:09 +0100ephemient(uid407513@user/ephemient) ephemient
2025-12-01 15:36:16 +0100fgarcia(~lei@user/fgarcia) fgarcia
2025-12-01 15:39:06 +0100sindu(~sindu@2.148.32.207.tmi.telenormobil.no)
2025-12-01 15:45:01 +0100Sgeo(~Sgeo@user/sgeo) Sgeo
2025-12-01 15:49:04 +0100spew(~spew@user/spew) (Quit: WeeChat 4.7.2)
2025-12-01 15:49:14 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 15:49:28 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 15:51:17 +0100Inline(~inlinE@2001-4dd3-7fc8-0-8721-eee6-e05a-14dd.ipv6dyn.netcologne.de) (Remote host closed the connection)
2025-12-01 15:54:51 +0100Square(~Square@user/square) Square
2025-12-01 15:56:46 +0100gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2025-12-01 15:57:26 +0100gmg(~user@user/gehmehgeh) gehmehgeh
2025-12-01 15:58:31 +0100Square2(~Square4@user/square) (Ping timeout: 240 seconds)
2025-12-01 16:02:03 +0100Inline(~inlinE@2001-4dd3-7fc8-0-2be-fec0-ba58-7d11.ipv6dyn.netcologne.de) Inline
2025-12-01 16:11:26 +0100jzargo(~jzargo@user/jzargo) (Read error: Connection reset by peer)
2025-12-01 16:11:47 +0100spew(~spew@user/spew) spew
2025-12-01 16:16:18 +0100jzargo(~jzargo@user/jzargo) jzargo
2025-12-01 16:16:37 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2025-12-01 16:20:29 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-01 16:26:36 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
2025-12-01 16:29:06 +0100ttybitnik(~ttybitnik@user/wolper) (Quit: Fading out...)
2025-12-01 16:32:46 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 16:33:00 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 16:41:09 +0100 <lucabtz> https://paste.tomsmeding.com/HQQ4rMFc which indentation style do you prefer where?
2025-12-01 16:41:16 +0100 <lucabtz> s/where/here
2025-12-01 16:43:35 +0100 <Leary> They're both fugly.
2025-12-01 16:43:50 +0100 <lucabtz> which do you use?
2025-12-01 16:43:57 +0100 <Leary> How about: https://paste.tomsmeding.com/L3gjxpuS
2025-12-01 16:45:23 +0100 <lucabtz> yeah i like that
2025-12-01 16:45:29 +0100 <lucabtz> i need to pick up a style
2025-12-01 16:47:54 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 272 seconds)
2025-12-01 16:47:54 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 272 seconds)
2025-12-01 16:48:21 +0100chexum(~quassel@gateway/tor-sasl/chexum) chexum
2025-12-01 16:49:53 +0100ChaiTRex(~ChaiTRex@user/chaitrex) ChaiTRex
2025-12-01 16:58:15 +0100euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2025-12-01 16:59:34 +0100 <kuribas> Can I turn off these stupid stan warning in lsp?
2025-12-01 16:59:58 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 246 seconds)
2025-12-01 17:00:37 +0100 <tomsmeding> kuribas: you somehow have to set haskell.plugin.stan.globalOn = false in the configuration for HLS in your LSP client
2025-12-01 17:00:46 +0100 <tomsmeding> how you do this differs per editor
2025-12-01 17:01:19 +0100 <haskellbridge> <loonycyborg> Upgrade to GHC 9.12. It doesn't support that plugin :P
2025-12-01 17:01:50 +0100traxex(traxex@user/traxex) traxex
2025-12-01 17:02:32 +0100__monty__(~toonn@user/toonn) (Ping timeout: 240 seconds)
2025-12-01 17:04:27 +0100larsivi(~larsivi@2a01:563:99:a400:1cc0:4d50:b9e7:edd1)
2025-12-01 17:05:25 +0100 <tomsmeding> kuribas: https://haskell-language-server.readthedocs.io/en/stable/configuration.html
2025-12-01 17:06:24 +0100merijn(~merijn@77.242.116.146) merijn
2025-12-01 17:07:29 +0100 <fgarcia> i like the suggested one at the top. with that it helps me know what to expect from what was written near instantly
2025-12-01 17:08:29 +0100 <merijn> awkward line wrapping and indentation is one of the main reasons I argue for never using let-in unless you have to :p
2025-12-01 17:09:11 +0100 <tomsmeding> I'm confused, what's wrong with https://paste.tomsmeding.com/Zcd4imHd ?
2025-12-01 17:09:54 +0100 <merijn> tomsmeding: That's only nice if you have 1 or 2 short bindings (but then you might as well do it on one line)
2025-12-01 17:10:08 +0100 <tomsmeding> I dislike 'where' for not being an expression, so you can only put it at very specific places in the grammar
2025-12-01 17:10:20 +0100 <merijn> tomsmeding: See, I consider that a feature :p
2025-12-01 17:11:12 +0100Googulator76(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 17:11:26 +0100Googulator(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 17:11:51 +0100 <fgarcia> here i would expect that code to run inside main. most functions are able to be written with 'where'. to me it signals, even if not true, that it is expected stateful effects will happen when using 'let'
2025-12-01 17:12:47 +0100 <merijn> I mean, you're almost never in a context where you can't use where, so I don't really see that as much of a limitation
2025-12-01 17:14:04 +0100 <tomsmeding> merijn: ok I selected a very untyped function to not land in your "almost never" niche of "typed code with too many existentials" (which is 50% of my codebase): the printStats function here https://git.tomsmeding.com/chad-fast/tree/test-framework/Test/Framework.hs#n464
2025-12-01 17:14:22 +0100 <tomsmeding> yes, you can write this as a 'where', but then it's scoped over the whole functoin, not just this guard branch
2025-12-01 17:18:40 +0100 <lucabtz> tomsmeding if there is a single binding your style looks good, but when you have multiple bindings with Leary's way it is simpler to align them
2025-12-01 17:19:14 +0100 <lucabtz> however conveniently "let " is four characters and if you use 4 spaces indentation it is actually simple to align them your way too
2025-12-01 17:19:26 +0100 <tomsmeding> on the contrary! The body of the let-binding is _not_ part of the list of bindings, so my opinion is that by aligning them, you're incorrectly suggesting a relationship that's not there
2025-12-01 17:19:37 +0100 <merijn> tomsmeding: That's solved easily by using more where
2025-12-01 17:19:59 +0100 <merijn> defining a name implementation per case, with their own where :p
2025-12-01 17:20:17 +0100 <merijn> lucabtz: The problem is the in :p
2025-12-01 17:20:21 +0100 <tomsmeding> hence my preference for using "in x", not "in x" or " in x" as some people do; I would accept "in x" if your argument is "I want the body to be indented at a multiple of 2 spaces"
2025-12-01 17:20:50 +0100 <tomsmeding> merijn: more top-level functions you mean?
2025-12-01 17:20:56 +0100 <tomsmeding> right, that's possible
2025-12-01 17:21:15 +0100 <lucabtz> i didnt mean to align the body with the bindings, just the bidings need to be aligned
2025-12-01 17:21:21 +0100 <tomsmeding> oh for sure
2025-12-01 17:21:28 +0100 <tomsmeding> but 'let' already syntactically requires the bindings to be aligned
2025-12-01 17:21:41 +0100 <lucabtz> if you have a new-line and indentation it works with any kind of indentation you have
2025-12-01 17:21:42 +0100 <merijn> tomsmeding: No, not top level nested in the where of printStats
2025-12-01 17:22:02 +0100 <tomsmeding> merijn: ah
2025-12-01 17:22:02 +0100 <merijn> tomsmeding: Also, that example is trivially simplified by using do and it's let sugar, letting you skip the in entirely :p
2025-12-01 17:22:12 +0100 <tomsmeding> and that is better how? :P
2025-12-01 17:22:20 +0100 <lucabtz> if you put let x = y \n then in the new line the alignment works well only if you tab with four spaces
2025-12-01 17:22:21 +0100 <tomsmeding> I disagree with "simplified"
2025-12-01 17:22:26 +0100 <tomsmeding> it suggests a monad where there is none
2025-12-01 17:22:37 +0100 <tomsmeding> lucabtz: yep, true
2025-12-01 17:22:39 +0100 <merijn> tomsmeding: Your return type is IO?
2025-12-01 17:22:46 +0100 <tomsmeding> oh
2025-12-01 17:22:51 +0100 <merijn> #rekt
2025-12-01 17:22:52 +0100 <tomsmeding> I guess, yes, in this case
2025-12-01 17:22:54 +0100 <tomsmeding> :p
2025-12-01 17:23:11 +0100 <tomsmeding> #rekt takes me back to high school
2025-12-01 17:23:15 +0100 <lucabtz> so for one binding that option works well, but for multiple ones idk
2025-12-01 17:23:35 +0100 <merijn> tomsmeding: tbh, I'd probably rewrite that to use `concat` to simplify line-wrapping the string too
2025-12-01 17:23:35 +0100 <tomsmeding> lucabtz: what's your preferred indentation size?
2025-12-01 17:23:52 +0100 <tomsmeding> yeah also possible
2025-12-01 17:24:27 +0100 <lucabtz> it is 4 but i dont like that the style imposes 4 to be used
2025-12-01 17:24:32 +0100 <tomsmeding> I see
2025-12-01 17:24:55 +0100 <tomsmeding> I don't have that opinion but I respect you having it :p
2025-12-01 17:25:12 +0100 <lucabtz> :p
2025-12-01 17:25:29 +0100 <tomsmeding> another reason to not use my style: if you program with a proportional font
2025-12-01 17:25:33 +0100 <tomsmeding> a colleague of mine does that
2025-12-01 17:25:54 +0100 <tomsmeding> programming haskell with a proportional font is mostly feasible only if you only read your own code though :p
2025-12-01 17:26:07 +0100 <lucabtz> though if you have only one binding i think your style is more readable
2025-12-01 17:26:45 +0100 <merijn> Proportional font should be a crime
2025-12-01 17:26:46 +0100machinedgod(~machinedg@d75-159-126-101.abhsia.telus.net) machinedgod
2025-12-01 17:27:00 +0100 <lucabtz> there is no [a] -> Int -> Maybe a safe list indexing in base?
2025-12-01 17:27:14 +0100 <tomsmeding> no
2025-12-01 17:27:22 +0100 <lucabtz> sad
2025-12-01 17:27:32 +0100 <lucabtz> i found atZ using hoogle though
2025-12-01 17:27:36 +0100 <tomsmeding> there is atMay here https://hackage.haskell.org/package/safe-0.3.21/docs/Safe.html
2025-12-01 17:28:08 +0100 <lucabtz> https://hackage.haskell.org/package/errors-2.3.0/docs/Control-Error-Safe.html#v:atZ this looks more general
2025-12-01 17:28:11 +0100 <merijn> lucabtz: "\l n -> listToMaybe $ drop n l" :p
2025-12-01 17:28:16 +0100 <Leary> @hoogle [a] -> Int -> Maybe a
2025-12-01 17:28:17 +0100 <lambdabot> Data.List (!?) :: [a] -> Int -> Maybe a
2025-12-01 17:28:17 +0100 <lambdabot> GHC.List (!?) :: [a] -> Int -> Maybe a
2025-12-01 17:28:17 +0100 <lambdabot> Safe atMay :: [a] -> Int -> Maybe a
2025-12-01 17:28:37 +0100 <tomsmeding> oh?
2025-12-01 17:28:42 +0100 <tomsmeding> % :i !?
2025-12-01 17:28:42 +0100 <yahb2> <interactive>:1:1: error: [GHC-76037] Not in scope: ‘!?’
2025-12-01 17:28:42 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 17:28:45 +0100 <tomsmeding> % :i Data.List.!?
2025-12-01 17:28:45 +0100 <yahb2> (GHC.Internal.List.!?) :: [a] -> Int -> Maybe a ; -- Defined in ‘GHC.Internal.List’ ; infixl 9 GHC.Internal.List.!?
2025-12-01 17:28:47 +0100 <tomsmeding> TIL
2025-12-01 17:28:56 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 17:29:00 +0100 <tomsmeding> lucabtz: ^
2025-12-01 17:29:24 +0100 <lucabtz> cool
2025-12-01 17:29:31 +0100 <lucabtz> hoogle didnt find it :(
2025-12-01 17:29:46 +0100 <tomsmeding> https://hoogle.haskell.org/?hoogle=%5Ba%5D+-%3E+Int+-%3E+Maybe+a&scope=set%3Astackage
2025-12-01 17:29:52 +0100 <tomsmeding> works for me (tm)
2025-12-01 17:29:55 +0100 <lucabtz> yeah
2025-12-01 17:29:56 +0100 <fgarcia> you didn't ask but i recommend the font 'Luculent'. it is lovely. i think people who write haskell will appreciate it
2025-12-01 17:29:58 +0100 <lucabtz> also for me now
2025-12-01 17:30:24 +0100 <lucabtz> didnt work earlier, im sure i typed [a] -> a -> Maybe a
2025-12-01 17:30:30 +0100 <lucabtz> i must be hallucinating
2025-12-01 17:30:32 +0100 <tomsmeding> fgarcia: font exchange time: mononoki
2025-12-01 17:31:05 +0100 <tomsmeding> that bold here looks very ugly, but the regular is decent https://online-fonts.com/fonts/luculent
2025-12-01 17:31:54 +0100 <fgarcia> tomsmeding: ooo thank you!
2025-12-01 17:32:42 +0100 <fgarcia> that is a cool site. finally a specimen i can look at!
2025-12-01 17:33:07 +0100 <tomsmeding> (just found it by searching for "luculent font" :p)
2025-12-01 17:34:49 +0100 <fgarcia> oh i should probably link the creator's site http://eastfarthing.com/luculent/
2025-12-01 17:35:14 +0100 <tomsmeding> nope, that's not for me :p
2025-12-01 17:35:39 +0100 <lucabtz> gtg thank you!
2025-12-01 17:35:59 +0100lucabtz(~lucabtz@user/lucabtz) (Remote host closed the connection)
2025-12-01 17:36:36 +0100spew(~spew@user/spew) (Remote host closed the connection)
2025-12-01 17:46:54 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-01 17:51:55 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 240 seconds)
2025-12-01 17:54:39 +0100karenw(~karenw@user/karenw) karenw
2025-12-01 17:56:12 +0100Pixi`Pixi
2025-12-01 18:00:26 +0100trickard_trickard
2025-12-01 18:08:11 +0100__monty__(~toonn@user/toonn) toonn
2025-12-01 18:09:19 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-01 18:14:15 +0100Square(~Square@user/square) (Ping timeout: 240 seconds)
2025-12-01 18:14:42 +0100gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2025-12-01 18:15:39 +0100Googulator76(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 18:15:44 +0100gmg(~user@user/gehmehgeh) gehmehgeh
2025-12-01 18:15:47 +0100Googulator76(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 18:16:37 +0100 <ski> tomsmeding : `where' also does attach to `case'-`of' branches
2025-12-01 18:18:03 +0100 https://www.reddit.com/r/haskell | Admin: #haskell-ops | Offtopic: #haskell-offtopic | https://downloads.haskell.org | https://play.haskell.org/ | Paste code/errors: https://paste.tomsmeding.com | Logs: https://ircbrowse.tomsmeding.com/browse/lchaskell | Adventofcode Leaderboard: 43100-84040706
2025-12-01 18:19:41 +0100 <glguy> 38 people from previous years #haskell leaderboard have started adventofcode - there are 8 slots open at the time of this message. I'll try and clean up stale entries if it happens to fill
2025-12-01 18:20:54 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
2025-12-01 18:23:49 +0100 <__monty__> Potentially relevant factor is that it's only 12 days this year!
2025-12-01 18:24:06 +0100 <__monty__> glguy: Such an elegant part 2.
2025-12-01 18:24:45 +0100 <glguy> oh, thanks!
2025-12-01 18:30:33 +0100target_i(~target_i@user/target-i/x-6023099) target_i
2025-12-01 18:31:37 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2025-12-01 18:32:04 +0100Tuplanolla(~Tuplanoll@91-152-225-194.elisa-laajakaista.fi) Tuplanolla
2025-12-01 18:41:37 +0100chele(~chele@user/chele) (Remote host closed the connection)
2025-12-01 18:42:11 +0100 <iqubic> Yeah, I just did a dumb replicate solution.
2025-12-01 18:44:37 +0100CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-12-01 18:54:23 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-01 18:57:45 +0100tomboy64(~tomboy64@user/tomboy64) (Read error: Connection reset by peer)
2025-12-01 18:57:51 +0100tomboy65(~tomboy64@user/tomboy64) tomboy64
2025-12-01 19:03:46 +0100sindu(~sindu@2.148.32.207.tmi.telenormobil.no) (Ping timeout: 256 seconds)
2025-12-01 19:05:28 +0100sindu(~sindu@2.148.32.207.tmi.telenormobil.no)
2025-12-01 19:05:43 +0100 <__monty__> Wouldn't call that dumb. Can't figure out how you dealt with direction changes, and going left from the start.
2025-12-01 19:06:46 +0100finsternis(~X@23.226.237.192) (Remote host closed the connection)
2025-12-01 19:07:36 +0100 <tomsmeding> glguy: if I'm still on there and you need space, feel free to remove me, too busy this year
2025-12-01 19:08:47 +0100 <tomsmeding> ski: `let' also works in function applications :p
2025-12-01 19:12:25 +0100 <ski> tomsmeding : yea, just saying it would be possible to use `where', and have the scope restricted to that branch
2025-12-01 19:13:21 +0100 <tomsmeding> sure. It's more that with 'where' I have to think -- sometimes it works, sometimes it doesn't, sometimes I can write the code differently to make it work
2025-12-01 19:13:26 +0100 <tomsmeding> 'let' just works
2025-12-01 19:14:07 +0100 <tomsmeding> I use 'where' essentially only for local function definitions (where it actually makes sense to have the definitions _below_ the code using them), and occasionally if those local definitions and the main function need to share some variable definitions
2025-12-01 19:15:34 +0100spew(~spew@user/spew) spew
2025-12-01 19:15:34 +0100Googulator76(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 19:15:37 +0100RMSBach(~RMSBach@2603:6013:9b00:a7c8:e7e5:f272:eb86:ddf) RMSBach
2025-12-01 19:15:46 +0100Googulator76(~Googulato@84-236-53-137.pool.digikabel.hu)
2025-12-01 19:20:09 +0100tromp(~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
2025-12-01 19:41:53 +0100skinods
2025-12-01 19:43:29 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-12-01 19:46:01 +0100tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net)
2025-12-01 19:47:37 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 246 seconds)
2025-12-01 19:50:31 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-12-01 19:51:07 +0100ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-12-01 19:54:55 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
2025-12-01 19:54:55 +0100ljdarj1ljdarj
2025-12-01 19:58:48 +0100peterbecich(~Thunderbi@172.222.148.214) peterbecich
2025-12-01 20:05:51 +0100larsivi(~larsivi@2a01:563:99:a400:1cc0:4d50:b9e7:edd1) (Quit: WeeChat 4.7.2)
2025-12-01 20:06:58 +0100Ranhir(~Ranhir@157.97.53.139) (Ping timeout: 255 seconds)
2025-12-01 20:07:15 +0100peterbecich(~Thunderbi@172.222.148.214) (Ping timeout: 240 seconds)
2025-12-01 20:15:42 +0100Googulator60(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 20:17:11 +0100skum(~skum@user/skum) (Quit: WeeChat 4.7.2)
2025-12-01 20:17:37 +0100Googulator76(~Googulato@84-236-53-137.pool.digikabel.hu) (Quit: Client closed)
2025-12-01 20:20:07 +0100ttybitnik(~ttybitnik@user/wolper) ttybitnik
2025-12-01 20:29:35 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
2025-12-01 20:30:08 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-12-01 20:33:45 +0100Ranhir(~Ranhir@157.97.53.139) Ranhir
2025-12-01 20:36:35 +0100Digitteknohippie(~user@user/digit) Digit
2025-12-01 20:36:55 +0100Digit(~user@user/digit) (Ping timeout: 264 seconds)
2025-12-01 20:47:13 +0100pavonia(~user@user/siracusa) siracusa
2025-12-01 20:49:30 +0100 <haskellbridge> <sm> I find that bothersome too, I wish where worked everywhere
2025-12-01 20:50:16 +0100 <haskellbridge> <sm> when using it, the code feels/appears more modular than when using let
2025-12-01 20:56:11 +0100ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-12-01 20:56:33 +0100peterbecich(~Thunderbi@172.222.148.214) peterbecich
2025-12-01 20:56:57 +0100 <[exa]> I had "substitution brackets" abused for doing `where` in one testing language to kinda streamline the parsing, was cool. You could write [ x := this that ] anywhere.
2025-12-01 20:57:11 +0100 <[exa]> (Then I killed the project and continued elsewhere)
2025-12-01 20:57:53 +0100 <[exa]> anyway
2025-12-01 20:58:15 +0100 <EvanR> whereanywhere
2025-12-01 20:58:41 +0100 <monochrom> I like substitution brackets. But only the [var:=expr] kind, not the [x/y] or [y/x] kind.
2025-12-01 20:58:58 +0100 <[exa]> is there anyone who's using vim heavily and would volunteer/have time for maintaining the haskell syntax in there? ref https://github.com/vim/vim/pull/18776#issuecomment-3564110323
2025-12-01 20:59:47 +0100 <[exa]> monochrom: the slashes are confusing me, if there's just 2 variables I never know which of them gets replaced
2025-12-01 20:59:54 +0100 <monochrom> Hey thanks for the idea! I have been looking for interesting syntax for parser homework. :)
2025-12-01 20:59:55 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
2025-12-01 21:00:11 +0100 <monochrom> Yeah my reason too.
2025-12-01 21:00:12 +0100ljdarj1(~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
2025-12-01 21:00:21 +0100 <[exa]> lol makes me wonder why this didn't get to my homeworks
2025-12-01 21:00:23 +0100 <[exa]> good point
2025-12-01 21:00:25 +0100 <[exa]> :D
2025-12-01 21:02:36 +0100 <EvanR> [x/y] makes no sense to me
2025-12-01 21:02:53 +0100 <EvanR> I can never remember what is being replaced with what
2025-12-01 21:03:12 +0100 <chromoblob> me too
2025-12-01 21:03:18 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-12-01 21:03:29 +0100 <[exa]> and then you read a paper and they do [x\y] to disambiguate for good
2025-12-01 21:03:45 +0100 <monochrom> Last time I was very inspired by Python "<expr1> if <exprBool> else <expr0>". (I was primed; I was first inspired by Hoare's "<expr1> ◁ <exprBool> ▷ <expr0>".)
2025-12-01 21:03:55 +0100trickard(~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-01 21:04:08 +0100trickard_(~trickard@cpe-85-98-47-163.wireline.com.au)
2025-12-01 21:04:27 +0100iqubic(~sophia@2601:602:9203:1660:c137:59bd:3f5b:b4a7) (Remote host closed the connection)
2025-12-01 21:04:51 +0100 <mauke> monochrom: have you already done here-docs?
2025-12-01 21:05:07 +0100 <monochrom> Python does not allow <exprBool> to be its own "if-else" but it is easy to see there would be no ambiguity, so I allow it in my homework!
2025-12-01 21:05:20 +0100 <monochrom> No.
2025-12-01 21:07:26 +0100 <mauke> that's one of the more interesting wrinkles I know of that are in real use
2025-12-01 21:07:50 +0100 <[exa]> oh I wish editors had proper support for hiding these (and popping them out)
2025-12-01 21:08:21 +0100 <tomsmeding> EvanR [exa]: the way I remember the meaning of [x/y] is "multiply by x, then divide by y"; if you have 2*3*4*5 and you do *17/5 you replace the 5 with 17, so E[x/y] means replace y with x
2025-12-01 21:08:37 +0100 <tomsmeding> it doesn't quite work because it replaces _all_ occurrences, not just one
2025-12-01 21:09:06 +0100kuribas(~user@2a02-1810-2825-6000-91ce-6f5d-5219-16e3.ip6.access.telenet.be) (Remote host closed the connection)
2025-12-01 21:09:22 +0100 <mauke> tomsmeding: yeah, that's just (morally) wrong
2025-12-01 21:09:32 +0100 <EvanR> lol
2025-12-01 21:09:45 +0100 <chromoblob> i made that mnemonic too, but then i saw [x/y] defined to mean the opposite, replace x with y
2025-12-01 21:09:59 +0100 <EvanR> maybe if you insist that it's a string of multiplied primes
2025-12-01 21:10:00 +0100 <[exa]> I'm grateful for the mnemonic
2025-12-01 21:10:02 +0100 <[exa]> but aaaaaaaaaaaaaa
2025-12-01 21:10:06 +0100 <EvanR> at most one each
2025-12-01 21:10:11 +0100 <mauke> the correct syntax should be ${foo/x/y}
2025-12-01 21:10:18 +0100 <tomsmeding> > The header of the syntax file lists the Haskell-Cafe ML as the maintainer. This is so unusual for a distributed syntax file that it might be the only example.
2025-12-01 21:10:20 +0100 <tomsmeding> lol!
2025-12-01 21:10:28 +0100 <[exa]> EvanR: [goedel voice:] ofcourse it's a string of multiplied primes!
2025-12-01 21:10:55 +0100 <EvanR> well 4 is not prime
2025-12-01 21:11:01 +0100 <tomsmeding> yes I'm not saying it's good notation or that the mnemonic is perfect, but it works for me :p
2025-12-01 21:11:20 +0100 <monochrom> [x/y/g] >:)
2025-12-01 21:11:29 +0100 <tomsmeding> and authors that use it the other way round should just be shooed back to their writing desk and replace / with :=
2025-12-01 21:11:51 +0100spew(~spew@user/spew) (Quit: spew)
2025-12-01 21:12:18 +0100 <tomsmeding> I read it as "E with x for y"
2025-12-01 21:12:26 +0100 <[exa]> tomsmeding: isn't that quite inconvenient to read if your replacement is a long term
2025-12-01 21:12:43 +0100 <[exa]> (probably not a concern for symbolic logic papers tho)
2025-12-01 21:12:46 +0100 <tomsmeding> if the term to replace is long, you mean?
2025-12-01 21:13:14 +0100 <[exa]> yes, [blab-las+dweur*yiwuerywer/y] looks unhappy
2025-12-01 21:13:32 +0100 <tomsmeding> oh right
2025-12-01 21:13:33 +0100 <EvanR> that they never actually write concrete examples is why it's hard to remember
2025-12-01 21:13:40 +0100 <EvanR> it's like... x and y
2025-12-01 21:13:45 +0100 <tomsmeding> EvanR: no it's because the notation is bad
2025-12-01 21:13:49 +0100 <EvanR> also that
2025-12-01 21:14:08 +0100 <[exa]> tomsmeding: anyway yeah that PR was full of surprise
2025-12-01 21:14:37 +0100 <tomsmeding> like, yes I use vim heavily and I write lots of haskell, but no I would not particularly like to be listed as maintainer of the haskell syntax file lol
2025-12-01 21:14:45 +0100 <tomsmeding> if I was, I'm not sure I would have passed that change
2025-12-01 21:14:56 +0100 <tomsmeding> people who write fmap ` fmap ` fmap can just do that in some other editor
2025-12-01 21:15:24 +0100 <tomsmeding> also, if I'd be listed, I would feel the responsibility to make sure that the syntax file is actually correct
2025-12-01 21:15:30 +0100 <tomsmeding> which I do _not_ want to do because that's a hell of a job
2025-12-01 21:15:36 +0100 <tomsmeding> and probably impossible
2025-12-01 21:15:46 +0100 <tomsmeding> it's best-effort anyway
2025-12-01 21:17:14 +0100 <chromoblob> >:(
2025-12-01 21:17:47 +0100 <ski> EvanR : the idea with `[x/y]' is that `y' is "divided away" and `x' is "multiplied in", in its place(s)
2025-12-01 21:18:10 +0100 <EvanR> yes I saw that just now
2025-12-01 21:18:24 +0100 <ski> ah, tomsmeding said
2025-12-01 21:18:30 +0100 <EvanR> "interesting"
2025-12-01 21:18:35 +0100 <mauke> then they should have written [/y*x]
2025-12-01 21:18:49 +0100 <tomsmeding> no, clearly that's dividing by _both_ y and x
2025-12-01 21:18:53 +0100 <EvanR> lol
2025-12-01 21:19:00 +0100 <tomsmeding> (/s)
2025-12-01 21:19:10 +0100 <EvanR> use reverse polish obv
2025-12-01 21:19:24 +0100 <tomsmeding> [x*y/]?
2025-12-01 21:19:25 +0100 <EvanR> [y / x *]
2025-12-01 21:19:32 +0100 <tomsmeding> ah right
2025-12-01 21:19:56 +0100 <EvanR> now we have the other notation almost
2025-12-01 21:20:19 +0100 <ski> [y x * /]
2025-12-01 21:22:23 +0100 <ski> the phrase "substitute `x' for `y' in `...'" always sounded a bit awkward, to me
2025-12-01 21:23:39 +0100 <[exa]> [x/y] ~~flip~~> ]y/x[ ...intuitive!
2025-12-01 21:24:47 +0100skum(~skum@user/skum) skum
2025-12-01 21:27:19 +0100dhil(~dhil@5.151.29.137) (Ping timeout: 240 seconds)
2025-12-01 21:29:42 +0100 <tomsmeding> makes me think of the notation for (half)-open intervals [x,y[, as opposed to the (to me) more usual [x,y)
2025-12-01 21:29:58 +0100 <EvanR> [x,y[ looks insane
2025-12-01 21:29:58 +0100 <ski> both look quite ugly, to me
2025-12-01 21:29:59 +0100 <RMSBach> That phrase sounds pretty normal to me. It is at least more immediately obvious than the notation under discussion.
2025-12-01 21:30:38 +0100 <tomsmeding> EvanR: actually a graphing library gave me that at some point, and I spent multiple minutes thinking that there must be a bug in the legend creation before I figured out what they were trying to tell me
2025-12-01 21:31:21 +0100 <[exa]> if someone's syntax looks like a stupid joke in #haskell, you know there's an issue
2025-12-01 21:31:29 +0100peterbecich(~Thunderbi@172.222.148.214) (Ping timeout: 260 seconds)
2025-12-01 21:31:40 +0100 <ski> for a long time i had to second-think, reminding myself that `y' was being replaced by `x', rather than the other way around, in that "substitute .. for .. in .." phrase
2025-12-01 21:32:27 +0100 <[exa]> what's the better way to write [x,y) interval btw? (I thought that one is pretty much standard)
2025-12-01 21:32:47 +0100 <ski> (my immediate reading, when first encountering it, was the opposite reading of the intended one)
2025-12-01 21:33:04 +0100 <EvanR> substitute x, does this phrase mean x is going in, or being replaced
2025-12-01 21:33:14 +0100 <EvanR> maybe the issue is with english
2025-12-01 21:33:28 +0100 <ski> mm
2025-12-01 21:33:42 +0100 <RMSBach> <ski> I won't fault anyone for needing a moment to think about it, but it follows standard English, ex "substitute cornstarch for AP flower if necessary"
2025-12-01 21:35:09 +0100 <ski> [exa] : mayhaps ⌜{x ≤ < y}⌝, or something along those lines ..
2025-12-01 21:35:42 +0100 <RMSBach> I will admit that if we change the preposition to "with" then the order of the nominal phrases can be switched at least colloquially.
2025-12-01 21:36:22 +0100 <[exa]> ski: yeah I sometimes use that too if I've got the middle value to write
2025-12-01 21:37:08 +0100 <[exa]> RMSBach: tbh for non-english people the meaning of `for` is completely inexplicable in the phrase
2025-12-01 21:39:49 +0100 <RMSBach> exa: Prepositions are often confusing without full command of a foreign language. `por` and `para` present problems for English speakers learning English. But point taken.
2025-12-01 21:40:00 +0100 <ski> RMSBach : yea, i'm not really much familiar with the phrase, in a colloquial sense, either
2025-12-01 21:40:27 +0100 <ski> (also, if you respond like that, it looks like you're quoting me, which looks confusing)
2025-12-01 21:41:08 +0100 <ski> [exa] : which middle value ?
2025-12-01 21:41:43 +0100 <RMSBach> I vote for `[y:=x]` fwiw]
2025-12-01 21:43:48 +0100 <RMSBach> I think the majority of lambda calculus materials I have read used that notation for beta reduction
2025-12-01 21:44:02 +0100 <ski> there's also `[y |-> x]'
2025-12-01 21:44:54 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-12-01 21:45:17 +0100 <EvanR> x gets replaced with y, got it
2025-12-01 21:45:33 +0100 <ski> (the idea being that you have a mapping from variables to terms, and then you (monadically) extend that to also apply to arbitrary term inputs)
2025-12-01 21:45:35 +0100 <EvanR> or is it y transforms to x
2025-12-01 21:45:54 +0100 <ski> the latter (is what i would say)
2025-12-01 21:46:02 +0100 <RMSBach> That's how I read it too
2025-12-01 21:46:37 +0100 <EvanR> visually a think of substitution as some term coming in and overwriting the x
2025-12-01 21:46:38 +0100 <RMSBach> I guess interpretation flies in the face of the intelligibility of the mark even when we escape natural language
2025-12-01 21:47:11 +0100 <ski> but i'm sure someone would hold the other interpretation, just to confuse things
2025-12-01 21:52:01 +0100ouilemur(~jgmerritt@user/ouilemur) (Quit: WeeChat 4.7.0)
2025-12-01 21:53:20 +0100 <haskellbridge> <doc> well now I'm confused too.. is [y:=x] and [y |-> x] "x is replaced by y" or "y is replaced by x", because the former can be interpreted as "y gets plugged into wherever x occurs", and the latter is "y gets expanded into x"
2025-12-01 21:53:33 +0100 <merijn> What does ghcup base it's recommend versions on?
2025-12-01 21:53:35 +0100karenw(~karenw@user/karenw) (Ping timeout: 240 seconds)
2025-12-01 21:54:26 +0100 <mauke> vibes?
2025-12-01 21:55:01 +0100 <ski> [r] x = t if r(x) defined and t = r(x)
2025-12-01 21:55:08 +0100 <ski> [r] x = x if r(x) undefined
2025-12-01 21:55:17 +0100 <ski> [r] (t u) = ([r] t) ([r] u)
2025-12-01 21:55:18 +0100 <geekosaur> mostly on widest compatibility/lack of bugs
2025-12-01 21:55:19 +0100 <ski> ...
2025-12-01 21:55:51 +0100 <geekosaur> for example, cabal was for a long time held back to an old version due to a windows bug that only got fixed when a windows dev found some time to work on it
2025-12-01 21:56:16 +0100 <geekosaur> ghcc was held back to 9.4 until 9.6.7 fixed a key bug
2025-12-01 21:56:50 +0100 <ski> this is similar to defining a linear transformation, from a based vector space, by specifying where it maps the basis vectors, and then extending it by linearity
2025-12-01 21:57:08 +0100 <fgarcia> would it be possible to use those terms in functions? then f(y) could be written as a substitution for f(x)
2025-12-01 21:57:51 +0100 <EvanR> ski, I'm not understanding your definitions above. What's r(x)
2025-12-01 21:59:08 +0100 <ski> doc : for `[y:=x]', it's "y is replaced by x" (i've not seen anyone use the opposite interpretation here, thankfully). for `[y |-> x]', it also (imho) ought to be "y is replaced by x", but i'm pretty sure i've seen at least somewhere the opposite interpretation
2025-12-01 21:59:37 +0100 <geekosaur> *ghc
2025-12-01 22:00:18 +0100 <ski> doc : think of `[y:=x]' as `x' is assigned into mutable slot `y', or as `y' is now defined as being `x'
2025-12-01 22:01:25 +0100 <haskellbridge> <doc> okay that's a relief, all this is what i'd say too, but realized that the other direction (esp with |->) also has some sort of rationale
2025-12-01 22:02:10 +0100 <tomsmeding> [exa]: [x,y) is the standard one, it's [x,y[ that I was complaining about
2025-12-01 22:04:17 +0100 <ski> EvanR : `r' is a substitution, a (value) environment, a (partial) function from variables to terms. so, if `r' is the (partial) function `y |-> x' (think `\Y -> X', in Haskell notation), and `t' is `f y x', then `[r] t' is `[y |-> x] (f y x)' (`subst (\Y -> X) (App (App F Y) X)') becomes `f x x' (`App (App F X) X')
2025-12-01 22:05:02 +0100 <tomsmeding> merijn: the opinion of maerwald, which is iirc based on various things including known bugs and HLS support; I recall him saying at some point that he was refusing to move the 'recommended' flag to push GHC developers to fix some installation issue on FreeBSD (iirc)
2025-12-01 22:06:17 +0100 <ski> (of course, for Haskell, the "if ... undefined" would have to be modelled by `Maybe', or (making all substitutions total) by constructing the `y |-> x' substitution by overriding from the identity substitution)
2025-12-01 22:06:44 +0100 <ski> fgarcia : how do you mean ?
2025-12-01 22:08:34 +0100 <ski> tomsmeding : i believe `[x,y)' is in english-influenced, and `[x,y[' in german-influenced. not sure about french nor russian
2025-12-01 22:08:57 +0100 <tomsmeding> possibly, yes
2025-12-01 22:09:06 +0100 <tomsmeding> though here in the netherlands we do [x,y) too
2025-12-01 22:09:39 +0100 <ski> (here it's `[x,y[')
2025-12-01 22:09:54 +0100 <tomsmeding> "here" is sweden?
2025-12-01 22:10:09 +0100 <ski> aye
2025-12-01 22:10:28 +0100Googulator60(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
2025-12-01 22:10:44 +0100Googulator60(~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
2025-12-01 22:11:44 +0100 <merijn> hmmm
2025-12-01 22:11:56 +0100 <merijn> cabal 3.16 seems to have a stupid bug >.>
2025-12-01 22:11:59 +0100 <merijn> "[Info] . already exists. Backing up old version in ..save0"
2025-12-01 22:12:03 +0100 <merijn> yeah...no shit
2025-12-01 22:12:11 +0100 <tomsmeding> ski: Wikipedia claims that ]a,b[ was introduced by Bourbaki https://en.wikipedia.org/wiki/Interval_(mathematics)#Notations_for_intervals
2025-12-01 22:12:23 +0100 <ski> ah, interesting
2025-12-01 22:12:24 +0100 <tomsmeding> merijn: what are you trying to do
2025-12-01 22:12:31 +0100 <merijn> tomsmeding: Just "cabal init"
2025-12-01 22:12:34 +0100 <tomsmeding> lol
2025-12-01 22:12:48 +0100 <merijn> tomsmeding: To set up my AoC repo
2025-12-01 22:13:25 +0100 <tomsmeding> merijn: I do not get that if I run 'cabal init' in an empty dir
2025-12-01 22:13:48 +0100 <merijn> tomsmeding: Do you have it set to interactive?
2025-12-01 22:14:00 +0100 <tomsmeding> I had to press enter like a 100 times, so I presume yes
2025-12-01 22:14:21 +0100 <merijn> My directory just has a bunch of other directories in it from previous years
2025-12-01 22:14:42 +0100 <tomsmeding> but doesn't `cabal init` start a new package in the _current_ directory?
2025-12-01 22:14:51 +0100 <merijn> It should, yes
2025-12-01 22:15:09 +0100 <ski> "Some authors such as Yves Tillé use ]a, b[ to denote the complement of the interval (a, b); namely, the set of all real numbers that are either less than or equal to a, or greater than or equal to b."
2025-12-01 22:15:46 +0100 <tomsmeding> merijn: if I `mkdir a` `mkdir b` `cabal init` then I still don't get your message
2025-12-01 22:16:01 +0100 <tomsmeding> ski: long live ambiguous notation in mathematics
2025-12-01 22:16:18 +0100 <merijn> tomsmeding: I think it's because my cabal.config has "application-dir: ." (i.e. source should be in root of the directory, not a subdir)
2025-12-01 22:16:27 +0100 <tomsmeding> ah
2025-12-01 22:16:28 +0100 <merijn> And that breaking in recent cabal
2025-12-01 22:16:38 +0100 <tomsmeding> possibly, yes, I haven't changed those defaults
2025-12-01 22:16:48 +0100 <tomsmeding> bug report time?
2025-12-01 22:17:44 +0100 <jreicher> lortabac: yeah I was always meaning what dminuoso ended up saying, but I was making a bit of a joke. When people talk about doing anything with types they really mean runtime tag checking, i.e. some kind of metadata-based control. And this is probably why you say it provides a meaning to raw bytes. You can smuggle some kind of pseudo-semantics into any kind of generic metadata. The joke I'm making is that this shouldn't be called a
2025-12-01 22:17:44 +0100 <jreicher> "type". Of course I don't get to say how people use a word though.
2025-12-01 22:18:00 +0100 <jreicher> ...anything with types at runtime...
2025-12-01 22:18:59 +0100 <tomsmeding> it seems the theme of today is "words mean different things to different people"
2025-12-01 22:19:15 +0100 <jreicher> OMG. That never happens.
2025-12-01 22:21:16 +0100 <fgarcia> ski: i am not much of a proof writer. but in english, variables of interest could be written as two different symbols. while some people will not like it, the substition can be written "For the above functions, replace variable x with y. This would include f(x) being replaced with f(y)."
2025-12-01 22:22:58 +0100 <jreicher> tomsmeding: [exa]: regarding Haskell syntax in vim, it's not using treesitter? Maybe it's only neovim...
2025-12-01 22:23:12 +0100 <merijn> jreicher: treesitter is only neovim
2025-12-01 22:23:37 +0100 <jreicher> Ah. I wonder why vim hasn't started supporting it.
2025-12-01 22:23:54 +0100 <merijn> it's one of the main reasons I switched to neovim
2025-12-01 22:23:54 +0100simplystuart(~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 244 seconds)
2025-12-01 22:24:00 +0100 <tomsmeding> and also, even though neovim supports tree-sitter, it doesn't bundle a Haskell grammar by default, it seems
2025-12-01 22:24:13 +0100 <merijn> That being said, the haskell treesitter grammar is kinda ugly as sin
2025-12-01 22:24:16 +0100 <jreicher> Emacs doesn't either. I think the grammars are still moving targets.
2025-12-01 22:24:21 +0100 <merijn> tomsmeding: It doesn't bundle any grammars at all by default
2025-12-01 22:24:28 +0100 <merijn> You gotta "TSInstall haskell"
2025-12-01 22:24:36 +0100 <tomsmeding> merijn: :help treesitter
2025-12-01 22:24:49 +0100 <tomsmeding> "Nvim includes these parsers: C, Lua, Markdown, Vimscript, Vimdoc, Treesitter query files"
2025-12-01 22:24:50 +0100 <jreicher> Building a grammar is quite easy though.
2025-12-01 22:24:57 +0100 <tomsmeding> ever tried properly parsing haskell?
2025-12-01 22:24:57 +0100simplystuart(~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
2025-12-01 22:25:06 +0100 <merijn> tomsmeding: Yes
2025-12-01 22:25:24 +0100 <tomsmeding> (I was saying that to jreicher)
2025-12-01 22:25:36 +0100 <jreicher> I just mean building the treesitter grammar. I didn't mean writing one. :)
2025-12-01 22:25:40 +0100 <tomsmeding> right :)
2025-12-01 22:26:02 +0100 <tomsmeding> it's not that building a haskell parser is impossible -- not at all. Properly dealing with the indentation-sensitive layout is just non-trivial
2025-12-01 22:26:27 +0100 <merijn> tomsmeding: Sure
2025-12-01 22:26:29 +0100 <ski> fgarcia : do you have an example of "use those terms in functions" ?
2025-12-01 22:26:37 +0100 <merijn> tomsmeding: But humor me and open the haskell tree sitter grammar :)
2025-12-01 22:26:58 +0100 <tomsmeding> merijn: any part in particular you want me to look at
2025-12-01 22:27:00 +0100 <ski> (not quite getting the context)
2025-12-01 22:27:10 +0100 <merijn> tomsmeding: It really doesn't matter :p
2025-12-01 22:27:22 +0100 <tomsmeding> merijn: I looked before and couldn't quite make heads or tails of what I was seeing (mind I haven't looked at TS grammars before)
2025-12-01 22:27:34 +0100 <merijn> tomsmeding: That's not because it's TS grammar
2025-12-01 22:27:56 +0100 <jreicher> https://github.com/tree-sitter/tree-sitter-haskell/blob/master/src/grammar.json
2025-12-01 22:27:58 +0100 <merijn> tomsmeding: I'm writing my own for sqlite, the haskell one is just convoluted and ununderstandable
2025-12-01 22:27:58 +0100 <jreicher> You mean that, right?
2025-12-01 22:28:20 +0100 <tomsmeding> surely merijn means the source, not the compiled result https://github.com/tree-sitter/tree-sitter-haskell/tree/master/grammar
2025-12-01 22:28:27 +0100 <jreicher> Which is the json
2025-12-01 22:28:30 +0100 <jreicher> The C is generated
2025-12-01 22:28:36 +0100 <merijn> jreicher: The json isn't the grammar
2025-12-01 22:28:38 +0100 <tomsmeding> no, it's javascript that is compiled to the json
2025-12-01 22:28:42 +0100 <merijn> That, yeah
2025-12-01 22:28:58 +0100 <tomsmeding> well, the json is the grammar, kind of, but in the same way that an LR parsing table is also "the grammar"
2025-12-01 22:29:13 +0100 <tomsmeding> I know _that_ much about treesitter :p
2025-12-01 22:29:42 +0100 <tomsmeding> merijn: I dunno, but wouldn't they just have faithfully implemented the haskell2010 grammar plus extensions?
2025-12-01 22:30:02 +0100 <tomsmeding> the keys in operator.js for example make me think of the haskell grammar
2025-12-01 22:30:08 +0100 <merijn> tomsmeding: That's what *I* would do, but I certainly would make it more readable than that :p
2025-12-01 22:30:25 +0100 <merijn> I can't make heads of tails of that grammar and I wrote and graded quite a few
2025-12-01 22:30:30 +0100 <jreicher> What's the json generated from? I thought the json was written.
2025-12-01 22:30:40 +0100 <tomsmeding> jreicher: from the .js files in the grammar/ directory
2025-12-01 22:31:21 +0100 <jreicher> How did I miss that. I wonder if the grammars I built are the same.
2025-12-01 22:31:21 +0100Anarchos(~Anarchos@91-161-254-16.subs.proxad.net) Anarchos
2025-12-01 22:36:33 +0100 <haskellbridge> <zoil> can anyone help me understand this?
2025-12-01 22:36:33 +0100 <haskellbridge> <zoil> zoil: You would need e.g. "data WhichNE xs where { IsCons :: WhichNE (Cons x xs); IsLast :: WhichNE (Last x) }; class KnownNE ne where { knownNE :: WhichNE ne }; <both instances>; instance KnownNE xs => Read (Transfers xs) where { read s = case knownNE of { ... } }".
2025-12-01 22:36:43 +0100 <haskellbridge> <zoil> i have time today, i got my code to compile
2025-12-01 22:36:58 +0100target_i(~target_i@user/target-i/x-6023099) (Quit: leaving)
2025-12-01 22:37:01 +0100 <haskellbridge> <zoil> (nets that have regularizers reweighting internal branches at neurons)
2025-12-01 22:37:28 +0100 <haskellbridge> <zoil> they were saying something about having a type witness, eta something, and singletons
2025-12-01 22:37:55 +0100 <haskellbridge> <zoil> i have enough time today to put together a working example
2025-12-01 22:46:35 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2025-12-01 22:46:55 +0100 <merijn> Spaking of neovim, I at one point had a working hls config, but apparently I broke it and now LspInfo claims there's no active langauge server?
2025-12-01 22:47:03 +0100 <merijn> What am I missing?
2025-12-01 22:47:21 +0100 <fgarcia> ski: i think possibly the inverses of functions. reading more about this though i am seeing the 'maps to' symbol,|->, being used for substition. there are other times where the arrow => is used, though i feel this one is not so nice the times i see it
2025-12-01 22:50:08 +0100 <ski> fgarcia : i'm still not sure what context your original question was in. writing math or logic vernacular ? talking about syntax in programming languages ? programming idioms ?
2025-12-01 22:54:35 +0100 <haskellbridge> <zoil> can anyone see this? https://onlinegdb.com/mqdS1he_N
2025-12-01 22:54:58 +0100trickard_trickard
2025-12-01 22:57:13 +0100 <fgarcia> ski: earlier i read the bracketed substitutions and thought those were referring to a written shorthand in text. some examples being [x/y] and [x:=y] which i have not seen in my limited experience
2025-12-01 22:57:19 +0100rekahsoft(~rekahsoft@70.51.99.245) (Ping timeout: 246 seconds)
2025-12-01 22:57:33 +0100 <haskellbridge> <zoil> heres a paste if thats not easy to interface with
2025-12-01 22:57:34 +0100 <haskellbridge> <zoil> https://paste.tomsmeding.com/Z84KWqJO
2025-12-01 22:57:37 +0100 <merijn> hmm
2025-12-01 22:57:42 +0100 <merijn> good news I got hls working
2025-12-01 22:57:59 +0100 <haskellbridge> <zoil> so, on line 96 there is this terrifying constraint
2025-12-01 22:58:03 +0100 <merijn> bad new, it's giving me stupid refactor instructions >.>
2025-12-01 22:59:36 +0100 <haskellbridge> <zoil> https://kf8nh.com/_heisenbridge/media/matrix.org/GPGBChpFvPQwIjAnsVOZLpwr/D5DpfDeh0w0/image.png
2025-12-01 22:59:54 +0100 <ski> zoil : so the `KnownNE xs', when pattern-matching on the value of `knownNE', will inform the type-checker that either `xs = Cons x ys' or `xs = Last x' (for some unknown `x',`ys'), and then presumably that helps with `read' (ought to be `readsPrec', really) knowing what to expect (presumably `Transfers' is a GADT)
2025-12-01 23:00:37 +0100 <haskellbridge> <zoil> data Transfers (xs :: Nonempty *) where
2025-12-01 23:00:37 +0100 <haskellbridge> ... long message truncated: https://kf8nh.com/_heisenbridge/media/kf8nh.com/vssawUkriMdYrWhgxHeCbFgP/6JDVkeGWpLw (3 lines)
2025-12-01 23:01:47 +0100 <ski> fgarcia : well, these are (somewhat) standard formal (meta-)notation, when talking about abstract syntax of programming languages, logics, specification languages, &c.
2025-12-01 23:01:47 +0100 <haskellbridge> <zoil> so WhichNE is a singleton datatype? and it acts as a type witness allowing the instances to have just one class instance, and then it wont require the constraint?
2025-12-01 23:02:00 +0100humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
2025-12-01 23:02:06 +0100 <haskellbridge> <zoil> i thought the ide would allow to share and edit and compile, but it makes it readonly
2025-12-01 23:02:27 +0100michalz(~michalz@185.246.207.193) (Remote host closed the connection)
2025-12-01 23:03:57 +0100 <haskellbridge> <zoil> i think this version should be interactive
2025-12-01 23:03:57 +0100 <haskellbridge> https://play.haskell.org/saved/9XWoHwsD
2025-12-01 23:10:24 +0100 <tomsmeding> merijn: https://paste.tomsmeding.com/iS6vrndp