Home liberachat/#haskell: Logs Calendar

Logs on 2025-12-01 (liberachat/#haskell)

00:01:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
00:10:24 × Googulator91 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
00:10:35 Googulator91 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
00:11:20 <haskellbridge> <zoil> https://kf8nh.com/_heisenbridge/media/matrix.org/KqFuFIwAGSfriqoeASQNmzLj/Cb2ngaXEBrk/image.png
00:11:25 <geekosaur> the easy way to test that is to downgrade to 2.11.0.0 and aee if it changes
00:11:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:11:50 <haskellbridge> <zoil> help! it rejects the instance if it is recursive
00:11:54 <haskellbridge> <zoil> it demands it as a constraint
00:12:06 <iqubic> How do I tell Nix to downgrade my Haskell Language Server?
00:12:41 <haskellbridge> <zoil> can everyone see the image or should i upload a paste?
00:13:51 <iqubic> No. No one on the IRC can see your image.
00:13:56 <haskellbridge> <zoil> derp
00:14:03 <iqubic> Or actually, yes we can.
00:14:07 <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.
00:14:07 <iqubic> I'm dumb.
00:14:20 <iqubic> Yeah... It's an image of text.
00:14:22 <geekosaur> we generally recommend https://paste.tomsmeding.com
00:15:29 <geekosaur> or download it and try things locally
00:16:07 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
00:16:35 × mreh quits (~matthew@host86-146-25-125.range86-146.btcentralplus.com) (Ping timeout: 245 seconds)
00:17:14 <EvanR> this is like someone taking a phone picture of an image of text someone posted
00:18:05 <EvanR> who let these hairless apes on the internet
00:19:53 <haskellbridge> <zoil> https://paste.tomsmeding.com/prZTHuAw\
00:20:35 <haskellbridge> <zoil> well, the image combines both the error and the sourcecode neatly...
00:21:44 <geekosaur> both the pastebin I suggested and gist (and some others) let you include multiple "files"/pastes
00:22:31 <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.
00:22:59 <haskellbridge> <zoil> ok
00:23:13 <haskellbridge> <zoil> well the paste isnt going to compile, but its readable
00:24:00 <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
00:24:25 <haskellbridge> <zoil> it needs the standalone deriving statement so there is a place to put the constraint. but then this constraint appears everywhere
00:24:37 <haskellbridge> <zoil> iv run into this a bunch of times when having to write recursive instances
00:24:48 <haskellbridge> <zoil> like, FromNat n appears everywhere
00:24:53 <haskellbridge> <zoil> or like, Length xs
00:26:12 <haskellbridge> <zoil> i need to assert to the compiler "this instance is complete!"
00:27:25 <haskellbridge> <zoil> idk some kind of "exhaustiveness checks for matching cases of sum datatypes in instance declarations" proposal or smt
00:28:20 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:28:31 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
00:28:56 ChaiTRex joins (~ChaiTRex@user/chaitrex)
00:30:02 <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
00:30:41 <haskellbridge> <zoil> any ideas?
00:31:05 <monochrom> "It wouldn't compile anyway" is not a good reason to post a screenshot instead of actually downloading editable code.
00:31:29 <monochrom> Because, with luck, someone could have made an easy change and make it compilable.
00:31:57 <haskellbridge> <zoil> im not sure what your asking of me?
00:32:52 <haskellbridge> <zoil> im kind of in the middle of something, otherwise id happily write up a least sufficient example
00:32:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
00:33:21 <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
00:33:28 <haskellbridge> <zoil> is it a known issue?
00:33:41 <haskellbridge> <zoil> im sure people have encountered this before...
00:34:22 <jreicher> hololeap: Maybe https://en.wikipedia.org/wiki/Witness_(mathematics) will interest you?
00:35:49 <haskellbridge> <zoil> you would have to say exactly in what way
00:36:04 <haskellbridge> <zoil> i cant see from skimming how its relavent
00:36:22 <haskellbridge> <zoil> there is an Exists symbol and my eyes kind of bounce off it...
00:36:31 × X-Scale quits (~ARM@6.67.114.89.rev.vodafone.pt) (Ping timeout: 240 seconds)
00:36:40 <haskellbridge> <zoil> we had all kinds of discussions back in the day about existential quantification
00:36:49 <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.
00:36:54 <haskellbridge> <zoil> theres even an extension no?
00:37:25 <iqubic> Also, yes, I do have this channel open in two different forms. Emacs and Firefox.
00:37:27 <haskellbridge> <zoil> iqubic: again, im not sure what your asking. iv stated i dont have the wherewithall to write up a proposal
00:37:29 <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
00:37:54 <haskellbridge> <zoil> im sure the image and paste are sufficient, im not sure whats the problem.
00:38:06 <glguy> zoil: You can just merge the two instances into one, can't you?
00:38:18 <monochrom> True, I was one of those readers of those magazines, and typed in the code myself.
00:38:25 <haskellbridge> <zoil> glguy: i think not
00:38:28 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:38:37 <haskellbridge> <zoil> it requires both to match
00:38:41 <glguy> zoil: then that's why the compiler can't do it fo ryou
00:39:06 <haskellbridge> <zoil> but i want to say to it "i have done the exhaustiveness check, its all there, dont worry"
00:39:14 <glguy> that won't help it know which one to use
00:39:15 <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.
00:39:20 <iqubic> The compiler is not smart. It just does simple rewriting and instance creation.
00:39:34 <EvanR> monochrom, smh... you BOUGHT the code? smh
00:39:42 <iqubic> If you can't tell which instance to choose, then how the heck do you expect the compiler to do it for you?
00:39:48 <monochrom> copies! just copies.
00:39:58 <EvanR> that's like buying food
00:40:18 <monochrom> It was also the latter days when those programs became very long.
00:40:18 <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.
00:40:26 <haskellbridge> <zoil> THANKS!
00:40:38 <EvanR> yes I had this flight simulator program which was several pages
00:40:43 <EvanR> cool program
00:40:46 <haskellbridge> <zoil> _facepalm_
00:40:47 <glguy> zoil: you can probably combine the Show case just fine, it's the Read one that you'll struggle with
00:41:00 <haskellbridge> <zoil> how so?
00:41:20 <haskellbridge> <zoil> it needs to diferentiate between if its the basecase (S Z) or the recursive case (S (S n))
00:41:28 <glguy> because show gets an argument that let's it learn what the type is
00:41:37 <haskellbridge> <zoil> (im going to start counting from one for nonempty containers in future versions...)
00:42:08 <haskellbridge> <zoil> it throws an error for both the read and show case
00:42:39 <haskellbridge> <zoil> also, the type ambiguity doesnt inhibit the read instance
00:43:35 <haskellbridge> <zoil> i would think basically, that if i gave it a newtype, that this would serve as such an assertion
00:43:42 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:43:46 <haskellbridge> <zoil> but it just looks underneath and still demands the underlying constraint
00:44:08 <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`.
00:44:53 <haskellbridge> <zoil> thanks! i thought it would be a known issue
00:45:44 <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.
00:46:11 <glguy> zoil: merging Show would be like: https://paste.tomsmeding.com/UEfrQUiN
00:47:07 <haskellbridge> <zoil> oh wow! thats awesome, i never thought thats what you meant when you said it could go in one instance
00:47:14 <haskellbridge> <zoil> so you just put a type family for the constraint
00:47:15 <haskellbridge> <zoil> thats cool
00:47:23 <haskellbridge> <zoil> and your saying thats not possible for the readd instance?
00:47:34 <glguy> right
00:47:58 <haskellbridge> <zoil> forgive me, i dont imidiately see the difference
00:48:06 <glguy> One has a https://en.wikipedia.org/wiki/Witness_(mathematics)
00:48:15 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
00:48:25 <glguy> the argument to show witnesses what type show is being instantiated at
00:48:32 <haskellbridge> <zoil> but i can supply a type application?
00:48:48 <glguy> No, that's not enough
00:48:57 <haskellbridge> <zoil> read @(Cons Int (Last Bool))
00:49:16 <glguy> That that's not usable information in the implementation of read itself on this type
00:49:26 <haskellbridge> <zoil> * @(HList (Cons
00:49:54 <glguy> the argument to show is a value that's going to exist at runtime
00:50:33 <haskellbridge> <zoil> well i could provide a proxy...
00:51:12 <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?
00:51:18 <haskellbridge> <zoil> because of the type family?
00:51:27 <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)
00:51:29 <haskellbridge> <zoil> or does it just work the way id like it too! :_D
00:51:47 <haskellbridge> <zoil> no type information at runtime! oh no!
00:51:56 <glguy> You'd have to make a new GADTs so that at runtime you can learn which type is needed via case
00:52:00 <haskellbridge> <zoil> that sounds like the kind of thing the compiler is fussy about
00:52:08 <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 { ... } }`.
00:52:21 <glguy> It's not that it's fussy; it's just that it if the information has been erased, you can't use it
00:52:35 <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
00:53:03 <haskellbridge> <zoil> i dont see why it would erase type information from a proxy, thats all they are for! crazy compiler
00:53:07 <glguy> read doesn't have a place to put the runtime type witness, it's type is fixed by the type class definition
00:53:19 <glguy> proxies are not for runtime type information
00:53:41 <glguy> singletons are
00:54:47 <haskellbridge> <zoil> thats what learys answer looks like its managing to acheive
00:54:48 glguy ponders if that's exactly right, but anyway, the way to get type information from a value is using a GADT
00:55:33 <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
00:55:43 <glguy> yeah, it's better to just not overcomplicate your program
00:55:46 <haskellbridge> <zoil> but, iiuc your saying its theoretically possivle
00:55:51 <haskellbridge> <zoil> possible*
00:56:07 <haskellbridge> <zoil> id rather do it right at the onset, than have these constraints following me around
00:56:28 <glguy> this route leads to brittle programs that are hard to update and refactor
00:56:37 <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
00:56:49 <glguy> and a mess of complicated error messages and special utility functions to manage it all
00:57:15 <haskellbridge> <zoil> https://kf8nh.com/_heisenbridge/media/matrix.org/hTIHFOzGuFAqswyfkLuIVoBL/yfXyRcmB1_8/image.png
00:57:50 <haskellbridge> <zoil> id rather just be able to read off constraints that arent insane
00:58:04 <haskellbridge> <zoil> like, the stateful constraints make sense, but the length constraint is just garbage
00:59:16 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:00:32 <haskellbridge> <zoil> maybe it would be worth trying the length version, thats really common
01:01:00 X-Scale joins (~ARM@6.67.114.89.rev.vodafone.pt)
01:01:12 peterbecich joins (~Thunderbi@172.222.148.214)
01:01:31 <haskellbridge> <zoil> https://paste.tomsmeding.com/gHFMMx2t
01:03:32 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
01:04:44 <haskellbridge> <zoil> i have to go actually
01:05:00 <haskellbridge> <zoil> so anyway, possibly singlestons help but in a way that ill probably never understand
01:05:04 <haskellbridge> <zoil> _le sigh_
01:10:27 <haskellbridge> <zoil> monochrom: you cat get back to talking about the 1950's now
01:11:53 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
01:12:07 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
01:12:47 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
01:14:39 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:16:56 × sindu quits (~sindu@2.148.32.207.tmi.telenormobil.no) (Ping timeout: 240 seconds)
01:18:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
01:18:57 × Pozyomka quits (~pyon@user/pyon) (Quit: brb)
01:19:10 Pozyomka joins (~pyon@user/pyon)
01:19:10 <EvanR> lol
01:19:49 <EvanR> the 1950s when you had like cathode ray tubes and such
01:22:08 omidmash3 joins (~omidmash@user/omidmash)
01:24:12 × omidmash quits (~omidmash@user/omidmash) (Ping timeout: 244 seconds)
01:24:12 omidmash3 is now known as omidmash
01:30:01 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:30:30 jmcantrell_ joins (~weechat@user/jmcantrell)
01:34:26 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
01:35:44 <geekosaur> some of us were still using them in the early 2000s
01:35:55 <geekosaur> degaussing my monitor every month was fun
01:41:59 <monochrom> The most bonkers was when CRT was memory rather than display. >:)
01:43:03 <haskellbridge> <iqubic (she/her)> WHAT?!?!?!
01:43:30 <glguy> HE SAID: "THE MOST BONKERS WAS WHEN...
01:43:30 <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.)
01:43:59 <monochrom> (The two popular choices were mercury tube and CRT.)
01:45:08 <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.)
01:45:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:50:25 × jmcantrell_ quits (~weechat@user/jmcantrell) (Ping timeout: 264 seconds)
01:51:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
01:52:03 <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.
01:53:45 × Pozyomka quits (~pyon@user/pyon) (Read error: Connection reset by peer)
01:54:18 Guest62 joins (~Guest62@38.49.92.193)
01:55:01 <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.
01:55:44 <glguy> Have you seen this already? https://ghc.gitlab.haskell.org/ghc/doc/users_guide/profiling.html
01:58:01 catties is now known as Catty
01:58:11 <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.
01:58:45 <jreicher> monochrom: delay line memory was always my favourite.
01:58:55 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 240 seconds)
01:59:00 × iqubic quits (~sophia@2601:602:9203:1660:c137:59bd:3f5b:b4a7) (Remote host closed the connection)
02:00:45 <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.
02:01:11 iqubic joins (~sophia@2601:602:9203:1660:c137:59bd:3f5b:b4a7)
02:01:13 <EvanR> this would be like, read the poem aloud really loud in the grand canyon, then wait
02:01:22 monochrom is an echo relay memory and a large language model.
02:01:33 <jreicher> DRAM's pretty crazy too actually. As funky as flip-flops are, they are probably the most straightforward of all the techs.
02:01:47 wickedjargon joins (~user@64.114.24.74)
02:02:03 × wickedjargon quits (~user@64.114.24.74) (Remote host closed the connection)
02:03:26 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:08:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
02:18:49 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:21:07 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Remote host closed the connection)
02:21:46 <Guest62> okay, I was able to learn heap profiling, but my graphs seem empty....
02:22:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
02:24:55 <EvanR> what is the program
02:25:35 × haskellbridge quits (~hackager@96.28.224.214) (Ping timeout: 240 seconds)
02:25:57 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
02:26:33 haskellbridge joins (~hackager@96.28.224.214)
02:26:33 ChanServ sets mode +v haskellbridge
02:27:28 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Excess Flood)
02:27:41 × jrm quits (~jrm@user/jrm) (Read error: Connection reset by peer)
02:27:55 jrm joins (~jrm@user/jrm)
02:28:10 firesquidwao joins (~a@2600:3c06::f03c:93ff:fea6:ef0e)
02:28:40 Pozyomka joins (~pyon@user/pyon)
02:28:48 × tuxpaint quits (~a@put.gay) (Read error: Connection reset by peer)
02:31:54 Googulator91 is now known as Googulator
02:32:01 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
02:34:12 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:38:35 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
02:41:57 <Guest62> It is essentially comparing an equation solver using ST Monad to one without
02:49:34 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:52:55 peterbecich joins (~Thunderbi@172.222.148.214)
02:53:25 inline__ joins (~inlinE@2001-4dd3-7fc8-0-8721-eee6-e05a-14dd.ipv6dyn.netcologne.de)
02:54:29 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
02:55:39 × Inline quits (~inlinE@2001-4dd7-868d-0-2e24-c46e-4393-27fd.ipv6dyn.netcologne.de) (Ping timeout: 244 seconds)
02:55:50 <Guest62> Okay I now have data but I still can't make sense of this data :(
03:00:38 × Googulator quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
03:00:51 Googulator joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
03:01:43 × Guest62 quits (~Guest62@38.49.92.193) (Quit: Client closed)
03:04:41 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
03:05:04 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:05:20 chiselfuse joins (~chiselfus@user/chiselfuse)
03:09:19 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
03:21:49 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:24:15 trickard_ is now known as trickard
03:26:39 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:31:06 × td_ quits (~td@i5387091E.versanet.de) (Ping timeout: 256 seconds)
03:31:07 Googulator26 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
03:31:27 × Googulator quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
03:32:55 td_ joins (~td@i53870926.versanet.de)
03:34:18 Sgeo_ joins (~Sgeo@user/sgeo)
03:36:01 × shr\ke quits (~shrike@user/shrke:31298) (Ping timeout: 264 seconds)
03:36:01 × oppili quits (~oppili@user/nerdypepper) (Ping timeout: 264 seconds)
03:36:15 srk_ joins (~sorki@user/srk)
03:36:23 dysfigured joins (~dfg@50.116.28.89)
03:36:37 nitrix_ joins (~nitrix@user/meow/nitrix)
03:36:37 × srk quits (~sorki@user/srk) (Ping timeout: 264 seconds)
03:36:40 sajith_ joins (~sajith@user/sajith)
03:36:46 natto17 joins (~natto@129.154.243.159)
03:36:47 mstruebing_ joins (~mstruebin@ns343649.ip-188-165-193.eu)
03:37:01 Googulator26 is now known as Googulator
03:37:09 × opencircuit quits (~quassel@user/opencircuit) (Read error: Connection reset by peer)
03:37:11 Athas_ joins (athas@sigkill.dk)
03:37:12 oppili joins (~oppili@lewi-27-b2-v4wan-165682-cust505.vm4.cable.virginm.net)
03:37:12 × oppili quits (~oppili@lewi-27-b2-v4wan-165682-cust505.vm4.cable.virginm.net) (Changing host)
03:37:12 oppili joins (~oppili@user/nerdypepper)
03:37:13 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 264 seconds)
03:37:13 × tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 264 seconds)
03:37:13 × machinedgod quits (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 264 seconds)
03:37:13 × nitrix quits (~nitrix@user/meow/nitrix) (Ping timeout: 264 seconds)
03:37:13 × Miroboru quits (~myrvoll@84.215.250.50) (Ping timeout: 264 seconds)
03:37:13 × natto- quits (~natto@129.154.243.159) (Ping timeout: 264 seconds)
03:37:14 × juri_ quits (~juri@implicitcad.org) (Ping timeout: 264 seconds)
03:37:14 × sajith quits (~sajith@user/sajith) (Ping timeout: 264 seconds)
03:37:14 × dfg quits (~dfg@user/dfg) (Ping timeout: 264 seconds)
03:37:14 × antti_ quits (~antti@82-181-183-83.bb.dnainternet.fi) (Ping timeout: 264 seconds)
03:37:23 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:37:24 cstml3 joins (~cstml@user/cstml)
03:37:37 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
03:37:39 benkard joins (~mulk@pd9514972.dip0.t-ipconnect.de)
03:37:46 shr\ke joins (~shrike@user/paxhumana)
03:37:46 × shr\ke quits (~shrike@user/paxhumana) (Changing host)
03:37:46 shr\ke joins (~shrike@user/shrke:31298)
03:37:49 × Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 264 seconds)
03:37:49 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 264 seconds)
03:37:49 × cstml quits (~cstml@user/cstml) (Ping timeout: 264 seconds)
03:37:49 × mulk quits (~mulk@pd9514972.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
03:37:49 × typedfern_ quits (~Typedfern@15.red-83-37-26.dynamicip.rima-tde.net) (Ping timeout: 264 seconds)
03:37:49 × Ranhir quits (~Ranhir@157.97.53.139) (Ping timeout: 264 seconds)
03:37:49 × tessier_ quits (~tessier@184.72.149.67) (Ping timeout: 264 seconds)
03:37:49 × Wanderer quits (~wanderer@user/wanderer) (Ping timeout: 264 seconds)
03:37:49 × mstruebing quits (~mstruebin@ns343649.ip-188-165-193.eu) (Ping timeout: 264 seconds)
03:37:49 × Athas quits (athas@sigkill.dk) (Ping timeout: 264 seconds)
03:37:49 benkard is now known as mulk
03:38:03 opencircuit joins (~quassel@user/opencircuit)
03:38:23 nitrix_ is now known as nitrix
03:38:30 Wanderer joins (~wanderer@user/wanderer)
03:38:39 juri_ joins (~juri@implicitcad.org)
03:38:45 machinedgod joins (~machinedg@d75-159-126-101.abhsia.telus.net)
03:38:54 antti_ joins (~antti@82-181-183-83.bb.dnainternet.fi)
03:39:02 Miroboru joins (~myrvoll@84.215.250.50)
03:39:02 srk_ is now known as srk
03:39:24 tessier joins (~tessier@ec2-184-72-149-67.compute-1.amazonaws.com)
03:41:35 <iqubic> Is it possible to dynamically see what type of token HLS thinks different things in my code are?
03:41:51 oppili- joins (~oppili@lewi-27-b2-v4wan-165682-cust505.vm4.cable.virginm.net)
03:41:52 benkard joins (~mulk@pd9514972.dip0.t-ipconnect.de)
03:42:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
03:42:01 × oppili quits (~oppili@user/nerdypepper) (Ping timeout: 264 seconds)
03:42:01 × natto17 quits (~natto@129.154.243.159) (Ping timeout: 264 seconds)
03:42:37 × opencircuit quits (~quassel@user/opencircuit) (Ping timeout: 264 seconds)
03:42:37 × mulk quits (~mulk@pd9514972.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
03:42:37 benkard is now known as mulk
03:42:45 opencircuit_ joins (~quassel@user/opencircuit)
03:43:51 natto17 joins (~natto@129.154.243.159)
03:44:25 × Miroboru quits (~myrvoll@84.215.250.50) (Ping timeout: 264 seconds)
03:45:01 × antti_ quits (~antti@82-181-183-83.bb.dnainternet.fi) (Ping timeout: 264 seconds)
03:45:01 × juri_ quits (~juri@implicitcad.org) (Ping timeout: 264 seconds)
03:45:17 Miroboru joins (~myrvoll@84.215.250.50)
03:45:33 juri_ joins (~juri@implicitcad.org)
03:46:32 antti_ joins (~antti@82-181-183-83.bb.dnainternet.fi)
03:47:54 natto- joins (~natto@129.154.243.159)
03:48:37 × natto17 quits (~natto@129.154.243.159) (Ping timeout: 264 seconds)
03:50:29 tomboy64 joins (~tomboy64@user/tomboy64)
03:50:35 Ranhir joins (~Ranhir@157.97.53.139)
03:50:36 typedfern_ joins (~Typedfern@15.red-83-37-26.dynamicip.rima-tde.net)
03:51:37 × antti_ quits (~antti@82-181-183-83.bb.dnainternet.fi) (Ping timeout: 264 seconds)
03:51:37 × juri_ quits (~juri@implicitcad.org) (Ping timeout: 264 seconds)
03:52:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:52:28 juri_ joins (~juri@implicitcad.org)
03:53:10 antti_ joins (~antti@82-181-183-83.bb.dnainternet.fi)
03:56:37 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
03:57:15 <geekosaur> probably if you run it in debug mode and monitor its debug output
03:58:44 × Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
04:00:39 Googulator31 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
04:00:43 × Googulator quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
04:07:37 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:08:35 chromoblob joins (~chromoblo@user/chromob1ot1c)
04:12:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
04:19:30 Sgeo joins (~Sgeo@user/sgeo)
04:20:14 Square joins (~Square@user/square)
04:23:00 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:28:15 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 240 seconds)
04:30:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
04:35:40 × Googulator31 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
04:35:45 Googulator39 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
04:41:04 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:45:45 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
04:53:35 × machinedgod quits (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 240 seconds)
04:55:17 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:59:39 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
05:05:43 Googulator77 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
05:05:45 × Googulator39 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
05:06:23 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:10:12 peterbecich joins (~Thunderbi@172.222.148.214)
05:10:31 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
05:21:45 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:24:29 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
05:24:43 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
05:26:03 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
05:30:56 × X-Scale quits (~ARM@6.67.114.89.rev.vodafone.pt) (Ping timeout: 240 seconds)
05:35:37 Googulator94 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
05:35:43 × Googulator77 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
05:37:07 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:41:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
05:43:54 Square2 joins (~Square4@user/square)
05:52:30 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:57:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
06:00:33 × Square quits (~Square@user/square) (Ping timeout: 260 seconds)
06:04:21 × jreicher quits (~user@user/jreicher) (Quit: In transit)
06:05:43 × haritz quits (~hrtz@user/haritz) (Remote host closed the connection)
06:06:27 takuan joins (~takuan@d8D86B9E9.access.telenet.be)
06:07:54 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:12:48 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
06:15:19 × larsivi quits (~larsivi@user/larsivi) (Ping timeout: 264 seconds)
06:23:26 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:28:00 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:31:14 dhil joins (~dhil@5.151.29.137)
06:32:16 × driib3180 quits (~driib@vmi931078.contaboserver.net) (Ping timeout: 246 seconds)
07:03:33 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 244 seconds)
07:07:15 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
07:07:22 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:11:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
07:12:46 jreicher joins (~user@user/jreicher)
07:21:16 × annamalai quits (~annamalai@2409:4042:4dc7:b66e::9eca:ef08) (Ping timeout: 246 seconds)
07:21:18 bggd joins (~bgg@2a01:e0a:fd5:f510:9b09:80f:2f26:e3ad)
07:22:46 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:27:44 annamalai joins (~annamalai@2409:4042:4dc2:f11::9e8a:e814)
07:28:57 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:29:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
07:32:03 tromp joins (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
07:34:20 Athas_ is now known as Athas
07:40:49 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:40:59 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
07:41:13 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
07:44:10 chele joins (~chele@user/chele)
07:45:34 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
07:46:51 lucabtz joins (~lucabtz@user/lucabtz)
07:51:14 <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)?
07:56:06 absence joins (torgeihe@hildring.pvv.ntnu.no)
07:56:18 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
08:00:32 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
08:01:03 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
08:01:16 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
08:09:07 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
08:09:41 chiselfuse joins (~chiselfus@user/chiselfuse)
08:13:42 Googulator20 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
08:13:50 × Googulator94 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
08:18:07 kuribas joins (~user@2a02-1810-2825-6000-91ce-6f5d-5219-16e3.ip6.access.telenet.be)
08:24:31 × tromp quits (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
08:30:37 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:30:37 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
08:34:57 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 250 seconds)
08:44:54 tromp joins (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
08:51:45 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Remote host closed the connection)
08:51:49 <lucabtz> also ive been having this issue with the haskell language server on windows + vscode https://paste.tomsmeding.com/WH7UrKNr
08:52:03 <lucabtz> may ask also on #haskell-language-server if more appropriate
08:52:55 emmanuelux joins (~emmanuelu@user/emmanuelux)
08:53:04 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 272 seconds)
08:54:44 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
08:57:31 sord937 joins (~sord937@gateway/tor-sasl/sord937)
08:59:39 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 260 seconds)
09:00:22 merijn joins (~merijn@77.242.116.146)
09:06:58 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Remote host closed the connection)
09:07:42 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 256 seconds)
09:24:40 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 255 seconds)
09:27:26 mreh joins (~matthew@host86-146-25-125.range86-146.btcentralplus.com)
09:27:50 vanishingideal joins (~vanishing@user/vanishingideal)
09:30:13 <kuribas> Is there evidence that static functional typing leads to less defects and faster development time?
09:30:53 inline__ is now known as Inline
09:31:07 <kuribas> I believe I am twice as efficient in haskell as in python/clojure/whatever.
09:31:11 <kuribas> But it's hard to convince others.
09:32:55 <kuribas> And for some tasks there is less advantages, like low level programming, complicated algorithms, ...
09:35:50 Googulator47 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
09:35:50 × Googulator20 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
09:36:18 merijn joins (~merijn@77.242.116.146)
09:40:37 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds)
09:43:08 <lortabac> kuribas: that's very hard to determine in general
09:43:55 <lortabac> for lots of tasks I'd probably be less efficient in Haskell due to a lack of libraries
09:44:40 <lortabac> which of course isn't due to the programming paradigm but is still a factor
09:44:55 <kuribas> Even worse in idris2.
09:45:34 merijn joins (~merijn@77.242.116.146)
09:46:39 <kuribas> But for our usecases haskell would do just as well.
09:46:46 <kuribas> Except maybe missing dataframe libraries.
09:46:58 <lortabac> in order to get some evidence you may measure performance on a specific task
09:47:31 <lortabac> but I think it would be very hard to get the full picture
09:47:34 <Hecate> kuribas: I feel like we're having this discussion every year haha
09:47:53 <lortabac> you need to take into account how the code evolves over time etc.
09:48:53 <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.
09:49:12 <kuribas> But refactoring would be a pita, where it would be trivial in haskell.
09:49:22 <kuribas> Changing to another schema.
09:49:57 michalz joins (~michalz@185.246.207.193)
09:50:35 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
09:51:08 <kuribas> I spend a whole day once refactoring clojure database queries, because the schema changed.
09:55:02 semifunctor parts (~omnifunct@user/semifunctor) (Leaving)
09:56:23 × poscat quits (~poscat@user/poscat) (Remote host closed the connection)
09:57:15 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
09:57:29 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
09:59:16 trickard_ is now known as trickard
09:59:30 poscat joins (~poscat@user/poscat)
10:01:12 Katarushisu joins (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net)
10:01:15 <kuribas> I suppose there are always trade-offs.
10:02:22 merijn joins (~merijn@77.242.116.146)
10:05:15 karenw joins (~karenw@user/karenw)
10:05:46 × Googulator47 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
10:05:49 Googulator50 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
10:06:31 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
10:09:22 merijn joins (~merijn@77.242.116.146)
10:10:24 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 252 seconds)
10:11:13 chromoblob joins (~chromoblo@user/chromob1ot1c)
10:12:19 × Ging_ quits (46fea76d80@2001:bc8:1210:2cd8::470) (Ping timeout: 264 seconds)
10:12:56 Ging_ joins (46fea76d80@2001:bc8:1210:2cd8::470)
10:12:59 × FANTOM quits (~fantom@212.228.181.156) (Ping timeout: 240 seconds)
10:13:21 <kuribas> Something I never felt is that exploring is easier in a dynamic language.
10:14:38 × yin quits (~zero@user/zero) (Max SendQ exceeded)
10:14:39 × srk quits (~sorki@user/srk) (Max SendQ exceeded)
10:14:56 × pavonia quits (~user@user/siracusa) (Ping timeout: 240 seconds)
10:15:20 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 244 seconds)
10:15:26 yin joins (~zero@user/zero)
10:16:10 chromoblob joins (~chromoblo@user/chromob1ot1c)
10:16:16 srk joins (~sorki@user/srk)
10:17:25 FANTOM joins (~fantom@212.228.181.156)
10:17:26 × statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
10:17:33 statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
10:19:43 × euphores quits (~SASL_euph@user/euphores) (Ping timeout: 240 seconds)
10:20:58 × statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
10:21:28 statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
10:22:36 × FANTOM quits (~fantom@212.228.181.156) (Max SendQ exceeded)
10:22:47 <jreicher> What do you mean by a "dynamic language" (it's an ambiguous term in my experience)
10:22:51 × EvanR quits (~EvanR@user/evanr) (Remote host closed the connection)
10:22:51 × chele quits (~chele@user/chele) (Remote host closed the connection)
10:22:57 × fgarcia quits (~lei@user/fgarcia) (Max SendQ exceeded)
10:23:01 chele joins (~chele@user/chele)
10:23:29 EvanR joins (~EvanR@user/evanr)
10:24:30 euphores joins (~SASL_euph@user/euphores)
10:25:44 × markasoftware quits (~quassel@107.161.26.124) (Ping timeout: 240 seconds)
10:26:21 fgarcia joins (~lei@user/fgarcia)
10:26:40 FANTOM joins (~fantom@212.228.181.156)
10:26:40 × fgarcia quits (~lei@user/fgarcia) (Max SendQ exceeded)
10:27:24 × absentia quits (~henricus@user/absentia) (Remote host closed the connection)
10:27:42 absentia joins (~henricus@user/institor)
10:29:52 <kuribas> jreicher: dynamically typed
10:30:08 <jreicher> No such thing. :D
10:33:08 fgarcia joins (~lei@user/fgarcia)
10:34:32 × fgarcia quits (~lei@user/fgarcia) (Max SendQ exceeded)
10:34:45 pavonia joins (~user@user/siracusa)
10:34:55 markasoftware joins (~quassel@2604:180:f2::217)
10:35:10 fgarcia joins (~lei@user/fgarcia)
10:35:29 × fgarcia quits (~lei@user/fgarcia) (Max SendQ exceeded)
10:35:41 × Googulator50 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
10:35:49 Googulator50 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
10:41:49 fgarcia joins (~lei@user/fgarcia)
10:42:25 X-Scale joins (~ARM@6.67.114.89.rev.vodafone.pt)
10:42:26 × fgarcia quits (~lei@user/fgarcia) (Max SendQ exceeded)
10:46:34 × vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection)
10:48:15 fgarcia joins (~lei@user/fgarcia)
10:48:36 × fgarcia quits (~lei@user/fgarcia) (Max SendQ exceeded)
10:49:11 fgarcia joins (~lei@user/fgarcia)
10:49:42 × fgarcia quits (~lei@user/fgarcia) (Max SendQ exceeded)
10:53:53 × oxapentane quits (~oxapentan@user/oxapentane) (Remote host closed the connection)
10:54:26 oxapentane joins (~oxapentan@user/oxapentane)
10:55:39 fgarcia joins (~lei@user/fgarcia)
10:56:00 × fgarcia quits (~lei@user/fgarcia) (Max SendQ exceeded)
10:58:32 timide joins (~timide@user/timide)
11:02:06 fgarcia joins (~lei@user/fgarcia)
11:02:34 × fgarcia quits (~lei@user/fgarcia) (Max SendQ exceeded)
11:03:20 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
11:05:50 × Googulator50 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
11:05:51 Googulator24 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
11:06:33 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
11:09:13 qqe joins (~qqq@185.54.20.98)
11:09:44 <kuribas> What do you mean?
11:09:57 <kuribas> You don't like the term?
11:10:32 <kuribas> It generally means lack of static typing, or at least static types that are completely optional.
11:10:48 <kuribas> I also think the term is pretty bad.
11:15:13 merijn joins (~merijn@77.242.116.146)
11:17:32 × gustrb quits (~gustrb@user/gustrb) (Quit: gustrb)
11:17:55 × qqe quits (~qqq@185.54.20.98) (Ping timeout: 240 seconds)
11:19:21 qqe joins (~qqq@185.54.20.98)
11:19:55 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
11:23:51 fp1 joins (~Thunderbi@2001:708:20:1406::1370)
11:24:34 <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.
11:24:53 × qqe quits (~qqq@185.54.20.98) (Ping timeout: 260 seconds)
11:25:24 qqe joins (~qqq@213.87.150.45)
11:31:22 merijn joins (~merijn@77.242.116.146)
11:36:10 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 245 seconds)
11:37:09 × traxex quits (traxex@user/traxex) (Ping timeout: 260 seconds)
11:42:55 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
11:43:09 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
11:45:35 merijn joins (~merijn@77.242.116.146)
11:46:12 × qqe quits (~qqq@213.87.150.45) (Read error: Connection reset by peer)
11:49:55 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
11:55:03 × fp1 quits (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 244 seconds)
11:56:05 merijn joins (~merijn@77.242.116.146)
12:01:06 comerijn joins (~merijn@77.242.116.146)
12:02:03 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
12:02:40 larsivi joins (~larsivi@2001:2020:8341:7f8b:6585:e3fb:fff4:fe3f)
12:03:24 <lortabac> the point of types is also to provide a meaning to the raw bytes
12:04:29 <lortabac> if you don't check them at runtime you end up with segmentation faults
12:06:06 <mniip> unityped perhaps?
12:06:39 <lortabac> a completely untyped system would probably be unusable
12:09:40 <lortabac> isn't unityped what dynamically-typed languages usually are? That is what they were criticising
12:10:45 <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"
12:11:29 <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.
12:12:05 <dminuoso> The presence of a static type system does not invalidate runtime assertions or checks either.
12:13:38 <lortabac> "unityped" is "dynamically typed" from the point of view of static type checking
12:13:58 <dminuoso> Sure, but that differentiation is only useful in the context of a type theory class at uni.
12:13:58 <lortabac> statically they are all the same type
12:14:12 <mniip> don't you love when the static typechecker disagrees with the runtime typechecker
12:14:16 <mniip> many such cases in python
12:14:19 × tromp quits (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:14:22 <lortabac> :)
12:15:22 <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.
12:16:03 <dminuoso> As long as the type checker in python saves me more time on average than it wastes on account being wrong, its useful.
12:33:23 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
12:38:24 tromp joins (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
12:39:29 <kuribas> jreicher: So you don't like the term...
12:39:53 <kuribas> jreicher: But dynamic language proponents don't think of types in terms of type theory.
12:40:15 <kuribas> For example a type may be a class, which is a runtime entity.
12:43:10 wootehfoot joins (~wootehfoo@user/wootehfoot)
12:54:44 × yin quits (~zero@user/zero) (Ping timeout: 260 seconds)
12:54:58 yin joins (~zero@user/zero)
12:55:54 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Ping timeout: 260 seconds)
12:58:07 ttybitnik joins (~ttybitnik@user/wolper)
12:58:47 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
13:05:10 Googulator24 is now known as Googulator
13:10:04 fp1 joins (~Thunderbi@2001:708:20:1406::10c5)
13:13:56 × Googulator quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
13:14:16 Googulator joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
13:18:37 × fp1 quits (~Thunderbi@2001:708:20:1406::10c5) (Ping timeout: 246 seconds)
13:19:16 × karenw quits (~karenw@user/karenw) (Ping timeout: 244 seconds)
13:22:08 × X-Scale quits (~ARM@6.67.114.89.rev.vodafone.pt) (Ping timeout: 240 seconds)
13:25:04 × larsivi quits (~larsivi@2001:2020:8341:7f8b:6585:e3fb:fff4:fe3f) (Ping timeout: 260 seconds)
13:25:46 fp1 joins (~Thunderbi@2001:708:20:1406::1370)
13:34:37 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
13:35:30 × Googulator quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
13:35:42 Googulator joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
13:37:08 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
13:37:39 X-Scale joins (~ARM@6.67.114.89.rev.vodafone.pt)
13:38:43 × fp1 quits (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 265 seconds)
13:42:31 × turlando_ quits (~turlando@user/turlando) (Ping timeout: 244 seconds)
13:42:45 turlando joins (~turlando@user/turlando)
13:45:48 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
13:47:10 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 244 seconds)
13:47:45 wootehfoot joins (~wootehfoo@user/wootehfoot)
13:50:05 haritz joins (~hrtz@140.228.70.141)
13:50:05 × haritz quits (~hrtz@140.228.70.141) (Changing host)
13:50:05 haritz joins (~hrtz@user/haritz)
13:54:10 __monty__ joins (~toonn@user/toonn)
13:54:11 × __monty__ quits (~toonn@user/toonn) (Client Quit)
13:54:49 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds)
13:57:36 __monty__ joins (~toonn@user/toonn)
14:06:14 merijn joins (~merijn@77.242.116.146)
14:10:18 × vgtw_ quits (~vgtw@user/vgtw) (Ping timeout: 256 seconds)
14:10:45 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 245 seconds)
14:13:05 vgtw joins (~vgtw@user/vgtw)
14:13:45 merijn joins (~merijn@77.242.116.146)
14:16:20 × infinity0 quits (~infinity0@pwned.gg) (Quit: WeeChat 4.6.3)
14:17:00 infinity0 joins (~infinity0@pwned.gg)
14:20:44 spew joins (~spew@user/spew)
14:31:39 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
14:35:09 ephemient joins (uid407513@user/ephemient)
14:36:16 fgarcia joins (~lei@user/fgarcia)
14:39:06 sindu joins (~sindu@2.148.32.207.tmi.telenormobil.no)
14:45:01 Sgeo joins (~Sgeo@user/sgeo)
14:49:04 × spew quits (~spew@user/spew) (Quit: WeeChat 4.7.2)
14:49:14 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
14:49:28 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
14:51:17 × Inline quits (~inlinE@2001-4dd3-7fc8-0-8721-eee6-e05a-14dd.ipv6dyn.netcologne.de) (Remote host closed the connection)
14:54:51 Square joins (~Square@user/square)
14:56:46 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
14:57:26 gmg joins (~user@user/gehmehgeh)
14:58:31 × Square2 quits (~Square4@user/square) (Ping timeout: 240 seconds)
15:02:03 Inline joins (~inlinE@2001-4dd3-7fc8-0-2be-fec0-ba58-7d11.ipv6dyn.netcologne.de)
15:11:26 × jzargo quits (~jzargo@user/jzargo) (Read error: Connection reset by peer)
15:11:47 spew joins (~spew@user/spew)
15:16:18 jzargo joins (~jzargo@user/jzargo)
15:16:37 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
15:20:29 × tromp quits (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:26:36 tromp joins (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
15:29:06 × ttybitnik quits (~ttybitnik@user/wolper) (Quit: Fading out...)
15:32:46 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
15:33:00 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
15:41:09 <lucabtz> https://paste.tomsmeding.com/HQQ4rMFc which indentation style do you prefer where?
15:41:16 <lucabtz> s/where/here
15:43:35 <Leary> They're both fugly.
15:43:50 <lucabtz> which do you use?
15:43:57 <Leary> How about: https://paste.tomsmeding.com/L3gjxpuS
15:45:23 <lucabtz> yeah i like that
15:45:29 <lucabtz> i need to pick up a style
15:47:54 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 272 seconds)
15:47:54 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 272 seconds)
15:48:21 chexum joins (~quassel@gateway/tor-sasl/chexum)
15:49:53 ChaiTRex joins (~ChaiTRex@user/chaitrex)
15:58:15 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
15:59:34 <kuribas> Can I turn off these stupid stan warning in lsp?
15:59:58 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 246 seconds)
16:00:37 <tomsmeding> kuribas: you somehow have to set haskell.plugin.stan.globalOn = false in the configuration for HLS in your LSP client
16:00:46 <tomsmeding> how you do this differs per editor
16:01:19 <haskellbridge> <loonycyborg> Upgrade to GHC 9.12. It doesn't support that plugin :P
16:01:50 traxex joins (traxex@user/traxex)
16:02:32 × __monty__ quits (~toonn@user/toonn) (Ping timeout: 240 seconds)
16:04:27 larsivi joins (~larsivi@2a01:563:99:a400:1cc0:4d50:b9e7:edd1)
16:05:25 <tomsmeding> kuribas: https://haskell-language-server.readthedocs.io/en/stable/configuration.html
16:06:24 merijn joins (~merijn@77.242.116.146)
16:07:29 <fgarcia> i like the suggested one at the top. with that it helps me know what to expect from what was written near instantly
16:08:29 <merijn> awkward line wrapping and indentation is one of the main reasons I argue for never using let-in unless you have to :p
16:09:11 <tomsmeding> I'm confused, what's wrong with https://paste.tomsmeding.com/Zcd4imHd ?
16:09:54 <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)
16:10:08 <tomsmeding> I dislike 'where' for not being an expression, so you can only put it at very specific places in the grammar
16:10:20 <merijn> tomsmeding: See, I consider that a feature :p
16:11:12 Googulator76 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
16:11:26 × Googulator quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
16:11:51 <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'
16:12:47 <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
16:14:04 <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
16:14:22 <tomsmeding> yes, you can write this as a 'where', but then it's scoped over the whole functoin, not just this guard branch
16:18:40 <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
16:19:14 <lucabtz> however conveniently "let " is four characters and if you use 4 spaces indentation it is actually simple to align them your way too
16:19:26 <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
16:19:37 <merijn> tomsmeding: That's solved easily by using more where
16:19:59 <merijn> defining a name implementation per case, with their own where :p
16:20:17 <merijn> lucabtz: The problem is the in :p
16:20:21 <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"
16:20:50 <tomsmeding> merijn: more top-level functions you mean?
16:20:56 <tomsmeding> right, that's possible
16:21:15 <lucabtz> i didnt mean to align the body with the bindings, just the bidings need to be aligned
16:21:21 <tomsmeding> oh for sure
16:21:28 <tomsmeding> but 'let' already syntactically requires the bindings to be aligned
16:21:41 <lucabtz> if you have a new-line and indentation it works with any kind of indentation you have
16:21:42 <merijn> tomsmeding: No, not top level nested in the where of printStats
16:22:02 <tomsmeding> merijn: ah
16:22:02 <merijn> tomsmeding: Also, that example is trivially simplified by using do and it's let sugar, letting you skip the in entirely :p
16:22:12 <tomsmeding> and that is better how? :P
16:22:20 <lucabtz> if you put let x = y \n then in the new line the alignment works well only if you tab with four spaces
16:22:21 <tomsmeding> I disagree with "simplified"
16:22:26 <tomsmeding> it suggests a monad where there is none
16:22:37 <tomsmeding> lucabtz: yep, true
16:22:39 <merijn> tomsmeding: Your return type is IO?
16:22:46 <tomsmeding> oh
16:22:51 <merijn> #rekt
16:22:52 <tomsmeding> I guess, yes, in this case
16:22:54 <tomsmeding> :p
16:23:11 <tomsmeding> #rekt takes me back to high school
16:23:15 <lucabtz> so for one binding that option works well, but for multiple ones idk
16:23:35 <merijn> tomsmeding: tbh, I'd probably rewrite that to use `concat` to simplify line-wrapping the string too
16:23:35 <tomsmeding> lucabtz: what's your preferred indentation size?
16:23:52 <tomsmeding> yeah also possible
16:24:27 <lucabtz> it is 4 but i dont like that the style imposes 4 to be used
16:24:32 <tomsmeding> I see
16:24:55 <tomsmeding> I don't have that opinion but I respect you having it :p
16:25:12 <lucabtz> :p
16:25:29 <tomsmeding> another reason to not use my style: if you program with a proportional font
16:25:33 <tomsmeding> a colleague of mine does that
16:25:54 <tomsmeding> programming haskell with a proportional font is mostly feasible only if you only read your own code though :p
16:26:07 <lucabtz> though if you have only one binding i think your style is more readable
16:26:45 <merijn> Proportional font should be a crime
16:26:46 machinedgod joins (~machinedg@d75-159-126-101.abhsia.telus.net)
16:27:00 <lucabtz> there is no [a] -> Int -> Maybe a safe list indexing in base?
16:27:14 <tomsmeding> no
16:27:22 <lucabtz> sad
16:27:32 <lucabtz> i found atZ using hoogle though
16:27:36 <tomsmeding> there is atMay here https://hackage.haskell.org/package/safe-0.3.21/docs/Safe.html
16:28:08 <lucabtz> https://hackage.haskell.org/package/errors-2.3.0/docs/Control-Error-Safe.html#v:atZ this looks more general
16:28:11 <merijn> lucabtz: "\l n -> listToMaybe $ drop n l" :p
16:28:16 <Leary> @hoogle [a] -> Int -> Maybe a
16:28:17 <lambdabot> Data.List (!?) :: [a] -> Int -> Maybe a
16:28:17 <lambdabot> GHC.List (!?) :: [a] -> Int -> Maybe a
16:28:17 <lambdabot> Safe atMay :: [a] -> Int -> Maybe a
16:28:37 <tomsmeding> oh?
16:28:42 <tomsmeding> % :i !?
16:28:42 <yahb2> <interactive>:1:1: error: [GHC-76037] Not in scope: ‘!?’
16:28:42 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
16:28:45 <tomsmeding> % :i Data.List.!?
16:28:45 <yahb2> (GHC.Internal.List.!?) :: [a] -> Int -> Maybe a ; -- Defined in ‘GHC.Internal.List’ ; infixl 9 GHC.Internal.List.!?
16:28:47 <tomsmeding> TIL
16:28:56 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
16:29:00 <tomsmeding> lucabtz: ^
16:29:24 <lucabtz> cool
16:29:31 <lucabtz> hoogle didnt find it :(
16:29:46 <tomsmeding> https://hoogle.haskell.org/?hoogle=%5Ba%5D+-%3E+Int+-%3E+Maybe+a&scope=set%3Astackage
16:29:52 <tomsmeding> works for me (tm)
16:29:55 <lucabtz> yeah
16:29:56 <fgarcia> you didn't ask but i recommend the font 'Luculent'. it is lovely. i think people who write haskell will appreciate it
16:29:58 <lucabtz> also for me now
16:30:24 <lucabtz> didnt work earlier, im sure i typed [a] -> a -> Maybe a
16:30:30 <lucabtz> i must be hallucinating
16:30:32 <tomsmeding> fgarcia: font exchange time: mononoki
16:31:05 <tomsmeding> that bold here looks very ugly, but the regular is decent https://online-fonts.com/fonts/luculent
16:31:54 <fgarcia> tomsmeding: ooo thank you!
16:32:42 <fgarcia> that is a cool site. finally a specimen i can look at!
16:33:07 <tomsmeding> (just found it by searching for "luculent font" :p)
16:34:49 <fgarcia> oh i should probably link the creator's site http://eastfarthing.com/luculent/
16:35:14 <tomsmeding> nope, that's not for me :p
16:35:39 <lucabtz> gtg thank you!
16:35:59 × lucabtz quits (~lucabtz@user/lucabtz) (Remote host closed the connection)
16:36:36 × spew quits (~spew@user/spew) (Remote host closed the connection)
16:46:54 chromoblob joins (~chromoblo@user/chromob1ot1c)
16:51:55 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
16:54:39 karenw joins (~karenw@user/karenw)
16:56:12 Pixi` is now known as Pixi
17:00:26 trickard_ is now known as trickard
17:08:11 __monty__ joins (~toonn@user/toonn)
17:09:19 × tromp quits (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:14:15 × Square quits (~Square@user/square) (Ping timeout: 240 seconds)
17:14:42 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
17:15:39 × Googulator76 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
17:15:44 gmg joins (~user@user/gehmehgeh)
17:15:47 Googulator76 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
17:16:37 <ski> tomsmeding : `where' also does attach to `case'-`of' branches
17:18:03 ChanServ sets topic to "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"
17:19:41 <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
17:20:54 tromp joins (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
17:23:49 <__monty__> Potentially relevant factor is that it's only 12 days this year!
17:24:06 <__monty__> glguy: Such an elegant part 2.
17:24:45 <glguy> oh, thanks!
17:30:33 target_i joins (~target_i@user/target-i/x-6023099)
17:31:37 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
17:32:04 Tuplanolla joins (~Tuplanoll@91-152-225-194.elisa-laajakaista.fi)
17:41:37 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:42:11 <iqubic> Yeah, I just did a dumb replicate solution.
17:44:37 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
17:54:23 × tromp quits (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:57:45 × tomboy64 quits (~tomboy64@user/tomboy64) (Read error: Connection reset by peer)
17:57:51 tomboy65 joins (~tomboy64@user/tomboy64)
18:03:46 × sindu quits (~sindu@2.148.32.207.tmi.telenormobil.no) (Ping timeout: 256 seconds)
18:05:28 sindu joins (~sindu@2.148.32.207.tmi.telenormobil.no)
18:05:43 <__monty__> Wouldn't call that dumb. Can't figure out how you dealt with direction changes, and going left from the start.
18:06:46 × finsternis quits (~X@23.226.237.192) (Remote host closed the connection)
18:07:36 <tomsmeding> glguy: if I'm still on there and you need space, feel free to remove me, too busy this year
18:08:47 <tomsmeding> ski: `let' also works in function applications :p
18:12:25 <ski> tomsmeding : yea, just saying it would be possible to use `where', and have the scope restricted to that branch
18:13:21 <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
18:13:26 <tomsmeding> 'let' just works
18:14:07 <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
18:15:34 spew joins (~spew@user/spew)
18:15:34 × Googulator76 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
18:15:37 RMSBach joins (~RMSBach@2603:6013:9b00:a7c8:e7e5:f272:eb86:ddf)
18:15:46 Googulator76 joins (~Googulato@84-236-53-137.pool.digikabel.hu)
18:20:09 tromp joins (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613)
18:41:53 ski nods
18:43:29 ljdarj joins (~Thunderbi@user/ljdarj)
18:46:01 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
18:47:37 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 246 seconds)
18:50:31 ljdarj joins (~Thunderbi@user/ljdarj)
18:51:07 ljdarj1 joins (~Thunderbi@user/ljdarj)
18:54:55 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
18:54:55 ljdarj1 is now known as ljdarj
18:58:48 peterbecich joins (~Thunderbi@172.222.148.214)
19:05:51 × larsivi quits (~larsivi@2a01:563:99:a400:1cc0:4d50:b9e7:edd1) (Quit: WeeChat 4.7.2)
19:06:58 × Ranhir quits (~Ranhir@157.97.53.139) (Ping timeout: 255 seconds)
19:07:15 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 240 seconds)
19:15:42 Googulator60 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
19:17:11 × skum quits (~skum@user/skum) (Quit: WeeChat 4.7.2)
19:17:37 × Googulator76 quits (~Googulato@84-236-53-137.pool.digikabel.hu) (Quit: Client closed)
19:20:07 ttybitnik joins (~ttybitnik@user/wolper)
19:29:35 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
19:30:08 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
19:33:45 Ranhir joins (~Ranhir@157.97.53.139)
19:36:35 Digitteknohippie joins (~user@user/digit)
19:36:55 × Digit quits (~user@user/digit) (Ping timeout: 264 seconds)
19:47:13 pavonia joins (~user@user/siracusa)
19:49:30 <haskellbridge> <sm> I find that bothersome too, I wish where worked everywhere
19:50:16 <haskellbridge> <sm> when using it, the code feels/appears more modular than when using let
19:56:11 ljdarj1 joins (~Thunderbi@user/ljdarj)
19:56:33 peterbecich joins (~Thunderbi@172.222.148.214)
19:56:57 <[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.
19:57:11 <[exa]> (Then I killed the project and continued elsewhere)
19:57:53 <[exa]> anyway
19:58:15 <EvanR> whereanywhere
19:58:41 <monochrom> I like substitution brackets. But only the [var:=expr] kind, not the [x/y] or [y/x] kind.
19:58:58 <[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
19:59:47 <[exa]> monochrom: the slashes are confusing me, if there's just 2 variables I never know which of them gets replaced
19:59:54 <monochrom> Hey thanks for the idea! I have been looking for interesting syntax for parser homework. :)
19:59:55 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
20:00:11 <monochrom> Yeah my reason too.
20:00:12 × ljdarj1 quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
20:00:21 <[exa]> lol makes me wonder why this didn't get to my homeworks
20:00:23 <[exa]> good point
20:00:25 <[exa]> :D
20:02:36 <EvanR> [x/y] makes no sense to me
20:02:53 <EvanR> I can never remember what is being replaced with what
20:03:12 <chromoblob> me too
20:03:18 ljdarj joins (~Thunderbi@user/ljdarj)
20:03:29 <[exa]> and then you read a paper and they do [x\y] to disambiguate for good
20:03:45 <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>".)
20:03:55 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
20:04:08 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
20:04:27 × iqubic quits (~sophia@2601:602:9203:1660:c137:59bd:3f5b:b4a7) (Remote host closed the connection)
20:04:51 <mauke> monochrom: have you already done here-docs?
20:05:07 <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!
20:05:20 <monochrom> No.
20:07:26 <mauke> that's one of the more interesting wrinkles I know of that are in real use
20:07:50 <[exa]> oh I wish editors had proper support for hiding these (and popping them out)
20:08:21 <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
20:08:37 <tomsmeding> it doesn't quite work because it replaces _all_ occurrences, not just one
20:09:06 × kuribas quits (~user@2a02-1810-2825-6000-91ce-6f5d-5219-16e3.ip6.access.telenet.be) (Remote host closed the connection)
20:09:22 <mauke> tomsmeding: yeah, that's just (morally) wrong
20:09:32 <EvanR> lol
20:09:45 <chromoblob> i made that mnemonic too, but then i saw [x/y] defined to mean the opposite, replace x with y
20:09:59 <EvanR> maybe if you insist that it's a string of multiplied primes
20:10:00 <[exa]> I'm grateful for the mnemonic
20:10:02 <[exa]> but aaaaaaaaaaaaaa
20:10:06 <EvanR> at most one each
20:10:11 <mauke> the correct syntax should be ${foo/x/y}
20:10:18 <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.
20:10:20 <tomsmeding> lol!
20:10:28 <[exa]> EvanR: [goedel voice:] ofcourse it's a string of multiplied primes!
20:10:55 <EvanR> well 4 is not prime
20:11:01 <tomsmeding> yes I'm not saying it's good notation or that the mnemonic is perfect, but it works for me :p
20:11:20 <monochrom> [x/y/g] >:)
20:11:29 <tomsmeding> and authors that use it the other way round should just be shooed back to their writing desk and replace / with :=
20:11:51 × spew quits (~spew@user/spew) (Quit: spew)
20:12:18 <tomsmeding> I read it as "E with x for y"
20:12:26 <[exa]> tomsmeding: isn't that quite inconvenient to read if your replacement is a long term
20:12:43 <[exa]> (probably not a concern for symbolic logic papers tho)
20:12:46 <tomsmeding> if the term to replace is long, you mean?
20:13:14 <[exa]> yes, [blab-las+dweur*yiwuerywer/y] looks unhappy
20:13:32 <tomsmeding> oh right
20:13:33 <EvanR> that they never actually write concrete examples is why it's hard to remember
20:13:40 <EvanR> it's like... x and y
20:13:45 <tomsmeding> EvanR: no it's because the notation is bad
20:13:49 <EvanR> also that
20:14:08 <[exa]> tomsmeding: anyway yeah that PR was full of surprise
20:14:37 <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
20:14:45 <tomsmeding> if I was, I'm not sure I would have passed that change
20:14:56 <tomsmeding> people who write fmap ` fmap ` fmap can just do that in some other editor
20:15:24 <tomsmeding> also, if I'd be listed, I would feel the responsibility to make sure that the syntax file is actually correct
20:15:30 <tomsmeding> which I do _not_ want to do because that's a hell of a job
20:15:36 <tomsmeding> and probably impossible
20:15:46 <tomsmeding> it's best-effort anyway
20:17:14 <chromoblob> >:(
20:17:47 <ski> EvanR : the idea with `[x/y]' is that `y' is "divided away" and `x' is "multiplied in", in its place(s)
20:18:10 <EvanR> yes I saw that just now
20:18:24 <ski> ah, tomsmeding said
20:18:30 <EvanR> "interesting"
20:18:35 <mauke> then they should have written [/y*x]
20:18:49 <tomsmeding> no, clearly that's dividing by _both_ y and x
20:18:53 <EvanR> lol
20:19:00 <tomsmeding> (/s)
20:19:10 <EvanR> use reverse polish obv
20:19:24 <tomsmeding> [x*y/]?
20:19:25 <EvanR> [y / x *]
20:19:32 <tomsmeding> ah right
20:19:56 <EvanR> now we have the other notation almost
20:20:19 <ski> [y x * /]
20:22:23 <ski> the phrase "substitute `x' for `y' in `...'" always sounded a bit awkward, to me
20:23:39 <[exa]> [x/y] ~~flip~~> ]y/x[ ...intuitive!
20:24:47 skum joins (~skum@user/skum)
20:27:19 × dhil quits (~dhil@5.151.29.137) (Ping timeout: 240 seconds)
20:29:42 <tomsmeding> makes me think of the notation for (half)-open intervals [x,y[, as opposed to the (to me) more usual [x,y)
20:29:58 <EvanR> [x,y[ looks insane
20:29:58 <ski> both look quite ugly, to me
20:29:59 <RMSBach> That phrase sounds pretty normal to me. It is at least more immediately obvious than the notation under discussion.
20:30:38 <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
20:31:21 <[exa]> if someone's syntax looks like a stupid joke in #haskell, you know there's an issue
20:31:29 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 260 seconds)
20:31:40 <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
20:32:27 <[exa]> what's the better way to write [x,y) interval btw? (I thought that one is pretty much standard)
20:32:47 <ski> (my immediate reading, when first encountering it, was the opposite reading of the intended one)
20:33:04 <EvanR> substitute x, does this phrase mean x is going in, or being replaced
20:33:14 <EvanR> maybe the issue is with english
20:33:28 <ski> mm
20:33:42 <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"
20:35:09 <ski> [exa] : mayhaps ⌜{x ≤ < y}⌝, or something along those lines ..
20:35:42 <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.
20:36:22 <[exa]> ski: yeah I sometimes use that too if I've got the middle value to write
20:37:08 <[exa]> RMSBach: tbh for non-english people the meaning of `for` is completely inexplicable in the phrase
20:39:49 <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.
20:40:00 <ski> RMSBach : yea, i'm not really much familiar with the phrase, in a colloquial sense, either
20:40:27 <ski> (also, if you respond like that, it looks like you're quoting me, which looks confusing)
20:41:08 <ski> [exa] : which middle value ?
20:41:43 <RMSBach> I vote for `[y:=x]` fwiw]
20:43:48 <RMSBach> I think the majority of lambda calculus materials I have read used that notation for beta reduction
20:44:02 <ski> there's also `[y |-> x]'
20:44:54 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:45:17 <EvanR> x gets replaced with y, got it
20:45:33 <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)
20:45:35 <EvanR> or is it y transforms to x
20:45:54 <ski> the latter (is what i would say)
20:46:02 <RMSBach> That's how I read it too
20:46:37 <EvanR> visually a think of substitution as some term coming in and overwriting the x
20:46:38 <RMSBach> I guess interpretation flies in the face of the intelligibility of the mark even when we escape natural language
20:47:11 <ski> but i'm sure someone would hold the other interpretation, just to confuse things
20:52:01 × ouilemur quits (~jgmerritt@user/ouilemur) (Quit: WeeChat 4.7.0)
20:53:20 <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"
20:53:33 <merijn> What does ghcup base it's recommend versions on?
20:53:35 × karenw quits (~karenw@user/karenw) (Ping timeout: 240 seconds)
20:54:26 <mauke> vibes?
20:55:01 <ski> [r] x = t if r(x) defined and t = r(x)
20:55:08 <ski> [r] x = x if r(x) undefined
20:55:17 <ski> [r] (t u) = ([r] t) ([r] u)
20:55:18 <geekosaur> mostly on widest compatibility/lack of bugs
20:55:19 <ski> ...
20:55:51 <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
20:56:16 <geekosaur> ghcc was held back to 9.4 until 9.6.7 fixed a key bug
20:56:50 <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
20:57:08 <fgarcia> would it be possible to use those terms in functions? then f(y) could be written as a substitution for f(x)
20:57:51 <EvanR> ski, I'm not understanding your definitions above. What's r(x)
20:59:08 <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
20:59:37 <geekosaur> *ghc
21:00:18 <ski> doc : think of `[y:=x]' as `x' is assigned into mutable slot `y', or as `y' is now defined as being `x'
21:01:25 <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
21:02:10 <tomsmeding> [exa]: [x,y) is the standard one, it's [x,y[ that I was complaining about
21:04:17 <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')
21:05:02 <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)
21:06:17 <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)
21:06:44 <ski> fgarcia : how do you mean ?
21:08:34 <ski> tomsmeding : i believe `[x,y)' is in english-influenced, and `[x,y[' in german-influenced. not sure about french nor russian
21:08:57 <tomsmeding> possibly, yes
21:09:06 <tomsmeding> though here in the netherlands we do [x,y) too
21:09:39 <ski> (here it's `[x,y[')
21:09:54 <tomsmeding> "here" is sweden?
21:10:09 <ski> aye
21:10:28 × Googulator60 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
21:10:44 Googulator60 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
21:11:44 <merijn> hmmm
21:11:56 <merijn> cabal 3.16 seems to have a stupid bug >.>
21:11:59 <merijn> "[Info] . already exists. Backing up old version in ..save0"
21:12:03 <merijn> yeah...no shit
21:12:11 <tomsmeding> ski: Wikipedia claims that ]a,b[ was introduced by Bourbaki https://en.wikipedia.org/wiki/Interval_(mathematics)#Notations_for_intervals
21:12:23 <ski> ah, interesting
21:12:24 <tomsmeding> merijn: what are you trying to do
21:12:31 <merijn> tomsmeding: Just "cabal init"
21:12:34 <tomsmeding> lol
21:12:48 <merijn> tomsmeding: To set up my AoC repo
21:13:25 <tomsmeding> merijn: I do not get that if I run 'cabal init' in an empty dir
21:13:48 <merijn> tomsmeding: Do you have it set to interactive?
21:14:00 <tomsmeding> I had to press enter like a 100 times, so I presume yes
21:14:21 <merijn> My directory just has a bunch of other directories in it from previous years
21:14:42 <tomsmeding> but doesn't `cabal init` start a new package in the _current_ directory?
21:14:51 <merijn> It should, yes
21:15:09 <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."
21:15:46 <tomsmeding> merijn: if I `mkdir a` `mkdir b` `cabal init` then I still don't get your message
21:16:01 <tomsmeding> ski: long live ambiguous notation in mathematics
21:16:18 <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)
21:16:27 <tomsmeding> ah
21:16:28 <merijn> And that breaking in recent cabal
21:16:38 <tomsmeding> possibly, yes, I haven't changed those defaults
21:16:48 <tomsmeding> bug report time?
21:17:44 <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
21:17:44 <jreicher> "type". Of course I don't get to say how people use a word though.
21:18:00 <jreicher> ...anything with types at runtime...
21:18:59 <tomsmeding> it seems the theme of today is "words mean different things to different people"
21:19:15 <jreicher> OMG. That never happens.
21:21:16 <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)."
21:22:58 <jreicher> tomsmeding: [exa]: regarding Haskell syntax in vim, it's not using treesitter? Maybe it's only neovim...
21:23:12 <merijn> jreicher: treesitter is only neovim
21:23:37 <jreicher> Ah. I wonder why vim hasn't started supporting it.
21:23:54 <merijn> it's one of the main reasons I switched to neovim
21:23:54 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 244 seconds)
21:24:00 <tomsmeding> and also, even though neovim supports tree-sitter, it doesn't bundle a Haskell grammar by default, it seems
21:24:13 <merijn> That being said, the haskell treesitter grammar is kinda ugly as sin
21:24:16 <jreicher> Emacs doesn't either. I think the grammars are still moving targets.
21:24:21 <merijn> tomsmeding: It doesn't bundle any grammars at all by default
21:24:28 <merijn> You gotta "TSInstall haskell"
21:24:36 <tomsmeding> merijn: :help treesitter
21:24:49 <tomsmeding> "Nvim includes these parsers: C, Lua, Markdown, Vimscript, Vimdoc, Treesitter query files"
21:24:50 <jreicher> Building a grammar is quite easy though.
21:24:57 <tomsmeding> ever tried properly parsing haskell?
21:24:57 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
21:25:06 <merijn> tomsmeding: Yes
21:25:24 <tomsmeding> (I was saying that to jreicher)
21:25:36 <jreicher> I just mean building the treesitter grammar. I didn't mean writing one. :)
21:25:40 <tomsmeding> right :)
21:26:02 <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
21:26:27 <merijn> tomsmeding: Sure
21:26:29 <ski> fgarcia : do you have an example of "use those terms in functions" ?
21:26:37 <merijn> tomsmeding: But humor me and open the haskell tree sitter grammar :)
21:26:58 <tomsmeding> merijn: any part in particular you want me to look at
21:27:00 <ski> (not quite getting the context)
21:27:10 <merijn> tomsmeding: It really doesn't matter :p
21:27:22 <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)
21:27:34 <merijn> tomsmeding: That's not because it's TS grammar
21:27:56 <jreicher> https://github.com/tree-sitter/tree-sitter-haskell/blob/master/src/grammar.json
21:27:58 <merijn> tomsmeding: I'm writing my own for sqlite, the haskell one is just convoluted and ununderstandable
21:27:58 <jreicher> You mean that, right?
21:28:20 <tomsmeding> surely merijn means the source, not the compiled result https://github.com/tree-sitter/tree-sitter-haskell/tree/master/grammar
21:28:27 <jreicher> Which is the json
21:28:30 <jreicher> The C is generated
21:28:36 <merijn> jreicher: The json isn't the grammar
21:28:38 <tomsmeding> no, it's javascript that is compiled to the json
21:28:42 <merijn> That, yeah
21:28:58 <tomsmeding> well, the json is the grammar, kind of, but in the same way that an LR parsing table is also "the grammar"
21:29:13 <tomsmeding> I know _that_ much about treesitter :p
21:29:42 <tomsmeding> merijn: I dunno, but wouldn't they just have faithfully implemented the haskell2010 grammar plus extensions?
21:30:02 <tomsmeding> the keys in operator.js for example make me think of the haskell grammar
21:30:08 <merijn> tomsmeding: That's what *I* would do, but I certainly would make it more readable than that :p
21:30:25 <merijn> I can't make heads of tails of that grammar and I wrote and graded quite a few
21:30:30 <jreicher> What's the json generated from? I thought the json was written.
21:30:40 <tomsmeding> jreicher: from the .js files in the grammar/ directory
21:31:21 <jreicher> How did I miss that. I wonder if the grammars I built are the same.
21:31:21 Anarchos joins (~Anarchos@91-161-254-16.subs.proxad.net)
21:36:33 <haskellbridge> <zoil> can anyone help me understand this?
21:36:33 <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 { ... } }".
21:36:43 <haskellbridge> <zoil> i have time today, i got my code to compile
21:36:58 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
21:37:01 <haskellbridge> <zoil> (nets that have regularizers reweighting internal branches at neurons)
21:37:28 <haskellbridge> <zoil> they were saying something about having a type witness, eta something, and singletons
21:37:55 <haskellbridge> <zoil> i have enough time today to put together a working example
21:46:35 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
21:46:55 <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?
21:47:03 <merijn> What am I missing?
21:47:21 <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
21:50:08 <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 ?
21:54:35 <haskellbridge> <zoil> can anyone see this? https://onlinegdb.com/mqdS1he_N
21:54:58 trickard_ is now known as trickard
21:57:13 <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
21:57:19 × rekahsoft quits (~rekahsoft@70.51.99.245) (Ping timeout: 246 seconds)
21:57:33 <haskellbridge> <zoil> heres a paste if thats not easy to interface with
21:57:34 <haskellbridge> <zoil> https://paste.tomsmeding.com/Z84KWqJO
21:57:37 <merijn> hmm
21:57:42 <merijn> good news I got hls working
21:57:59 <haskellbridge> <zoil> so, on line 96 there is this terrifying constraint
21:58:03 <merijn> bad new, it's giving me stupid refactor instructions >.>
21:59:36 <haskellbridge> <zoil> https://kf8nh.com/_heisenbridge/media/matrix.org/GPGBChpFvPQwIjAnsVOZLpwr/D5DpfDeh0w0/image.png
21:59:54 <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)
22:00:37 <haskellbridge> <zoil> data Transfers (xs :: Nonempty *) where
22:00:37 <haskellbridge> ... long message truncated: https://kf8nh.com/_heisenbridge/media/kf8nh.com/vssawUkriMdYrWhgxHeCbFgP/6JDVkeGWpLw (3 lines)
22:01:47 <ski> fgarcia : well, these are (somewhat) standard formal (meta-)notation, when talking about abstract syntax of programming languages, logics, specification languages, &c.
22:01:47 <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?
22:02:00 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
22:02:06 <haskellbridge> <zoil> i thought the ide would allow to share and edit and compile, but it makes it readonly
22:02:27 × michalz quits (~michalz@185.246.207.193) (Remote host closed the connection)
22:03:57 <haskellbridge> <zoil> i think this version should be interactive
22:03:57 <haskellbridge> https://play.haskell.org/saved/9XWoHwsD
22:10:24 <tomsmeding> merijn: https://paste.tomsmeding.com/iS6vrndp
22:12:27 <tomsmeding> merijn: possibly add vim.lsp.enable('hls') afterwards
22:12:39 <tomsmeding> (lua)
22:12:59 <tomsmeding> assuming you're using the nvim builtin LSP client and not something else
22:13:38 <merijn> tomsmeding: Yeah, I got it working, just need to figure out which stupid linters to turn on
22:14:06 <haskellbridge> <zoil> i put the extra bit for the refactoring;
22:14:06 <haskellbridge> https://play.haskell.org/saved/9XWoHwsD
22:15:19 <haskellbridge> <zoil> glguy also put this which might help; https://paste.tomsmeding.com/UEfrQUiN
22:15:47 <haskellbridge> <zoil> i got to take a break for a bit now, that kind of used up my available programming energy
22:19:52 × takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Remote host closed the connection)
22:20:26 <haskellbridge> <zoil> idk what im supposed to do next
22:20:48 × Anarchos quits (~Anarchos@91-161-254-16.subs.proxad.net) (Quit: Vision[]: i've been blurred!)
22:24:31 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
22:24:45 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
22:24:51 <haskellbridge> <zoil> sory the paste didnt update
22:24:52 <haskellbridge> <zoil> here
22:24:55 <haskellbridge> <zoil> https://play.haskell.org/saved/GwyPOlmo
22:25:45 <haskellbridge> <zoil> so these whichNE are like type witnesses?
22:26:05 <haskellbridge> <zoil> i think im still going to end up picking up a constraint...
22:26:50 <haskellbridge> <zoil> like, i provide 2 instances which might help match in consequent instances
22:27:20 <haskellbridge> <zoil> but now im not going to be able to assert the exhaustive coverage of the singletons!
22:27:24 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
22:27:32 <haskellbridge> <zoil> this defies the whole point
22:27:38 <haskellbridge> <zoil> :-(
22:30:06 st_aldini joins (~Thunderbi@2605:a601:a07c:7400:6e26:f360:f11d:472c)
22:32:09 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 250 seconds)
22:33:40 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
22:34:46 × divlamir quits (~divlamir@user/divlamir) (Read error: Connection reset by peer)
22:34:57 divlamir joins (~divlamir@user/divlamir)
22:36:13 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
22:42:20 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
22:47:39 × weary-traveler quits (~user@user/user363627) (Quit: Konversation terminated!)
22:48:00 weary-traveler joins (~user@user/user363627)
22:53:56 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:57:47 <haskellbridge> <zoil> bah, what a waste of time
22:58:32 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
22:58:52 <ski> zoil : i would not call `WhichNE' a singleton, since it does not reflect the structure of the type index in the value (you can't recover the structure of the index, by pattern-matching on the value)
23:01:06 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
23:01:19 peterbecich joins (~Thunderbi@172.222.148.214)
23:09:28 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:11:00 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
23:11:16 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
23:13:35 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
23:13:36 × tromp quits (~textual@2001:1c00:3487:1b00:9c00:2cdd:fe3f:e613) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:19:15 Anarchos joins (~Anarchos@91-161-254-16.subs.proxad.net)
23:24:09 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds)
23:24:52 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:28:34 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:29:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
23:33:55 × Tuplanolla quits (~Tuplanoll@91-152-225-194.elisa-laajakaista.fi) (Ping timeout: 240 seconds)
23:34:19 emmanuelux joins (~emmanuelu@user/emmanuelux)
23:40:14 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:41:01 trickard_ is now known as trickard
23:44:35 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
23:55:37 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:56:55 × mreh quits (~matthew@host86-146-25-125.range86-146.btcentralplus.com) (Read error: Connection reset by peer)

All times are in UTC on 2025-12-01.