2021/08/21

2021-08-21 00:00:16 +0200oldsk00l_(~znc@ec2-3-124-242-227.eu-central-1.compute.amazonaws.com)
2021-08-21 00:00:23 +0200 <ixlun> Ahhhh, so that's what forall means? it means that if 'a' or 'm' is used in the below code, it refers to the 'a' or 'm' in the type signature of the function?
2021-08-21 00:00:46 +0200oldsk00l(~znc@ec2-18-170-87-228.eu-west-2.compute.amazonaws.com) (Ping timeout: 252 seconds)
2021-08-21 00:00:57 +0200 <monochrom> "forall" is a reserved word that also has meanings under other extensions.
2021-08-21 00:01:29 +0200 <monochrom> So the inventor of this extension decides to hitchhike this reserved word.
2021-08-21 00:01:46 +0200 <monochrom> and it works beatifully, there is no conflict.
2021-08-21 00:02:01 +0200kenran(~kenran@200116b82b157f00af733520c5a4c898.dip.versatel-1u1.de) (Quit: WeeChat info:version)
2021-08-21 00:02:03 +0200 <ixlun> So it's using forall in the context of scopedtypevariables?
2021-08-21 00:02:07 +0200 <monochrom> The need to add some syntax is because backward compatibility.
2021-08-21 00:02:13 +0200 <hpc> one could even say forall has only one meaning, and multiple applications of that meaning
2021-08-21 00:02:22 +0200 <hpc> since it's really just bringing a new type variable into scope
2021-08-21 00:04:14 +0200 <ixlun> Nice. Always wondered why I saw forall peppered on bits of haskell code.
2021-08-21 00:04:39 +0200 <hpc> if you want to go down a fun mathematical rabbit hole, https://en.wikipedia.org/wiki/Universal_quantification
2021-08-21 00:08:09 +0200 <ixlun> Thanks for the link. That's defiantly one to look at! Anyway code is working great now. Thanks for the help all!
2021-08-21 00:12:40 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-21 00:16:40 +0200oxide_(~lambda@user/oxide) (Quit: oxide_)
2021-08-21 00:17:59 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 00:21:03 +0200jess(~jess@libera/staff/jess) ()
2021-08-21 00:22:52 +0200Megant(megant@user/megant)
2021-08-21 00:27:36 +0200son0p(~ff@181.136.122.143) (Remote host closed the connection)
2021-08-21 00:28:33 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net)
2021-08-21 00:29:22 +0200Megant(megant@user/megant) (Ping timeout: 252 seconds)
2021-08-21 00:37:40 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-08-21 00:37:45 +0200 <Cajun> and for RankNTypes, doesnt it allow you to restrict a type variable from "escaping" like ST does? whats the other use(s) (if there are any) of it in RankNTypes?
2021-08-21 00:38:19 +0200alphabeta(~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net)
2021-08-21 00:38:32 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 250 seconds)
2021-08-21 00:39:06 +0200kilolympus(~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net) (Ping timeout: 258 seconds)
2021-08-21 00:39:56 +0200 <monochrom> To actually write rank-n types at all.
2021-08-21 00:40:45 +0200 <monochrom> How else can "(∀r. r -> (r -> r) -> r) -> Natural" be expressed.
2021-08-21 00:41:03 +0200MQ-17J(~MQ-17J@2607:fb90:8824:bf5d:8f75:f298:534b:ce5e) (Read error: Connection reset by peer)
2021-08-21 00:41:25 +0200MQ-17J(~MQ-17J@8.6.144.209)
2021-08-21 00:41:48 +0200 <Cajun> well what does that express about `r` that isnt already?
2021-08-21 00:41:54 +0200 <monochrom> interpreter :: (∀a. MyFunctor a -> IO a) -> Free MyFunctor a -> IO a
2021-08-21 00:42:33 +0200 <monochrom> (∀r. r -> (r -> r) -> r) -> Natural ≠ ∀r. (r -> (r -> r) -> r) -> Natural
2021-08-21 00:43:34 +0200 <Cajun> in that interpreter line, the qualified `a` /~ the outside `a`, correct?
2021-08-21 00:43:43 +0200 <monochrom> right
2021-08-21 00:46:20 +0200acidjnk_new(~acidjnk@p200300d0c72b9557dc14868c6ad3e278.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2021-08-21 00:47:41 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
2021-08-21 00:47:51 +0200norias(~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Client Quit)
2021-08-21 00:51:11 +0200 <Cajun> so whats the purpose of `ExplicitForAll`? does it behave like `ScopedTypeVariables`? i dont see why it would be useful to have `forall`s where it is implicit, or when it would be useful to abuse the `forall-or-nothing` rule
2021-08-21 00:52:07 +0200 <geekosaur> just to be complete, I think, so both RankNTypes and ScopedTypeVariables can "depend on" it
2021-08-21 00:52:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-08-21 00:52:36 +0200 <Cajun> oh well that makes sense
2021-08-21 00:52:39 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-21 00:53:20 +0200 <monochrom> I was not the author of ExplicitForAll, I don't know their purpose.
2021-08-21 00:53:54 +0200 <monochrom> But my philosophy is that implicit quantification has always been a source of confusion, not a source of simplification.
2021-08-21 00:54:32 +0200 <monochrom> Implicit forall is why people mistake induction for circular logic.
2021-08-21 00:55:51 +0200 <Cajun> i believe anything that almost entirely leaves the realm of computer science-y stuff (like quantification imo) is when it trips up people the most, but thats coming from little experience
2021-08-21 00:56:23 +0200 <geekosaur> and ExplicitForalls doesn't mean you always have to write them, it just makes forall a keyword, so it's kinda confusingly named
2021-08-21 00:57:29 +0200Megant(~kaitsu@user/megant)
2021-08-21 00:57:37 +0200chisui(~chisui@200116b86875540094408e56d6769020.dip.versatel-1u1.de)
2021-08-21 00:57:51 +0200 <monochrom> Who draws the line between "inside CS" and "outside CS"? CS emphatically has never existed in isolation, unlike pure math.
2021-08-21 00:57:57 +0200 <sclv> explicitforall _enables_ explicit foralls. it used to be that you needed an extension such as scopedtypevariables or gadts to enable that syntax
2021-08-21 00:58:32 +0200 <sclv> it was weird that multiple extensions enabled a piece of syntax as a side effect, but no single extension _just_ enabled that syntax. so they made an extension to _just_ enable that syntax.
2021-08-21 00:58:49 +0200 <monochrom> Any concept that clarifies programming and/or helps programming is fair game. (And who draws the line between "is programming" and "is not programming"?)
2021-08-21 00:59:07 +0200 <sclv> quantification is very computer sciency
2021-08-21 00:59:20 +0200 <sclv> its a key part of any rich type system
2021-08-21 00:59:49 +0200 <Cajun> i guess you can really view it either way, but coming from Java it never felt like an intrinsically programming-related thing, so thats where im coming from with that
2021-08-21 01:00:45 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection)
2021-08-21 01:01:22 +0200 <monochrom> "I see you have a list-reverse function. Does it work no matter what my element type is?" is a fair question. The "no matter what" is quantification right there. This is a rank-1-type question. It is a fair question whether you have static or dynamic typing. A user of the reverse function in Scheme gets to ask that same question.
2021-08-21 01:02:57 +0200 <monochrom> "I see you have a foo function that wants me to give you another function as a parameter. Does it want my function to be polymorphic? Or is it OK if I give a monomorphic function?" Now you have a rank-2-type question.
2021-08-21 01:04:20 +0200 <monochrom> Polymorphism brings up quantification.
2021-08-21 01:04:34 +0200benin036932(~benin@183.82.178.142) (Ping timeout: 252 seconds)
2021-08-21 01:05:22 +0200 <monochrom> You can play name games and take the stance of "'functor' is an alien math word, change it to 'mappable'; 'quantification' is an alien math word, change it to 'morphable'".
2021-08-21 01:05:37 +0200 <monochrom> That doesn't mean you can avoid the substance.
2021-08-21 01:06:43 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-21 01:06:47 +0200 <monochrom> In fact I'm pretty convinced that such name games are just manifesting people's not-invented-here sour-grape attitude.
2021-08-21 01:06:48 +0200Megant(~kaitsu@user/megant) (Ping timeout: 268 seconds)
2021-08-21 01:07:24 +0200 <Cajun> makes sense, im not trying to make the argument it isnt computer-sciency, it was just how i thought of it. always seemed like something from another field being applied in a useful manner elsewhere while retaining the same name (for consistency)
2021-08-21 01:08:09 +0200 <monochrom> If another community has already invented the same idea, if they got there first, why not adopt their names too so we can open up more opportunities for cross-discipline conversations? Sounds like the more hip thing to do.
2021-08-21 01:08:59 +0200 <monochrom> For this reason when I read "any time you leave the CS realm" I think "so you're talking about echo chambers".
2021-08-21 01:09:01 +0200 <Cajun> yeah changing the names wouldnt be a good idea, doesnt change monad from being a term with a vacuous meaning to anyone without a math background :P
2021-08-21 01:09:11 +0200 <Cajun> that wikipedia page is scary
2021-08-21 01:12:50 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-21 01:14:14 +0200Guest59(~Guest59@2a02:6b64:708f:0:44ea:d3ef:31bb:9f74)
2021-08-21 01:19:29 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 248 seconds)
2021-08-21 01:24:01 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-21 01:24:43 +0200favonia(~favonia@user/favonia) (Ping timeout: 258 seconds)
2021-08-21 01:26:33 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-21 01:30:28 +0200spruit11(~quassel@2a02:a467:ccd6:1:1d3f:e608:d1ad:6d58) (Ping timeout: 258 seconds)
2021-08-21 01:31:43 +0200Guest59(~Guest59@2a02:6b64:708f:0:44ea:d3ef:31bb:9f74) (Quit: Client closed)
2021-08-21 01:34:40 +0200waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 240 seconds)
2021-08-21 01:39:33 +0200Lycurgus(~juan@cpe-45-46-140-49.buffalo.res.rr.com)
2021-08-21 01:40:43 +0200chisui(~chisui@200116b86875540094408e56d6769020.dip.versatel-1u1.de) (Ping timeout: 246 seconds)
2021-08-21 01:42:43 +0200spruit11(~quassel@2a02:a467:ccd6:1:6057:8486:da6d:d017)
2021-08-21 01:44:23 +0200lavaman(~lavaman@98.38.249.169) (Read error: Connection reset by peer)
2021-08-21 01:44:23 +0200awschnap(~lavaman@98.38.249.169)
2021-08-21 01:44:24 +0200favonia(~favonia@user/favonia)
2021-08-21 01:47:26 +0200spruit11(~quassel@2a02:a467:ccd6:1:6057:8486:da6d:d017) (Ping timeout: 250 seconds)
2021-08-21 01:48:56 +0200dolio(~dolio@130.44.130.54) (Quit: ZNC 1.8.2 - https://znc.in)
2021-08-21 01:54:39 +0200spruit11(~quassel@2a02:a467:ccd6:1:6057:8486:da6d:d017)
2021-08-21 01:54:46 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 01:54:52 +0200dolio(~dolio@130.44.130.54)
2021-08-21 01:55:17 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-08-21 01:56:07 +0200Axma67744(~Axman6@user/axman6)
2021-08-21 01:58:17 +0200Axman6(~Axman6@user/axman6) (Ping timeout: 256 seconds)
2021-08-21 01:59:10 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 240 seconds)
2021-08-21 02:00:01 +0200Axman6(~Axman6@user/axman6)
2021-08-21 02:01:07 +0200Axma67744(~Axman6@user/axman6) (Ping timeout: 256 seconds)
2021-08-21 02:06:33 +0200fresheyeball(~fresheyeb@c-71-237-105-37.hsd1.co.comcast.net)
2021-08-21 02:07:21 +0200dajoer(~david@user/gvx)
2021-08-21 02:09:03 +0200Axman6(~Axman6@user/axman6) (Ping timeout: 256 seconds)
2021-08-21 02:09:24 +0200gianfranco(~gianfranc@181.28.82.192)
2021-08-21 02:09:43 +0200 <gianfranco> is this chat room active?
2021-08-21 02:11:46 +0200 <lechner> sometimes
2021-08-21 02:14:01 +0200 <hpc> technically since this chat room is only active in the moment when a message is sent, it is only infinitessimally active
2021-08-21 02:14:23 +0200 <lechner> which means never
2021-08-21 02:14:27 +0200 <lechner> Hi, I don't mean to open up old wounds, but why is RecordDotSyntax better than lenses? Does it finally remove the accessors from the file-level name space?
2021-08-21 02:15:20 +0200 <monochrom> RecordDotSyntax is not better.
2021-08-21 02:15:45 +0200 <monochrom> RecordHashSyntax would be better. SML and OCaml already do it.
2021-08-21 02:16:31 +0200 <monochrom> But I'm pretty sure either way it doesn't take away existing syntax such as accessors.
2021-08-21 02:16:51 +0200 <monochrom> OK, I haven't checked, I can't be sure.
2021-08-21 02:17:04 +0200 <monochrom> You can see how much I care.
2021-08-21 02:17:11 +0200 <lechner> i am just catching up to the group. there is no agenda
2021-08-21 02:17:25 +0200 <lechner> is it an optional language featkre?
2021-08-21 02:17:25 +0200 <gianfranco> oh ok
2021-08-21 02:17:32 +0200 <lechner> feature?
2021-08-21 02:17:40 +0200 <gianfranco> I saw this room featured on haskell.org lol
2021-08-21 02:18:18 +0200 <lechner> what were you doing on haskell.org?
2021-08-21 02:18:25 +0200 <xsperry> what would RecordHashSyntax do differently? just replace . character with #?
2021-08-21 02:18:31 +0200 <monochrom> Yes.
2021-08-21 02:18:48 +0200 <gianfranco> I'm new to haskell
2021-08-21 02:18:59 +0200 <gianfranco> was looking for documentation mainly
2021-08-21 02:19:07 +0200 <lechner> me too
2021-08-21 02:19:42 +0200 <lechner> check out What I wish I knew about Haskell
2021-08-21 02:19:54 +0200 <lechner> monochrom: why is it better? (I may agree)
2021-08-21 02:20:22 +0200gianfranco(~gianfranc@181.28.82.192) (Quit: Client closed)
2021-08-21 02:20:51 +0200 <Clint> he wants . to have only two meanings instead of three
2021-08-21 02:20:57 +0200 <monochrom> But lens has other powers that even real record systems cannot dream of. I would not forget about lens.
2021-08-21 02:21:38 +0200 <lechner> Clint: was that dot an inside joke?
2021-08-21 02:22:06 +0200reumeth(~reumeth@user/reumeth) (Ping timeout: 250 seconds)
2021-08-21 02:22:35 +0200 <Lycurgus> real record systems
2021-08-21 02:22:48 +0200 <monochrom> You don't want "f.g" to not mean "f . g"
2021-08-21 02:22:53 +0200gianfranco(~gianfranc@181.28.82.192)
2021-08-21 02:23:21 +0200 <Clint> lechner: i don't think so?
2021-08-21 02:23:22 +0200 <Lycurgus> gianfranco, there is a beginners channel
2021-08-21 02:23:24 +0200 <lechner> is see. it was an explicit "."
2021-08-21 02:23:37 +0200 <Lycurgus> #haskell-beginners i think
2021-08-21 02:23:56 +0200 <monochrom> One can get used to it, sure. One can write a parser for it, sure. But this is one of those times I get to say "can ≠ should".
2021-08-21 02:23:59 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net)
2021-08-21 02:24:35 +0200 <monochrom> #haskell-beginners is centered around a book, not around the notion of beginner. False advertising.
2021-08-21 02:25:30 +0200 <monochrom> And recently a learner's blog, featured in HWN, did roast the book I think.
2021-08-21 02:25:53 +0200 <Lycurgus> well multiple off topic side channels, multiple newbies wouldn surprise
2021-08-21 02:26:29 +0200 <monochrom> "With a book, you can’t just open a browser window and just start typing. Well, technically, you could. I read one during my 3 months of emersion that was over 1000 pages and could’ve been easily 300 pages if they had a good editor who was also a functional programmer (also known as a unicorn)."
2021-08-21 02:26:42 +0200benin036932(~benin@183.82.178.142)
2021-08-21 02:26:50 +0200 <monochrom> There is only one 1000-page Haskell book. That one.
2021-08-21 02:26:53 +0200 <monochrom> https://cscalfani.medium.com/why-is-learning-functional-programming-so-damned-hard-bfd00202a7d1
2021-08-21 02:27:08 +0200retro_(~retro@5ec19a54.skybroadband.com)
2021-08-21 02:27:45 +0200Lycurgusis in the arduous process of going thru all his physical books to decide which to schlep and which to toss
2021-08-21 02:28:12 +0200 <lechner> keep the ones you like
2021-08-21 02:28:20 +0200silver_(~silver@37.214.31.4)
2021-08-21 02:28:36 +0200 <monochrom> I used to think, the book's purpose is to be slow-paced, step-by-step, so it may warrant 1000 pages, maybe it's a benefit. I haven't really checked myself.
2021-08-21 02:29:23 +0200 <monochrom> By now, seeing someone who had struggled during learning Haskell, now reporting what worked and what didn't, and the 1000-page book was one of the didn'ts and is roasted like this, well, that changes my mind.
2021-08-21 02:29:26 +0200lbseale(~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
2021-08-21 02:29:53 +0200retroid_(~retro@5ec19a54.skybroadband.com) (Ping timeout: 258 seconds)
2021-08-21 02:30:03 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 268 seconds)
2021-08-21 02:30:07 +0200 <Lycurgus> i was gonna give away my great books my dad gave me in 6th grade and the 15th edition of brittanica but then i found their value was about $2K
2021-08-21 02:31:06 +0200 <Lycurgus> i don't think you can learn something like haskell any other way than doing
2021-08-21 02:31:28 +0200 <lechner> i am not sure even that works
2021-08-21 02:31:38 +0200 <Lycurgus> langs in general except for the super simple immersion is the way
2021-08-21 02:32:01 +0200 <Lycurgus> well yeah hs and cl have that in common
2021-08-21 02:32:11 +0200 <Lycurgus> haskell more than lisp
2021-08-21 02:32:46 +0200 <Lycurgus> most langs don't dare not have fixed largely unchanging baselines
2021-08-21 02:33:19 +0200 <monochrom> It is a human nature to assume that every need is to be resolved by more consumption.
2021-08-21 02:33:51 +0200 <monochrom> If someone doesn't understand monads, they think "what more should I read/watch", not "what more should I practice".
2021-08-21 02:34:16 +0200 <monochrom> If someone feels sick, they think "what should I eat to cure it", not "what should I stop eating to cure it".
2021-08-21 02:35:00 +0200 <lechner> one night with Haskell will make a strong man humble
2021-08-21 02:35:07 +0200 <Lycurgus> that seems to be an idee fix with you, but I think in general there's a greater diversity
2021-08-21 02:35:13 +0200 <monochrom> Cease the means of consumption.
2021-08-21 02:35:27 +0200 <Lycurgus> there will be people who's first lang is hs
2021-08-21 02:35:52 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 252 seconds)
2021-08-21 02:35:59 +0200 <Lycurgus> under the right circumstances it will seem natural and easy to them
2021-08-21 02:36:46 +0200 <lechner> to those who do not drop out?
2021-08-21 02:36:53 +0200 <Lycurgus> also people with a really wide experience rather than the usual algol-like suspects are not gonna try to force haskell into earlier experiences
2021-08-21 02:37:48 +0200 <Lycurgus> for example say a strong music theory major
2021-08-21 02:37:56 +0200 <Lycurgus> have seen that
2021-08-21 02:38:17 +0200 <lechner> but a haskell army?
2021-08-21 02:39:17 +0200 <Lycurgus> needs to some other kinda collective
2021-08-21 02:39:36 +0200 <Lycurgus> vanguard oder
2021-08-21 02:39:54 +0200 <lechner> or a secret cabal?
2021-08-21 02:40:21 +0200 <Lycurgus> :)
2021-08-21 02:40:52 +0200 <Cajun> monochrom: it may be difficult for someone who doesnt understand monads to think of a way to use it that doesnt involve what the book has already given them. i found reading from more sources that offered other views to quaint my understanding until it finally clicked. you need to know enough about them before you can use them to learn more about
2021-08-21 02:40:53 +0200 <Cajun> them, essentially. at least this is my experience
2021-08-21 02:42:15 +0200 <monochrom> But I was not criticizing that.
2021-08-21 02:43:02 +0200 <Cajun> ah it was just a statement not a point of discussion, this is what happens when i stumble into a convo :P
2021-08-21 02:43:16 +0200gianfranco(~gianfranc@181.28.82.192) (Quit: Client closed)
2021-08-21 02:43:27 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-08-21 02:46:26 +0200 <monochrom> Either question you ask, you will have to find someone to answer, or Google for an answer. You can't answer either question yourself. I grant that.
2021-08-21 02:46:58 +0200 <monochrom> But there is still a difference between googling for more "intuition, analogies" and googling for more examples.
2021-08-21 02:48:01 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 248 seconds)
2021-08-21 02:48:13 +0200 <monochrom> Especially if, after seeing the beginning of an example, you go "hold on, don't show my all your code yet, let me try to write some of it myself, then compare with yours". Now that's respectable practicing.
2021-08-21 02:48:37 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 02:49:15 +0200 <Cajun> i like to predict whats next/predict the result of a function before seeing it, its quick enough never to be a pain because it doesnt require writing/rewriting lines of code
2021-08-21 02:49:28 +0200 <monochrom> Yes that too.
2021-08-21 02:50:38 +0200 <Cajun> although i do entirely agree that googling the "right" and "wrong" thing is an inconvenience. its also doesnt help many sources use the same examples (Maybe monad, Identity monad) which doesnt always help too much
2021-08-21 02:50:56 +0200 <Cajun> (seeing the same example multiple times doesnt help too much, to clarify)
2021-08-21 02:58:36 +0200Lycurgusthinks the most cogent explanation of what a hs monad is "a mechanism haskell uses to effect referential transparency"
2021-08-21 03:01:27 +0200 <Lycurgus> s/is/is is/
2021-08-21 03:02:08 +0200 <lechner> i am not sure i would use the words transparency and monad in the same sentence
2021-08-21 03:02:31 +0200 <Lycurgus> sounds like a criticism
2021-08-21 03:02:46 +0200 <lechner> of monads, maybe
2021-08-21 03:03:05 +0200 <lechner> or just a case of cynical friday
2021-08-21 03:03:16 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net)
2021-08-21 03:03:23 +0200 <Cajun> i liked the explanation given on that one stack overflow page <https://stackoverflow.com/questions/44965/what-is-a-monad>
2021-08-21 03:04:00 +0200 <Cajun> lechner: why not cynical sunday, rolls off the tongue better :P
2021-08-21 03:04:49 +0200 <monochrom> You know what, "monad" is also vacuous for mathematicians. You have to have seen the definition, or else you couldn't even start to guess.
2021-08-21 03:05:30 +0200 <lechner> Cajun: based on some primitive stastistics, cases pile up on fridays
2021-08-21 03:05:41 +0200 <monochrom> whereas for example "Minkowski transfrom" is somewhat guessable, "ah, a function defined by Minkowski in some paper"
2021-08-21 03:05:51 +0200 <Lycurgus> it's like 'functor' except more so, monads are ancient
2021-08-21 03:06:07 +0200 <Lycurgus> functors are 20th century
2021-08-21 03:06:15 +0200 <lechner> Cajun: also, which one of the 46 (!) answers?
2021-08-21 03:06:18 +0200 <monochrom> And you know what, "computation builder" is just as vacuous.
2021-08-21 03:06:44 +0200 <Cajun> lechner: the top one
2021-08-21 03:07:08 +0200 <monochrom> "chain" is a good word though. I wouldn't object "computation chainer" if you're pressed for a 5-second elevator pitch.
2021-08-21 03:07:30 +0200 <Cajun> monochom: yeah it still doesnt mean much, but at least you know it does something (some kind of computation in some way by "building" the chain of binds) rather than just "monad"
2021-08-21 03:07:47 +0200 <Cajun> yeah i like computation chainer better, makes more sense
2021-08-21 03:08:29 +0200 <monochrom> But only for a 5-second pitch.
2021-08-21 03:09:03 +0200 <monochrom> For 30 seconds, "chain" is still suboptimal. It's just a whee bit better than "build".
2021-08-21 03:09:06 +0200 <lechner> to me, a monad sequences operations. is that right?
2021-08-21 03:09:46 +0200 <Cajun> i like thinking of it as a chain but sequence is probably more in line with how it looks (feeds from top to bottom in sequence)
2021-08-21 03:10:03 +0200 <Lycurgus> a less pretentious term would have been more fortunate in retrospect but I guess it was already set out by saunders maclane et al
2021-08-21 03:10:08 +0200 <monochrom> In "f . g", f and g are computations too, "." "builds" and "chains" too. Yet "." only gives you an arrow, not a monad. It is "$" who gives you a monad (the Identity monad).
2021-08-21 03:10:40 +0200 <monochrom> But "chain" is a whee bit better than "build" because <|> also builds, but not chains.
2021-08-21 03:10:51 +0200 <lechner> i meant: impose an order of evaluation
2021-08-21 03:11:23 +0200 <lechner> or is that wrong?
2021-08-21 03:11:33 +0200 <Cajun> Lycurgus: i recall simon peyton jones mentioning that the biggest regret is the scary name they gave monads rather than something more warm and cozy. its in some talk somewhere
2021-08-21 03:11:46 +0200 <monochrom> The 30-second pitch I now use is "callback-style programming".
2021-08-21 03:12:17 +0200 <Lycurgus> Cajun, yeah i think i know the one you mean
2021-08-21 03:12:34 +0200 <lechner> monads are asynchronous?
2021-08-21 03:13:14 +0200 <monochrom> Generally whatever story you come up with, you need to fight the confirmation bias. Programmers have proved to be undesirably susceptible to the confirmation bias.
2021-08-21 03:13:49 +0200Lycurgus(~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
2021-08-21 03:14:05 +0200 <monochrom> Don't just ask yourself "do all monad examples fit my story?". Also ask yourself "how about examples of non-monads? if they also fit my story, then my story is bunk".
2021-08-21 03:14:42 +0200 <c_wraith> monads are joining-precisely-the-way-I'm-thinking things
2021-08-21 03:18:12 +0200 <monochrom> This is why 99.9% of wordings I've seen are all bunk. "monad as computation" - there are parser types (clearly computations, no?) that are not monads, only arrows or alternatives. "monad as container" - ZipList is a non-monad container, again only applicative. "builds" - <|> also builds. "chains" - >>> also chains.
2021-08-21 03:18:40 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2021-08-21 03:18:52 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 250 seconds)
2021-08-21 03:19:08 +0200 <c_wraith> my first intuition for monads was actually "makes do blocks work how you'd expect"
2021-08-21 03:19:56 +0200 <c_wraith> which is... very circular.
2021-08-21 03:21:07 +0200Erutuon(~Erutuon@user/erutuon)
2021-08-21 03:21:30 +0200 <monochrom> I think it is on the right track, under the following condition...
2021-08-21 03:21:49 +0200 <Cajun> the thing that really put my head through a loop was functions like "get" that dont take parameters (in do notation at least. doesnt it effectively take the rest of the computation as the parameter?)
2021-08-21 03:22:14 +0200 <monochrom> Have you seen https://wiki.haskell.org/Monad_laws ? Especially the do-notation versions of the laws?
2021-08-21 03:22:16 +0200 <c_wraith> Yeah, there's a post on Dan Piponi's blog about how you can look at monads as doing that.
2021-08-21 03:22:46 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-08-21 03:23:10 +0200 <monochrom> If your "how do blocks works" includes expecting the equivalence of those various ways of writing do-blocks, then you already know monads.
2021-08-21 03:23:33 +0200 <c_wraith> yeah, those were part of my mental model of do blocks.
2021-08-21 03:24:28 +0200Teacup(~teacup@user/teacup) (Quit: Teacup)
2021-08-21 03:26:51 +0200Teacup(~teacup@user/teacup)
2021-08-21 03:30:52 +0200t0zy(~t0zy@49.207.220.61) (Ping timeout: 252 seconds)
2021-08-21 03:31:07 +0200t0zy(~t0zy@49.207.193.1)
2021-08-21 03:33:35 +0200t0zy(~t0zy@49.207.193.1) (Read error: Connection reset by peer)
2021-08-21 03:35:56 +0200t0zy(~t0zy@49.207.193.1)
2021-08-21 03:39:24 +0200 <monochrom> In the case of State and its "get", I have had weaker students, but still very wise, who didn't understand it, but they were wise because they thought up "I think it would help if you and I together expand 'runState foo 5' by hand to see why 'get >>= ...' isn't given a parameter there so where does the parameter come from?"
2021-08-21 03:39:40 +0200 <monochrom> It's very brutal, but it worked.
2021-08-21 03:40:59 +0200 <Cajun> what like entirely desugar it?
2021-08-21 03:41:07 +0200 <monochrom> Yes.
2021-08-21 03:41:20 +0200 <c_wraith> be the compiler. inline. simplify.
2021-08-21 03:41:34 +0200 <monochrom> runState (get >>= \x -> put (x+1) >> get >>= \y -> return y) 5
2021-08-21 03:41:44 +0200 <monochrom> evaluate by hand.
2021-08-21 03:42:13 +0200 <Cajun> i wish i didnt know about do notation until i *actually* understood monads
2021-08-21 03:42:17 +0200 <monochrom> brutal, but it explicitly shows 5 goes to the 1st get, 5+1 goes to the 2nd get.
2021-08-21 03:42:40 +0200 <monochrom> Oh yeah that too, another of my trick is to never mention do-notation.
2021-08-21 03:43:22 +0200 <Cajun> do you teach haskell in uni?
2021-08-21 03:43:40 +0200xff0x(~xff0x@2001:1a81:5207:3100:686a:e8fd:47a9:633d) (Ping timeout: 240 seconds)
2021-08-21 03:43:45 +0200 <arahael> whats this "allow newer" thing in cabal.project that adamCS mentioned last night (probably this morning for most of you here...)
2021-08-21 03:43:48 +0200 <Cajun> since you mentioned having students
2021-08-21 03:44:17 +0200 <c_wraith> arahael: it allows cabal to ignore upper bounds when solving the package constraints.
2021-08-21 03:44:31 +0200 <adamCS> arahuel: It lets cabal ignore the upper bounds...What c_wraith said.
2021-08-21 03:44:37 +0200 <monochrom> So many of my students are very good, they don't need this expansion to see, they can imagine it just after seeing the definitions of get, >>=, runState, etc. A few are weaker, but only weaker at this level of abstractions and jumps, they just need to see a concrete session of running it through.
2021-08-21 03:44:43 +0200 <adamCS> arahael: ^
2021-08-21 03:44:54 +0200 <c_wraith> arahael: you can enable it for all packages, or specific ones that you know can have newer versions.
2021-08-21 03:45:16 +0200 <monochrom> What I am still impressed is that they know what they need, they just need my help to ensure that they do it right.
2021-08-21 03:45:49 +0200 <monochrom> Yes.
2021-08-21 03:45:52 +0200xff0x(~xff0x@2001:1a81:523e:7200:987e:5abc:19e1:66f6)
2021-08-21 03:45:57 +0200 <lechner> haskell needs a teacher
2021-08-21 03:46:03 +0200 <c_wraith> Yeah, being willing to actually do the work is way more than I saw from the weaker students when I was at college
2021-08-21 03:46:47 +0200 <arahael> c_wraith: that sounds *possibly* what i want, assuming it works with monadfail. I'll check out the docs.
2021-08-21 03:47:02 +0200 <arahael> adamCS: thanks :) that gives another option!
2021-08-21 03:47:08 +0200 <adamCS> arahael: You can do "allow-newer: base" which allows cabal to ignore the upper bound on base in any other package or "allow-newer: diagrams:base" which only allows it in diagrams, e.g.,
2021-08-21 03:47:45 +0200t0zy(~t0zy@49.207.193.1) (Read error: Connection reset by peer)
2021-08-21 03:47:57 +0200 <Cajun> ive heard haskell being taught to freshmen and alternatively being taught to upperclassmen (who have already taken an imperative programming course) and the latter being more effective at teaching the language
2021-08-21 03:48:51 +0200t0zy(~t0zy@49.207.193.1)
2021-08-21 03:48:54 +0200 <yushyin> arahael: https://cabal.readthedocs.io/en/3.4/cabal-project.html?#cfg-field-allow-newer
2021-08-21 03:49:50 +0200 <lechner> Cajun: selection bias?
2021-08-21 03:50:15 +0200 <arahael> adamCS: that sounds like what i want! so basically unless it actually has an api breakage, it should probably work and i'll find out once it builds (or fails to build).
2021-08-21 03:50:25 +0200 <arahael> yushyin: thanks - already on it!
2021-08-21 03:50:34 +0200 <adamCS> arahael: Yep.
2021-08-21 03:50:47 +0200 <yushyin> arahael: good! ;)
2021-08-21 03:50:48 +0200 <Cajun> lechner: huh? i meant that ive read teaching HS/FP to people who have programming knowledge bears more fruits than teaching a freshman with limited experience in programming
2021-08-21 03:51:26 +0200 <adamCS> arahael: Using the more specific version can help you remember which packages might need updating and is a little more controlled, but I usually just start throwing stuff in there until it compiles or I get a compiler error.
2021-08-21 03:51:27 +0200awschnap(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-21 03:51:31 +0200 <monochrom> Hrm, I guess I can see a sweet spot.
2021-08-21 03:51:46 +0200 <lechner> Cajun: did all of the freshmen take the advanced class?
2021-08-21 03:52:07 +0200 <monochrom> We already know what happens to teaching to people who boast "40 years in the industry".
2021-08-21 03:52:32 +0200 <arahael> adamCS: yeah, i've a lot of dependencies, this is a personal side project afterall, so i'll probably do it for specific dependencies.
2021-08-21 03:52:41 +0200 <monochrom> OTOH a clean slate who hasn't become comfortable with induction thinking is also a lost cause.
2021-08-21 03:52:51 +0200 <Cajun> im not sure, i read it in `Masterminds of Programming Conversations with the Creators of Major Programming Languages `
2021-08-21 03:52:57 +0200 <Cajun> lechner: ^
2021-08-21 03:53:29 +0200 <monochrom> OTOOH a very naive kid who haven't thought of questioning the validity of recursion is also fine >:)
2021-08-21 03:53:54 +0200 <lechner> Cajun: okay, thanks!
2021-08-21 03:56:02 +0200 <arahael> monochrom: why would you question recursion, though? ;)
2021-08-21 03:56:04 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2)
2021-08-21 03:56:42 +0200 <monochrom> I know right? Why would anyone? >:)
2021-08-21 03:59:16 +0200 <Cajun> monochrom: well the reason stated was because they find the supposed power of side effects: "The reason is that students quickly conclude that FLs are toy languages,
2021-08-21 03:59:16 +0200 <Cajun> since, after all, they were used in their intro classes, mostly on toy examples. And once
2021-08-21 03:59:17 +0200 <Cajun> they discover the “power” of side effects, many of them never turn back. What a shame!"
2021-08-21 03:59:31 +0200 <Cajun> the formatted of that really got messed up :P
2021-08-21 03:59:37 +0200 <Cajun> formatting*
2021-08-21 03:59:51 +0200alx741(~alx741@181.196.68.120) (Quit: alx741)
2021-08-21 04:01:32 +0200 <Cajun> and then this: "It seems to me that the best things about FP aren’t often appreciated by beginners. It’s only after you’ve programmed for awhile that the benefits become apparent."
2021-08-21 04:03:26 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 04:05:07 +0200sleblanc(~sleblanc@user/sleblanc)
2021-08-21 04:05:27 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Ping timeout: 245 seconds)
2021-08-21 04:05:32 +0200supersven(uid501114@charlton.irccloud.com) (Ping timeout: 245 seconds)
2021-08-21 04:05:39 +0200supersven(uid501114@id-501114.charlton.irccloud.com)
2021-08-21 04:05:53 +0200 <monochrom> I guess then Paul Hudak's approach would work well for them. HIs book has effects (making pictures, sounds, animations) at early, middle, late points.
2021-08-21 04:05:57 +0200angerman(sid209936@charlton.irccloud.com) (Ping timeout: 245 seconds)
2021-08-21 04:06:11 +0200andreas3-(andreas303@ip227.orange.bnc4free.com) (Ping timeout: 252 seconds)
2021-08-21 04:06:17 +0200 <monochrom> The problem is he's dead, his library suffers bit rot.
2021-08-21 04:06:24 +0200angerman(sid209936@id-209936.charlton.irccloud.com)
2021-08-21 04:06:44 +0200elcaro(~anonymous@45.32.191.75) (Ping timeout: 252 seconds)
2021-08-21 04:06:50 +0200andreas303(andreas303@ip227.orange.bnc4free.com)
2021-08-21 04:07:12 +0200nrr(sid20938@id-20938.tooting.irccloud.com) (Ping timeout: 256 seconds)
2021-08-21 04:07:21 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2021-08-21 04:07:25 +0200alx741(~alx741@181.196.68.120)
2021-08-21 04:07:29 +0200elcaro(~anonymous@45.32.191.75)
2021-08-21 04:07:46 +0200mrckndt(~mrckndt@user/mrckndt) (Ping timeout: 256 seconds)
2021-08-21 04:07:58 +0200nrr(sid20938@id-20938.tooting.irccloud.com)
2021-08-21 04:07:58 +0200mrckndt(~mrckndt@user/mrckndt)
2021-08-21 04:08:02 +0200slep(~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net) (Ping timeout: 245 seconds)
2021-08-21 04:08:15 +0200slep(~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net)
2021-08-21 04:09:55 +0200 <Cajun> bit rot is such a scary sounding term ):
2021-08-21 04:20:48 +0200alx741(~alx741@181.196.68.120) (Quit: alx741)
2021-08-21 04:22:34 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 250 seconds)
2021-08-21 04:24:27 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-08-21 04:26:40 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-08-21 04:29:06 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
2021-08-21 04:32:23 +0200keutoi(~keutoi@157.47.6.137)
2021-08-21 04:32:54 +0200zebrag(~chris@user/zebrag)
2021-08-21 04:38:22 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 04:41:18 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-08-21 04:41:25 +0200td_(~td@94.134.91.77) (Ping timeout: 268 seconds)
2021-08-21 04:42:41 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 248 seconds)
2021-08-21 04:42:41 +0200td_(~td@muedsl-82-207-238-079.citykom.de)
2021-08-21 04:44:46 +0200drsocks(~aaashutos@113.199.143.57)
2021-08-21 04:45:40 +0200vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2021-08-21 04:53:54 +0200drsocks(~aaashutos@113.199.143.57) (Quit: Konversation terminated!)
2021-08-21 05:06:04 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 268 seconds)
2021-08-21 05:06:20 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-21 05:08:44 +0200notzmv(~zmv@user/notzmv)
2021-08-21 05:09:10 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 05:09:12 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
2021-08-21 05:11:14 +0200 <sm> it is a scourge!
2021-08-21 05:11:48 +0200 <sm> found in all climates!
2021-08-21 05:15:58 +0200blankhart(~blankhart@pool-72-88-174-206.nwrknj.fios.verizon.net) (Quit: WeeChat 2.9)
2021-08-21 05:19:14 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-21 05:19:32 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 05:19:56 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 05:25:16 +0200MQ-17J(~MQ-17J@8.6.144.209) (Ping timeout: 252 seconds)
2021-08-21 05:25:16 +0200otto_s(~user@p5de2f5f0.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-08-21 05:27:03 +0200otto_s(~user@p5de2f4c7.dip0.t-ipconnect.de)
2021-08-21 05:28:08 +0200cawfee(~root@2406:3003:2077:2758::babe) (Ping timeout: 258 seconds)
2021-08-21 05:32:46 +0200Guest43(~Guest43@2001:8003:33f0:c100:b87b:9892:523:f338)
2021-08-21 05:37:55 +0200dsrt^(~dsrt@209.65.131.194) (Ping timeout: 252 seconds)
2021-08-21 05:48:54 +0200Guest43(~Guest43@2001:8003:33f0:c100:b87b:9892:523:f338) (Quit: Client closed)
2021-08-21 05:51:07 +0200sleblanc(~sleblanc@user/sleblanc) (Ping timeout: 252 seconds)
2021-08-21 05:51:44 +0200mei(~mei@user/mei)
2021-08-21 05:53:34 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-08-21 05:55:45 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 248 seconds)
2021-08-21 05:56:00 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-08-21 06:00:24 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
2021-08-21 06:04:27 +0200venue(~venue@user/venue) (Quit: adios)
2021-08-21 06:08:43 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 252 seconds)
2021-08-21 06:11:09 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-21 06:11:47 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
2021-08-21 06:26:43 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 06:31:16 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 252 seconds)
2021-08-21 06:39:22 +0200sus(thelounge@user/zeromomentum) (Quit: the lounge - https://webirc.envs.net)
2021-08-21 06:42:06 +0200sus(thelounge@user/zeromomentum)
2021-08-21 06:45:56 +0200auri(~admin@fsf/member/auri) (Quit: auri)
2021-08-21 06:46:19 +0200auri(~quassel@fsf/member/auri)
2021-08-21 06:46:19 +0200auri(~quassel@fsf/member/auri) (Client Quit)
2021-08-21 06:46:45 +0200auri(~quassel@fsf/member/auri)
2021-08-21 06:50:01 +0200Guest43(~Guest43@2001:8003:33f0:c100:b87b:9892:523:f338)
2021-08-21 06:52:56 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 250 seconds)
2021-08-21 07:05:19 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-08-21 07:29:04 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-08-21 07:29:33 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2021-08-21 07:32:56 +0200MidAutumnMoon(~MidAutumn@user/midautumnmoon) (Quit: Leaving for a break - theLounge)
2021-08-21 07:33:28 +0200MidAutumnMoon(~MidAutumn@user/midautumnmoon)
2021-08-21 07:37:46 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-08-21 07:43:38 +0200Guest43(~Guest43@2001:8003:33f0:c100:b87b:9892:523:f338) (Quit: Client closed)
2021-08-21 07:44:00 +0200Guest46(~Guest46@2001:8003:33f0:c100:b87b:9892:523:f338)
2021-08-21 07:44:01 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 07:46:09 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-08-21 07:48:01 +0200silver_(~silver@37.214.31.4) (Read error: Connection reset by peer)
2021-08-21 07:48:10 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-08-21 07:50:12 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 07:58:03 +0200dsrt^(~dsrt@209.65.131.194)
2021-08-21 08:02:55 +0200Megant(megant@user/megant)
2021-08-21 08:08:17 +0200radw(~radw@user/radw) (Ping timeout: 252 seconds)
2021-08-21 08:11:28 +0200Guest46(~Guest46@2001:8003:33f0:c100:b87b:9892:523:f338) (Quit: Client closed)
2021-08-21 08:14:20 +0200mousey(~skymouse@gateway/tor-sasl/mousey) (Ping timeout: 244 seconds)
2021-08-21 08:17:29 +0200mei(~mei@user/mei) (Quit: mei)
2021-08-21 08:18:34 +0200mei(~mei@user/mei)
2021-08-21 08:20:11 +0200gehmehgeh(~user@user/gehmehgeh)
2021-08-21 08:22:12 +0200ubert(~Thunderbi@178.115.47.86.wireless.dyn.drei.com)
2021-08-21 08:22:54 +0200mousey(~skymouse@gateway/tor-sasl/mousey)
2021-08-21 08:24:34 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-08-21 08:25:05 +0200 <hsek[m]> What's a bit rot
2021-08-21 08:29:13 +0200aman(~aman@user/aman)
2021-08-21 08:33:30 +0200 <pavonia> When a bit deteriorates such that you can't tell if it is a 0 or 1 anymore
2021-08-21 08:38:52 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 252 seconds)
2021-08-21 08:39:25 +0200jespada(~jespada@90.254.247.46) (Ping timeout: 252 seconds)
2021-08-21 08:41:49 +0200jespada(~jespada@90.254.247.46)
2021-08-21 08:47:17 +0200dave_uy(~dave_uy@108.61.193.26) (Quit: The Lounge - https://thelounge.chat)
2021-08-21 08:48:09 +0200vysn(~vysn@user/vysn)
2021-08-21 08:48:14 +0200dave_uy(~dave_uy@108.61.193.26)
2021-08-21 08:52:05 +0200phma(phma@2001:5b0:2144:518:c685:6b7:63c5:83c0)
2021-08-21 08:59:07 +0200ubert(~Thunderbi@178.115.47.86.wireless.dyn.drei.com) (Quit: ubert)
2021-08-21 08:59:21 +0200ubert(~Thunderbi@178.115.47.86.wireless.dyn.drei.com)
2021-08-21 09:00:36 +0200notzmv(~zmv@user/notzmv)
2021-08-21 09:02:28 +0200 <arahael> How do I specify "allow-newer" in my cabal file? It doesn't matter where I stick it, it doesn't appear to have any impact?
2021-08-21 09:02:53 +0200 <arahael> (If I specify it on the command line, eg, `cabal build --allow-newer`, it does have an impact.)
2021-08-21 09:03:48 +0200ubert(~Thunderbi@178.115.47.86.wireless.dyn.drei.com) (Ping timeout: 250 seconds)
2021-08-21 09:03:49 +0200 <arahael> I've been trying to specify: allow-newer: base
2021-08-21 09:03:58 +0200 <maerwald> that should work
2021-08-21 09:04:12 +0200 <arahael> maerwald: In the global scope?
2021-08-21 09:04:16 +0200 <maerwald> yeah
2021-08-21 09:04:23 +0200 <arahael> cabal-version: 3.4?
2021-08-21 09:04:42 +0200 <maerwald> sure
2021-08-21 09:04:49 +0200 <sclv> it goes in cabal.project
2021-08-21 09:04:53 +0200 <arahael> Wierd it has no impact whatsoever, it still dies because something has an upper-bound of 4.14 for base.
2021-08-21 09:04:58 +0200 <sclv> Not in foo.cabal
2021-08-21 09:05:01 +0200 <arahael> Oooh...
2021-08-21 09:05:18 +0200 <maerwald> oh
2021-08-21 09:05:30 +0200 <maerwald> yeah, documentation clearly says it's cabal.project
2021-08-21 09:05:30 +0200 <arahael> What's the difference between foo.cabal and cabal.foo?
2021-08-21 09:05:37 +0200 <sclv> the cabal file specifies the package. the project file is build options for the package
2021-08-21 09:05:42 +0200 <arahael> maerwald: My interpretation was "the project's cabal file".
2021-08-21 09:06:24 +0200 <sclv> cabal.project files aren’t part of a tgz sdist of the package. they’re just build settings for development
2021-08-21 09:07:27 +0200 <maerwald> sclv: well, you can make them part of it :p
2021-08-21 09:07:50 +0200 <arahael> sclv: And if there's no cabal.project at all, I guess it just uses defaults?
2021-08-21 09:08:04 +0200 <maerwald> `packages: .` I think
2021-08-21 09:08:09 +0200 <arahael> I'm about to create a cabal.project containing only the one line: allow-newer: all
2021-08-21 09:09:09 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 09:09:09 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-08-21 09:09:55 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-08-21 09:10:53 +0200Guest|58(~Guest|58@131.226.66.188)
2021-08-21 09:11:18 +0200 <arahael> Weird day of dev. Clean kitchen. Research headsets (as a deaf dude, that's... Not common). Tiny bit of haskell research. Carry wood downstairs. Tiny bit of haskell research. Make lunch. Walk to shops. Headphones research. Tiny bit of headphone research. Tiny bit of *actual haskell dev* - allow-newer fiddling. ETc. :)
2021-08-21 09:11:48 +0200Guest|58(~Guest|58@131.226.66.188) (Client Quit)
2021-08-21 09:13:10 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 240 seconds)
2021-08-21 09:13:15 +0200 <arahael> Nice. allow-newer works nicely. Now I should probably restrict it to the one package that actually needs the hack.
2021-08-21 09:15:04 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 250 seconds)
2021-08-21 09:20:31 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 09:23:04 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-21 09:30:38 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 09:32:38 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr)
2021-08-21 09:34:37 +0200 <mastarija> Is there a way to create a constraint that "excludes" a certain type class? e.g. `instance ( Not ( Monoid a ) ) => SomeClass ( MyType a ) where ...`
2021-08-21 09:35:25 +0200 <mastarija> So basically, my function / instance is valid for everything that isn't a `Monoid`
2021-08-21 09:36:07 +0200 <maerwald> what is "everything"?
2021-08-21 09:36:34 +0200 <mastarija> Any 'a'
2021-08-21 09:36:40 +0200 <maerwald> you've defined instances for all classes from all of hackage?
2021-08-21 09:37:15 +0200 <mastarija> Not sure what you are asking. I'm talking about types, not classes
2021-08-21 09:37:18 +0200 <int-e> This is incompatible with the open nature of type classes; adding a Monoid instance could invalidate type inference decisions that were made in a different module when that instance wasn't yet visible.
2021-08-21 09:37:35 +0200 <tomsmeding> mastarija: impossible, but you _can_ get a constraint that says "a is match one any of this list of types"
2021-08-21 09:37:38 +0200 <maerwald> mastarija: you're talking about classes
2021-08-21 09:37:58 +0200 <mastarija> So I want to make an instance for any "type" that doesn't have this particular instance
2021-08-21 09:38:01 +0200 <tomsmeding> s/a is/a doesn't/
2021-08-21 09:38:23 +0200 <maerwald> you make instances of classes, not types
2021-08-21 09:38:26 +0200 <tomsmeding> _why_ do you want this constraint? so that you can have a different one that only works for Monoid?
2021-08-21 09:38:34 +0200 <mastarija> maerwald, true
2021-08-21 09:38:41 +0200 <int-e> There are closed type families though, which trade openness for the power of negation (among other things).
2021-08-21 09:38:51 +0200 <maerwald> so you don't know what classes you have, how are you gonna make instances?
2021-08-21 09:39:41 +0200 <tomsmeding> if so, class C a where yourfunction :: ... ; instance {-# OVERLAPPABLE #-} C a where yourfunction = yourdefinition ; instance {-# OVERLAPPING #-} Monoid a => C a where yourfunction = error "no"
2021-08-21 09:39:51 +0200 <tomsmeding> maerwald: any _type_ that doesn't implement Monoid
2021-08-21 09:39:55 +0200 <mastarija> maerwald, I have a class I want to make an instance of, but I can make it only if the type I'm working with isn't a Monoid.
2021-08-21 09:40:14 +0200 <int-e> as far as existing mechanisms for type classes go... this sounds like incoherent instances territory, which is the scary kind of overloaded instances.
2021-08-21 09:40:17 +0200 <tomsmeding> note that overlapping instances do work, kind of, but they're finicky I believe
2021-08-21 09:40:20 +0200 <arahael> I'm way out of my depth here, but why not... Ignore the Monoid instance?
2021-08-21 09:40:25 +0200 <mastarija> This is just an example. But as int-e said, open world comes into play
2021-08-21 09:41:09 +0200 <mastarija> Dunno, I had a thought, so I asked :D
2021-08-21 09:41:35 +0200 <maerwald> tomsmeding: ah, I think they wanted to make instances for every non-Monoid class :D
2021-08-21 09:41:38 +0200 <tomsmeding> mastarija: please don't do this unless you know exactly what you want and it's this :p
2021-08-21 09:41:59 +0200 <mastarija> I kind of do
2021-08-21 09:42:20 +0200 <mastarija> But it wasn't well formed yet
2021-08-21 09:43:04 +0200 <tomsmeding> oh right, this kind of overlapping instances (like I gave in my C example) can give rise to incoherence (different typeclass dictionaries being used for the same type in the same program)
2021-08-21 09:43:34 +0200 <tomsmeding> if you use the class C in a polymorphic context where it isn't known yet whether there will be a Monoid instance available for the concrete type in the end
2021-08-21 09:43:41 +0200 <mastarija> yes I guessed this would happen
2021-08-21 09:43:55 +0200 <mastarija> but you know, if I'm careful maybe it'll work :D
2021-08-21 09:44:05 +0200 <tomsmeding> mastarija: https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/exts/instances.html#extension-Over…
2021-08-21 09:44:29 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2021-08-21 09:44:34 +0200 <mastarija> Oh.. that's deprecated now
2021-08-21 09:44:55 +0200 <tomsmeding> I believe you can use the pragmas without enabling the extension
2021-08-21 09:45:14 +0200 <mastarija> yes, just noticed that in the docs :D
2021-08-21 09:45:18 +0200 <mastarija> good to know
2021-08-21 09:46:32 +0200 <tomsmeding> oh my instances are _too_ overlapping :p
2021-08-21 09:46:43 +0200 <tomsmeding> of course this will not work
2021-08-21 09:47:11 +0200 <tomsmeding> ghc decides which instance to use without looking at the constraints of instances; then after it has chosen one, it looks at the constraints and adds them to the set of things it needs to solve
2021-08-21 09:47:36 +0200 <tomsmeding> since these two instances will have the same "right-hand side" (namely C a), ghc can never choose
2021-08-21 09:48:07 +0200 <mastarija> can't it just pick the first one :P
2021-08-21 09:48:13 +0200 <tomsmeding> then it would always pick the first one
2021-08-21 09:48:20 +0200 <tomsmeding> which would defeat the point of having the second one :p
2021-08-21 09:51:48 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-08-21 09:54:42 +0200cawfee(~root@2406:3003:2077:2758::babe)
2021-08-21 09:55:34 +0200acidjnk_new(~acidjnk@p200300d0c72b9557dc14868c6ad3e278.dip0.t-ipconnect.de)
2021-08-21 09:56:08 +0200Erutuon(~Erutuon@user/erutuon)
2021-08-21 09:56:33 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 09:57:38 +0200reumeth(~reumeth@user/reumeth)
2021-08-21 10:00:25 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-08-21 10:01:52 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 250 seconds)
2021-08-21 10:04:54 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-08-21 10:06:05 +0200hendursa1(~weechat@user/hendursaga)
2021-08-21 10:07:08 +0200kenran(~kenran@200116b82bfa730075b97161738401b4.dip.versatel-1u1.de)
2021-08-21 10:08:00 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 244 seconds)
2021-08-21 10:17:16 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-08-21 10:17:30 +0200Megant(megant@user/megant) (Ping timeout: 268 seconds)
2021-08-21 10:17:39 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-08-21 10:21:13 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-08-21 10:32:56 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-08-21 10:33:12 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 10:36:31 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-21 10:36:48 +0200enoq(~enoq@2a05:1141:1f5:5600:eb83:919c:c248:eabe)
2021-08-21 10:37:34 +0200kenran(~kenran@200116b82bfa730075b97161738401b4.dip.versatel-1u1.de) (Quit: WeeChat info:version)
2021-08-21 10:37:40 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 252 seconds)
2021-08-21 10:40:10 +0200favonia(~favonia@user/favonia) (Ping timeout: 240 seconds)
2021-08-21 10:40:58 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 252 seconds)
2021-08-21 10:44:09 +0200arahaellikes Haskell. :)
2021-08-21 10:46:55 +0200MoC(~moc@user/moc)
2021-08-21 10:47:09 +0200tomsmedingtoo :)
2021-08-21 10:47:44 +0200 <arahael> The community here is awesome, the language is awesome, and there's lots of good stuff, even if the learning curve for those of us who usually develop in non-haskell projects is initially high. :)
2021-08-21 10:48:03 +0200 <arahael> And it's _great_ for refactorability. Never found another language that lets you fearlessly refactor quite so well.
2021-08-21 10:49:17 +0200 <tomsmeding> rust - fearless concurrency; haskell - fearless refactoring
2021-08-21 10:50:46 +0200 <arahael> Heh, actually isn't Haskell good for fearless concurrency, too?
2021-08-21 10:51:21 +0200 <arahael> Rust is on my list of langugages to really learn - already done the rustlings course which is pretty awesome, and I like the language, but ultimately still prefer Haskell for various reasons.
2021-08-21 10:51:42 +0200dsrt^(~dsrt@209.65.131.194) (Ping timeout: 250 seconds)
2021-08-21 10:52:26 +0200 <arahael> (Though that might depend on what I'm doing with it. Just right now, I'm doing a web service with haskell)
2021-08-21 10:53:26 +0200 <tomsmeding> indeed haskell is also very good at fearless concurrency :)
2021-08-21 10:58:33 +0200dsrt^(~dsrt@209.65.131.194)
2021-08-21 11:00:08 +0200 <arahael> Main thing I might pick Rust for is perhaps simpler build tooling, eg, to build a library where I know I can pretty easily produce something for windows, linux, ios, etc, without needing a 16-GB docker image just to build (as is the case for iOS with haskell today, iirc
2021-08-21 11:00:10 +0200 <arahael> )
2021-08-21 11:01:19 +0200 <int-e> . o O ( rust = cargo cult )
2021-08-21 11:01:27 +0200 <tomsmeding> heh
2021-08-21 11:01:28 +0200 <arahael> (Eg, with reflex-frp, their docker image needs 16 GB of RAM for doing haskell stuff for iOS, which, incidentially, is the maximum memory you can get on any apple laptop)
2021-08-21 11:01:31 +0200 <arahael> int-e: ha.
2021-08-21 11:02:10 +0200 <tomsmeding> just use swap ;)
2021-08-21 11:02:23 +0200 <arahael> At work I use Swift. Not a /bad/ language - it's actually much better than most other options used in enterprise projects. But blegh, there's so much I wish was better.
2021-08-21 11:02:34 +0200 <arahael> tomsmeding: Ha. Swap.
2021-08-21 11:03:23 +0200 <tomsmeding> but yeah the cross-compilation story of haskell is suboptimal still
2021-08-21 11:04:08 +0200 <tomsmeding> though I haven't actually tried it myself, neither with haskell nor with rust, so I only know second/third-hand experiences
2021-08-21 11:07:01 +0200 <arahael> Rust has a series of "platforms" they officially support in a fairly organised structure. iOS is "second tier", which means supported, just not actively tested in CI systems.
2021-08-21 11:07:28 +0200 <arahael> Not doing template-haskell makes certain things much simpler, I would expect.
2021-08-21 11:07:38 +0200 <tomsmeding> presumably, yes
2021-08-21 11:13:08 +0200 <tomsmeding> rust's procedural macros run on a custom-specified VM in the compiler, which is much easier to port (i.e. no work) than template haskell is (which I believe actually compile to native code because it can call FFI and whatnot?)
2021-08-21 11:14:34 +0200 <arahael> That's awesome.
2021-08-21 11:14:44 +0200 <tomsmeding> which of the two :p
2021-08-21 11:15:08 +0200 <tomsmeding> alaso note that "custom-specified VM" is cool-speak for "interpreter"
2021-08-21 11:15:41 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-21 11:18:08 +0200enoq(~enoq@2a05:1141:1f5:5600:eb83:919c:c248:eabe) (Ping timeout: 250 seconds)
2021-08-21 11:20:01 +0200enoq(~enoq@2a05:1141:1f5:5600:eb83:919c:c248:eabe)
2021-08-21 11:20:13 +0200averell(~averell@user/averell) (Quit: .)
2021-08-21 11:20:43 +0200kuribas(~user@ptr-25vy0i7pvnvbb3ckill.18120a2.ip6.access.telenet.be)
2021-08-21 11:23:31 +0200enoq(~enoq@2a05:1141:1f5:5600:eb83:919c:c248:eabe) (Remote host closed the connection)
2021-08-21 11:28:42 +0200biberu(~biberu@user/biberu) (Read error: Connection reset by peer)
2021-08-21 11:32:49 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 11:33:00 +0200 <arahael> tomsmeding: Rusts. :)
2021-08-21 11:33:15 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-08-21 11:33:20 +0200 <arahael> And yeah, even so, as an interpreter, it's nifty that it's effectively a constrained environment that the compiler can specify.
2021-08-21 11:34:15 +0200 <tomsmeding> arahael: while spelunking through the rustc source code I found this unrelated thing https://doc.rust-lang.org/nightly/nightly-rustc/src/rustc_expand/proc_macro_server.rs.html#813
2021-08-21 11:34:44 +0200 <arahael> ...
2021-08-21 11:34:45 +0200notzmv(~zmv@user/notzmv) (Read error: Connection reset by peer)
2021-08-21 11:34:47 +0200 <arahael> actix-web?
2021-08-21 11:34:52 +0200 <tomsmeding> https://github.com/rust-lang/rust/issues/74616
2021-08-21 11:35:18 +0200 <tomsmeding> similar to the microsoft hacks that have been written about on the internet :p
2021-08-21 11:35:27 +0200pbrisbin(~patrick@pool-108-16-214-93.phlapa.fios.verizon.net) (Ping timeout: 245 seconds)
2021-08-21 11:35:32 +0200 <tomsmeding> where the windows kernel has compatibility hacks for specific programs
2021-08-21 11:35:47 +0200biberu(~biberu@user/biberu)
2021-08-21 11:36:12 +0200ubert(~Thunderbi@77.119.170.32.wireless.dyn.drei.com)
2021-08-21 11:36:18 +0200 <arahael> I fear that's going to be a dark hole.
2021-08-21 11:37:36 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-21 11:38:01 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 11:38:16 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 268 seconds)
2021-08-21 11:39:25 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 11:41:51 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-08-21 11:42:35 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2021-08-21 11:43:16 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 250 seconds)
2021-08-21 11:45:53 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 11:46:13 +0200random-jellyfish(~random-je@user/random-jellyfish) (Ping timeout: 246 seconds)
2021-08-21 11:47:30 +0200mc47(~mc47@xmonad/TheMC47)
2021-08-21 11:48:28 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 250 seconds)
2021-08-21 11:50:16 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-08-21 11:54:36 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection)
2021-08-21 11:56:43 +0200nschoe(~quassel@2a01:e0a:8e:a190:dc3:57c7:ad61:19ea)
2021-08-21 11:57:47 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 11:59:30 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-21 12:00:53 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 12:02:44 +0200 <tomsmeding> https://mail.haskell.org/pipermail/haskell-cafe/2021-August/134351.html
2021-08-21 12:06:14 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 12:10:22 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection)
2021-08-21 12:14:06 +0200 <arahael> That sucks, I'm currently an iOS dev, actually, but I'm not really happy with how difficult xcode makes things.
2021-08-21 12:14:40 +0200oldsk00l_(~znc@ec2-3-124-242-227.eu-central-1.compute.amazonaws.com) (Remote host closed the connection)
2021-08-21 12:18:48 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 250 seconds)
2021-08-21 12:21:06 +0200michalz(~michalz@185.246.204.55) (Remote host closed the connection)
2021-08-21 12:26:11 +0200ubert1(~Thunderbi@77.119.170.32.wireless.dyn.drei.com)
2021-08-21 12:30:57 +0200ubert1(~Thunderbi@77.119.170.32.wireless.dyn.drei.com) (Ping timeout: 258 seconds)
2021-08-21 12:34:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-08-21 12:35:27 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 12:36:21 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 12:38:33 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 12:38:58 +0200Megant(megant@user/megant)
2021-08-21 12:39:31 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com)
2021-08-21 12:44:15 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
2021-08-21 12:51:50 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-08-21 12:52:36 +0200vysn(~vysn@user/vysn) (Ping timeout: 250 seconds)
2021-08-21 12:54:19 +0200vysn(~vysn@user/vysn)
2021-08-21 12:54:42 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2021-08-21 12:55:27 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-08-21 12:56:55 +0200severen(~severen@202.36.179.72)
2021-08-21 12:58:04 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr)
2021-08-21 13:00:44 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 13:01:04 +0200alx741(~alx741@181.196.68.120)
2021-08-21 13:05:10 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 250 seconds)
2021-08-21 13:07:41 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 13:08:35 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 13:09:16 +0200AlexNoo_(~AlexNoo@94.233.241.255)
2021-08-21 13:12:33 +0200AlexZenon(~alzenon@94.233.241.41) (Ping timeout: 248 seconds)
2021-08-21 13:12:33 +0200Alex_test(~al_test@94.233.241.41) (Ping timeout: 248 seconds)
2021-08-21 13:12:47 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-08-21 13:13:22 +0200AlexNoo(~AlexNoo@94.233.241.41) (Ping timeout: 272 seconds)
2021-08-21 13:14:58 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 13:15:28 +0200dipankar(~dipankar@50.35.187.85)
2021-08-21 13:15:31 +0200benin036932(~benin@183.82.178.142) (Ping timeout: 252 seconds)
2021-08-21 13:15:55 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 13:16:51 +0200Alex_test(~al_test@94.233.241.255)
2021-08-21 13:17:01 +0200AlexZenon(~alzenon@94.233.241.255)
2021-08-21 13:24:25 +0200benin036932(~benin@183.82.178.142)
2021-08-21 13:24:49 +0200NieDzejkob(~quassel@195.149.98.3) (Ping timeout: 248 seconds)
2021-08-21 13:24:52 +0200Megant(megant@user/megant) (Ping timeout: 252 seconds)
2021-08-21 13:26:13 +0200NieDzejkob(~quassel@195.149.98.3)
2021-08-21 13:30:20 +0200Megant(megant@user/megant)
2021-08-21 13:34:58 +0200acidjnk_new(~acidjnk@p200300d0c72b9557dc14868c6ad3e278.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
2021-08-21 13:36:10 +0200nschoe(~quassel@2a01:e0a:8e:a190:dc3:57c7:ad61:19ea) (Ping timeout: 240 seconds)
2021-08-21 13:41:11 +0200ubert(~Thunderbi@77.119.170.32.wireless.dyn.drei.com) (Remote host closed the connection)
2021-08-21 13:42:33 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 13:43:46 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 13:46:11 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 13:46:37 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 13:49:06 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 13:51:16 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-08-21 13:51:30 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 13:51:55 +0200AndrewYu(~andrew@user/andrewyu) (Quit: Leaving)
2021-08-21 13:57:21 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 248 seconds)
2021-08-21 13:58:28 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 250 seconds)
2021-08-21 13:59:51 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2021-08-21 14:14:56 +0200p0lyph3m(~polyphem@2a02:810d:640:776c:bd0c:a594:ef4e:c3f3) (Read error: Connection reset by peer)
2021-08-21 14:15:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 14:26:55 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-08-21 14:33:01 +0200nschoe(~quassel@2a01:e0a:8e:a190:7c9d:d6d2:278b:44a9)
2021-08-21 14:33:41 +0200AlexNoo_AlexNoo
2021-08-21 14:37:17 +0200dipankar(~dipankar@50.35.187.85) (Quit: Connection closed)
2021-08-21 14:37:21 +0200severen(~severen@202.36.179.72) (Ping timeout: 248 seconds)
2021-08-21 14:38:01 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-08-21 14:38:05 +0200Lycurgus(~juan@cpe-45-46-140-49.buffalo.res.rr.com)
2021-08-21 14:39:50 +0200favonia(~favonia@user/favonia)
2021-08-21 14:41:56 +0200notzmv(~zmv@user/notzmv)
2021-08-21 14:45:16 +0200hendursa1(~weechat@user/hendursaga) (Quit: hendursa1)
2021-08-21 14:45:40 +0200hendursaga(~weechat@user/hendursaga)
2021-08-21 14:47:07 +0200chris(~chris@81.96.113.213)
2021-08-21 14:47:12 +0200chrisGuest9404
2021-08-21 14:48:02 +0200mousey(~skymouse@gateway/tor-sasl/mousey) (Ping timeout: 244 seconds)
2021-08-21 14:48:44 +0200leitz(~LeamHall@cpe-173-172-58-72.tx.res.rr.com)
2021-08-21 14:49:39 +0200 <leitz> Sorry to bother, but is there a general "Functional Programming" IRC channel? I'm just learning, but not using a regular FP language.
2021-08-21 14:51:51 +0200skykanin(~skykanin@115.81-166-221.customer.lyse.net)
2021-08-21 14:53:17 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-21 14:54:55 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 14:59:20 +0200 <tomsmeding> not that I know of; if it's sufficiently functional, you may have luck just asking here, or perhaps on #haskell-offtopic depending on the exact question :)
2021-08-21 15:08:49 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 15:09:06 +0200oxide(~lambda@user/oxide)
2021-08-21 15:10:37 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 15:12:52 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 268 seconds)
2021-08-21 15:14:56 +0200burnside_(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 15:14:56 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-21 15:18:08 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 15:18:08 +0200burnside_(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-21 15:18:18 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-08-21 15:18:57 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 248 seconds)
2021-08-21 15:22:04 +0200nschoe(~quassel@2a01:e0a:8e:a190:7c9d:d6d2:278b:44a9) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-08-21 15:30:17 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2021-08-21 15:32:24 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-0d8f-34df-93a6-03c1.res6.spectrum.com)
2021-08-21 15:32:53 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-21 15:35:13 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2021-08-21 15:36:11 +0200alphabeta(~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net) (Quit: Quitting IRC :()
2021-08-21 15:36:24 +0200alphabeta(~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net)
2021-08-21 15:36:26 +0200alphabeta(~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net) (Client Quit)
2021-08-21 15:36:44 +0200kilolympus(~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net)
2021-08-21 15:36:49 +0200tubogram(~tubogram@user/tubogram) (Quit: See ya later!)
2021-08-21 15:38:46 +0200tubogram(~tubogram@user/tubogram)
2021-08-21 15:39:15 +0200 <Lycurgus> leitz, probably doesn't make sense since there are strongly contrasting notions of what constitutes FP
2021-08-21 15:39:44 +0200 <leitz> tomsmeding, I'll ask over in offtopic, more a general thoughts thing.
2021-08-21 15:39:55 +0200 <Lycurgus> from langs like haskell to commonlisp both of which have channels of those names
2021-08-21 15:40:14 +0200 <Lycurgus> representing the ends of the spectrum
2021-08-21 15:40:54 +0200 <Lycurgus> lisp is the old FP
2021-08-21 15:41:07 +0200 <Lycurgus> the old notion
2021-08-21 15:41:15 +0200 <hsek[m]> Where was the `cabal` proposal for Stackage intregration? Can't seem to find it
2021-08-21 15:42:28 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds)
2021-08-21 15:42:28 +0200keutoi(~keutoi@157.47.6.137) (Ping timeout: 268 seconds)
2021-08-21 15:42:54 +0200 <hsek[m]> Ah I found it. https://github.com/haskell/cabal/issues/7556
2021-08-21 15:42:58 +0200 <leitz> Lycurgus, I'm studying "Grokking Simplicity" and it's giving me a lot of good ideas about how to code better using a functional programming mindset.
2021-08-21 15:43:10 +0200 <Lycurgus> notions, partisans, and no unity
2021-08-21 15:44:02 +0200 <Lycurgus> leitz, ah
2021-08-21 15:44:03 +0200keutoi(~keutoi@106.208.52.196)
2021-08-21 15:44:04 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 15:44:49 +0200 <Lycurgus> there is #lisp corresponding the old ##lisp at freenode, a distant match but prolly closest
2021-08-21 15:48:32 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 250 seconds)
2021-08-21 15:48:54 +0200machinedgod(~machinedg@24.105.81.50)
2021-08-21 15:50:46 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-08-21 15:52:52 +0200jess(~jess@libera/staff/jess)
2021-08-21 15:55:40 +0200tubogram(~tubogram@user/tubogram) (Quit: See ya later!)
2021-08-21 15:56:05 +0200mcglk(~mcglk@131.191.49.120) (Read error: Connection timed out)
2021-08-21 15:56:57 +0200mcglk(~mcglk@131.191.49.120)
2021-08-21 15:57:57 +0200tubogram(~tubogram@user/tubogram)
2021-08-21 15:58:50 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 16:00:31 +0200Lycurgus(~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
2021-08-21 16:01:08 +0200tubogram(~tubogram@user/tubogram) (Client Quit)
2021-08-21 16:05:10 +0200shapr(~user@pool-108-28-144-11.washdc.fios.verizon.net)
2021-08-21 16:07:23 +0200tubogram(~tubogram@user/tubogram)
2021-08-21 16:08:47 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Quit: Leaving)
2021-08-21 16:09:06 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 16:09:52 +0200shriekingnoise(~shrieking@186.137.144.80) (Ping timeout: 252 seconds)
2021-08-21 16:14:19 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2)
2021-08-21 16:14:39 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 16:15:00 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 16:15:51 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr)
2021-08-21 16:17:34 +0200Guest96(~Guest96@p1256008-ipoe.ipoe.ocn.ne.jp)
2021-08-21 16:18:14 +0200Guest96(~Guest96@p1256008-ipoe.ipoe.ocn.ne.jp) (Quit: Client closed)
2021-08-21 16:19:18 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 250 seconds)
2021-08-21 16:19:45 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 16:20:19 +0200keutoi(~keutoi@106.208.52.196) (Ping timeout: 252 seconds)
2021-08-21 16:20:45 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 16:27:28 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 16:27:31 +0200MoC(~moc@user/moc) (Quit: Konversation terminated!)
2021-08-21 16:29:31 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com)
2021-08-21 16:30:21 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection)
2021-08-21 16:31:17 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 16:32:00 +0200keutoi(~keutoi@106.208.52.196)
2021-08-21 16:33:45 +0200burnside_(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 16:33:46 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-21 16:36:01 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 244 seconds)
2021-08-21 16:36:16 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 252 seconds)
2021-08-21 16:43:10 +0200 <_bin> Does anyone know what the `(..)` syntax in an import means? Specifically, `import Colog.Core (LogAction (..), (<&), logStringStdout)`.
2021-08-21 16:43:37 +0200 <Clint> _bin: yes
2021-08-21 16:44:13 +0200 <Clint> it means to import everything "within" LogAction
2021-08-21 16:44:22 +0200 <Clint> i'm sure there's a better word for that
2021-08-21 16:44:56 +0200 <tomsmeding> if LogAction is a class, that imports LogAction as well as the methods of the class; if it's a datatype, it imporst the datatype as well as the constructors of that datatype
2021-08-21 16:45:08 +0200 <tomsmeding> importing just 'LogAction' would only import that one name
2021-08-21 16:45:28 +0200 <_bin> Clint, tomsmeding: Thanks, that helps.
2021-08-21 16:47:11 +0200neo(~neo3@cpe-292712.ip.primehome.com)
2021-08-21 16:47:15 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-08-21 16:47:17 +0200fresheyeball(~fresheyeb@c-71-237-105-37.hsd1.co.comcast.net) (Quit: WeeChat 2.9)
2021-08-21 16:48:48 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-08-21 16:48:57 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 16:49:14 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-21 16:50:45 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
2021-08-21 16:52:58 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 16:52:58 +0200burnside_(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-21 16:53:01 +0200nuncanada(~dude@181.213.52.63)
2021-08-21 16:53:37 +0200nuncanada(~dude@181.213.52.63) (Remote host closed the connection)
2021-08-21 16:53:43 +0200tomsmeding(~tomsmedin@tomsmeding.com) (Quit: ZNC 1.8.2 - https://znc.in)
2021-08-21 16:54:09 +0200Skyfire(~pyon@user/pyon) (Remote host closed the connection)
2021-08-21 16:54:17 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 16:54:27 +0200Skyfire(~pyon@user/pyon)
2021-08-21 16:56:38 +0200burnside_(~burnsides@client-8-91.eduroam.oxuni.org.uk)
2021-08-21 16:56:42 +0200burnside_(~burnsides@client-8-91.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-21 16:57:54 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-08-21 16:59:22 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 252 seconds)
2021-08-21 17:02:37 +0200tomsmeding(~tomsmedin@tomsmeding.com)
2021-08-21 17:05:04 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 17:08:50 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 17:10:37 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-21 17:12:28 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 17:13:02 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 250 seconds)
2021-08-21 17:15:14 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 17:15:19 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 252 seconds)
2021-08-21 17:17:20 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 17:23:49 +0200Guest9404(~chris@81.96.113.213) (Remote host closed the connection)
2021-08-21 17:24:35 +0200chris(~chris@81.96.113.213)
2021-08-21 17:24:39 +0200chrisGuest1299
2021-08-21 17:26:35 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 17:29:04 +0200Guest1299(~chris@81.96.113.213) (Ping timeout: 252 seconds)
2021-08-21 17:30:10 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
2021-08-21 17:31:09 +0200dajoer(~david@user/gvx) (Quit: leaving)
2021-08-21 17:32:32 +0200reumeth(~reumeth@user/reumeth) (Ping timeout: 250 seconds)
2021-08-21 17:33:32 +0200ystael(~ystael@user/ystael) (Quit: Lost terminal)
2021-08-21 17:35:46 +0200ystael(~ystael@user/ystael)
2021-08-21 17:36:01 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 248 seconds)
2021-08-21 17:37:30 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 244 seconds)
2021-08-21 17:38:40 +0200Jack(~Jack@node-1w7jra24ayur83r37n177ovv8.ipv6.telus.net)
2021-08-21 17:41:30 +0200bitmapper(uid464869@id-464869.tooting.irccloud.com)
2021-08-21 17:46:58 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 17:48:22 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 17:49:26 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-08-21 17:51:29 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 248 seconds)
2021-08-21 17:52:54 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
2021-08-21 17:54:53 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 17:56:55 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 268 seconds)
2021-08-21 17:58:04 +0200Guest|60(~Guest|60@181.171.68.90)
2021-08-21 17:58:07 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-21 17:58:19 +0200Guest|60(~Guest|60@181.171.68.90) (Client Quit)
2021-08-21 17:58:40 +0200econo(uid147250@user/econo)
2021-08-21 18:05:21 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 18:05:23 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2021-08-21 18:06:23 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 18:08:21 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 18:09:59 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-21 18:10:01 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr)
2021-08-21 18:11:12 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 18:11:32 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-21 18:11:34 +0200hololeap(~hololeap@user/hololeap)
2021-08-21 18:14:09 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 18:14:52 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2021-08-21 18:19:21 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 18:20:12 +0200azeem(~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) (Ping timeout: 250 seconds)
2021-08-21 18:21:00 +0200azeem(~azeem@176.200.245.90)
2021-08-21 18:22:58 +0200keutoi(~keutoi@106.208.52.196) (Ping timeout: 252 seconds)
2021-08-21 18:23:31 +0200aman(~aman@user/aman) (Ping timeout: 252 seconds)
2021-08-21 18:24:39 +0200benin036932(~benin@183.82.178.142) (Ping timeout: 268 seconds)
2021-08-21 18:25:01 +0200keutoi(~keutoi@223.238.95.231)
2021-08-21 18:25:20 +0200aman(~aman@user/aman)
2021-08-21 18:37:55 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-21 18:38:20 +0200azeem(~azeem@176.200.245.90) (Read error: Connection reset by peer)
2021-08-21 18:38:45 +0200azeem(~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it)
2021-08-21 18:42:33 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 18:47:10 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-08-21 18:50:48 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 18:52:19 +0200vpan(~vilius@212.117.1.172)
2021-08-21 18:55:29 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
2021-08-21 18:56:57 +0200__monty__(~toonn@user/toonn)
2021-08-21 18:59:24 +0200goepsilongo_(~goepsilon@2603-7000-ab00-62ed-c9e0-8f19-de85-1d2f.res6.spectrum.com)
2021-08-21 19:00:40 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-0d8f-34df-93a6-03c1.res6.spectrum.com) (Ping timeout: 240 seconds)
2021-08-21 19:05:19 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 252 seconds)
2021-08-21 19:06:31 +0200mdunnio(~mdunn@205.178.28.97)
2021-08-21 19:09:56 +0200 <Athas> What is the simplest Haskell library for writing a very simple TUI, with a few input fields and such?
2021-08-21 19:10:07 +0200 <Athas> I know of Brick, which can be used for anything, but is there something simpler?
2021-08-21 19:10:35 +0200mestre(~mestre@191.177.175.57)
2021-08-21 19:10:44 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2021-08-21 19:11:14 +0200HarveyPwca(~HarveyPwc@2601:246:c180:a570:29df:3b00:ad0e:3a06) (Quit: Leaving)
2021-08-21 19:11:16 +0200 <sm> Athas: there's wizards
2021-08-21 19:11:17 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-08-21 19:12:02 +0200Guest2172(~Guest21@2a02:8109:a080:6368:d5d2:328b:373c:5b57)
2021-08-21 19:12:35 +0200 <Guest2172> Could somebody help me regarding my haskell homework?
2021-08-21 19:13:13 +0200 <sm> if you want positioned input fields, it's brick or make your own with vty or ansi-terminal I think
2021-08-21 19:14:01 +0200 <sm> @where paste, Guest2172
2021-08-21 19:14:01 +0200 <lambdabot> I know nothing about paste,.
2021-08-21 19:14:17 +0200 <sm> @where paste
2021-08-21 19:14:17 +0200 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2021-08-21 19:14:27 +0200 <Guest2172> Ah. Gimme a sec
2021-08-21 19:14:55 +0200son0p(~ff@181.136.122.143)
2021-08-21 19:15:09 +0200 <Athas> sm: that looks interesting!
2021-08-21 19:15:19 +0200 <Athas> I have no opinion on positioning.
2021-08-21 19:15:34 +0200 <Guest2172> https://paste.tomsmeding.com/ctfNt47T this good?
2021-08-21 19:15:42 +0200 <sm> i use wizards for hledger add, it's great
2021-08-21 19:16:13 +0200 <sm> that's good Guest2172, what are you stuck on ?
2021-08-21 19:16:55 +0200 <Guest2172> Basically where to start. My mind can't think Haskell at all
2021-08-21 19:17:17 +0200 <sm> is there a simpler problem you could tackle first ?
2021-08-21 19:17:40 +0200 <Guest2172> There are a few, yea. Was just thinking that one would end up being easy
2021-08-21 19:18:01 +0200 <Guest2172> There's a multi-part one that I started, give me a second
2021-08-21 19:18:25 +0200 <sm> or maybe the first couple at project euler or exercism.io would get you warmed up
2021-08-21 19:19:05 +0200 <Guest2172> I am warmed up a bit, have been trying to work through these the entire day
2021-08-21 19:19:12 +0200mestre(~mestre@191.177.175.57) (Quit: leaving)
2021-08-21 19:19:28 +0200mestre(~mestre@191.177.175.57)
2021-08-21 19:19:29 +0200 <Guest2172> https://paste.tomsmeding.com/e8D0Jsqv
2021-08-21 19:20:43 +0200 <Guest2172> I don't really get how I'm supposed to get StockL out of the definition at the top
2021-08-21 19:22:07 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 19:22:27 +0200 <__monty__> Do you understand why your solution for countF works?
2021-08-21 19:23:44 +0200 <Guest2172> Partially.
2021-08-21 19:24:23 +0200 <sm> good answer :)
2021-08-21 19:24:45 +0200 <maerwald> can someone explain to me how Data.Char.isLower is implemented? It ends up like an boscure ffi call it seems to https://gitlab.haskell.org/ghc/ghc/-/blob/master/libraries/base/cbits/WCsubst.c which I don't understand
2021-08-21 19:24:49 +0200 <Guest2172> I am assuming that the Item datatype is acting like a lookup table when Single_Apple is mentioned
2021-08-21 19:25:04 +0200 <sm> it looks like you know how to get the list of items, now you need a way to look up one item in that list
2021-08-21 19:26:22 +0200 <sm> hint: there's a function in Prelude called lookup
2021-08-21 19:26:40 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-08-21 19:28:18 +0200 <monochrom> or you could write your own recursion. it's a good exercise anyway, even if you throw it away afterwards
2021-08-21 19:28:43 +0200 <monochrom> unless you have no idea how to work with a list
2021-08-21 19:28:55 +0200 <monochrom> in which case more needs for more fingering exercises
2021-08-21 19:29:33 +0200 <Guest2172> I do know how to work a list, dw
2021-08-21 19:29:42 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-08-21 19:29:56 +0200 <monochrom> It takes zero understanding to say "StockL is some kind of database". Every random person on the street knows that much.
2021-08-21 19:30:39 +0200 <Guest2172> Yea, I'm just dumb when it comes to Haskell
2021-08-21 19:31:02 +0200 <Guest2172> Give me Python, c or c++ and I'll do just fine. Give me Haskell and I literally can't think
2021-08-21 19:31:23 +0200 <sm> it takes time to rewire the brain for it
2021-08-21 19:31:35 +0200 <sm> soon it'll be easy
2021-08-21 19:32:18 +0200 <Clint> maerwald: looks like it's just checking an autogenerated lookup table for a flag
2021-08-21 19:32:35 +0200 <maerwald> yeah, I'm screwed
2021-08-21 19:32:37 +0200 <sm> Have you read a lot of (simple) haskell code ? this can help a lot I think
2021-08-21 19:34:03 +0200 <__monty__> Guest2172: Could you say in a sentence or two how countF works? I think it'll help with a misunderstanding in your commented out countL.
2021-08-21 19:34:34 +0200pbrisbin(~patrick@174-081-116-011.res.spectrum.com)
2021-08-21 19:35:00 +0200pavonia(~user@user/siracusa)
2021-08-21 19:37:47 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-08-21 19:38:02 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr)
2021-08-21 19:38:49 +0200 <Guest2172> countF takes in a variable of type StockF, and parses that to getStockF, which acts as a lookup for those items.
2021-08-21 19:41:14 +0200 <Guest2172> Is that correct?
2021-08-21 19:41:47 +0200 <Guest2172> __monty__
2021-08-21 19:42:52 +0200 <pavonia> maerwald: What are you trying to do?
2021-08-21 19:43:18 +0200 <maerwald> pavonia: toUpper for Word16, similar to the word8 package
2021-08-21 19:43:33 +0200neo(~neo3@cpe-292712.ip.primehome.com) (Quit: Leaving)
2021-08-21 19:43:53 +0200neo(~neo3@cpe-292712.ip.primehome.com)
2021-08-21 19:46:09 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 19:50:00 +0200wallymathieu(~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: Textual IRC Client: www.textualapp.com)
2021-08-21 19:50:34 +0200 <tomsmeding> maerwald: https://hackage.haskell.org/package/base-4.15.0.0/docs/src/GHC-Unicode.html says that the implementation uses libunicode if that's available
2021-08-21 19:50:46 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 250 seconds)
2021-08-21 19:51:29 +0200 <dsal> Guest2172: I don't think I'd phrase it that way.
2021-08-21 19:51:36 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-08-21 19:51:44 +0200 <Guest2172> I just can't think haskell
2021-08-21 19:52:12 +0200 <__monty__> Guest2172: Not quite. You're saying `getStockF` is the function that takes an item and returns a count?
2021-08-21 19:52:25 +0200 <__monty__> What is `x`?
2021-08-21 19:53:02 +0200Erutuon(~Erutuon@user/erutuon)
2021-08-21 19:53:19 +0200 <Guest2172> `x` is StockF f
2021-08-21 19:54:06 +0200 <__monty__> Yes, and StockF f is a record, with one field called `getStockF`.
2021-08-21 19:54:34 +0200 <__monty__> This field is also a function that extracts the value of the field from such a record.
2021-08-21 19:55:05 +0200 <tomsmeding> maerwald: oh but a comment later on claims that the WCsubst.c functions are used unconditionally?
2021-08-21 19:55:52 +0200 <__monty__> So `getStockF x` is just the value of the similarly named field.
2021-08-21 19:56:27 +0200 <maerwald> yeah, I think there's no way I can have toLower on Word16 reasonably without converting to Char
2021-08-21 19:56:43 +0200 <maerwald> for Word8 it's straight forward
2021-08-21 19:56:51 +0200 <Guest2172> So if I were to write them down exactly the same, getStockL x would give me the list, right?
2021-08-21 19:56:59 +0200 <__monty__> Guest2172: It's clearer if you make it less pointfree. `countF x i = (getStockF x) i`, you see? So what's wrong with your proposed countL?
2021-08-21 19:57:02 +0200 <__monty__> Yes, exactly.
2021-08-21 19:57:16 +0200 <__monty__> So passing a list to `getStockL` wouldn't work.
2021-08-21 19:57:40 +0200 <__monty__> Now that you know how to get the list you should be able to implement countL.
2021-08-21 19:58:25 +0200severen(~severen@202.36.179.72)
2021-08-21 19:58:46 +0200 <pavonia> maerwald: You could also filter the Unicode database files yourself and create a static mapping. The format is quite simple
2021-08-21 19:59:26 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 250 seconds)
2021-08-21 20:00:41 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-08-21 20:00:58 +0200 <Guest2172> I am confused how I should apply both getStockL and lookup though. getStockL x gives me the list, and somehow I'm supposed to use lookup to get the second element in that list
2021-08-21 20:01:14 +0200bitmapper(uid464869@id-464869.tooting.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-21 20:01:28 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 20:01:56 +0200jakalx(~jakalx@base.jakalx.net)
2021-08-21 20:02:52 +0200 <maerwald> my property tests say that `toUpper = charToWord16 . C.toUpper . word16ToChar` is safe, because Data.Char.toUpper never goes beyond Word16 maxBound :p
2021-08-21 20:02:56 +0200 <maerwald> that's luck
2021-08-21 20:04:16 +0200 <tomsmeding> maerwald: what it ends up doing is a binary search in the allchars[] list starting on line 303; the entries are {starting codepoint, number of points in block, rule of this block}. The rules are defined directly above the allchars table, where the first item in the {} is the category, which is a bitwise OR of some of the GENCAT_?? defines, which are all distinct, single bits
2021-08-21 20:04:37 +0200 <maerwald> yeah, pretty sure I don't wanna understand it :p
2021-08-21 20:04:45 +0200 <tomsmeding> and it tests if the category has the GENCAT_LL bit set :)
2021-08-21 20:05:04 +0200nate1(~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 250 seconds)
2021-08-21 20:06:05 +0200 <tomsmeding> it divides up the codepoints 0 to 65535 in 2719 blocks of the same category
2021-08-21 20:06:40 +0200 <tomsmeding> this would be very easy to convert to whatever format you want it in, but at that point you can also generate it from the official UnicodeData.txt file :p
2021-08-21 20:06:45 +0200 <__monty__> Guest2172: You can just apply a function to the value `f (getStockL x)`.
2021-08-21 20:06:57 +0200pbrisbin(~patrick@174-081-116-011.res.spectrum.com) (Ping timeout: 248 seconds)
2021-08-21 20:07:19 +0200 <__monty__> Guest2172: I'd try implementing the recursion though, it's good practice.
2021-08-21 20:07:48 +0200 <tomsmeding> maerwald: pretty sure that toUpper-closedness is not luck; 0000-FFFF is the so-called Basic Multilingual Plane and is a closed set of stuff
2021-08-21 20:07:57 +0200 <maerwald> oh
2021-08-21 20:08:17 +0200 <tomsmeding> maerwald: https://en.wikipedia.org/wiki/Unicode#Code_planes_and_blocks (I'm not recalling this from memory or something :p)
2021-08-21 20:09:05 +0200 <maerwald> yeah, it def performs worse than the hand-written 'toLower' of Word8
2021-08-21 20:09:26 +0200 <tomsmeding> heh you can compress that table in WCsubst.c quite a bit if you allow for a slightly more complicated lookup function
2021-08-21 20:09:37 +0200 <maerwald> 41.10 μs vs 7.613 μs
2021-08-21 20:10:11 +0200 <tomsmeding> lots of alternating rule22 and rule23, which is just the same but then uppercase/lowercase
2021-08-21 20:10:28 +0200mestre(~mestre@191.177.175.57) (Quit: leaving)
2021-08-21 20:10:37 +0200 <maerwald> well, good enough
2021-08-21 20:10:41 +0200keutoi(~keutoi@223.238.95.231) (Quit: leaving)
2021-08-21 20:10:43 +0200mestre(~mestre@191.177.175.57)
2021-08-21 20:10:56 +0200 <tomsmeding> and that binary search is also inefficient in general, because of the use of the bsearch C library function, which is fine but not inlined (because C) so the comparison function is an indirect function call
2021-08-21 20:12:01 +0200 <tomsmeding> in other words, if you want a really efficient implementation of isLower for Word16, you can do a bit better than ghc's current impl :)
2021-08-21 20:12:24 +0200zaquest(~notzaques@5.128.210.178) (Quit: Leaving)
2021-08-21 20:13:11 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 268 seconds)
2021-08-21 20:13:48 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-08-21 20:14:34 +0200 <tomsmeding> wait, that isLower calls u_iswlower which is an _unsafe_ FFI call
2021-08-21 20:14:36 +0200azeem(~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) (Ping timeout: 250 seconds)
2021-08-21 20:15:50 +0200markpythonicbtc(~textual@2601:647:5a00:35:697a:eb38:2e9e:dc30)
2021-08-21 20:16:48 +0200azeem(~azeem@176.200.245.90)
2021-08-21 20:17:16 +0200 <maerwald> hmm... if you want to deal with UTF-16LE ShortByteString on a BE platform, then `pack :: [Word16] -> ShortByteString` will give you a surprise
2021-08-21 20:17:45 +0200 <tomsmeding> endianness yay
2021-08-21 20:18:01 +0200 <maerwald> Word16 appears to be BE interpreted by the primitives like writeWord16Array#
2021-08-21 20:18:11 +0200 <maerwald> and so it performs alignment based on platform
2021-08-21 20:18:50 +0200markpythonicbtc(~textual@2601:647:5a00:35:697a:eb38:2e9e:dc30) (Client Quit)
2021-08-21 20:18:51 +0200zaquest(~notzaques@5.128.210.178)
2021-08-21 20:19:07 +0200 <tomsmeding> probably the most efficient implementation
2021-08-21 20:20:14 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 250 seconds)
2021-08-21 20:20:14 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-08-21 20:21:09 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-08-21 20:25:15 +0200 <kuribas> I am trying vscode again after a few months "the haskell server crashed 5 times in the last 3 minutes".
2021-08-21 20:25:26 +0200 <kuribas> Is this really what I should recommend to my team?
2021-08-21 20:25:40 +0200aman(~aman@user/aman) (Ping timeout: 240 seconds)
2021-08-21 20:26:07 +0200 <janus> kuribas: who said you should recommend it to anyone?
2021-08-21 20:26:13 +0200markpythonicbtc(~textual@2601:647:5a00:35:697a:eb38:2e9e:dc30)
2021-08-21 20:26:24 +0200 <kuribas> janus: many people recommend the LSP.
2021-08-21 20:26:36 +0200 <monochrom> I think you can try for yourself again.
2021-08-21 20:27:04 +0200 <kuribas> It's nice when it works. But it never works (for me).
2021-08-21 20:27:44 +0200aman(~aman@user/aman)
2021-08-21 20:27:51 +0200 <janus> doesn't work for me either when you have hundreds of modules. i thought it was just because of that
2021-08-21 20:28:13 +0200 <janus> what kinda problem are you having? memory usage? if so, it's probably just because it was developed and tested on small projects
2021-08-21 20:28:27 +0200azeem(~azeem@176.200.245.90) (Read error: Connection reset by peer)
2021-08-21 20:28:30 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-21 20:29:07 +0200 <janus> high latency, high memory usage, leaking memory, those are the problems i had with v1.1
2021-08-21 20:29:43 +0200azeem(~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it)
2021-08-21 20:29:53 +0200 <kuribas> janus: idk
2021-08-21 20:30:21 +0200 <kuribas> I just cannot say to the team, haskell is great, but you have to debug the tooling...
2021-08-21 20:30:36 +0200 <janus> how can you not know what kinda problem you're having? how do you even know you're having a problem if you don't know how to describe it?
2021-08-21 20:30:58 +0200 <kuribas> janus: the problem I have is "the haskell server crashed 5 times in the last 3 minutes"
2021-08-21 20:30:59 +0200t0zy(~t0zy@49.207.193.1) (Remote host closed the connection)
2021-08-21 20:31:00 +0200 <monochrom> I think "crashed" was already said.
2021-08-21 20:31:12 +0200 <janus> right, it probably crashed because of the OOM killer
2021-08-21 20:31:16 +0200t0zy(~t0zy@49.207.193.1)
2021-08-21 20:31:57 +0200 <janus> but it's just my guess of course, based on the problems i had
2021-08-21 20:32:02 +0200 <kuribas> Perhaps, I have a module which is using TH to compile a large amount of code.
2021-08-21 20:32:10 +0200 <kuribas> but it works fine in emacs.
2021-08-21 20:32:12 +0200 <kuribas> (without LSP)
2021-08-21 20:33:16 +0200 <kuribas> anything else that might work? maybe intellij?
2021-08-21 20:34:16 +0200 <monochrom> My students seem to be fine with vscode, but it's probably because of 2 factors. 1. My course doesn't have TH, or lots of code. 2. I think most of them are still not using HLS or LSP.
2021-08-21 20:34:44 +0200 <monochrom> Does intellij even know of Haskell?
2021-08-21 20:34:59 +0200 <kuribas> monochrom: well, isn't it then nothing more than a glorified text editor with syntax highlighing?
2021-08-21 20:35:05 +0200 <janus> you can get far just with Telescope (a Ctrl-P like for Neovim). it allows you to quickly jump to another module. and you can use ripgrep from neovim also, allowing you to quickly search for the word under the cursor
2021-08-21 20:35:11 +0200 <kuribas> monochrom: or do they use another plugin?
2021-08-21 20:35:25 +0200 <janus> you can also use CoCSearch to do a global replace with context, that is pretty cool
2021-08-21 20:35:30 +0200 <monochrom> I think my students don't insist on anything more.
2021-08-21 20:35:30 +0200 <kuribas> monochrom: yes, there are intellij plugins for haskell.
2021-08-21 20:36:01 +0200 <janus> kuribas: check out this screenshot : https://github.com/neoclide/coc.nvim/issues/1080
2021-08-21 20:36:22 +0200 <janus> you see the context of the searched term across all files, and then you can replace it accordingly
2021-08-21 20:36:50 +0200 <janus> if you do a global replace in the CoC buffer/window (dunno terminology) , it automatically applies it in each file
2021-08-21 20:37:05 +0200 <janus> kinda like a perl pie++ http://technosophos.com/2009/05/21/perl-pie-if-you-only-learn-how-do-one-thing-perl-it.html
2021-08-21 20:37:17 +0200 <kuribas> janus: what I want at least is to visualise type errors.
2021-08-21 20:37:47 +0200 <janus> ah, ok, i don't have that, never seemed like a big problem to jump to the line number from the error message
2021-08-21 20:38:27 +0200Guest2172(~Guest21@2a02:8109:a080:6368:d5d2:328b:373c:5b57) (Quit: Client closed)
2021-08-21 20:38:36 +0200 <janus> the line number is in the error message, then it is two chars to open Telescope, couple of chars to type parts of the file name (fuzzy search), couple of chars to jump to the line
2021-08-21 20:39:19 +0200 <monochrom> Why is that not called Microscope? :)
2021-08-21 20:39:23 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal)
2021-08-21 20:40:04 +0200 <janus> what i do is i have a terminal running in neovim on the right, which contains the compilation loop or ghcid. so you won't need to switch windows
2021-08-21 20:40:22 +0200 <tomsmeding> kuribas: that "using TH to compile a large amount of code" sounds heavily suspect; HLS had lots of trouble with TH in the past, and it's for sure not completely resolved yet
2021-08-21 20:41:16 +0200 <tomsmeding> but in a project I work on, which has ~130 modules, it works fine and it doesn't crash on me -- though I don't actually work on the modules that define or use TH, it's just elsewhere in the project
2021-08-21 20:41:54 +0200 <tomsmeding> also: having C code in the project makes things finicky; it can work fine, but you have to first compile the project fully first, and only then start up HLS
2021-08-21 20:42:07 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 252 seconds)
2021-08-21 20:43:04 +0200 <kuribas> tomsmeding: what do you use?
2021-08-21 20:43:25 +0200 <tomsmeding> HLS in neovim, since a few days with the new neovim 0.5 built-in LSP support, but before that using ALE
2021-08-21 20:43:36 +0200 <kuribas> ALE?
2021-08-21 20:43:57 +0200 <tomsmeding> vim plugin that, among other things, has a bare-bones (but solid) LSP implementation
2021-08-21 20:44:50 +0200gentauro_(~gentauro@95.166.247.26)
2021-08-21 20:46:24 +0200 <maerwald> tomsmeding: TH, big modules, hsc files, ...
2021-08-21 20:47:35 +0200 <Drew[m]> ghcup-hs's source currently crashes my HLS server when I try to open up the contents of the /app folder. There is TH and CPP in those modules and I've chalked it up to those
2021-08-21 20:48:54 +0200 <Drew[m]> maerwald: does that happen for you too?
2021-08-21 20:49:09 +0200 <maerwald> yeah
2021-08-21 20:49:16 +0200 <hololeap> isn't there another library that does the same thing as this? https://github.com/hdgarrood/qq-literals
2021-08-21 20:49:18 +0200 <maerwald> especially the Main module
2021-08-21 20:49:23 +0200 <maerwald> it's big and has quasiquotes
2021-08-21 20:50:02 +0200 <hololeap> I want to parse literals and throw compile errors if they are incorrect
2021-08-21 20:50:54 +0200 <hololeap> someone recommended a library for this once, but I can't remember the name of it
2021-08-21 20:51:51 +0200 <monochrom> Would it be https://hackage.haskell.org/package/string-qq ? https://hackage.haskell.org/package/string-quote ?
2021-08-21 20:52:09 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr)
2021-08-21 20:52:43 +0200 <monochrom> I don't know the difference, or why the author made both.
2021-08-21 20:53:42 +0200 <janus> from looking at the docs, it seems the difference is "that the leading newline is trimmed and carriage returns stripped."
2021-08-21 20:53:45 +0200 <hololeap> no, it wasn't either of those. it had a much more fleshed-out interface and it gave an example in the readme for checking for odd numbers
2021-08-21 20:53:51 +0200 <hololeap> (or something like that)
2021-08-21 20:55:28 +0200jamestmartin(james@jtmar.me) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
2021-08-21 20:56:07 +0200 <janus> would it be possible to find it via hoogle? i am not too familiar, but it sounds like it should be "(String -> a) -> QQ a" or something?
2021-08-21 20:58:01 +0200jamestmartin(james@jtmar.me)
2021-08-21 20:59:51 +0200 <hololeap> I remember it had a typeclass that handled conversion to QQ
2021-08-21 21:00:56 +0200kuribas(~user@ptr-25vy0i7pvnvbb3ckill.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2021-08-21 21:01:47 +0200 <tomsmeding> maerwald: Drew[m]: working HLS for me in app/ghcup/Main.hs https://tomsmeding.com/ss/get/tomsmeding/JOKELd
2021-08-21 21:01:58 +0200 <tomsmeding> ghc 8.10.6 with my self-compiled HLS
2021-08-21 21:02:34 +0200 <Drew[m]> hmm
2021-08-21 21:02:43 +0200 <Drew[m]> I'll give that a go at some point
2021-08-21 21:03:53 +0200 <tomsmeding> hololeap: https://hackage.haskell.org/package/validated-literals
2021-08-21 21:03:55 +0200 <hololeap> sweet, I found it by searching through my IRC logs: https://hackage.haskell.org/package/validated-literals
2021-08-21 21:04:00 +0200 <hololeap> lol
2021-08-21 21:04:02 +0200tomsmedinghigh-fives hololeap
2021-08-21 21:04:05 +0200 <tomsmeding> that timing was perfect
2021-08-21 21:04:15 +0200 <hololeap> yes it was :)
2021-08-21 21:04:57 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Remote host closed the connection)
2021-08-21 21:05:09 +0200Guest2130(~Guest21@2a02:8109:a080:6368:d5d2:328b:373c:5b57)
2021-08-21 21:05:21 +0200 <Guest2130> Got a question in terms of record fields
2021-08-21 21:05:24 +0200 <tomsmeding> (I just searched for 'literal' on hackage and went through the not-even-all-that-long list of 85 packages)
2021-08-21 21:05:37 +0200 <tomsmeding> also written by a #haskell regular :)
2021-08-21 21:06:07 +0200 <maerwald> tomsmeding: see those sweet quasi quotes in the code? :d
2021-08-21 21:06:26 +0200 <maerwald> nice is when your quasi quotes starts with # on the second line
2021-08-21 21:06:49 +0200 <maerwald> most tools will think it's CPP and then mess up
2021-08-21 21:06:59 +0200 <tomsmeding> not my vim :p
2021-08-21 21:07:10 +0200 <maerwald> well, I think even hlint fails here
2021-08-21 21:07:16 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-21 21:07:18 +0200 <Guest2130> https://paste.tomsmeding.com/oKfOX56s
2021-08-21 21:07:43 +0200 <Guest2130> Can anyone look at this and tell me how I might be able to do this better?
2021-08-21 21:08:08 +0200 <Guest2130> It can't match expected type CSStudent, with DBTreeO CSStudent
2021-08-21 21:08:27 +0200 <Guest2130> I know I'm on the verge of the solution, just not sure what the last part is
2021-08-21 21:08:45 +0200 <tomsmeding> Guest2130: what line is that error on?
2021-08-21 21:08:57 +0200 <tomsmeding> ah I see it
2021-08-21 21:09:27 +0200 <Guest2130> Yea, it's the last line
2021-08-21 21:09:32 +0200 <tomsmeding> I'd expect the error to be pretty clear in this case (allowing for the general situation where it takes some time before you get used to ghc's errors)
2021-08-21 21:09:43 +0200 <tomsmeding> last line?
2021-08-21 21:09:51 +0200 <tomsmeding> oh right yes
2021-08-21 21:09:53 +0200 <Guest2130> Did I send the wrong snippet?
2021-08-21 21:10:09 +0200 <tomsmeding> no you didn't
2021-08-21 21:10:25 +0200 <monochrom> I am unsympathetic. This doesn't look like you are even aware that you have to code up an elaborate search algorithm.
2021-08-21 21:10:50 +0200 <Guest2130> I don't have to make anything elaborate, is the thing
2021-08-21 21:10:57 +0200 <__monty__> Guest2130: Look at the types of `students` and `sid`.
2021-08-21 21:12:12 +0200vpan(~vilius@212.117.1.172) (Quit: Leaving.)
2021-08-21 21:12:13 +0200 <monochrom> The DBTreeO type is a pretty elaborate tree. I would think that looking for a node that has the thing you want is not going to be just a 1-liner, much less a 5-worder.
2021-08-21 21:14:13 +0200 <Drew[m]> <Drew[m]> "I'll give that a go at some poin" <- Just got to compile a small handful of dependencies first...
2021-08-21 21:14:13 +0200 <Drew[m]> https://paste.tomsmeding.com/zzR5f9id
2021-08-21 21:14:48 +0200 <tomsmeding> Drew[m]: get a better PC, you surely didn't think you could be productive in haskell without a 20-core machine
2021-08-21 21:15:48 +0200 <tomsmeding> Drew[m]: do you already have a HLS for 8.10.6? note that that particular ghc version doesn't have a released HLS yet as far as I know
2021-08-21 21:16:42 +0200 <Drew[m]> I don't have HLS for 8.10.6 but I'm willing to compile it from source if it'll fix this one thing
2021-08-21 21:17:02 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 21:17:32 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 21:17:42 +0200 <Drew[m]> But that's just me recompiling ghcup
2021-08-21 21:18:03 +0200 <tomsmeding> well HLS also has a bunch of dependencies, that's why I asked :p
2021-08-21 21:18:22 +0200 <maerwald> Drew[m]: why are you compiling ghcup from source anyway?
2021-08-21 21:20:22 +0200jacks2(~bc8167eb@217.29.117.252)
2021-08-21 21:20:27 +0200jacks2(~bc8167eb@217.29.117.252) ()
2021-08-21 21:21:10 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-08-21 21:23:09 +0200 <tomsmeding> oh hey, I tried again using ghc 9.0.1 and a downloaded HLS binary, and suddenly I see my friend again that I hadn't seen for almost a year at this point
2021-08-21 21:23:17 +0200 <tomsmeding> that friend being "allocatestack.c:384: advise_stack_range: Assertion `freesize < size' failed."
2021-08-21 21:23:47 +0200 <tomsmeding> previously the fix for that seemed to be a build on my own machine
2021-08-21 21:23:54 +0200tomsmedingcompiles HLS
2021-08-21 21:24:11 +0200 <Drew[m]> <maerwald> "Drew: why are you compiling..." <- I'm poking and prodding that large Main.hs file you mentioned
2021-08-21 21:24:23 +0200oxide(~lambda@user/oxide) (Quit: oxide)
2021-08-21 21:31:34 +0200lavaman(~lavaman@98.38.249.169)
2021-08-21 21:31:34 +0200azeem(~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) (Read error: Connection reset by peer)
2021-08-21 21:32:43 +0200mei(~mei@user/mei) (Ping timeout: 252 seconds)
2021-08-21 21:33:49 +0200neo(~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 252 seconds)
2021-08-21 21:34:30 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-21 21:36:34 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
2021-08-21 21:38:03 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-08-21 21:39:30 +0200 <tomsmeding> Drew[m]: maerwald: yep, self-compiled HLS with ghc 9.0.1 works with ghcup's app/ghcup/Main.hs :)
2021-08-21 21:40:21 +0200 <tomsmeding> it's slow though, but it works (feedback after making a change takes like 1sec or something)
2021-08-21 21:40:43 +0200 <Drew[m]> Oh neat I'll just recompile all these dependencies with 9.0.1
2021-08-21 21:40:54 +0200 <Drew[m]> 😱
2021-08-21 21:41:01 +0200 <tomsmeding> :D
2021-08-21 21:41:19 +0200 <tomsmeding> like, I could send you my binary but that probably wouldn't help :p
2021-08-21 21:41:22 +0200 <maerwald> I have no idea how the dep footprint got so bad, but yeah
2021-08-21 21:41:45 +0200 <tomsmeding> Drew[m]: didn't 8.10.6 work for you?
2021-08-21 21:41:52 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-08-21 21:42:17 +0200 <Drew[m]> It probably will and I will probably just use that
2021-08-21 21:42:29 +0200 <Drew[m]> But that's les humourous
2021-08-21 21:42:40 +0200 <Drew[m]> less*
2021-08-21 21:43:10 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
2021-08-21 21:43:59 +0200 <Drew[m]> The long first-time compile is not something that normally bothers me since usually I'm not constantly switching compiler version
2021-08-21 21:44:28 +0200 <Drew[m]> It's just that trying to fix the HLS issue has been making me do it an awful lot recently
2021-08-21 21:44:30 +0200 <maerwald> I am for libraries, testing between 8.0.2 and 9.0.1
2021-08-21 21:44:32 +0200Lord_of_Life_Lord_of_Life
2021-08-21 21:44:51 +0200 <maerwald> with stack it's a little tedious, because it locks you into old Cabal versions
2021-08-21 21:45:10 +0200 <maerwald> then you can't use modern cabal features on old resolvers
2021-08-21 21:45:31 +0200 <maerwald> but 8.0.2 works fine with new Cabal
2021-08-21 21:48:19 +0200 <Drew[m]> I started on 9.0.1, then thought maybe HLS would be more likely to work on an older version so switched to 8.10.6, not realizing it didn't have a HLS release for it yet...
2021-08-21 21:48:19 +0200 <Drew[m]> So then I switched to 8.10.5, and that didn't fix it.
2021-08-21 21:48:25 +0200 <Drew[m]> Then I realized I hadn't put -haddock in my cabal config properly, because I hadn't commented out a certain line... so I had to fix that... ofc meaning literally everything must recompile.
2021-08-21 21:48:28 +0200azeem(~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it)
2021-08-21 21:48:45 +0200 <Drew[m]> So even if I was to switch back to 9.0.1 where I originally built it, it'll have to rebuild anyway
2021-08-21 21:48:55 +0200notzmv(~zmv@user/notzmv)
2021-08-21 21:49:09 +0200 <Drew[m]> not fun
2021-08-21 21:49:15 +0200 <maerwald> wasn't there a thing to view the depgraph of haskell packages to figure out what's the biggest culprit?
2021-08-21 21:49:46 +0200 <tomsmeding> maerwald: well there's 'cabal-plan dot | dot -Tpng -o graph.png' but not sure whether that will help immensely (I already tried)
2021-08-21 21:49:53 +0200gentauro_(~gentauro@95.166.247.26) (Ping timeout: 248 seconds)
2021-08-21 21:49:58 +0200 <maerwald> I want stats
2021-08-21 21:50:07 +0200 <maerwald> like: direct dependencies and their trans
2021-08-21 21:50:18 +0200Sgeo(~Sgeo@user/sgeo)
2021-08-21 21:57:08 +0200 <tomsmeding> maerwald: https://paste.tomsmeding.com/zfQgpGdD direct dependencies of the ghcup library and the ghcup main executable, prefixed with the number of direct dependencies those have
2021-08-21 21:57:39 +0200 <tomsmeding> but perhaps a more useful measure is "how many deps do I save if I remove dependency X"
2021-08-21 21:57:45 +0200 <maerwald> yeah
2021-08-21 21:58:43 +0200 <maerwald> but then you have to know "how many deps do I save if I remove dependency X and Y"
2021-08-21 21:59:32 +0200 <maerwald> well, aeson and yaml probably can't be removed
2021-08-21 21:59:47 +0200 <maerwald> surprised there's no light aeson package
2021-08-21 22:00:05 +0200 <maerwald> monad-logger pulls in all this conduit nonsense
2021-08-21 22:02:48 +0200 <maerwald> meh, and zip as well
2021-08-21 22:05:06 +0200juhp(~juhp@128.106.188.220) (Ping timeout: 250 seconds)
2021-08-21 22:05:34 +0200neo(~neo3@cpe-292712.ip.primehome.com)
2021-08-21 22:06:24 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-21 22:08:18 +0200juhp(~juhp@128.106.188.220)
2021-08-21 22:09:42 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
2021-08-21 22:11:04 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-08-21 22:11:27 +0200 <maerwald> is there a light alternative to monad-logger?
2021-08-21 22:11:43 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-08-21 22:12:11 +0200skykanin(~skykanin@115.81-166-221.customer.lyse.net) (Quit: WeeChat 3.2)
2021-08-21 22:12:52 +0200 <monochrom> Yesterday someone asked "Any recommendation on logging frameworks? co-log and katip appear to be two common ones, but I'm not sure as to why one or the other is better."
2021-08-21 22:13:10 +0200 <maerwald> I'm interested in smalles dep footprint
2021-08-21 22:13:13 +0200 <monochrom> No one answered. But perhaps you could also consider those two mentioned.
2021-08-21 22:13:29 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 22:13:48 +0200 <hpc> syslog, if you don't care about windows?
2021-08-21 22:13:55 +0200 <maerwald> I do
2021-08-21 22:13:57 +0200mastarija(~mastarija@78-3-210-70.adsl.net.t-com.hr) (Quit: Leaving)
2021-08-21 22:14:56 +0200 <maerwald> https://hackage.haskell.org/package/hslogger
2021-08-21 22:15:22 +0200 <maerwald> most of hvrs stuff is unmaintained though...
2021-08-21 22:16:48 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-21 22:17:44 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-08-21 22:17:49 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 252 seconds)
2021-08-21 22:20:10 +0200superbil(~superbil@1-34-176-171.HINET-IP.hinet.net) (Ping timeout: 240 seconds)
2021-08-21 22:20:45 +0200xlei(znc@pool-68-129-84-118.nycmny.fios.verizon.net) (Read error: Connection reset by peer)
2021-08-21 22:23:09 +0200jtomas_(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net)
2021-08-21 22:23:45 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 22:25:46 +0200jtomas(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Ping timeout: 268 seconds)
2021-08-21 22:28:08 +0200 <hololeap> I'm getting a GHC crash: http://sprunge.us/ui6BdB here is the repo I'm working on: https://github.com/hololeap/gemport
2021-08-21 22:28:51 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
2021-08-21 22:30:05 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-21 22:30:52 +0200 <geekosaur> is /tmp by any chance mounted noexec?
2021-08-21 22:30:58 +0200 <hololeap> yeah
2021-08-21 22:31:42 +0200 <hololeap> does TemplateHaskell execute something in /tmp?
2021-08-21 22:31:42 +0200 <geekosaur> you'll need to set TMPDIR to point somewhere that allows executables, then
2021-08-21 22:32:11 +0200 <geekosaur> yes, well, it maps executable pages from on-the-fly built shared objects in /tmp
2021-08-21 22:32:25 +0200 <geekosaur> which is the same thing under the hood
2021-08-21 22:32:41 +0200 <hololeap> is TMPDIR an environment variable?
2021-08-21 22:33:00 +0200 <geekosaur> yes
2021-08-21 22:33:33 +0200shapr(~user@pool-108-28-144-11.washdc.fios.verizon.net) (Ping timeout: 258 seconds)
2021-08-21 22:33:42 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-08-21 22:33:46 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-08-21 22:33:57 +0200burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-21 22:34:18 +0200 <maerwald> POSIX sanctioned
2021-08-21 22:34:25 +0200 <hololeap> ok, thanks for the quick response geekosaur
2021-08-21 22:34:30 +0200burnsidesLlama(~burnsides@client-8-91.eduroam.oxuni.org.uk)
2021-08-21 22:34:36 +0200 <maerwald> https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html
2021-08-21 22:34:44 +0200xlei(znc@pool-68-129-84-118.nycmny.fios.verizon.net)
2021-08-21 22:36:26 +0200 <maerwald> also, how do haskellers test their code on big endian?
2021-08-21 22:39:16 +0200jtomas_(~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Ping timeout: 252 seconds)
2021-08-21 22:39:20 +0200burnsidesLlama(~burnsides@client-8-91.eduroam.oxuni.org.uk) (Ping timeout: 268 seconds)
2021-08-21 22:39:57 +0200 <tomsmeding> do haskellers test their code?
2021-08-21 22:40:37 +0200 <maerwald> if the input strings are filenames, you BETTER :D
2021-08-21 22:41:12 +0200 <monochrom> tmpfs being noexec by default also tripped me when I set up a docker container to mark student assignments :)
2021-08-21 22:41:20 +0200acidjnk_new(~acidjnk@p200300d0c72b954921d359bc9986b356.dip0.t-ipconnect.de)
2021-08-21 22:41:25 +0200 <tomsmeding> maerwald: if you're willing to drop one arbitrary dependency from both ghcup:exe and ghcup:lib, the one that removes most packages from the full dependency graph is monad-logger at 12 packages less
2021-08-21 22:41:38 +0200 <tomsmeding> if you're willing to drop two, take monad-logger and zip, at 25 packages less
2021-08-21 22:41:42 +0200 <maerwald> yep
2021-08-21 22:42:34 +0200 <tomsmeding> but probably dropping zip is not really an option :p
2021-08-21 22:42:59 +0200 <maerwald> it is
2021-08-21 22:43:07 +0200 <maerwald> https://hackage.haskell.org/package/LibZip-1.0.1
2021-08-21 22:43:18 +0200 <tomsmeding> oooh
2021-08-21 22:43:20 +0200 <maerwald> but I will have to create a bundled C version of https://hackage.haskell.org/package/bindings-libzip
2021-08-21 22:43:24 +0200 <tomsmeding> look at that dep list
2021-08-21 22:43:29 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-08-21 22:43:57 +0200 <maerwald> https://hackage.haskell.org/package/hslogger also looks feasible, but less ergonomic
2021-08-21 22:44:19 +0200 <tomsmeding> oh if you're willing to drop three packages, monad-logger, zip and string-interpolate give 36 less transitive deps :)
2021-08-21 22:44:21 +0200 <maerwald> it uses a global MVar, which is kinda gross
2021-08-21 22:44:26 +0200 <tomsmeding> (that took ~2min to compute)
2021-08-21 22:44:36 +0200 <maerwald> https://hackage.haskell.org/package/hslogger-1.3.1.0/docs/src/System.Log.Logger.html#logTree
2021-08-21 22:44:39 +0200 <janus> hslogger is abandoned, good to migrate away from it
2021-08-21 22:44:43 +0200 <maerwald> to what
2021-08-21 22:44:57 +0200 <janus> i don't know :(
2021-08-21 22:45:10 +0200 <tomsmeding> just... you know, away :)
2021-08-21 22:45:17 +0200 <maerwald> tomsmeding: oh, but string-interpolate I use heavily
2021-08-21 22:45:23 +0200 <tomsmeding> yeah
2021-08-21 22:45:44 +0200tomsmedingwrote some gross haskell code to compute this
2021-08-21 22:46:08 +0200 <monochrom> NP-hard problems call for gross code that takes 2 minutes to run :)
2021-08-21 22:46:25 +0200 <maerwald> tomsmeding: I think haskell-src-meta might be a bad apple here
2021-08-21 22:48:49 +0200superbil(~superbil@1-34-176-171.hinet-ip.hinet.net)
2021-08-21 22:50:20 +0200 <maerwald> https://hackage.haskell.org/package/fast-logger
2021-08-21 22:51:13 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 248 seconds)
2021-08-21 22:51:37 +0200 <tomsmeding> maerwald: yeah, 7 of the 11 deps that dropping string-interpolate gives you (if you're already dropping monad-logger and zip) come from haskell-src-meta; the other 3 are from text-conversions
2021-08-21 22:52:05 +0200 <sm> haskell-src-meta is on my bad apple list
2021-08-21 22:52:15 +0200neo(~neo3@cpe-292712.ip.primehome.com) (Remote host closed the connection)
2021-08-21 22:52:29 +0200 <sm> and so are most of the string interpolating libs, I forget why
2021-08-21 22:52:35 +0200 <maerwald> tomsmeding: I opened https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/212
2021-08-21 22:53:52 +0200 <tomsmeding> yay
2021-08-21 22:54:43 +0200tomsmedingis going to bed
2021-08-21 22:54:56 +0200 <maerwald> I can't find a single quasi quoter without haskell-src-meta
2021-08-21 22:55:13 +0200superbil(~superbil@1-34-176-171.hinet-ip.hinet.net) (Ping timeout: 252 seconds)
2021-08-21 22:56:56 +0200 <sm> ...maybe that was why
2021-08-21 22:59:14 +0200 <tomsmeding> maerwald: if I'm not mistaken, the only use of haskell-src-meta in string-interpolate is here: https://gitlab.com/williamyaoh/string-interpolate/-/blob/master/src/lib/Data/String/Interpolate.hs…
2021-08-21 22:59:27 +0200 <tomsmeding> where toExp is from this instance: https://hackage.haskell.org/package/haskell-src-meta-0.8.7/docs/src/Language.Haskell.Meta.Syntax.T…
2021-08-21 23:00:02 +0200 <tomsmeding> oh right that references lots of other stuff too
2021-08-21 23:00:06 +0200tomsmedingis really going now
2021-08-21 23:00:14 +0200 <maerwald> cheers
2021-08-21 23:01:26 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-08-21 23:04:55 +0200oldsk00l(~znc@ec2-52-58-63-152.eu-central-1.compute.amazonaws.com)
2021-08-21 23:05:05 +0200 <amesgen[m]> String interpolators use haskell-src-meta in order to convert quoted text to TH Exps: https://gitlab.haskell.org/ghc/ghc/-/issues/19148
2021-08-21 23:05:49 +0200 <amesgen[m]> Interpolators like neat-interpolation don't use haskell-src-meta, but they only support interpolating variables and not arbitrary expressions.
2021-08-21 23:07:02 +0200cheater1__(~Username@user/cheater)
2021-08-21 23:07:04 +0200cheater(~Username@user/cheater) (Ping timeout: 250 seconds)
2021-08-21 23:07:06 +0200cheater1__cheater
2021-08-21 23:07:35 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-08-21 23:08:27 +0200 <sm> amesgen++, informative
2021-08-21 23:08:30 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 23:13:10 +0200sm[i](~user@plaintextaccounting/sm)
2021-08-21 23:15:02 +0200 <maerwald[m]> QuasiQuoters are just convenience, so we can certainly do without. It's just tedious work
2021-08-21 23:17:04 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-08-21 23:17:04 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-08-21 23:17:07 +0200allbery_bgeekosaur
2021-08-21 23:17:15 +0200sm[i]_(~user@li229-222.members.linode.com) (Ping timeout: 258 seconds)
2021-08-21 23:17:39 +0200sm[i](~user@plaintextaccounting/sm) (Remote host closed the connection)
2021-08-21 23:18:41 +0200 <sm> yes, it's a pity
2021-08-21 23:19:20 +0200sm[i](~user@plaintextaccounting/sm)
2021-08-21 23:19:46 +0200 <sclv> i wonder if there's enough parsing now exposed by ghc to obviate the need for haskell-src-meta
2021-08-21 23:20:00 +0200 <sclv> if not, maybe that would be good to fix :-)
2021-08-21 23:20:35 +0200 <sclv> Like we really just want a function `String -> UntypedTH` directly in ghc.exts or the like
2021-08-21 23:20:48 +0200silver_(~silver@37.214.30.4)
2021-08-21 23:21:30 +0200 <Guest2130> Can someone help me maybe understand where I'm going wrong with this lookup? Or point me in the right direction to get it working?
2021-08-21 23:22:23 +0200 <Guest2130> I am trying to get to the list in this benWalker = Student "Ben Walker" 19 Halifax [(SOFT, 62), (EASY, 42), (FULL, 62)]
2021-08-21 23:22:23 +0200 <sm> Guest2130, what's your latest code ?
2021-08-21 23:22:52 +0200 <Guest2130> It's literally just `lookup EASY x`
2021-08-21 23:23:04 +0200 <Guest2130> x being benWalker
2021-08-21 23:23:07 +0200 <sclv> `getList (Student _ _ _ l) = l`
2021-08-21 23:23:13 +0200 <monochrom> Use "pattern matching" as taught in your class.
2021-08-21 23:23:22 +0200 <Guest2130> Oh, pattern matching works here?
2021-08-21 23:23:40 +0200 <sclv> pattern match on Student -- its a data constructor, you can pattern match out of any data constructor
2021-08-21 23:23:43 +0200 <maerwald[m]> monochrom: your class? :D
2021-08-21 23:23:44 +0200 <monochrom> and sclv just showed what it looks like.
2021-08-21 23:23:52 +0200 <monochrom> No. Gladly.
2021-08-21 23:23:57 +0200 <sclv> jumped the gun, didn't realize how socratic we were trying to be :-)
2021-08-21 23:25:06 +0200 <monochrom> My class, I would have told them "pattern matching is your only option for working with algebraic data types" and they would not need to ask here.
2021-08-21 23:25:31 +0200 <monochrom> Right? During May-June no one came here asking like this.
2021-08-21 23:25:35 +0200 <Guest2130> Online teaching had been a bitch to us this year sadly
2021-08-21 23:25:46 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection)
2021-08-21 23:25:53 +0200 <monochrom> And you think my class didn't suffer just as much online teaching?
2021-08-21 23:26:24 +0200o1lo01ol1o(~o1lo01ol1@5.181.115.89.rev.vodafone.pt)
2021-08-21 23:26:30 +0200 <monochrom> To be sure, to be fair, the other angle is that students have the tendency to ignore course material and listen to Google and stackoverflow.
2021-08-21 23:27:06 +0200 <monochrom> I would be really surprised if the course material had not shown examples like this.
2021-08-21 23:29:09 +0200 <monochrom> BTW said tendency had been amply observed long before COVID-19. In fact for over two decades.
2021-08-21 23:29:27 +0200 <monochrom> So, even predated SARS.
2021-08-21 23:30:28 +0200 <maerwald[m]> Some course material is worse than SO, though. I had a prof who thought teaching a new language is best achieved by exposing the student to ALL pitfalls. That was a nightmare for C++ and ruby.
2021-08-21 23:31:02 +0200 <monochrom> "Is that vaccination?" meme
2021-08-21 23:31:59 +0200 <monochrom> BTW I wouldn't complain about stackoverflow if it were right.
2021-08-21 23:33:32 +0200 <monochrom> I had a midterm test question, the correct answer was right there in my lecture slides staring at you. Stackoverflow had the wrong answer, probably still does. I had students who gave the Stackoverflow answer.
2021-08-21 23:33:41 +0200wroathe(~wroathe@96-88-30-181-static.hfc.comcastbusiness.net)
2021-08-21 23:34:40 +0200 <monochrom> This one: https://stackoverflow.com/questions/36428098/c-how-to-check-if-my-input-bufferstdin-is-empty?rq=1
2021-08-21 23:34:55 +0200 <monochrom> fseek in stdin?! Excuse me?! What were they smoking?
2021-08-21 23:35:02 +0200 <monochrom> s/ in / on /
2021-08-21 23:37:16 +0200 <monochrom> And notice how the incorrect fseek solution got 2 votes, the correct "you must attempt reading before you can know" solution got 0 votes.
2021-08-21 23:37:40 +0200superbil(~superbil@1-34-176-171.HINET-IP.hinet.net)
2021-08-21 23:40:17 +0200jgeerds(~jgeerds@55d4b311.access.ecotel.net)
2021-08-21 23:41:33 +0200 <monochrom> Low quality courses regarding Haskell exist but AFAIK are low quality in a different way from C++ ones.
2021-08-21 23:42:40 +0200 <monochrom> Haskell ones would not be low quality for forgetting to teach you algebraic data types and pattern matching.
2021-08-21 23:43:59 +0200 <monochrom> The more likely kinds of low quality comes in: having too much faith in your recursion ability, having too much faith in your ability to understand advanced abstractions and generalizations.
2021-08-21 23:44:20 +0200 <monochrom> Telling you too early about laws and proofs.
2021-08-21 23:47:06 +0200 <monochrom> The one I was most badly-impressed by was about 5-10 years ago there was a homework question for implementing a list function that would end all list functions.
2021-08-21 23:47:44 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-08-21 23:47:44 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-08-21 23:47:47 +0200allbery_bgeekosaur
2021-08-21 23:47:56 +0200 <c_wraith> closer to 10 years ago, IIRC
2021-08-21 23:48:13 +0200 <monochrom> It took like 10 parameters (OK, 5) and based on the parameters you give you can obtain foldr, foldl, unfoldr, map, map-reduce, everything. And this is why it takes 5 parameters.
2021-08-21 23:48:44 +0200 <monochrom> So, going overboard with abstraction and generalization.
2021-08-21 23:49:24 +0200 <monochrom> And by today's standard a very misguided, ad-hoc one, too. We now understand that foldMap is the correct sweet spot.
2021-08-21 23:49:52 +0200sagax(~sagax@213.138.71.146)
2021-08-21 23:51:41 +0200 <monochrom> I'm an old-geezer now, it all seemed like just yesterday to me. :)
2021-08-21 23:52:22 +0200 <monochrom> Anyone still remember CP/M? (OK I'll stop now haha.)
2021-08-21 23:53:19 +0200 <sm> yes, never used it though
2021-08-21 23:53:35 +0200derelict(~derelict@user/derelict) (Quit: WeeChat 3.2)
2021-08-21 23:53:49 +0200 <c_wraith> I remember people telling me how much better than DOS it was.