Home liberachat/#haskell: Logs Calendar

Logs on 2023-02-08 (liberachat/#haskell)

00:00:19 <geekosaur> I generally recommend using the latest released cabal due to bugs in older versions (I have in particular seen problems with cabal 3.4 and `setup-type: configure`)
00:00:38 opticblast joins (~Thunderbi@172.58.82.191)
00:00:43 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Ping timeout: 248 seconds)
00:01:07 <lechner> geekosaur / i'm trying. is this remark specific to Guix, then? https://github.com/guix-mirror/guix/blob/master/gnu/packages/haskell-apps.scm#L94-L95
00:02:13 <geekosaur> technically it's false as long as they have compatibility. practically I think cabal-install may reject it just because it doesn't know they retain backward compatibility?
00:02:37 <lechner> Guix may also have bootstrapping issues, btw
00:02:39 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 268 seconds)
00:03:14 <geekosaur> and they avoid trying to hardcode too much "magical" knowledge into it, so there's not much between "freely upradeable" and "bound to ghc"
00:04:16 ddellacosta joins (~ddellacos@146.70.165.170)
00:04:27 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds)
00:05:21 <geekosaur> hm, okay, that might actually be a guix requirement because it can't keep track of two versions of Cabal at the same time
00:05:30 czy joins (~user@host-140-28.ilcub310.champaign.il.us.clients.pavlovmedia.net)
00:06:23 <geekosaur> cabal-install has no trouble with it; I've definitely used much newer versions of cabal with older ghcs, and cabal(-install) drags along a newer Cabal
00:07:08 <lechner> i see. what's in Cabal, please, and why does it also ship with GHC?
00:07:20 <geekosaur> if this weren't the case I couldn't be using cabal 3.10 prerelease with ghc 9.2.5
00:07:28 <geekosaur> Cabal is the package manager library
00:07:58 <geekosaur> so ghc needs it to use package dbs
00:08:28 <geekosaur> it is not what determines build plans and the like; that lives in cabal-install
00:08:46 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
00:08:49 <lechner> how does the ordinary Cabal ecosystem know how to find the right one?
00:09:31 <geekosaur> ghc always uses the one that comes with it. the rest of the ecosystem can use that or a different version; backward compatibility is very well established and maintained
00:10:03 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
00:10:22 <geekosaur> as I mentioned earlier, cabal-install uses the corresponding Cabal library to maintain package dbs; ghc can access those without requiring the same Cabal version
00:11:03 <lechner> well, my question was a little bit more technical in the sense that i have to figure out if i can somehow replicate that in Guix. Do you know if it would work in Nix?
00:14:10 <geekosaur> that I don't. but I think that's part of why cabal-install has a nix mode, instead of the other way around?
00:14:22 <geekosaur> probably have to ask sclv
00:14:33 <geekosaur> (sorry for ping)
00:16:05 jmdaemon joins (~jmdaemon@user/jmdaemon)
00:19:23 × czy quits (~user@host-140-28.ilcub310.champaign.il.us.clients.pavlovmedia.net) (Quit: ERC 5.4.1 (IRC client for GNU Emacs 30.0.50))
00:20:02 czy joins (~user@host-140-28.ilcub310.champaign.il.us.clients.pavlovmedia.net)
00:21:23 king_gs joins (~Thunderbi@187.201.41.239)
00:24:48 × tdwdiod^ quits (~tdwdiod@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection)
00:25:12 czy` joins (~user@host-140-28.ilcub310.champaign.il.us.clients.pavlovmedia.net)
00:25:33 <sclv> i don’t understand the question
00:29:49 × patrl quits (~patrl@user/patrl) (Quit: WeeChat 3.8)
00:31:40 × bhall quits (~brunohall@195.147.207.136) (Ping timeout: 260 seconds)
00:32:32 <lechner> sclv / Hi, I'd like to update Cabal in Guix but found this remark https://github.com/guix-mirror/guix/blob/ccf742f120452acf587d16e40adea570d15169c4/gnu/packages/haskell-apps.scm#L94-L95
00:33:40 <sclv> i think guix like nix probably has the requirement that there is Only One Version of a package at any given time.
00:34:08 <sclv> since Cabal-the-library ships with ghc, and since a new cabal-the-app requires being against a new cabal-the-library, then this would be the roadblock, sadly
00:34:50 <sclv> i think the nix folks have some way to "jailbreak" out of that problem, but idk what it might be
00:34:58 <jackdk> out of interest, what is the guix word for "nixpkgs"? By which I mean, the giant collection of .scm files
00:36:17 <lechner> jackdk / i think it's all part of the Guix repo https://github.com/guix-mirror/guix/tree/master/gnu/packages
00:36:36 <jackdk> sclv: jailbreaking a cabal package means removing its bounds, used when a package compiles against newer (or older, I guess) versions of its deps and a metadata revision or new release has not trickled down to the hackage snapshot yet. I can't see it helping much here if guix is also doing the Only One Version Of A Package thing
00:36:54 <sclv> yeah, i thought nix might have another hack on top of that, but idk.
00:37:18 <jackdk> (This is the big advantage of IOG's "haskell.nix" project, but that's a very heavy piece of machinery which I use only when I need cross compiling, static linking, or I _must_ use the output of the cabal solver to select deps.)
00:39:40 × aisa quits (~aisa@user/aisa) (Ping timeout: 252 seconds)
00:39:57 aljer joins (~jonathon@2601:5c1:4503:8da0:7130:73a8:a627:b376)
00:48:05 <lechner> what are the mechanism and the reason for which and by which Guix does the Only One Version thing. What is different to an ordinary setup, please?
00:48:53 <geekosaur> the main reason would be avoiding the diamond dependency problem
00:49:03 × aljer quits (~jonathon@2601:5c1:4503:8da0:7130:73a8:a627:b376) (Ping timeout: 248 seconds)
00:49:22 <geekosaur> (library A uses version 1, library B uses version 2, you try to depend on both library A and library B -> disaster)
00:50:10 <geekosaur> s/version ./& of library C/g
00:52:02 tabemann joins (~tabemann@2600:1700:7990:24e0:ef07:7078:7b84:e5fd)
00:54:40 <geekosaur> note that this can happen even with Cabal because the linker is being asked to link two different versions of the same library, their symbols will conflict. the linker has no clue that it can safely ignore the older version and link everything against the newer one; this is not at all common
00:56:22 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
00:56:22 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
00:56:22 wroathe joins (~wroathe@user/wroathe)
00:56:23 <geekosaur> so to keep a consistent package store, guix (or nix, or debian, or etc.) has to pick one "golden" version of each library
01:00:22 <geekosaur> cabal handles this differently: you can have multiple versions, but it has to build multiple versions of dependencies against them as needed to satisfy your dependencies.
01:00:54 <geekosaur> this takes a lot of space, which is why you'll often see people complaining about cabal (or stack, which does the same thing) package stores getting huge
01:01:20 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
01:05:37 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:44 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:13:49 freeside joins (~mengwong@103.252.202.170)
01:14:30 dsrt^ joins (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net)
01:18:10 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
01:20:25 × king_gs quits (~Thunderbi@187.201.41.239) (Read error: Connection reset by peer)
01:20:30 king_gs1 joins (~Thunderbi@2806:103e:29:1779:904b:7f43:decf:5c51)
01:20:49 aljer joins (~jonathon@2601:5c1:4503:8da0:7130:73a8:a627:b376)
01:22:47 king_gs1 is now known as king_gs
01:24:36 × cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
01:24:45 × troydm quits (~troydm@user/troydm) (Ping timeout: 260 seconds)
01:24:59 × aljer quits (~jonathon@2601:5c1:4503:8da0:7130:73a8:a627:b376) (Ping timeout: 248 seconds)
01:25:21 cheater joins (~Username@user/cheater)
01:26:23 × ddellacosta quits (~ddellacos@146.70.165.170) (Ping timeout: 248 seconds)
01:27:03 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
01:27:46 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
01:30:40 bhall joins (~brunohall@195.147.207.136)
01:33:31 Henson parts (~kvirc@207.136.101.195) (No boundaries on the net!)
01:34:53 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds)
01:39:23 × xff0x quits (~xff0x@ai081074.d.east.v6connect.net) (Ping timeout: 248 seconds)
01:45:01 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 268 seconds)
01:47:45 freeside joins (~mengwong@103.252.202.170)
01:49:26 harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
01:52:11 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
01:52:55 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
01:52:58 aljer joins (~jonathon@2601:5c1:4503:8da0:7130:73a8:a627:b376)
01:52:59 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 260 seconds)
01:55:11 × kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
01:55:16 ghostbuster joins (~admin@user/ghostbuster)
01:56:00 <ghostbuster> is haskell a good first functional language for an experience C/C++ programmer?
01:56:41 <slack1256> Good as any.
01:57:05 <slack1256> I don't think much will carry over from C/C++ though. That is probably for the best.
01:58:07 notzmv joins (~zmv@user/notzmv)
01:58:21 <aljer> in my opinion it's a better choice than a Lisp dialect because of static typing
01:58:59 <dsal> It's a bit easier without C or C++ experience, IMO.
01:59:27 <ghostbuster> dsal: too late for that unfortunately
01:59:35 <davean> I think a *medium* amount of C/C++ is the worst
01:59:51 <davean> if you have a lot of C/C++ experience you probably just invent functional programming yourself.
02:00:18 <aljer> agreed with dsal - FP is easier without any OOP experience
02:00:33 <davean> (Thats how the community I came over with got here)
02:00:54 <ghostbuster> when i said C/C++ i really meant mostly C - not so much OOP
02:00:56 slack1256 came here cause the cute drawing on LYAH
02:00:57 <dsal> It's not just OOP. A lot of it is trying to address concerns in what you're used to.
02:01:54 <dsal> e.g., if all you know is C, you may be predisposed to worry about the wrong things.
02:02:07 <aljer> ah, good point
02:02:30 <ghostbuster> i know lots of imperative languages, from assembly to python to go\
02:03:07 <ghostbuster> is there any overlap between functional languages and abstract algebra?
02:03:23 × mechap quits (~mechap@user/mechap) (Ping timeout: 248 seconds)
02:03:25 <dsal> That question's pretty abstract. :)
02:03:34 <davean> ghostbuster: absolutely but I'm not sure the overlap is helpful to you
02:04:46 <ghostbuster> the usual way i'd learn a language is by reading a bit of an intro, common pitfalls for newbies, and then try to build a project in it
02:05:13 mechap joins (~mechap@user/mechap)
02:06:57 ddellacosta joins (~ddellacos@146.70.166.234)
02:07:19 freeside joins (~mengwong@103.252.202.170)
02:07:33 <aljer> FP borrows a lot of concepts from category theory, if you are interested in the mathematical overlap. not necessary to be well versed in it, but it will help when you get to monads
02:07:58 <dsal> ghostbuster: That works if you're expressing the same solution in different languages. Haskell lets you do a bit better, but you have to learn to think about problems a bit differently to do that.
02:11:03 <ghostbuster> would it be good to by solving relatively "abstract" math problems like stuff from project euler? i think i read that fibonacci is a good "hello world"
02:11:25 <dsal> Yeah. I get bored by euler fast because I'm not a mather.
02:11:40 <dsal> exercism has some good stuff, but also AoC.
02:11:57 <dsal> And probably countless other things.
02:12:08 <aljer> AoC is great for learning Haskell!
02:12:18 <lechner> ghostbuster / you definitely want to get used to recursion
02:12:20 <ghostbuster> what does making a syscall look like in a purely functional language?
02:12:31 <dsal> It looks like any other effect.
02:12:45 <ghostbuster> i thought effects are not allowed :)
02:12:46 <jean-paul[m]> readLine :: IO String
02:12:52 <dsal> effects are isolated.
02:13:56 <lechner> in monads
02:14:35 <lechner> which is more or less to say that we enforce an ordering in time on them
02:21:55 <ghostbuster> what is everyone's favourite beginner intro site / book?
02:22:11 <dsal> I liked haskellbook, but that's not everyone's favorite.
02:22:16 <lechner> LYAH
02:22:26 <aljer> Learn You a Haskell ^
02:23:12 <dsal> Like, you ask here
02:23:48 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
02:23:53 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
02:24:13 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:24:26 <lechner> ghostbuster / one more thing. you will read a lot about monads, and people like to get complicated. they are basically just a sequential execution where the previous result is used as input for the next, and a conditional can abort in between. no need to get scared (and i am not afraid of any flames)
02:25:04 Lord_of_Life_ is now known as Lord_of_Life
02:25:15 <ghostbuster> lechner: thanks i may lose interest / get distracted but i won't get discouraged :)
02:25:26 <dsal> Yeah, and also don't try really hard to learn monads. You can use them without having a deep understanding and trying to understand something without the fundamentals is just hard.
02:25:53 <ghostbuster> cool
02:26:00 <dsal> ghostbuster: Haskell has been my go-to language for years now. It's weird at first, but it's the easiest thing to work in, IMO.
02:26:06 <aljer> 100% --> there's a kind of joke around how "hard to grasp" monads are
02:26:23 <aljer> and if you try to understand them from the category theory perspective, maybe that's true at first
02:26:45 <aljer> but from the practical, programming perspective not so much
02:27:27 <dsal> Mostly, you just need to know types. Types tell the story.
02:27:43 <ghostbuster> the reason i came here is i want to learn about compiler theory and code analysis, from a security standpoint
02:28:04 <dsal> Writing parsers in haskell is so easy it's nearly boring.
02:28:09 jmdaemon joins (~jmdaemon@user/jmdaemon)
02:28:10 <ghostbuster> but if i learned some category theory that would be cool too
02:28:20 <dsal> At least with parser combinators. The hardest part is trying to not build a new language for every project.
02:28:21 <lechner> we call them domain-specific languages, or DSL
02:28:23 <dsal> I don't do too well with that.
02:29:12 <ghostbuster> would it be valuable to write a very basic program, compile it, and look at the generated assembly?
02:29:22 <lechner> ghostbuster / for monads, it helps to think first about "continuation-passing style". i wish i could find that Javascript video (or was it Rust?)
02:29:22 <dsal> There are multiple layers down to asm.
02:29:38 <dsal> ghostbuster: https://play-haskell.tomsmeding.com is a tool that will do that stuff for you.
02:30:39 <dsal> ghc compiles to "core" which is a smaller language.
02:31:12 <ghostbuster> interesting
02:31:56 <dsal> If you're trying to learn haskell by looking at asm, that's probably not going to be very… efficient.
02:32:34 <ghostbuster> ok fair enough, that's just the C programmer in me talking
02:32:55 <dsal> Learn how to use the language idiomatically first, then learn how/when to figure out how to make programs more efficient which might involve looking at core. By the time you're looking at some processor's assembler output, you're in a weird place.
02:33:04 <dsal> Yeah, this is where C will hurt your ability to learn.
02:33:17 <yushyin> most of haskell i learned by reading along here
02:33:19 <yushyin>
02:33:21 <dsal> The goal isn't necessarily to write the fastest program theoretically possible. It's about making a clear an correct expression of your problem.
02:34:02 <dsal> Efficiency can be achieved at a much higher level.
02:34:31 <dsal> But also, you've got stuff like STM. Technically possible in many languages, but very difficult to use correctly in pretty much anything but Haskell.
02:35:09 <ghostbuster> STM appears to be some sort of concurrency primitive?
02:36:08 <davean> Yes, it is, there are many others.
02:37:42 <davean> ghostbuster: You can basicly map STM to a transaction system in an MVCC system over memory
02:38:32 <dsal> We do have mutexes and semaphores and stuff. STM feels like magic, though. Imagine trying to compose two functions that use mutexes.
02:39:08 <ghostbuster> yeah that sounds messy
02:39:16 <davean> dsal: I'm weirded out by your claim looking at ASM for Haskell is a weird place though. I think it makes a ton of sense in library design specificly, particularly for datastructures.
02:39:56 <ghostbuster> well, thanks everyone for living up to the reputation of being newbie-friendly
02:40:03 <dsal> You *can*, but I've never seen anyone suggesting looking at the code generated by idiomatic haskell as a good way to learn the language.
02:40:26 <davean> Not for learning the language no, but for programming in it
02:41:39 <ghostbuster> i wouldn't suggest reading assembly to learn C, but I would say it's good to know what assembly your C produces
02:41:45 <dsal> Are you suggesting it's common for haskell programmers to look at generated machine code?
02:42:12 davean looks at everyone he codes with
02:42:17 <davean> In some circles, absolutely normal
02:42:21 <dsal> ghostbuster: I do that for microcontrollers, but I don't even know the instruction set of the machine I'm on.
02:42:50 <davean> I was just over having a discussion about GHC's ASM actually that I was interleaving this with
02:43:24 <dsal> "weird" implies not universally common. I don't mean to suggest that nobody doest it. But on your first day with the language, you're in a weird place if you're looking at that sort of thing.
02:43:52 <davean> Not your first day though, but basicly all the haskell programmers I know do it at least occasionally, some of them quite often
02:44:23 <davean> I think I've worked with exactly one Haskeller who hasn't done it somewhat regularly.
02:44:42 <dsal> Neat. Still sounds like a pretty weird place. Doesn't come up that much at work.
02:44:48 <ghostbuster> i have questions about this 'succ' function..
02:44:56 <dsal> @src succ
02:44:56 <lambdabot> Source not found. Sorry about this, I know it's a bit silly.
02:44:59 <dsal> lame
02:44:59 <davean> ghostbuster: what about it?
02:45:33 <ghostbuster> i'm not sure how to ask it.. i realized i don't know what a type *is*
02:45:47 <davean> ghostbuster: well start speaking
02:45:55 <davean> just state confusions
02:45:59 <ghostbuster> how does the language know that 8 < 9
02:46:06 <dsal> Well, first it has to know what `8` is
02:46:09 <davean> in *haskell* it doesn't
02:46:23 <ghostbuster> i guess a type has to specify all valid values
02:46:27 <davean> though there might be an "8" with a definition "8 < 9"
02:46:35 <davean> ghostbuster: can you show some code?
02:46:45 <ghostbuster> davean: it's on this page http://learnyouahaskell.com/starting-out
02:46:54 <ghostbuster> ghci> succ 8
02:46:57 <ghostbuster> 9
02:47:03 <davean> so it does NOT know that 8 is < 9
02:47:05 <davean> in that case
02:47:21 <davean> class Enum a where
02:47:23 <davean> succ :: a -> a
02:47:38 <ghostbuster> is it okay to paste 2 lines into chan btw
02:48:09 <davean> What we know is that "succ" is a definition, which knows how to produce a value that has the "Enum" characturistic, with some relation to a given value of the same "a" type
02:48:09 <ghostbuster> ghci> 8 < 9
02:48:12 <ghostbuster> True
02:48:14 azimut joins (~azimut@gateway/tor-sasl/azimut)
02:48:35 <davean> Now, the laws are how we end up with an 8 < (succ 8) relationship
02:48:37 <dsal> ghostbuster: That's slightly confusing defaulting behavior in ghci. It's picking a type for 8. `:t 8` might help.
02:48:58 <davean> https://hackage.haskell.org/package/base-4.17.0.0/docs/GHC-Enum.html#t:Enum
02:49:35 <dsal> I don't see anything about laws here… Is there a law that `x < succ x` ?
02:49:39 <davean> And yah, we actually lack technical confidence in "8 < (succ 8)"
02:49:47 <davean> in fact, its sorta not generally true
02:49:53 <Clinton[m]> Is there a function somewhere like:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/bde3899c12cd7a587e46720905d45dd7ea7620f3>)
02:50:08 tessier joins (~treed@ec2-184-72-149-67.compute-1.amazonaws.com)
02:50:09 <davean> We HAPPEN to be on Int here, ebcause you'
02:50:12 <davean> re in ghci
02:50:21 <dsal> > succ (128::Int8)
02:50:23 <lambdabot> -127
02:50:39 <davean> dsal: ok, for that one its violating the Enum laws :(
02:51:01 <aljer> it works for Enum because Enum can be incremented, right?
02:51:05 <ghostbuster> are all types ordered?
02:51:09 <davean> ghostbuster: no
02:51:20 <davean> ghostbuster: Some are partial ordered, some are unordered
02:51:30 <davean> ghostbuster: only types with the "Ord" property are ordered
02:51:56 <davean> and the Enum, Num, and Ord properties have relationships between them
02:52:14 <lechner> it helps to like math
02:52:32 <ghostbuster> i do like math
02:52:35 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 246 seconds)
02:52:49 <davean> ghostbuster: https://hackage.haskell.org/package/base-4.17.0.0/docs/Data-Ord.html#t:Ord here is our definition of the Ord property
02:52:55 <ghostbuster> arguing is fun haha
02:53:04 <dsal> ghostbuster: ghci defaulting behavior is a bit weird. In practice, `8` just means something with a `Num` instance. You can make up your own.
02:53:18 <davean> ghostbuster: you'll see it has a list of types with said property (though it only lists those in 'base')
02:53:41 <ghostbuster> so types can have properties?
02:53:45 <davean> yah, for example "Down Int" would not be "8 < (succ 8)"
02:54:14 <ghostbuster> sorry what is Down?
02:54:15 <davean> Down is a type that takes another type and *reverses its notion of ordering*
02:54:30 <dsal> ghostbuster: A class is not a type. Classes constraint types. But types, in general, have value constructors.
02:54:35 <davean> so, Down Int is like Int, except with a reversed idea or order
02:55:00 <dsal> There are a couple of convenience ones like numeric literals and string literals that have some language support making it easy to enter values into your program for types you're using.
02:55:08 <davean> dsal: your specific Int8 example violates "The calls succ maxBound and pred minBound should result in a runtime error."
02:55:29 <dsal> davean: Ohh... Yes. I was slightly confused as to what law you were referring to. That does make sense.
02:55:48 <dsal> > succ maxBound :: Int8
02:55:50 <lambdabot> *Exception: Enum.succ{Int8}: tried to take `succ' of maxBound
02:55:54 <lechner> are you two brothers?
02:55:56 <dsal> well that's annoying.
02:56:10 gmg joins (~user@user/gehmehgeh)
02:56:33 <aljer> lechner: plot twist - they are the same person
02:56:42 <davean> dsal: you got confused because Int8 is asymetric ranged
02:56:51 <dsal> Oh. That's even weirder.
02:56:55 <lechner> aljer / i knew it!
02:57:10 <davean> dsal: No! This is the nature of two's compliment arithmetic!
02:57:26 <davean> You get 1 more range in the negative space than the possitive
02:57:35 <davean> so the range is -128 to 127
02:57:47 × opticblast quits (~Thunderbi@172.58.82.191) (Ping timeout: 248 seconds)
02:57:51 <dsal> Right. I put the extra on the wrong side.
02:57:54 <davean> since the encoding puts the zero into the possitive range
02:58:17 <davean> ghostbuster: now that we've confused you ...
02:58:28 <dsal> > 128::Int8 -- is the bad behavior
02:58:29 <lambdabot> -128
02:59:08 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
02:59:23 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 248 seconds)
03:00:24 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f849:6b89:c0b7:d8b5)
03:03:16 <ghostbuster> sorry was afk lol
03:03:56 <davean> ghostbuster: It was a bit of a digression
03:04:08 <davean> ghostbuster: so you mentioned abstract algebra before
03:04:16 <davean> ghostbuster: is it something you are actually familiar with?
03:04:18 <int-e> @check \(x :: Int8) -> abs x >= 0
03:04:18 <lambdabot> <unknown>.hs:1:14:ScopedTypeVariables language extension is not enabled. Ple...
03:04:32 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
03:04:34 <int-e> @check \x -> (abs x :: Int8) >= 0
03:04:36 <lambdabot> *** Failed! Falsifiable (after 52 tests):
03:04:36 <lambdabot> -128
03:04:44 <dsal> One of my favorite bugs.
03:05:48 × dtman34 quits (~dtman34@76.156.89.180) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
03:05:55 azimut joins (~azimut@gateway/tor-sasl/azimut)
03:05:56 <ghostbuster> davean: not really, a few years ago i had a class on calculus with a taste of algebra and i've thought it would be fun to learn it properly
03:06:09 <int-e> it's a surprise; I don't think of it as a bug.
03:06:10 <davean> ah, ok
03:06:38 dtman34 joins (~dtman34@2601:447:d000:93c9:4f13:e7d1:81fd:2aa6)
03:06:38 <davean> ghostbuster: well, uh, so this doesn't actually map to normal things in Haskell, but perhaps you've seen like "Integer" vs. "Natural" numbers?
03:06:46 <dsal> int-e: it's specified, but I'm surely not the only person who's written a production bug due to `abs x` returning a negative number unexpectedly.
03:06:53 <ghostbuster> yeah i'm familiar with the meaning of that distinction in math
03:07:09 <ghostbuster> i think anyway.. integer includes zero?
03:07:22 <davean> ghostbuster: right, so each is pretty relatable to a type, and they both have "Addable" but only one has "Negatable"
03:07:45 <ghostbuster> makes sense
03:07:45 <davean> ghostbuster: Integer has the negatives
03:07:48 <ghostbuster> ah ok
03:08:04 <davean> Natural containing zero or not is actually a point of confusion
03:08:04 <ghostbuster> i am not a mathematician heh
03:08:32 <davean> I thought the "has the idea of negation" or not would be a sensible enough mapping for you to start thinking abouit it either way
03:08:55 <ghostbuster> yeah the idea of sets that support certain operations
03:08:56 <int-e> Yeah mathematicians themselves can't agree on whether 0 is a natural number, it's hilarious.
03:09:04 <davean> so the "type" represents the set of *actual values* and the type classes represent the things we can do with them and the behaviors they have when we do said with them
03:09:28 <davean> Not QUITE this clean in Haskell but pretty close
03:09:52 <davean> so "
03:10:05 <davean> "data Natural = Zero | One | Two | ..."
03:10:51 <davean> and "data Integer = Possitive Natural | Negative Natural" say (yah that encoding has two versions of Zero, sue me)
03:11:24 <davean> I can easily impliment addition for both (Mind you this is NOT how you'd actually encode the types)
03:11:34 <davean> (my point is that every type has a specific set of values inside it)
03:11:59 <ghostbuster> btw "the asymmetric range of two's complement arithmetic" is exactly the kind of edge case that security researchers like
03:12:20 × aljer quits (~jonathon@2601:5c1:4503:8da0:7130:73a8:a627:b376) (Quit: WeeChat 3.8)
03:12:24 <davean> ghostbuster: we could have a SaturatingInt8!
03:12:36 aljer joins (~jonathon@2601:5c1:4503:8da0:7130:73a8:a627:b376)
03:12:37 <davean> it would have the same set of values as Int8 but different *behavior*
03:12:49 <davean> specificly, it would hit 127 and stop, instead of roll over.
03:12:49 <ghostbuster> that was going to be my next questio.. can we mix/match types and type classes
03:12:55 × aljer quits (~jonathon@2601:5c1:4503:8da0:7130:73a8:a627:b376) (Client Quit)
03:13:09 <davean> well a type has a NUMBER of type classes it impliments
03:13:23 <davean> so we can talk about "anything that impliments"
03:13:33 <davean> like say we have "Negate" and "Order"
03:13:34 <ghostbuster> almost sounds like an interface in some imperative languages
03:13:37 <davean> with the right rules, we can say
03:13:44 <davean> it is related to interfaces
03:14:02 <davean> interfaces are a specific subset of this
03:14:27 <davean> so lets say we have Negate and Order, and we want to impliment abs
03:14:46 <davean> abs :: forall a. (Negate a, Ord a) => a -> a
03:15:19 <davean> so *if* we can order values in a, and *if* we can negate them, we can give you the absolute value, for any type a that supports both of those things
03:15:37 <int-e> > negate (-128 :: Int8)
03:15:38 <davean> abs a = if a < 0 then negate a else a
03:15:39 <lambdabot> -128
03:16:00 <davean> again, you'd need to the right laws on Ord and Negate to prove that was *actually* abs
03:16:20 ghostbuster is processing
03:16:20 <int-e> You won't escape this one unless you make that negation error (it's an overflow).
03:16:24 <davean> now I should probably explain some ways type classes are more than interfaces
03:16:46 <davean> int-e: I'm trying to talk about the ideas - I'm acknowleging its not quite right code
03:16:54 <ghostbuster> this is fascinating, even if I don't learn haskell i'm going to hang out in this channel more often
03:17:08 <int-e> evil version: abs a = if a < 0 then abs (negate a) else a
03:17:28 <ghostbuster> i'm not familiar enough with the syntax yet - is your definition of abs not quite right there?
03:17:35 <int-e> (non-termination is the least helpful bottom)
03:17:38 <davean> ghostbuster: so you're ok with the idea of parameter and return possitions in a fucnction definition?
03:17:48 <int-e> ghostbuster: no, I modified it slightly
03:17:57 <davean> ghostbuster: Its not quite right in that we don't have the laws and know which direction ordering is in
03:18:00 <int-e> davean's version that is.
03:18:09 <ghostbuster> not familiar with return position
03:18:17 <davean> ghostbuster: for example it fails with "Down Int"
03:18:27 <davean> "int f(char)"
03:18:34 <davean> we're calling with char and returning int
03:18:45 <ghostbuster> yeah i'm fine with that
03:19:01 <ghostbuster> i guess golang allows multiple return values
03:19:01 <davean> ok, so interfaces in most languages can only be choosen by the paramters, not what you return
03:19:27 <davean> for example "fromIntegral :: (Integral a, Num b) => a -> b "
03:19:37 <davean> given anythng that is an Integral, I can produce anything that is a Num that you want
03:19:54 <davean> we decide what function that is on BOTH types
03:20:39 <davean> MOST language can't do that sort of thing with an interface (at least not directly)
03:20:57 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
03:21:20 <davean> (The directly part is actually important, which I'm not sure you're ready to get into ATM)
03:21:44 <ghostbuster> sorry afk again (keep going though, i'll need to read it a few times anyway)
03:22:16 <ghostbuster> is the syntax there funName :: (inputType inputName, outputType outputName) => ...
03:22:22 <ghostbuster> why do we specify a -> b?
03:22:24 <davean> well we're somewhat to the limits of what I think you might be ready to absorb ATM, I just didn't want to leave asside completely that there is a touch more going on than interfaces give you
03:22:29 × gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (Quit: ZNC 1.7.5 - https://znc.in)
03:22:31 <dsal> :t succ . minBound
03:22:32 <lambdabot> (Enum c, Bounded (a -> c)) => a -> c
03:22:52 <ghostbuster> davean: i think i am near my limit :)
03:22:52 <dsal> Oops. Walking my dog. Heh
03:23:04 <dsal> :t succ minBound
03:23:05 <lambdabot> (Enum a, Bounded a) => a
03:23:09 <davean> ghostbuster: to read it off as english "The function "fromIntegral" can take any type 'a' with Integral defined for it, and give you any type 'b' with Number defined for it"
03:23:18 <ghostbuster> ahh
03:23:22 <ghostbuster> gotcha
03:23:42 <davean> ghostbuster: to be clear, these next two things *are the same*
03:23:49 <davean> "fromIntegral :: (Integral a, Num b) => a -> b"
03:23:58 <davean> "fromIntegral :: (Num b, Integral a) => a -> b "
03:24:14 <ghostbuster> hmm ok because they seem to invert each other
03:24:20 <lechner> too much for one day, i think
03:24:22 <ghostbuster> btw should i keep going with LYAH and/or are there any other sites you recommend
03:24:50 <davean> Honestly they're all fine. LYAH isn't good or bad, your first one will probably surprise you enough you won't realize you're being surprised
03:25:11 <davean> it'll probably be the second one you work through that you'll "Get it" on
03:25:41 gabiruh joins (~gabiruh@vps19177.publiccloud.com.br)
03:25:57 <davean> there is going to be a level of expsure required to internalize it all
03:26:52 <davean> two pieces of advice A) don't assume the book is completely right, and B) don't assume your understanding of it is completely right
03:26:58 <davean> probably in the reverse order
03:27:43 <davean> Most of the "approachable" Haskell books round off some of the rough corners and give you a slightly simplified version of it, and second you're almost definately going to miss read something the first time through
03:29:57 <ghostbuster> cool
03:31:38 tjnhxmzhmqgytuwt is now known as Guest809
03:31:44 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
03:31:49 × king_gs quits (~Thunderbi@2806:103e:29:1779:904b:7f43:decf:5c51) (Ping timeout: 252 seconds)
03:34:45 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:34:45 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:34:45 finn_elija is now known as FinnElija
03:41:11 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:4e8c::) (Quit: The Lounge - https://thelounge.chat)
03:42:13 terrorjack joins (~terrorjac@2a01:4f8:1c1e:4e8c::)
03:42:49 king_gs joins (~Thunderbi@187.201.41.239)
03:48:58 × johnw quits (~johnw@2600:1700:cf00:db0:6c1f:968f:ea89:5c51) (Quit: ZNC - http://znc.in)
03:50:03 × czy` quits (~user@host-140-28.ilcub310.champaign.il.us.clients.pavlovmedia.net) (Remote host closed the connection)
03:50:03 × czy quits (~user@host-140-28.ilcub310.champaign.il.us.clients.pavlovmedia.net) (Remote host closed the connection)
03:52:09 × jero98772 quits (~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb) (Remote host closed the connection)
03:56:25 <EvanR> ghostbuster, Integral and Num aren't types but type classes
03:56:47 <EvanR> confusing at first since Char and Int are types and have caps
04:00:23 <davean> I thought I disabused them of that notion, but maybe not directly enough
04:01:28 <EvanR> turning the disabuse up to 11
04:01:54 × td_ quits (~td@i5387092C.versanet.de) (Ping timeout: 260 seconds)
04:03:38 td_ joins (~td@i53870902.versanet.de)
04:03:53 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
04:04:40 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
04:04:52 ddellaco1 joins (~ddellacos@146.70.165.234)
04:06:07 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
04:06:20 × ddellacosta quits (~ddellacos@146.70.166.234) (Ping timeout: 260 seconds)
04:07:57 falafel joins (~falafel@2607:fb91:143f:e47f:40a:c679:74d:6469)
04:09:17 × Flow quits (~none@gentoo/developer/flow) (Ping timeout: 246 seconds)
04:10:33 × wroathe quits (~wroathe@user/wroathe) (Quit: leaving)
04:12:51 × kee quits (~~kee@user/wizzwizz4) (Ping timeout: 252 seconds)
04:12:51 × king_gs quits (~Thunderbi@187.201.41.239) (Read error: Connection reset by peer)
04:13:19 king_gs joins (~Thunderbi@2806:103e:29:1779:9d49:6db4:ea03:1907)
04:17:58 <jle`> hi :) can I specify somewhere on the local filesystem with source-repository-package in cabal.project?
04:18:15 <jle`> if i put in a relative filepath then it says repository <local> doesn't exist
04:19:18 <jle`> hm just found the docs, it looks like no
04:23:09 Flow joins (~none@gentoo/developer/flow)
04:25:09 <jackdk> jle`: have you tried `packages: . ../../path/to/your/other/package`?
04:25:29 <jackdk> that might work, I do not remember. Note that `.` is still there for the package you're hacking on.
04:26:16 × king_gs quits (~Thunderbi@2806:103e:29:1779:9d49:6db4:ea03:1907) (Ping timeout: 252 seconds)
04:37:47 × slack1256 quits (~slack1256@186.11.100.232) (Ping timeout: 252 seconds)
04:40:57 kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
04:41:30 × kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Client Quit)
04:43:11 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 248 seconds)
04:44:48 troydm joins (~troydm@user/troydm)
04:52:38 kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
04:52:39 jmdaemon joins (~jmdaemon@user/jmdaemon)
04:53:03 kayvank parts (~user@52-119-115-185.PUBLIC.monkeybrains.net) ()
04:56:09 × Vajb quits (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686) (Read error: Connection reset by peer)
04:56:22 Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
05:04:52 andrewboltachev joins (~andrey@178.141.147.162)
05:05:50 × echoreply quits (~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d) (Ping timeout: 260 seconds)
05:09:02 × Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
05:09:34 Vajb joins (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686)
05:10:56 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
05:15:23 × ddellaco1 quits (~ddellacos@146.70.165.234) (Ping timeout: 248 seconds)
05:18:49 echoreply joins (~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d)
05:30:35 king_gs joins (~Thunderbi@187.201.41.239)
05:33:11 × lbseale quits (~quassel@user/ep1ctetus) (Ping timeout: 264 seconds)
05:34:37 × thegeekinside quits (~thegeekin@189.180.83.186) (Ping timeout: 252 seconds)
05:46:43 × [Leary] quits (~Leary]@user/Leary/x-0910699) (Remote host closed the connection)
05:48:09 [Leary] joins (~Leary]@user/Leary/x-0910699)
05:48:30 michalz joins (~michalz@185.246.204.125)
05:50:51 king_gs1 joins (~Thunderbi@2806:103e:29:1779:d49d:8027:303:6836)
05:51:29 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
05:51:39 × king_gs quits (~Thunderbi@187.201.41.239) (Ping timeout: 248 seconds)
05:51:39 king_gs1 is now known as king_gs
05:51:55 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
05:52:35 <jle`> ooh
05:53:42 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
05:53:42 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
05:53:42 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
05:54:07 azimut joins (~azimut@gateway/tor-sasl/azimut)
05:54:11 chexum joins (~quassel@gateway/tor-sasl/chexum)
05:54:25 <jle`> that works, i think! thanks! :D
05:55:00 gmg joins (~user@user/gehmehgeh)
05:55:09 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
05:58:58 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
05:59:08 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
05:59:09 chexum joins (~quassel@gateway/tor-sasl/chexum)
06:01:47 johnw joins (~johnw@2600:1700:cf00:db0:49b4:fe12:640e:f573)
06:02:01 azimut joins (~azimut@gateway/tor-sasl/azimut)
06:13:43 motherfsck joins (~motherfsc@user/motherfsck)
06:14:26 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
06:15:41 azimut joins (~azimut@gateway/tor-sasl/azimut)
06:22:47 × king_gs quits (~Thunderbi@2806:103e:29:1779:d49d:8027:303:6836) (Quit: king_gs)
06:23:02 king_gs joins (~Thunderbi@187.201.41.239)
06:32:53 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:36:42 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 268 seconds)
06:38:12 opticblast joins (~Thunderbi@172.58.80.43)
06:38:56 × falafel quits (~falafel@2607:fb91:143f:e47f:40a:c679:74d:6469) (Ping timeout: 248 seconds)
06:44:47 × opticblast quits (~Thunderbi@172.58.80.43) (Ping timeout: 248 seconds)
06:49:16 akegalj joins (~akegalj@93-138-121-55.adsl.net.t-com.hr)
06:53:14 king_gs1 joins (~Thunderbi@2806:103e:29:1779:2e75:83f4:fb45:6a17)
06:53:14 × king_gs quits (~Thunderbi@187.201.41.239) (Read error: Connection reset by peer)
06:53:14 king_gs1 is now known as king_gs
06:57:04 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
06:59:44 × king_gs quits (~Thunderbi@2806:103e:29:1779:2e75:83f4:fb45:6a17) (Ping timeout: 248 seconds)
07:02:09 kenran joins (~user@user/kenran)
07:17:49 × harveypwca quits (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
07:18:01 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 268 seconds)
07:18:21 irrgit__ joins (~irrgit@146.70.27.242)
07:18:37 freeside joins (~mengwong@122.11.214.168)
07:19:30 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
07:21:19 × irrgit_ quits (~irrgit@146.70.27.242) (Ping timeout: 252 seconds)
07:23:45 trev joins (~trev@user/trev)
07:29:40 ksqsf joins (~user@2001:da8:d800:600:55ca:77b6:4886:7934)
07:30:04 ksqsf` joins (~user@2001:da8:d800:600:55ca:77b6:4886:7934)
07:36:29 × kenran quits (~user@user/kenran) (Remote host closed the connection)
07:38:34 razetime joins (~Thunderbi@117.193.0.210)
07:39:27 motherfsck joins (~motherfsc@user/motherfsck)
07:41:32 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
07:43:22 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:45:06 charukiewicz joins (~charukiew@c-71-239-23-125.hsd1.il.comcast.net)
07:48:05 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
07:48:07 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
07:48:48 jpds joins (~jpds@gateway/tor-sasl/jpds)
07:49:52 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
07:49:59 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
07:50:51 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
07:52:06 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
07:55:07 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
07:57:55 lortabac joins (~lortabac@2a01:e0a:541:b8f0:a8f5:3359:54ee:1396)
07:58:51 × freeside quits (~mengwong@122.11.214.168) (Read error: Connection reset by peer)
08:01:35 chele joins (~chele@user/chele)
08:02:45 × razetime quits (~Thunderbi@117.193.0.210) (Ping timeout: 252 seconds)
08:03:36 turlando joins (~turlando@user/turlando)
08:10:38 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
08:12:44 zeenk joins (~zeenk@2a02:2f04:a214:1e00::7fe)
08:16:45 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
08:20:54 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:21:23 × charukiewicz quits (~charukiew@c-71-239-23-125.hsd1.il.comcast.net) (Quit: Client closed)
08:21:33 amano joins (~amano@45.8.223.209)
08:21:41 razetime joins (~Thunderbi@117.193.0.210)
08:22:29 freeside joins (~mengwong@129.126.62.10)
08:22:35 <amano> After researching which license to use for a haskell library, I chose 0BSD which is essentialy public domain.
08:24:18 × amano quits (~amano@45.8.223.209) (Client Quit)
08:25:38 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
08:33:45 _leo___ joins (~emmanuelu@user/emmanuelux)
08:34:05 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
08:34:39 × xacktm quits (~xacktm@user/xacktm) (Ping timeout: 260 seconds)
08:34:56 × lieven quits (~mal@ns2.wyrd.be) (Ping timeout: 246 seconds)
08:35:05 × nullsh quits (nullsh@user/nullsh) (Ping timeout: 252 seconds)
08:36:52 nullsh joins (nullsh@user/nexeq)
08:36:59 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Ping timeout: 248 seconds)
08:37:00 lieven joins (~mal@ns2.wyrd.be)
08:38:14 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
08:38:33 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
08:39:49 nschoe joins (~q@141.101.51.197)
08:40:07 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f849:6b89:c0b7:d8b5) (Remote host closed the connection)
08:40:25 cheater_ joins (~Username@user/cheater)
08:41:03 xacktm joins (~xacktm@user/xacktm)
08:42:40 × cheater quits (~Username@user/cheater) (Ping timeout: 248 seconds)
08:42:49 cheater_ is now known as cheater
08:49:33 cfricke joins (~cfricke@user/cfricke)
08:50:08 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
08:50:52 fserucas joins (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
08:50:52 × fserucas quits (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Client Quit)
08:51:47 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
08:53:16 × Alex_test quits (~al_test@178.34.160.79) (Quit: ;-)
08:54:11 × AlexZenon quits (~alzenon@178.34.160.79) (Quit: ;-)
08:54:24 × AlexNoo quits (~AlexNoo@178.34.160.79) (Quit: Leaving)
08:55:35 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
08:56:11 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
08:56:31 × ft quits (~ft@p508dbcc4.dip0.t-ipconnect.de) (Quit: leaving)
08:57:10 MajorBiscuit joins (~MajorBisc@145.94.153.3)
08:59:29 avicenzi joins (~avicenzi@2a00:ca8:a1f:b004::c32)
09:00:21 × vaibhavsagar[m] quits (~vaibhavsa@2001:470:69fc:105::ffe) (Quit: You have been kicked for being idle)
09:00:24 × Magnus[m] quits (~magthetch@2001:470:69fc:105::d1a7) (Quit: You have been kicked for being idle)
09:02:35 × freeside quits (~mengwong@129.126.62.10) (Ping timeout: 248 seconds)
09:09:22 CiaoSen joins (~Jura@p200300c957184d002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
09:11:11 <stefan-_> I stumbled upon an issue with automatic deriving of a Monad instance for a transformer stack: https://github.com/wkoszek/book-real-world-haskell/issues/2
09:11:21 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
09:11:31 <stefan-_> why is it that in previous GHC versions this did compile and in the current version not?
09:12:21 sshine_ is now known as sshine
09:14:24 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
09:15:53 <[Leary]> stefan-_: http://wiki.haskell.org/Functor-Applicative-Monad_Proposal
09:21:57 <stefan-_> [Leary], thanks
09:24:43 AlexNoo joins (~AlexNoo@178.34.160.79)
09:25:16 Alex_test joins (~al_test@178.34.160.79)
09:28:16 AlexZenon joins (~alzenon@178.34.160.79)
09:38:40 irrgit_ joins (~irrgit@89.47.234.74)
09:40:37 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:f849:6b89:c0b7:d8b5)
09:41:47 × irrgit__ quits (~irrgit@146.70.27.242) (Ping timeout: 255 seconds)
09:44:56 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:f849:6b89:c0b7:d8b5) (Ping timeout: 246 seconds)
09:49:31 × bhall quits (~brunohall@195.147.207.136) (Ping timeout: 248 seconds)
09:50:47 × rburkholder quits (~blurb@96.45.2.121) (Remote host closed the connection)
09:55:29 freeside joins (~mengwong@103.252.202.170)
09:56:10 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:58:40 × jludwig quits (~justin@li657-110.members.linode.com) (Read error: Connection reset by peer)
09:59:36 ubert joins (~Thunderbi@2a02:8109:abc0:6434:f835:7cff:6e4a:8bfb)
10:01:12 jludwig joins (~justin@li657-110.members.linode.com)
10:01:26 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 268 seconds)
10:02:10 × theproffesor quits (~theproffe@user/theproffesor) (Ping timeout: 260 seconds)
10:05:25 × CiaoSen quits (~Jura@p200300c957184d002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Quit: CiaoSen)
10:07:39 × johnw quits (~johnw@2600:1700:cf00:db0:49b4:fe12:640e:f573) (Ping timeout: 248 seconds)
10:08:11 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 248 seconds)
10:10:13 gtdg joins (~gtdg@nat-inria-interne-72-gw-01-lne.lille.inria.fr)
10:10:28 stiell joins (~stiell@gateway/tor-sasl/stiell)
10:10:35 freeside joins (~mengwong@103.252.202.170)
10:10:53 × jludwig quits (~justin@li657-110.members.linode.com) (Quit: ZNC - https://znc.in)
10:11:12 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
10:11:16 × gtdg quits (~gtdg@nat-inria-interne-72-gw-01-lne.lille.inria.fr) (Changing host)
10:11:16 gtdg joins (~gtdg@user/gtdg)
10:11:55 jludwig joins (~justin@li657-110.members.linode.com)
10:11:56 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
10:13:21 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
10:13:23 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
10:15:07 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
10:15:16 × jludwig quits (~justin@li657-110.members.linode.com) (Client Quit)
10:18:19 × ksqsf quits (~user@2001:da8:d800:600:55ca:77b6:4886:7934) (Ping timeout: 248 seconds)
10:18:30 × ksqsf` quits (~user@2001:da8:d800:600:55ca:77b6:4886:7934) (Ping timeout: 260 seconds)
10:18:58 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1))
10:19:12 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
10:21:22 × phma quits (phma@2001:5b0:212a:e3d8:88c0:402f:ec64:11e8) (Read error: Connection reset by peer)
10:22:22 johnw joins (~johnw@2600:1700:cf00:db0:49b4:fe12:640e:f573)
10:22:41 CiaoSen joins (~Jura@p200300c957184d002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
10:22:53 jwiegley joins (~jwiegley@2600:1700:cf00:db0:49b4:fe12:640e:f573)
10:23:28 mc47 joins (~mc47@xmonad/TheMC47)
10:23:29 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
10:23:48 themc47 joins (~mc47@xmonad/TheMC47)
10:23:59 × themc47 quits (~mc47@xmonad/TheMC47) (Client Quit)
10:24:55 phma joins (~phma@host-67-44-208-154.hnremote.net)
10:28:34 × troydm quits (~troydm@user/troydm) (Ping timeout: 268 seconds)
10:32:01 <turlando> Would you suggest checking algebraic effect systems in Haskell or is it another layer of indirection that will eventually backfire at the worst moment?
10:32:17 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
10:34:23 gmg joins (~user@user/gehmehgeh)
10:36:46 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
10:38:33 <merijn> turlando: tbh, I'm not so convinced by them
10:38:56 <merijn> But, as in all things "It Depends (TM)"
10:38:58 gehmehgeh joins (~user@user/gehmehgeh)
10:39:34 <turlando> I was not expecting a binary answer indeed :)
10:39:50 <merijn> turlando: Personally I'm a big believer in the fact that "just" IO heavy imperative Haskell will get you quite far
10:39:55 enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
10:39:56 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
10:40:37 <merijn> So unless there's specific things/ideas/designs that require algebraic effects, I wouldn't invest too heavily until it's needed
10:41:44 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:7c30:9144:ce25:cdcc)
10:42:02 <turlando> From what I see the primary advantages are: 1. no complex stacks of nested monads; 2. dynamic dispatch of effects when needed (+ decoupling). Not sure if there's more
10:44:00 <merijn> tbh, I think (visible) monad stacks are also an anti-pattern. Aggressively newtyping to hide those is the most robust way to go in my experience. And while I dislike the actual mtl classes (they are too generic, combined with instance uniqueness that's a PITA), mtl-style classes for high level operations work quite well
10:45:55 × CiaoSen quits (~Jura@p200300c957184d002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
10:46:29 <stefan-_> merijn, isnt pure IO harder to test?
10:47:03 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:7c30:9144:ce25:cdcc) (Ping timeout: 255 seconds)
10:47:31 <merijn> stefan-_: compared to?
10:48:01 <stefan-_> for example compared to providing a custom type class with different implementations for production and testing
10:48:44 × michalz quits (~michalz@185.246.204.125) (Read error: Connection reset by peer)
10:48:53 <merijn> I don't see much value in "a different implementation for testing", what's the value of tests if they're running wildly different code then production?
10:49:02 michalz joins (~michalz@185.246.204.101)
10:49:32 <turlando> Isn't that kind of an antipattern? Can't you just pass different implementations to your functions at that point? If code complexity doesn't explode. Not sure if I got the question right actually
10:50:12 gmg joins (~user@user/gehmehgeh)
10:50:32 <merijn> I consider upwards of 90% of mocking and similar things an antipattern :p
10:51:11 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
10:51:51 bhall joins (~brunohall@195.147.207.136)
10:52:37 <turlando> Also talking about antipatterns is an antipattern
10:53:08 __monty__ joins (~toonn@user/toonn)
10:58:45 <stefan-_> merijn, it allows you to test units in isolation
10:59:33 freeside joins (~mengwong@103.252.202.170)
11:00:22 <merijn> Except you're not testing in isolation, you're still *also* exercising the surrounding code (and potentially triggering bugs in that), except instead of exercising your surrounding production code (good!), you are exercising the entirely useless test code
11:00:45 <kuribas> This, and in python it's 99.9% of mocking
11:01:14 <kuribas> You can mock if you don't have a choice, and then you need to be careful that the mocking code actually matches the thing you mock closely.
11:01:21 <kuribas> But no reason to mock database calls.
11:04:14 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
11:04:43 × nschoe quits (~q@141.101.51.197) (Ping timeout: 248 seconds)
11:05:03 <kuribas> It also makes sense to take out business logic into pure code.
11:05:07 <kuribas> That can be tested.
11:05:30 <kuribas> But often you just have light wrapper code, in that case it's just better to test with the thing you wrap.
11:05:47 × razetime quits (~Thunderbi@117.193.0.210) (Ping timeout: 248 seconds)
11:10:20 xff0x joins (~xff0x@2405:6580:b080:900:876a:aa31:e2c4:b726)
11:12:31 freeside joins (~mengwong@103.252.202.170)
11:14:52 Feuermagier joins (~Feuermagi@user/feuermagier)
11:15:31 <tomsmeding> disclaimer, I have worked very little with actually large production codebases
11:15:54 <tomsmeding> is excessive use of mocking a sign that setting up a production environment for the application is too difficult?
11:16:16 <dminuoso> Indeed, whatever the reason may be.
11:16:20 jludwig joins (~justin@li657-110.members.linode.com)
11:16:26 <tomsmeding> when kuribas says "no reason to mock database calls", I say "there is, I hate having to set up a postgres instance on my machine just to test this bloody piece of code"
11:16:41 <tomsmeding> but that can be reinterpreted into what I said above
11:17:03 <dminuoso> I've started to love nix even further because nixos-lib tests are so amazing.
11:17:07 <tomsmeding> I don't test ircbrowse locally because I don't want to set up postgres locally
11:17:25 <dminuoso> You can very easily wire up postgresql, multiple VMs, do wireguard between them, and what not
11:17:25 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
11:17:26 <kuribas> tomsmeding: you just let the infra guys set this up :)
11:17:27 <tomsmeding> (now ircbrowse gets like 2 commits per year so it's not like that's a critical problem, but eh)
11:17:27 <dminuoso> and then do your tests.
11:17:40 <dminuoso> tomsmeding: You should use nix then! :p
11:17:47 <tomsmeding> dminuoso: I can also set up a docker container and do tests in that, I know how that works to an extent
11:17:56 <kuribas> tomsmeding: then you run the code on the CI/CD to see if it checks :)
11:18:05 <tomsmeding> I... could
11:18:07 <dminuoso> tomsmeding: the nasty thing about docker is you dont have a coherent language on how to configure the postgresql inside.
11:18:18 <dminuoso> tomsmeding: you get that mess of a large bunch of dockerfiles, that you must somehow construct.
11:18:38 <kuribas> tomsmeding: but if your code depends on queries which are non-trivial, you will want to test them anyway.
11:18:39 <tomsmeding> dminuoso: nothing has a coherent language to configure postgresql and haskell and ircbrowse
11:18:52 <tomsmeding> kuribas: I'm not disputing that
11:18:53 <dminuoso> tomsmeding: nix does :o
11:19:00 <tomsmeding> I'm not saying that "not testing" is a good thing :p
11:19:02 <dminuoso> well nixos rather.
11:19:07 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Quit: use-value)
11:19:12 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
11:19:23 <tomsmeding> dminuoso: _configuring_ postgresql? Including setting up users and databases?
11:19:28 <dminuoso> tomsmeding: Yes.
11:19:33 tomsmeding impressed
11:19:50 <tomsmeding> this, by the way, is why pastebin and playground use sqlite
11:19:56 <tomsmeding> you know how I set up a local sqlite database?
11:19:58 <tomsmeding> I don't
11:19:59 <kuribas> tomsmeding: not implying you did :) But if you are testing this already, the mocks seems superfluous.
11:20:02 <tomsmeding> it gets created automaticallu
11:20:18 <tomsmeding> kuribas: if you're testing what already?
11:20:29 <kuribas> queries, integration...
11:20:33 <tomsmeding> true
11:20:52 <tomsmeding> if you're testing your queries against the real database, you have a real database to test against, so you shouldn't go mocking your real database
11:21:17 <tomsmeding> which I guess is what you're saying
11:21:35 <kuribas> indeed
11:22:09 <tomsmeding> if running against the real thing was as easy as running against a mock, then you can save effort by not writing the mock
11:22:14 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
11:22:20 <tomsmeding> hence my claim, mocks are a sign that running a production environment is too hard
11:22:50 <tomsmeding> which, granted, might be because it's actually almost impossible due to needing to interface with licensed external services or other crap
11:22:54 <tomsmeding> which I guess occurs in companies
11:23:02 <dminuoso> tomsmeding: Let me conjure up a simple example
11:23:06 <tomsmeding> but then you want CI
11:23:10 <tomsmeding> which _can_
11:23:19 <tomsmeding> dminuoso: don't spend time on it :p
11:23:31 <tomsmeding> dminuoso: I won't be using it for ircbrowse because I'm too lazy there anyway
11:23:39 <tomsmeding> I mean, I'm curious, but you know
11:26:38 × gtdg quits (~gtdg@user/gtdg) (Ping timeout: 260 seconds)
11:29:09 <dminuoso> tomsmeding: https://gist.github.com/dminuoso/4b23c4c5636b3232b55b79a10d279110
11:29:34 <dminuoso> And of course, if you go all in with nixos anyway, you can just use whatever nixos config you push to your server directly
11:29:58 <dminuoso> You can set up multiple VMs, coordinate tests between them, wait on conditions between the servers
11:29:59 gmg joins (~user@user/gehmehgeh)
11:30:00 <dminuoso> and all
11:30:13 irrgit__ joins (~irrgit@176.113.74.130)
11:30:15 <kuribas> tomsmeding: btw, I had like 20 queries, and a batching query system which "just worked", except for 1 faulty query.
11:30:47 <kuribas> tomsmeding: I didn't have tests, it was just tested in production (it's a tool internally used by OPS).
11:30:58 <tomsmeding> dminuoso: that's cool
11:31:03 <tomsmeding> what language is testScript written in?
11:31:08 <dminuoso> Python
11:31:12 <tomsmeding> (I get that's the least important point of the snippet)
11:31:19 <dminuoso> You can get a repl from that context too for neat debugging
11:31:23 <tomsmeding> nice
11:31:47 <tomsmeding> kuribas: it was an internal tool?
11:31:50 <dminuoso> It runs directly on qemu and it happens all inside nix.
11:31:55 razetime joins (~Thunderbi@117.193.0.210)
11:32:01 <tomsmeding> dminuoso: QEMU? that was... unexpected
11:32:02 <dminuoso> So all you have to do is `nix-build test.nix` and it will do all the things
11:32:04 <kuribas> tomsmeding: yes
11:32:16 <tomsmeding> dminuoso: why does this start up a VM
11:32:18 <kuribas> tomsmeding: except now it's being rewritten in clojure :(
11:32:22 <tomsmeding> kuribas: F
11:32:31 <tomsmeding> how did you find out about the faulty query
11:32:38 <dminuoso> tomsmeding: well because its a multi machine test. You can set up multiple servers, and it will do networking between them.
11:32:49 <kuribas> tomsmeding: it was OPS :-P
11:33:07 <dminuoso> so for example if your reality already is "separate database" and "separate web server", this lets you not just "mimic it", but construct it as if it were reality
11:33:14 <dminuoso> it will then push the nixos closure *as you want it* to those VMs
11:33:17 <tomsmeding> /define OPS
11:33:18 <dminuoso> so you can test entire server setups
11:33:21 <kuribas> tomsmeding: the query itself was valid, but looking for a wrong datapath that didn't exist, so not returning those values.
11:33:21 <dminuoso> not just singular software.
11:33:24 × irrgit_ quits (~irrgit@89.47.234.74) (Ping timeout: 260 seconds)
11:33:33 <dminuoso> tomsmeding: so think of it as a wholemeal server configuration test framework.
11:33:38 <tomsmeding> dminuoso: oooooh
11:33:52 <dminuoso> for nixos servers.
11:33:53 <tomsmeding> kuribas: ah
11:34:08 <tomsmeding> dminuoso: sneaky postscript
11:34:09 <dminuoso> you can of course use this for non-nixos situations, where you just use nixos to quickly get a database up and running
11:34:12 irrgit_ joins (~irrgit@176.113.74.130)
11:34:25 <tomsmeding> right, that makes sense
11:35:03 <dminuoso> much of nixos modules (the things that define what options are available, and what they do) are in fact tested with the same machinery
11:35:05 <kuribas> tomsmeding: but the effort required for testing all those queries, including the batching, would be way more than the time it took for OPS to find it and for me to fix it/
11:35:10 <dminuoso> which is something you dont have much in other distributions
11:35:12 × irrgit__ quits (~irrgit@176.113.74.130) (Ping timeout: 255 seconds)
11:35:20 <tomsmeding> kuribas: :)
11:36:10 <dminuoso> What i found amazing, is when I forgot to enable hardware virtualization support in my CPU, that for one of our projects the qemu-based test suite still finished in about 40ish seconds.
11:36:21 <tomsmeding> heh because qemu is cool
11:36:27 <dminuoso> With kvm working, it was sped up to about 4-5s (that's including setup, running, and teardown)
11:36:32 <dminuoso> but 40ish seconds is still amazing fast.
11:36:35 <tomsmeding> yeah
11:36:35 <dminuoso> for full blown cpu emulation
11:36:45 <tomsmeding> so factor 10 slowdown, roundabout?
11:36:47 <tomsmeding> that's nice
11:36:48 <dminuoso> yeah
11:37:05 tomsmeding wonders if QEMU does JIT
11:37:15 <dminuoso> It does
11:37:17 <tomsmeding> then that could be even faster perhaps
11:37:32 <tomsmeding> though it's a hard language to jit I guess
11:38:02 <dminuoso> There's TCG
11:38:17 <tomsmeding> nice name
11:38:27 <dminuoso> Its quite possible, that if the target architecture is the same as the native hardware, then performance hits arent too bad
11:38:39 <dminuoso> because mostly qemu just has to emulate sysenter and memory
11:38:56 <tomsmeding> well memory emulation is a thing :p
11:39:08 <tomsmeding> significant proportion of instructions do something with memory
11:39:11 <dminuoso> sure, but Im saying that much of the cpu instructions can be translated 1:1
11:39:16 <tomsmeding> hardly
11:39:31 <dminuoso> Mmm
11:39:34 <tomsmeding> a large percentage of instructions in a production app are memory-using instructions
11:39:51 <tomsmeding> if you're doing significant numerical calculations you may have chunks of code that use registers only
11:39:58 <tomsmeding> but that's not really what crud apps do
11:40:31 <tomsmeding> but cool stuff, I wasn't aware of all this
11:40:35 <dminuoso> I would have expected a much much steeper slowdown
11:40:42 <dminuoso> Something factor 100 or so
11:40:45 <tomsmeding> without JIT yes for sure
11:41:00 <tomsmeding> with JIT I might have expected it to be a little faster than 10x actually
11:41:03 <tomsmeding> but not much per se
11:41:17 <tomsmeding> because the language you're JITting is too low level
11:42:43 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
11:43:10 <dminuoso> Also in related nix news, with haskell.nix to build a fully statically linked binary, all I had to do is replace `pkgs` with `pkgs.pkgsCross.musl64`, and by pure magic a statically linked haskell executable fell out.
11:43:51 <dminuoso> For reasons that are somewhat beyond me, its also only 10MiB in size compared to 40ish MiB when built inside an alpine container with `cabal-install`
11:44:09 <dminuoso> despite latter having been `stripped` and the former not.
11:44:12 <tomsmeding> dminuoso: what do you get if you `nm` the resulting executable
11:44:13 <tomsmeding> oh
11:44:17 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
11:44:21 <tomsmeding> what if you don't strip :p
11:44:29 <dminuoso> then the alpine thing gets even larger?
11:44:30 gmg joins (~user@user/gehmehgeh)
11:44:37 <dminuoso> But it may also be just the GHC version
11:44:44 <tomsmeding> yeah but I wonder if there are more functions in there, hence more names
11:44:46 <dminuoso> since in nix Im using 9.2 now
11:44:48 <tomsmeding> ah
11:44:55 <dminuoso> and on alpine it was 8.10 I think
11:45:01 <tomsmeding> that's definitely a possibly large confounding factor
11:55:50 underlap joins (~underlap@229.171.115.87.dyn.plus.net)
11:57:42 CiaoSen joins (~Jura@p200300c957184d002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
12:00:56 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
12:03:25 freeside joins (~mengwong@103.252.202.170)
12:08:28 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 268 seconds)
12:12:59 <underlap> I have been successfully using stack on macOS, but I am trying it now on linux and am consistently getting connection failures (error: [S-775]). Any clues for how to debug this please?
12:13:05 <underlap> Error: [S-775]
12:13:05 <underlap> Exception while reading snapshot from https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/20/9.yaml (c11fcbeb1aa12761044755b1109d16952ede2cb6147ebde777dd5cb38f784501,649333):
12:13:05 <underlap> HttpExceptionRequest Request {
12:13:05 <underlap> host = "raw.githubusercontent.com"
12:13:05 <underlap> port = 443
12:13:06 <underlap> secure = True
12:13:08 <underlap> requestHeaders = [("User-Agent","Haskell pantry package")]
12:13:10 <underlap> path = "/commercialhaskell/stackage-snapshots/master/lts/20/9.yaml"
12:13:12 <underlap> queryString = ""
12:13:14 <underlap> method = "GET"
12:13:16 <underlap> proxy = Nothing
12:13:18 <underlap> rawBody = False
12:13:20 <underlap> redirectCount = 10
12:13:22 <underlap> responseTimeout = ResponseTimeoutDefault
12:13:26 <underlap> requestVersion = HTTP/1.1
12:13:28 <underlap> proxySecureMode = ProxySecureWithConnect
12:13:30 <underlap> }
12:13:32 <underlap> (ConnectionFailure Network.Socket.getAddrInfo (called with preferred socket type/protocol: AddrInfo {addrFlags = [AI_ADDRCONFIG], addrFamily = AF_UNSPEC, addrSocketType = Stream, addrProtocol = 0, addrAddress = 0.0.0.0:0, addrCanonName = Nothing}, host name: Just "raw.githubusercontent.com", service name: Just "443"): does not exist (Try again))
12:13:36 × jludwig quits (~justin@li657-110.members.linode.com) (Quit: ZNC - https://znc.in)
12:14:21 <maerwald> underlap: please don't paste more than 3 lines into the channel
12:14:24 <underlap> If I open the link in a browser, I can see the YAML contents ok.
12:14:31 <maerwald> @where paste
12:14:31 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
12:14:39 <underlap> maerwald: oops sorry
12:15:28 <underlap> Here's the output: https://paste.tomsmeding.com/DpvUkIXo
12:18:36 gmg joins (~user@user/gehmehgeh)
12:21:20 × akegalj quits (~akegalj@93-138-121-55.adsl.net.t-com.hr) (Quit: leaving)
12:22:17 <underlap> In case the above was garbled, I am issuing `stack test` on linux against a project which works fine on macOS and I get the connection failure error shown here: https://paste.tomsmeding.com/DpvUkIXo Any clue for debugging this please?
12:24:31 <mauke> that sounds like it couldn't resolve the raw.githubusercontent.com hostname
12:24:37 <mauke> network issue?
12:25:39 <underlap> Probably. Just found a useful clue...
12:26:50 mmhat joins (~mmh@p200300f1c7069003ee086bfffe095315.dip0.t-ipconnect.de)
12:27:26 <underlap> Ah, turns out it was a known issue with arch linux: https://github.com/commercialhaskell/stack/issues/5634
12:27:46 <underlap> Sorry for troubling you (and for flooding the chat earlier!)
12:28:50 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
12:29:42 nschoe joins (~q@141.101.51.197)
12:30:33 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Quit: leaving)
12:31:37 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:33:38 gmg joins (~user@user/gehmehgeh)
12:33:48 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Client Quit)
12:34:01 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
12:34:30 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:38:17 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
12:39:05 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Client Quit)
12:39:26 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:41:19 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Client Quit)
12:41:40 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:41:50 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Client Quit)
12:42:07 gmg joins (~user@user/gehmehgeh)
12:42:55 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:44:17 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Client Quit)
12:44:36 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:9525:b972:bf3b:9db0)
12:44:40 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:44:40 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Client Quit)
12:45:04 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:46:20 freeside joins (~mengwong@103.252.202.170)
12:46:50 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
12:48:08 gmg joins (~user@user/gehmehgeh)
12:49:07 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:9525:b972:bf3b:9db0) (Ping timeout: 252 seconds)
12:51:01 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 268 seconds)
12:52:58 jludwig joins (~justin@li657-110.members.linode.com)
12:55:45 × underlap quits (~underlap@229.171.115.87.dyn.plus.net) (Quit: Leaving)
12:57:12 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
12:57:38 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
13:07:21 Kaizer joins (~kaizer@user/Kaizer)
13:09:19 pernzs joins (~pernzs@101.175.168.100)
13:14:42 × razetime quits (~Thunderbi@117.193.0.210) (Remote host closed the connection)
13:20:45 dgpratt[m] joins (~dgprattma@2001:470:69fc:105::1:dcdd)
13:21:43 × Kaizer quits (~kaizer@user/Kaizer) (Remote host closed the connection)
13:27:58 × notzmv quits (~zmv@user/notzmv) (Remote host closed the connection)
13:29:15 × mmhat quits (~mmh@p200300f1c7069003ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
13:31:06 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
13:31:56 × dsrt^ quits (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection)
13:36:27 × andrewboltachev quits (~andrey@178.141.147.162) (Quit: Leaving.)
13:41:08 akegalj joins (~akegalj@37-128.dsl.iskon.hr)
13:44:47 mmhat joins (~mmh@p200300f1c716b0c2ee086bfffe095315.dip0.t-ipconnect.de)
13:44:47 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
13:47:16 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
13:50:13 gentauro joins (~gentauro@user/gentauro)
13:53:20 buggy joins (~buggy@14.139.82.6)
13:53:34 × buggy quits (~buggy@14.139.82.6) (Client Quit)
13:54:41 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Remote host closed the connection)
13:56:00 enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
13:59:12 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
14:05:18 × tristanC_ quits (~tristanC@user/tristanc) (Remote host closed the connection)
14:07:15 troydm joins (~troydm@user/troydm)
14:11:21 ddellacosta joins (~ddellacos@143.244.47.81)
14:12:27 × bhall quits (~brunohall@195.147.207.136) (Ping timeout: 248 seconds)
14:18:19 thegeekinside joins (~thegeekin@189.180.83.186)
14:19:23 freeside joins (~mengwong@103.252.202.170)
14:21:30 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
14:22:38 rettahcay parts (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) ()
14:23:27 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
14:24:03 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
14:29:04 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 252 seconds)
14:30:59 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
14:34:42 × rettahcay quits (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) (Quit: leaving)
14:35:24 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
14:36:08 <rettahcay> whois rettahcay
14:36:44 <Hecate> no idea
14:37:16 Midjak joins (~Midjak@82.66.147.146)
14:37:46 <rettahcay> never mind! sorry :-)
14:38:38 × rettahcay quits (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) (Client Quit)
14:41:47 freeside joins (~mengwong@103.252.202.170)
14:42:03 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
14:44:08 <jean-paul[m]> with megaparsec, is the definition of a Parser a, is there a way to compose with a Parser b but require that it match exactly some number of tokens? (eg, to implement parsing of the values inside netstrings)
14:44:38 <rettahcay> hello folks. I'm a haskell beginner. looking for a good resource to learn Monads. Any suggestions? Thanks
14:44:43 <jean-paul[m]> I wrote a thing where I just call parse again inside the Parser a and do a bunch of work to convert the error type of parse back to the internal error type of Parser ... it's so gross
14:45:57 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
14:46:22 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
14:48:23 <merijn> rettahcay: How beginner are we talking? :)
14:48:29 <ddellacosta> rettahcay: I think Graham Hutton's explanation in Programming in Haskell is very good http://www.cs.nott.ac.uk/~pszgmh/pih.html Roughly the same as what you can find here I believe, so you don't have to buy the book to see http://www.cs.nott.ac.uk/~pszgmh/bib.html#pearl I'm making some assumptions about what you're comfortable with--but honestly, there are plenty of great resources for this and
14:48:31 <ddellacosta> it will probably take banging your head against it for a while until it clicks. Don't give up and keep asking questions.
14:51:18 <geekosaur> @where iotut
14:51:18 <lambdabot> https://www.vex.net/~trebla/haskell/IO.xhtml
14:52:04 <geekosaur> there's not actually a lot to understand about monads as such. there's a lot to understand about IO, but IO is special because it's IO, not because it's a monad
14:54:12 kurbus joins (~kurbus@user/kurbus)
14:55:03 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
14:58:16 × kurbus quits (~kurbus@user/kurbus) (Client Quit)
14:58:22 kurbus31 joins (~kurbus@user/kurbus)
14:58:35 kurbus31 is now known as kurbus
15:02:43 jero98772 joins (~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb)
15:03:43 Guest3769 joins (~Guest37@ip1f13ab93.dynamic.kabel-deutschland.de)
15:06:15 × pernzs quits (~pernzs@101.175.168.100) (Quit: Client closed)
15:07:34 × Luj quits (~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb) (Quit: The Lounge - https://thelounge.chat)
15:08:27 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
15:08:40 Luj joins (~Luj@2a01:e0a:5f9:9681:e45d:27d5:311f:767e)
15:11:29 hounded joins (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com)
15:11:49 hounded_woodstoc joins (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com)
15:13:04 × mei quits (~mei@user/mei) (Ping timeout: 252 seconds)
15:17:31 × mechap quits (~mechap@user/mechap) (Ping timeout: 248 seconds)
15:17:36 Guest31 joins (~Guest31@45.247.234.245)
15:19:43 mechap joins (~mechap@user/mechap)
15:22:19 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
15:23:08 cheater joins (~Username@user/cheater)
15:31:55 marinelli joins (~marinelli@gateway/tor-sasl/marinelli)
15:34:18 × rettahcay quits (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) (Quit: leaving)
15:36:18 varoo joins (~varoo@2a09:bac1:3680:5f70::ca:84)
15:36:45 × Guest3769 quits (~Guest37@ip1f13ab93.dynamic.kabel-deutschland.de) (Quit: Client closed)
15:36:49 Sgeo joins (~Sgeo@user/sgeo)
15:38:16 × ddellacosta quits (~ddellacos@143.244.47.81) (Quit: WeeChat 3.7.1)
15:38:19 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 248 seconds)
15:38:31 ddellacosta joins (~ddellacos@143.244.47.81)
15:39:21 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:a8f5:3359:54ee:1396) (Quit: WeeChat 2.8)
15:40:02 × varoo quits (~varoo@2a09:bac1:3680:5f70::ca:84) (Client Quit)
15:42:22 <kuribas> geekosaur: interestingly, IO was modelled after monads.
15:42:33 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
15:44:38 × marinelli quits (~marinelli@gateway/tor-sasl/marinelli) (Quit: marinelli)
15:44:45 jmdaemon joins (~jmdaemon@user/jmdaemon)
15:45:35 Guest33 joins (~Guest33@187.22.78.128)
15:46:26 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
15:47:31 <c_wraith> kuribas: I'm not sure that's the phrasing I'd use. I'd probably say something like "the IO type was constructed to be a monad". You can imagine an alternate construction that is based more on something like the Arrow hierarchy
15:47:45 <c_wraith> And probably several others
15:47:54 <kuribas> gotta restart emacs...
15:47:57 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1))
15:48:31 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
15:49:13 codaraxis joins (~codaraxis@user/codaraxis)
15:50:04 × codaraxis quits (~codaraxis@user/codaraxis) (Remote host closed the connection)
15:50:04 <monochrom> Instead of who is modelled after whom, it is "the unreasonable effectiveness of math" again.
15:50:09 mei joins (~mei@user/mei)
15:50:29 codaraxis joins (~codaraxis@user/codaraxis)
15:51:42 × codaraxis quits (~codaraxis@user/codaraxis) (Max SendQ exceeded)
15:52:10 codaraxis joins (~codaraxis@user/codaraxis)
15:52:15 <monochrom> Sound waves are not modelled after Fourier series, nor Fourier series modelled after sound waves. Instead, someone noticed that they are a good match.
15:52:36 <kuribas> for sure. I am just surprised nobody came up with this pattern before monads.
15:52:44 <kuribas> In hindsight it looks obvious.
15:52:49 × nattiestnate quits (~nate@202.138.250.11) (Ping timeout: 252 seconds)
15:52:54 <monochrom> And to be sure Fourier series is not the only good fit. There are wavelet transforms too.
15:53:54 nattiestnate joins (~nate@202.138.250.13)
15:55:24 <monochrom> Sufficiently old Haskell did not use monads. I/O was [Respond]->[Request] and someone noticed it could be given a CPS interface.
15:55:55 × CiaoSen quits (~Jura@p200300c957184d002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
15:57:28 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
15:57:36 <kuribas> forall a. ([Request -> a]) -> [Respond] -> a ?
15:57:47 jmdaemon joins (~jmdaemon@user/jmdaemon)
15:57:55 <merijn> No
15:58:28 <c_wraith> that old version was frighteningly fragile
15:58:41 <merijn> Just "main :: [Response] -> [Request]" where the input is a lazy list of responses to the (lazy list of) requests produced
15:59:07 <merijn> If you look up old versions of the Haskell Report you can read up on the details
15:59:10 <kuribas> that's not CPS.
15:59:51 <merijn> kuribas: Pretty sure monochrom meant that IO is hiding that CPS interface
16:00:24 <merijn> kuribas: I mean, Clean uses neither monads nor the lazy list approach for IO
16:00:57 <monochrom> No I meant what I wrote, in particular this was before Haskell got monads.
16:01:08 <kuribas> merijn: so it already had bind?
16:02:05 <merijn> monochrom: I don't recall seeing CPS based IO in any of the old reports?
16:02:12 <merijn> kuribas: What did?
16:03:03 <kuribas> old haskell
16:03:14 <merijn> Mu
16:03:27 <mauke> monads first appeared in 1.3
16:03:32 <mauke> let me check 1.2 ...
16:03:52 <merijn> mauke: I thought monadic IO was 1.4? But I might be wrong, could be 1.3
16:04:34 <merijn> kuribas: "Haskell already had bind" is a real "define 'already', 'had', and 'bind'" kinda question
16:04:52 <monochrom> You will need a postscript viewer, but it's https://www.haskell.org/definition/from12to13.html section 7.5
16:05:22 <mauke> yep, just found it
16:06:07 <merijn> Monadic IO is just so obviously better when you look at the old stuff :)
16:06:59 <monochrom> Alternatively find Andrew Gordon's thesis Functional Programming and Input/Output for many more options. :)
16:07:07 kee joins (~~kee@user/wizzwizz4)
16:07:37 razetime joins (~Thunderbi@117.193.0.210)
16:08:02 <mauke> readFile :: String -> FailCont -> StrCont -> [Response] -> [Request]
16:08:03 <mauke> not fun
16:08:30 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 260 seconds)
16:08:53 <mauke> type FailCont = IOError -> [Response] -> [Request]; type StrCont = String -> [Response] -> [Request]
16:09:03 <monochrom> But it solved the "I hate exceptions, what should I do instead?" problem. >:)
16:10:12 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:458d:a070:c030:aa2)
16:10:12 <mauke> amazingly no one seems to have considered `type IOCont a = a -> [Response] -> [Request]`
16:10:28 <monochrom> Yeah, I just noticed. :)
16:10:50 jmdaemon joins (~jmdaemon@user/jmdaemon)
16:11:06 lbseale joins (~quassel@user/ep1ctetus)
16:11:52 <c_wraith> That representation makes it so easy to introduce causality issues.
16:12:12 use-value1 joins (~Thunderbi@2a00:23c6:8a03:2f01:c5c6:bf70:ccc5:fecd)
16:12:32 <c_wraith> It's so easy to look for a response to a request you haven't actually made yet.
16:13:17 × kee quits (~~kee@user/wizzwizz4) (Ping timeout: 268 seconds)
16:14:27 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:458d:a070:c030:aa2) (Ping timeout: 252 seconds)
16:14:27 use-value1 is now known as use-value
16:15:06 steve[m]1 joins (~stevetrou@2001:470:69fc:105::e0b)
16:18:44 × kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
16:20:09 × mmhat quits (~mmh@p200300f1c716b0c2ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.8)
16:20:26 kee joins (~~kee@user/wizzwizz4)
16:21:55 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
16:22:10 × nschoe quits (~q@141.101.51.197) (Quit: Switching off)
16:23:01 andrewboltachev joins (~andrey@178.141.147.162)
16:24:33 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 255 seconds)
16:25:05 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 255 seconds)
16:25:42 chexum joins (~quassel@gateway/tor-sasl/chexum)
16:30:37 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
16:33:35 dcoutts_ joins (~duncan@host86-155-218-146.range86-155.btcentralplus.com)
16:35:34 × dcoutts quits (~duncan@host86-176-29-74.range86-176.btcentralplus.com) (Ping timeout: 252 seconds)
16:37:08 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 255 seconds)
16:37:52 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
16:38:57 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
16:39:24 chexum joins (~quassel@gateway/tor-sasl/chexum)
16:39:28 [_] is now known as [itchyjunk]
16:39:56 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
16:40:24 dcoutts joins (~duncan@host86-155-218-146.range86-155.btcentralplus.com)
16:41:30 rburkholder joins (~blurb@96.45.2.121)
16:41:51 motherfsck joins (~motherfsc@user/motherfsck)
16:42:19 × dcoutts_ quits (~duncan@host86-155-218-146.range86-155.btcentralplus.com) (Ping timeout: 252 seconds)
16:46:41 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
16:47:07 cheater_ joins (~Username@user/cheater)
16:47:08 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 255 seconds)
16:47:54 chexum joins (~quassel@gateway/tor-sasl/chexum)
16:49:29 gmg joins (~user@user/gehmehgeh)
16:49:47 × cheater quits (~Username@user/cheater) (Ping timeout: 248 seconds)
16:49:51 cheater_ is now known as cheater
16:52:04 cheater_ joins (~Username@user/cheater)
16:53:00 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:54:46 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 252 seconds)
16:55:27 × Guest33 quits (~Guest33@187.22.78.128) (Quit: Client closed)
16:55:45 × cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds)
16:55:48 cheater_ is now known as cheater
16:55:54 kurbus joins (~kurbus@user/kurbus)
16:55:59 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 248 seconds)
16:56:57 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
16:59:28 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
17:00:03 notzmv joins (~zmv@user/notzmv)
17:00:47 kurbus27 joins (~kurbus@user/kurbus)
17:01:08 kurbus is now known as Guest2389
17:01:08 kurbus27 is now known as kurbus
17:01:42 × Guest2389 quits (~kurbus@user/kurbus) (Quit: Client closed)
17:02:02 patrl joins (~patrl@user/patrl)
17:02:07 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
17:03:10 × califax quits (~califax@user/califx) (Remote host closed the connection)
17:05:44 califax joins (~califax@user/califx)
17:05:47 <lechner> Hi, is there a separate channel for Cabal?
17:06:16 × kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
17:07:39 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 260 seconds)
17:07:44 kurbus joins (~kurbus@user/kurbus)
17:08:15 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
17:11:12 × razetime quits (~Thunderbi@117.193.0.210) (Remote host closed the connection)
17:11:18 × kurbus quits (~kurbus@user/kurbus) (Client Quit)
17:15:00 × Guest31 quits (~Guest31@45.247.234.245) (Quit: Client closed)
17:15:43 × mechap quits (~mechap@user/mechap) (Read error: Connection reset by peer)
17:17:12 <mauke> I don't know, but if so, it'll be called #haskell-cabal or #cabal, probably
17:19:29 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:19:33 <sclv> lechner: the channel is named #hackage
17:19:39 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
17:20:16 <lechner> sclv / thanks!
17:21:05 mechap joins (~mechap@user/mechap)
17:24:23 <mauke> Dang
17:24:45 <geekosaur> yeh, it's confusing
17:25:06 <geekosaur> also for hackage issues you go somewhere other than #hackage 🙂
17:26:19 × MajorBiscuit quits (~MajorBisc@145.94.153.3) (Ping timeout: 260 seconds)
17:27:21 × califax quits (~califax@user/califx) (Remote host closed the connection)
17:29:57 califax joins (~califax@user/califx)
17:30:05 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1))
17:30:54 <lechner> where is that? #haskell-infrastructure?
17:31:17 fut joins (~futar@129.234.0.191)
17:32:06 <geekosaur> yep
17:33:11 <lechner> it keeps all the riff-raff away
17:33:12 <geekosaur> basically, #hackage is hackage development including cabal/Cabal, operational stuff is #haskell-infrastructure
17:33:41 kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
17:34:24 <lechner> i checked #cabal, which seemed taken, and #haskell-cabal before asking
17:34:45 × fut quits (~futar@129.234.0.191) (Client Quit)
17:36:07 cheater_ joins (~Username@user/cheater)
17:36:41 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:9525:b972:bf3b:9db0)
17:38:55 × cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds)
17:39:02 cheater_ is now known as cheater
17:40:23 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.8)
17:42:23 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
17:46:27 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:48:10 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
17:49:11 slack1256 joins (~slack1256@186.11.102.104)
17:50:26 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
17:56:15 × califax quits (~califax@user/califx) (Remote host closed the connection)
17:56:48 × asscrackbandit quits (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) (Ping timeout: 248 seconds)
17:58:22 × kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection)
17:58:24 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 260 seconds)
17:58:57 califax joins (~califax@user/califx)
17:59:01 lyle joins (~lyle@104.246.145.85)
18:01:26 × califax quits (~califax@user/califx) (Remote host closed the connection)
18:02:01 × patrl quits (~patrl@user/patrl) (Quit: WeeChat 3.8)
18:02:26 × mechap quits (~mechap@user/mechap) (Read error: Connection reset by peer)
18:03:13 califax joins (~califax@user/califx)
18:04:10 × califax quits (~califax@user/califx) (Remote host closed the connection)
18:04:27 × avicenzi quits (~avicenzi@2a00:ca8:a1f:b004::c32) (Ping timeout: 248 seconds)
18:05:34 leahclarm joins (~leahclarm@91.110.109.171)
18:06:24 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
18:06:51 califax joins (~califax@user/califx)
18:08:24 mechap joins (~mechap@user/mechap)
18:09:14 × rettahcay quits (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) (Quit: leaving)
18:09:33 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
18:10:52 × rettahcay quits (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) (Client Quit)
18:12:00 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
18:12:59 rettahcay parts (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) ()
18:14:03 × califax quits (~califax@user/califx) (Remote host closed the connection)
18:15:42 califax joins (~califax@user/califx)
18:15:44 <lyle> I'm trying to find a library to parse http requests and responses. Here's my attempt at using a library called hweblib: https://paste.tomsmeding.com/CB3bFz3n but it doesn't let me access the fields since no accessor functions are exported. Do I just have a fundamental misunderstanding of how to use this library, or is there another library I should be using?
18:17:02 econo joins (uid147250@user/econo)
18:23:27 <ddellacosta> lyle: did you try including the Response data constructor from Network.Types? I think you may just be missing that import
18:24:05 <ddellacosta> https://hackage.haskell.org/package/hweblib-0.6.3/docs/Network-Types.html#t:Response
18:25:47 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:27:06 <jil> hello
18:27:13 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
18:27:25 <jil> what's the meaning of .\/ as in https://github.com/input-output-hk/plutus-pioneer-program/blob/main/code/week02/src/Week02/Gift.hs#L48
18:30:14 <geekosaur> it is presumably defined by Plutus, since I don't see it on hackage
18:30:14 × Vajb quits (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686) (Read error: Connection reset by peer)
18:30:25 Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
18:30:39 <lyle> ddellacosta: thanks! That was it. I never would have thought to do that since network-types is not listed as a dependency for hweblib.
18:31:39 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 248 seconds)
18:32:14 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 260 seconds)
18:32:19 thongpv joins (~thongpv87@123.28.243.28)
18:33:23 cheater_ joins (~Username@user/cheater)
18:33:34 <lyle> but I suppose it was right in the error in the paste so I guess lesson learned--I actually need to read the error!
18:34:53 × leahclarm quits (~leahclarm@91.110.109.171) (Remote host closed the connection)
18:35:33 leahclarm joins (~leahclarm@91.110.109.171)
18:35:55 × cheater quits (~Username@user/cheater) (Ping timeout: 248 seconds)
18:35:58 cheater_ is now known as cheater
18:37:39 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:c5c6:bf70:ccc5:fecd) (Quit: use-value)
18:37:51 × leahclarm quits (~leahclarm@91.110.109.171) (Remote host closed the connection)
18:38:06 leahclarm joins (~leahclarm@91.110.109.171)
18:38:17 × leahclarm quits (~leahclarm@91.110.109.171) (Remote host closed the connection)
18:38:41 leahclarm joins (~leahclarm@91.110.109.171)
18:38:53 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
18:39:27 × thongpv quits (~thongpv87@123.28.243.28) (Ping timeout: 248 seconds)
18:46:06 <ddellacosta> lyle: awesome, glad it helped!
18:47:07 × leahclarm quits (~leahclarm@91.110.109.171) (Remote host closed the connection)
18:47:20 leahclarm joins (~leahclarm@91.110.109.171)
18:47:59 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
18:48:08 × leahclarm quits (~leahclarm@91.110.109.171) (Remote host closed the connection)
18:48:23 leahclarm joins (~leahclarm@91.110.109.171)
18:51:55 Mahi joins (~Mahi@91-159-147-164.elisa-laajakaista.fi)
18:52:48 <tomsmeding> lyle: note that Network.Types is a _module_ within the _package_ hweblib
18:53:03 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
18:53:12 <tomsmeding> there is no _package_ named network-types involved here
18:53:18 <Mahi> Hi, I'm trying to implement a phonebook using binary tree, but the automatic testers at the university are not passing. I've included my code and the difference in outputs here: https://paste.tomsmeding.com/obSjuwK3
18:53:42 <Mahi> Any ideas what's wrong with my code? Nobody else is complaining with issues with the tester
18:54:50 ft joins (~ft@p508dbcc4.dip0.t-ipconnect.de)
18:55:22 <Mahi> The `Phone_type2` is provided by teachers and the function `readPhone` converts strings to a `Phone` object
18:56:00 <Mahi> Also the `data Phonebook` is provided by teachers
18:56:20 <Mahi> I don't understand how my code is adding some phone numbers twice with different types :/
18:56:35 <tomsmeding> Mahi: is the - version your output or the + version?
18:56:49 <Mahi> Mine is the `-` and the expected is the `+`
18:57:32 <Mahi> The task explicitly mentions "In data Phonebook statement there is a list of phones for a name - so when adding an entry with an existing name it should be added to the list rather than creating a new node."
18:57:55 dcoutts_ joins (~duncan@host86-155-218-146.range86-155.btcentralplus.com)
18:58:27 freeside joins (~mengwong@103.252.202.170)
18:58:53 <tomsmeding> Mahi: those "+358 123456789 (PrivateMobile)" things are strings?
18:59:01 × ddellacosta quits (~ddellacos@143.244.47.81) (Quit: WeeChat 3.7.1)
18:59:02 <tomsmeding> oh no Phone is a datatype
18:59:07 jmdaemon joins (~jmdaemon@user/jmdaemon)
18:59:20 ddellacosta joins (~ddellacos@143.244.47.81)
18:59:22 <davean> Mahi: Are you just missing something to see if you've already added it?
18:59:28 <tomsmeding> are you sure that you shouldn't deduplicate on the actual numbers? i.e. add new numbers, but if the number is already there, replace the existing entry
18:59:51 <Mahi> now that you ask it like that, no I'm not sure :D
19:00:33 × dcoutts quits (~duncan@host86-155-218-146.range86-155.btcentralplus.com) (Ping timeout: 252 seconds)
19:00:36 <Mahi> but we haven't learned how to replace an element in a list yet so I'm not sure if that's the issue
19:01:59 <Mahi> I'll try to see if I can do it :D
19:03:30 × Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
19:03:40 dcoutts joins (~duncan@host86-155-218-146.range86-155.btcentralplus.com)
19:03:49 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:03:59 × dcoutts_ quits (~duncan@host86-155-218-146.range86-155.btcentralplus.com) (Ping timeout: 248 seconds)
19:04:01 Vajb joins (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686)
19:10:51 <jean-paul[m]> > jean-paul.: Not sure if it exactly fits your use case, but parser-combinators has Control.Monad.Permutation for parsing any permutation of a fixed number of fields
19:10:51 <jean-paul[m]> merijn Thanks, this worked very nicely and cut a hundred lines off my parser.
19:10:52 <lambdabot> <hint>:1:54: error: parse error on input ‘,’
19:11:02 <Mahi> Oh wow it passed now, thanks guys! tomsmeding davean
19:11:24 <Mahi> They didn't even expect me to replace the existing number, they expected me to not do anything if a number already exists... but it's not mentioned anywhere in the task lol
19:11:43 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
19:12:11 <jean-paul[m]> fwiw https://gitlab.com/exarkun/chk.hs/-/blob/parse-uriextension/src/Tahoe/CHK/URIExtension.hs#L121-135
19:12:37 <tomsmeding> Mahi: "not mentioned anywhere" that sounds like a polite email to the lecturer is in order, suggesting either you've missed something or a sentence is missing from the assignment spec :)
19:12:46 <tomsmeding> but nice
19:12:57 <Mahi> Yes you're right, I'll do that :) Thank you very much!
19:13:01 × Mahi quits (~Mahi@91-159-147-164.elisa-laajakaista.fi) (Quit: Client closed)
19:13:08 × leahclarm quits (~leahclarm@91.110.109.171) (Remote host closed the connection)
19:13:23 leahclarm joins (~leahclarm@91.110.109.171)
19:20:07 kurbus joins (~kurbus@user/kurbus)
19:24:28 rekahsoft joins (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca)
19:24:35 × rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Remote host closed the connection)
19:28:56 so-offish joins (~so-offish@2610:148:610:b66:21d9:e18a:fd7a:ab8)
19:29:11 rekahsoft joins (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca)
19:30:21 × kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
19:32:04 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
19:32:37 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:9525:b972:bf3b:9db0) (Remote host closed the connection)
19:33:31 × rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Ping timeout: 248 seconds)
19:37:06 kayvan joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
19:37:47 × trev quits (~trev@user/trev) (Remote host closed the connection)
19:38:45 <kayvan> 11:37 *** NAMES @ChanServ [_________] [exa] [itchyjunk] [Leary] [Ristovski] ___ _________ __monty__ _leo___ _xor aaRabbit[m] aaronm04 aaronv abrar absence acarrico acertain acidsys acro adamCS Adeon adium Adran aforemny agander_m AkechiShiro akegalj aku_ alanz albet70 Aleksejs Alex_test alexfmpe[m] AlexNoo AlexZenon alinab alloca alp ames AmyMalik analoq anatta anderson andjjj23 andreas303 AndreasK andrewboltachev A
19:38:45 <kayvan> ngelz Ankhers anpad anthezium apache2 APic arcadewise ario aristid arkeet Arsen Artem[m] asm astra Athas auri avpx_ aweinstock AWizzArd Axman6 azimut azure_vermilion b0o b20n bah barrucadu bastelfreak Batzy bbhoss bcoppens beaky Benzi-Junior berberman beteigeuze bgamari bgamari[m] bgs biberu bigtestaccount[m bjobjo bjs Boarders___ bob bollu bonz060 bookshelfdave bradparker bsima bsima1 buhman Buliarous burakcan- bw
19:38:45 <kayvan> bwe byorgey ByronJohnson c_wraith caasih Cale califax carbolymer carter CAT_S catern caubert cawfee cbarrett cdsmith chaitlatte0 cheater Cheery chessai chexum chreekat christiaanb christiansen[m] Christoph[m] chymera cjay Clint Clinton[m] cln codaraxis codedmart cods conjunctive coot cpli crns cross cstm[m] cyphase dagi41990 danso darkling davean davetapley davl dcoutts ddb ddellacosta defanor degraafk Deide dequbed
19:38:45 <kayvan> dextaa dexter1 df dfg dfordivam1 dgb8 dgpratt[m] dibblego DigitalKiwi disco-dave[m] dispater dminuoso dmj` dolio Dominik[m]12 dragestil drdo drewolson drlkf dsal dtman34 dumptruckman dunj3 dy dykai[m] Dykam dyniec earthy ec_ echoreply econo edm edmundnoble edwardk edwtjo Ekho eL_Bart0 eldritch eldritchcookie[4 elevenkb[m] ell elvishjerricco emergence energizer ericjmorey[m] ericson2314 erisco EsoAlgo8 esph EvanR ev
19:38:45 <kayvan> anrelf ezzieyguywuf famubu[m] Fangs farn_ feliix42_ fendor[m] Feuermagier fgaz fiddlerwoaroof_ filwisher FinnElija finsternis Firedancer Flow fluffyballoon flukiluke fluxit forell_ foul_owl fr33domlover Franciman freeside ft FurudeRika[m] fvr gabiruh gawen gaze___ gdd geekosaur geekosaur[m] gentauro ggb ghostbuster glguy glider glowcoil gmc_ gmg gnyeki GoldsteinQ gonz_______ goober Goodbye_Vincent gqplox[m] grfn Gue
19:38:45 <kayvan> st3728 Guest585 Guest7839 Guest809 Guillaum[m] h2t haasn` Hafydd hamishmack hammond_ hank_ haritz haskl haveo_ hays heartburn heath Hecate hendi henrytill hexagoxel hexeme_ hexology hgolden hiredman hltk hnOsmium0001 Hobbyboy hololeap hongminhee hook54321 hounded hounded_woodstoc hpc hrberg hueso hugo hussam idnar Igloo ikervagyok[m] img immae incertia infinity0 Inst_ int-e integral intelligent_boat inversed iphy ir
19:38:46 <kayvan> cbrowse_tom irrgit_ iteratee ix jackdk jackhill jakalx jakesyl____ jakzale jao jbalint jean-paul[m] JensPetersen[m] jero98772 jespada jil jimki jinsl- jinsun jjhoo_ jkoshy jle` jleightcap jludwig jmcantrell jmct jmdaemon jneira[m] jocke-l JoelMcCracken joeyh johnjaye johnw Jon JonathanWatson[m jonathanx Jonno_FTW jonrh jpds jrm JSharp jtmar juri_ justache jwiegley kadobanana Kamuela kaol_ kaskal Katarushisu kawen ka
19:38:46 <kayvan> wzeg_ kayvan kee kimiamania kitzman kmein koala_man koolazer kosmikus kosmikus[m] koz kraftwerk28 kristjansson_ kritzefitz krjst kronicma1 L29Ah lagash_ lally laman1 lambdabot LambdaDuck lambdap237 landonf Las[m] lawt lbseale leah2 leahclarm lechner leeb lexi-lambda lieven lightandlight liskin lisq litharge Logio loonycyborg Lord_of_Life lottaquestions_ Luj lukec lyle lyxia m1dnight m5zs7k machinedgod madnight Maeda
19:38:46 <kayvan> maerwald maerwald[m] malte MangoIV[m] ManofLetters[m] manwithluck maralorn marienz markasoftware MasseR46 masterbuilder matijja matthews Matthew|m mauke Maxdamantus maxfan8_ mc47 mcfrdy mcglk Me-me mechap meejah megaTherion megeve mei meinside melonai meooow merijn mesaoptimizer mhatta mht-wtf Miao[m] michalz micro Midjak mikko mimi1vx[m] mimmy mira MironZ mixphix mjs2600 mmaruseacph2 mniip Momentum mon_aaraj monoc
19:38:47 <kayvan> hrom MonsoonSecrecy motherfsck Moyst mrmonday mrvdb mtjm mustafa mxs myme n1essa Natch natechan nattiestnate natto17 ncf nckx nek0 NemesisD nerdypepper nicm[m] nicole NiKaN niko nisstyre noctuks noctux Noinia nomagno nonzen noteness notzmv nrr____ nshepperd nshepperd2 nullsh nurupo oats Oden[m] ongy[m] opqdonut Orbstheorem orcus ormaaj ouroboros ozkutuk[m] p3n paddymahoney parseval Patternmaster peddie Pent pepeibor
19:38:48 <kayvan> ra perrierjouet peutri phileasfogg Philonous phma PHO` pie_ pieguy128_ piele pierrot pja pjlsergeant__ poljar polux PotatoGim probie ProofTechnique psydroid Putonlalla q0r qhong_ Qudit quintasan_ Raito_Bezarius ralu1 Ram-Z Ranhir raoul raym rburkholder red-snail1 Rembane rembo10 remedan remexre rendar riatre_ ridcully_ ringo__ RMSBach robbert-vdh robertm rodental romes[m] rubin55 rune russruss S11001001 s4msung sa s
19:38:48 <kayvan> a1 sajith samhh sammelweis SanchayanMaity santiagopim saolsen Sauvin sayola scav Sciencentistguy sclv SeanKing[m] sefidel segfaultfizzbuzz SethTisue sgarcia Sgeo shachaf shailangsa shawwwn shinjipf shreyasminocha shriekingnoise simpleauthority ski slack1256 sm sm2n sm[i] smichel17[m] smol-hors snek so-offish SoF son0p sphynx srid[m] srk SrPx sshine statusbot stefan-_ steve[m]1 stiell stilgart sudden superbil supersv
19:38:55 ChanServ sets mode +o geekosaur
19:38:55 × kayvan quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection)
19:39:01 geekosaur sets mode +b kayvan!*@*
19:39:13 <johnjaye> oh. i thought someone actually wanted to establish genuine human connection with me
19:39:23 <cheater> same. sadge :(
19:39:27 <scav> rookie mistake
19:39:30 geekosaur sets mode -o geekosaur
19:39:30 bookshelfdave parts (sid28102@2a03:5180:f:3::6dc6) ()
19:39:33 kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
19:39:37 <jean-paul[m]> I will talk to you johnjaye
19:39:38 <jean-paul[m]> Do you like haskell
19:39:38 <anatta> this *is* the most genuine human connection I've had this week
19:39:41 <geekosaur> of course they stopped and left as soon as I opped
19:39:42 <cheater> geekosaur: what if it was a call for help
19:39:53 <johnjaye> i like haskell. but i haven't really done a compiler in haskell.
19:40:01 <johnjaye> i feel like to *really* get a language you have to make a compiler in it
19:40:07 <opqdonut> ah, copypasting the channel member list
19:40:10 <opqdonut> that takes me back
19:40:10 <cheater> geekosaur: he stopped long before. he got throttled by the server. it's probably just someone who mis-pasted
19:40:19 <nomagno> This MF can't even write me a whole custom sentence
19:40:45 <johnjaye> i mean we're all doomed due to chatGPT anyway. there will be no way to determine who is and isn't a human
19:41:01 <anatta> johnjaye: I don't know - I've made a compiler in Haskell, but I still don't understand anything
19:41:05 <kee> johnjaye: Disregard that. Talk about lawnmowers.
19:41:06 <scav> unless you bring up a subject from after 2021 :)
19:41:09 <hussam> What? Who dares disturb my slumber?
19:41:42 <sayola> gonna exchange private keys before ai takes over and hope we never lose them or we lose human credibility lol
19:41:47 <nomagno> I don't even know why I'm on here, I barely understood Learn You a Haskell and promptly forgot to practice further
19:41:53 <anatta> But then it was just for an extremely basic language and not anything serious
19:42:13 <defanor> Exchanging private keys sounds like something ChatGPT would say!
19:42:27 <johnjaye> oh yeah i forgot about public/private keys. that might be a potential avenue for proving your humanity
19:42:42 king_gs joins (~Thunderbi@187.201.41.239)
19:42:46 <johnjaye> but i guess ultimately it has to be outside IRC because inside irc is only text, in which chatGPT reigns supreme.
19:42:53 <so-offish> I didn't like Learn You a Haskell. Hopefully there are better recommendations in here...
19:43:32 <sayola> i dunno. LYaH worked for me back then. it was somewhat overly wordy perhaps.
19:43:33 <johnjaye> there's like 2 or 3 haskell tutorials. learn x in y minutes was one. i forgot the 3rd one
19:43:33 <anatta> I hate lyah
19:43:38 <nomagno> I just learned Scheme instead, helped me get to grips with FP better. I'm probably way more ready for Haskell now
19:43:42 <anatta> I like haskell from first principle
19:43:45 <anatta> or whatever it's called
19:43:59 <sayola> i think it helps to know from what background you coming
19:43:59 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
19:44:07 <anatta> but I think it's personal what style resonates the most with you
19:44:40 <anatta> for me Lyah felt like a list of functions being thrown in my face, no exercises, etc.
19:44:43 <L29Ah> johnjaye: just ask it what weighs more, a kilogram of feathers or a kilogram of steel
19:44:47 × so-offish quits (~so-offish@2610:148:610:b66:21d9:e18a:fd7a:ab8) (Quit: Leaving)
19:45:03 <anatta> I managed to mess chatGPT up today by asking about NFA:s and regular expressions
19:45:19 <Hecate> hohai
19:45:27 <[exa]> o/
19:45:31 <Hecate> too bad the bot didn't want to hear about my latest projects :( :(
19:45:31 <anatta> I asked it to make an NFA out of a regex, and it gave me something competely wrong - I told it that it was wrong, and it gave me something else that was wrong
19:45:36 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 248 seconds)
19:45:36 <nomagno> anatta: oh hey, I need help with that!
19:45:41 <nomagno> ... Now I know not to ask chatGPT
19:45:55 <[exa]> anatta: I found that encoding any problem to a wording that's not common kinda causes it to lose much memory
19:46:02 <anatta> then I asked it to show the path through the NFA with a certain string
19:46:07 <anatta> it gave me a path to an accepting state
19:46:13 <anatta> using transitions that weren't in the NFA
19:46:15 <[exa]> nomagno: feel free in #-offtopic btw
19:46:30 <[exa]> oh cool :D
19:47:23 <AndreasK> ChatGPT seems to be like a student who memorized all the materials but understood none of it
19:47:23 <anatta> yeah, it felt really weird, like it kept arguing it had correct answers despite the answers being obviously wrong
19:48:06 <darkling> AndreasK: That's *exactly* how I read it most of the time.
19:48:16 × kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Quit: ERC 5.4 (IRC client for GNU Emacs 28.1))
19:48:19 <anatta> it wasn't like... slightly wrong in some obscure way, what it was giving me just straight up didn't make any sense
19:48:35 <AndreasK> That's my experience with that sort of stundent too at time :D
19:48:43 <byorgey> AndreasK: as a teacher, I can confirm that is exactly what it is like =)
19:48:51 kayvank joins (~user@52-119-115-185.public.monkeybrains.net)
19:48:54 <geekosaur> was goona say, sounds like it's about average for regex 🙂
19:49:09 <[exa]> someone should ask it about a maze-style problem or so
19:49:17 <AndreasK> I think the bot is back
19:49:19 ChanServ sets mode +o litharge
19:49:19 litharge sets mode -bo kayvan!*@* litharge
19:49:44 <Hecate> blanket k-line on monkeybrains.net ?
19:49:46 <Hecate> :p
19:49:52 <tomsmeding> I love how I actually see a bunch of nicks talking now that I've never seen before in the channel
19:49:56 <mikko> hello kayvank i believe you had something you wanted to say to me?
19:50:01 <tomsmeding> "ping the world" actually did something nice
19:50:10 <AndreasK> :)
19:50:18 werneta joins (~werneta@137.79.219.74)
19:50:26 <[exa]> tomsmeding: an absolute highlight of the evening
19:51:15 <AndreasK> I'm sure in a few years people at the edge will figure out to loop tyoecheckers etc. into things like chatGTP and then it likely becomes a really good tool for churning out boring code
19:51:20 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
19:52:20 <Hecate> good evening tomsmeding
19:52:29 <Hecate> so, how's your playground holding with all that Mastodon trafic? :p
19:52:43 <anatta> AndreasK: It's also possible that knowing what it's good at and what it's bad at will become a useful skill in itself
19:53:07 <tomsmeding> Hecate: honestly it's idling lol
19:53:13 <tomsmeding> Hecate: https://play-haskell.tomsmeding.com/srv_static/usage_graph.png
19:53:33 <tomsmeding> iirc every green pixel is a compile request, every red pixel is one second of worker cpu time
19:53:34 × kayvank quits (~user@52-119-115-185.public.monkeybrains.net) (Client Quit)
19:53:45 <tomsmeding> green covers red because I was too lazy to make a proper graph
19:54:36 <mauke> what chatGPT is good at is generating plausible looking bullshit and presenting it with confidence
19:54:52 <tomsmeding> which is actually useful for certain purposes
19:54:55 kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
19:54:58 <tomsmeding> the "looking plausible" bit
19:55:20 × kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Client Quit)
19:55:26 <mauke> yeah, but it's pretty much the opposite of what you want for software development
19:55:32 <tomsmeding> yes
19:55:46 <johnjaye> mauke: sounds like those top 10 articles you see in browsers are pretty much covered then
19:55:49 kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
19:56:26 <johnjaye> you'll never be able to get a good recipe for a pina colada again because all you'll get is something 'plausible'
19:58:27 <mikko> mauke: but it's really great for when you only have a vague human language description of the thing you're looking for, and you just want some example so you can start looking at the actual docs
19:58:35 Feuermagier_ joins (~Feuermagi@user/feuermagier)
19:58:52 <mikko> as long as you are aware of what NOT to use chatGPT for it's a really useful tool
20:00:30 <Hecate> tomsmeding: hehe, nice
20:00:55 pernzs joins (~pernzs@101.175.168.100)
20:01:08 <jil> geekosaur
20:01:15 × Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 248 seconds)
20:01:42 <jil> geekosaur thank you for you message.
20:02:21 <tomsmeding> Hecate: I lied, number of compile requests is foreground red, server-to-worker request time (~ worker cpu time) in seconds is background green
20:02:28 <anatta> I'm just happy it's easily confused: https://i.imgur.com/K9qoVqB.png
20:02:30 <tomsmeding> no
20:02:40 <tomsmeding> _background_ red, _foreground_ green
20:02:45 <tomsmeding> aah I'm tired I'm going to bed bye
20:02:53 <anatta> So when the inevitable robot uprising occurs, and terminators come knocking at my door, I can just tell them I'm not at home, and they'll happily go away
20:03:27 <darkling> anatta: Don't forget to wear the t-shirt reading "fridge". Just in case.
20:04:47 ajf___[m] joins (~ajfmatrix@2001:470:69fc:105::2:5be3)
20:04:54 <anatta> many have said I could easily be confused for a fridge
20:05:31 × leahclarm quits (~leahclarm@91.110.109.171) (Remote host closed the connection)
20:06:23 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
20:07:24 × califax quits (~califax@user/califx) (Remote host closed the connection)
20:08:23 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:9525:b972:bf3b:9db0)
20:08:31 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
20:09:23 califax joins (~califax@user/califx)
20:12:59 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 248 seconds)
20:16:06 <[exa]> there were the convolution-killing t-shirts somewhere on the internet, about time to buy some I guess
20:16:52 <hammond_> lol
20:16:55 <hammond_> omg
20:18:31 <[exa]> ah here https://arxiv.org/pdf/1910.11099.pdf
20:19:08 <mauke> https://www.lesswrong.com/posts/aPeJE8bSo6rAFoLqg/solidgoldmagikarp-plus-prompt-generation
20:19:28 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:19:32 × pernzs quits (~pernzs@101.175.168.100) (Quit: Client closed)
20:19:37 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
20:19:58 <akegalj> Hi, in this article https://simonmar.github.io/posts/2018-06-20-Finding-fixing-space-leaks.html simon is saying "To avoid this leak, we could pattern-match on pls eagerly rather than doing the lazy record selection". There is a broken link unfortunatelly so can't se the source. How to pattern match eagerly on a record? Would `case pls of LM {closure_env} -> ...` work in this case?
20:20:33 <[exa]> mauke: ok wow
20:22:41 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:9525:b972:bf3b:9db0) (Remote host closed the connection)
20:23:30 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:24:16 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 268 seconds)
20:24:59 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
20:25:26 <AndreasK> akegalj: The commit in question is https://github.com/ghc/ghc/commit/71f6b18ba365da9ee4795f6cbce6ec9f1bfe95e8 if that helps
20:25:27 pernzs joins (~pernzs@101.175.168.100)
20:27:08 <AndreasK> I think your pattern match should work too
20:27:23 × king_gs quits (~Thunderbi@187.201.41.239) (Ping timeout: 248 seconds)
20:28:51 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
20:29:36 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
20:34:01 codaraxis__ joins (~codaraxis@user/codaraxis)
20:34:10 <akegalj> AndreasK: thanks
20:34:42 biberu joins (~biberu@user/biberu)
20:38:03 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 248 seconds)
20:38:03 × codaraxis quits (~codaraxis@user/codaraxis) (Ping timeout: 248 seconds)
20:38:47 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
20:40:55 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
20:42:19 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
20:42:51 <carter> That solid gold magikarp bit is nuts
20:43:08 <ongy[m]> :( I thought someone wanted to talk to me
20:49:57 kurbus joins (~kurbus@user/kurbus)
20:50:36 <akegalj> AndreasK: In the fix you linked above, if L174 was defined as `let new_ce = extendClosureEnv (closure_env pls) new_bindings` would it still leak? (if he didn't pattern match on L173)
20:53:17 <akegalj> also, would just doing `let !new_ce = extendClosureEnv (closure_env pls) new_bindings` resolve the leak (without forcing at the end with `return $! ...`)
20:57:35 × kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
21:00:51 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 255 seconds)
21:05:07 <AndreasK> If `let !new_ce = extendClosureEnv (closure_env pls) new_binding` leaks should depend on the implementation of extendClosureEnv
21:05:34 <AndreasK> If extendClosureEnv forces the first argument that should be fine
21:11:27 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
21:11:38 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 255 seconds)
21:17:33 × pernzs quits (~pernzs@101.175.168.100) (Ping timeout: 260 seconds)
21:19:46 <ddellacosta> is there a way to pass test-options to cabal in a nix flake? I'm trying to pass a filter to tasty
21:20:24 leahclarm joins (~leahclarm@91.110.109.171)
21:20:31 pernzs joins (~pernzs@101.175.168.100)
21:21:28 <akegalj> ok, that makes sense. Although, I am not yet clear how `return $! pls {...}` is necessary as it will be forced only to its whnf, so it won't force any of record fields... Aha, I guess $! will force record update and release `pls` binding from record update (`pls {...}`). I wonder if the same would work if we used different syntax `return $! ConstructorName { field1 = fielf1 pls, field2 = field2 pls, ...}
21:21:34 <akegalj> . My intuition was that $! would force only to whnf so it wouldn't force constructor/record fields
21:22:26 pavonia joins (~user@user/siracusa)
21:23:44 freeside joins (~mengwong@103.252.202.170)
21:27:39 × zeenk quits (~zeenk@2a02:2f04:a214:1e00::7fe) (Quit: Konversation terminated!)
21:28:17 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
21:29:00 × zer0bitz quits (~zer0bitz@2001:2003:f443:d600:d5e7:46b7:b251:b47a) (Read error: Connection reset by peer)
21:31:06 × lyle quits (~lyle@104.246.145.85) (Quit: WeeChat 3.8)
21:31:22 zer0bitz joins (~zer0bitz@2001:2003:f443:d600:59df:db32:bf45:bad2)
21:32:26 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:33:15 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
21:34:24 × zer0bitz quits (~zer0bitz@2001:2003:f443:d600:59df:db32:bf45:bad2) (Read error: Connection reset by peer)
21:36:33 dsrt^ joins (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net)
21:39:10 × leahclarm quits (~leahclarm@91.110.109.171) (Remote host closed the connection)
21:41:33 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
21:41:39 zer0bitz joins (~zer0bitz@2001:2003:f443:d600:7cbf:c51:a17d:df99)
21:42:48 × kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection)
21:43:24 kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
21:45:21 eruditass joins (uid248673@id-248673.uxbridge.irccloud.com)
21:45:54 freeside joins (~mengwong@103.252.202.170)
21:46:27 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
21:47:29 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer)
21:48:13 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
21:48:44 emmanuelux joins (~emmanuelu@user/emmanuelux)
21:50:53 × zer0bitz quits (~zer0bitz@2001:2003:f443:d600:7cbf:c51:a17d:df99) (Read error: Connection reset by peer)
21:51:49 × _leo___ quits (~emmanuelu@user/emmanuelux) (Ping timeout: 252 seconds)
21:52:07 × kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Quit: ERC 5.4 (IRC client for GNU Emacs 28.1))
21:52:38 kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
21:53:12 × kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection)
21:53:29 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
21:53:37 kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net)
22:00:08 leahclarm joins (~leahclarm@91.110.109.171)
22:00:27 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
22:02:28 × pernzs quits (~pernzs@101.175.168.100) (Ping timeout: 260 seconds)
22:03:43 × notzmv quits (~zmv@user/notzmv) (Remote host closed the connection)
22:04:49 × leahclarm quits (~leahclarm@91.110.109.171) (Remote host closed the connection)
22:05:04 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
22:06:10 leahclarm joins (~leahclarm@91.110.109.171)
22:06:19 × leahclarm quits (~leahclarm@91.110.109.171) (Client Quit)
22:07:33 chexum_ joins (~quassel@gateway/tor-sasl/chexum)
22:08:26 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 255 seconds)
22:09:06 × thegeekinside quits (~thegeekin@189.180.83.186) (Ping timeout: 268 seconds)
22:09:45 <AndreasK> akegalj: I had assumed it's a strict field but doesn't seem to be so it's a bit tricker
22:10:30 × michalz quits (~michalz@185.246.204.101) (Remote host closed the connection)
22:11:50 <AndreasK> Per the report foo { bar = baz} get's desugared to `case foo of Con fld1 ... fldn -> Con { fld1 = fld1, ... , bar = bar,... fldn = fldn }
22:12:34 <AndreasK> So that means we fore the deconstruction of old ps, allowing us to gc the old value of the closure_env value immediately.
22:16:00 × segfaultfizzbuzz quits (~segfaultf@108.211.201.53) (Ping timeout: 248 seconds)
22:20:55 <AndreasK> They key take away is that record updates are desugared to one case projecting out all the fields and reconstructing the constructor(s) in the alternative. Rather then being desugared to a constructor allocation and a lot of field selector applications. In the later case the bang wouldn't do anything.
22:20:58 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 252 seconds)
22:22:56 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
22:23:02 <akegalj> ok that makes now. If record update is desugared as case split, then I think $! in his case isn't necessary as case will eagarly evaluate. So I think `return (pls {..})` should work the same. `return $! pls {..}` looks nicer, but here we are using extra `seq` on already evaluated form (case expression) ... and that might be unnecessary (and maybe slower?)
22:24:25 <akegalj> in anyway, thanks for guidance - my mind is in peace now
22:26:54 thegeekinside joins (~thegeekin@189.180.83.186)
22:28:58 × Batzy quits (~quassel@user/batzy) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
22:30:12 Batzy joins (~quassel@user/batzy)
22:32:22 Guest|4 joins (~Guest|4@ip-86-49-241-234.bb.vodafone.cz)
22:32:49 × Guest|4 quits (~Guest|4@ip-86-49-241-234.bb.vodafone.cz) (Client Quit)
22:35:19 × mcglk quits (~mcglk@131.191.49.120) (Read error: Connection reset by peer)
22:36:27 × johnjaye quits (~pi@173.209.64.74) (Ping timeout: 248 seconds)
22:36:51 notzmv joins (~zmv@user/notzmv)
22:38:26 johnjaye joins (~pi@173.209.64.74)
22:38:36 <mauke> return doesn't force its argument, so why would $! be redundant?
22:39:35 <AndreasK> Whaut mauke said + case expressions are not evaluated forms.
22:40:01 <AndreasK> Well I guess technically it depends on the exact case, but ususally they aren't
22:40:43 <akegalj> right, so pls might be a thunk and it is evaluated with $!
22:43:29 segfaultfizzbuzz joins (~segfaultf@108.211.201.53)
22:44:48 mcglk joins (~mcglk@131.191.49.120)
22:50:48 opticblast joins (~Thunderbi@172.58.82.191)
22:51:55 × mechap quits (~mechap@user/mechap) (Ping timeout: 248 seconds)
22:53:09 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
22:53:48 mechap joins (~mechap@user/mechap)
22:54:00 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:9525:b972:bf3b:9db0)
22:54:35 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 248 seconds)
22:58:17 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:9525:b972:bf3b:9db0) (Ping timeout: 255 seconds)
23:01:14 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 3.8)
23:01:23 Intel8086 joins (~Intel8086@user/Intel8086)
23:01:43 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
23:01:53 patrl joins (~patrl@user/patrl)
23:04:11 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 248 seconds)
23:04:26 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
23:04:31 × patrl quits (~patrl@user/patrl) (Client Quit)
23:05:32 freeside joins (~mengwong@103.252.202.170)
23:05:45 × Ranhir quits (~Ranhir@157.97.53.139) (Remote host closed the connection)
23:06:17 <johnjaye> is there something like foldl that can generate the elements of a list
23:06:35 <johnjaye> like if i want to use a rule like i-> i + 1 to make a list of numbers 1 to 10
23:06:57 <Rembane> johnjaye: iterate from Data.List could do almost that.
23:07:17 <Rembane> > [1..10] -- but also this, johnjaye
23:07:19 <lambdabot> [1,2,3,4,5,6,7,8,9,10]
23:07:33 <geekosaur> :t unfoldr
23:07:35 <johnjaye> right but i mean something like [2*i for i in range(10)] from python
23:07:35 <lambdabot> error:
23:07:35 <lambdabot> Ambiguous occurrence ‘unfoldr’
23:07:35 <lambdabot> It could refer to
23:07:44 <geekosaur> :t Prelude.unfoldr
23:07:45 <lambdabot> error:
23:07:45 <lambdabot> Not in scope: ‘Prelude.unfoldr’
23:07:45 <lambdabot> Perhaps you meant one of these:
23:08:06 Ranhir joins (~Ranhir@157.97.53.139)
23:08:30 <AndreasK> > [2*i | i <- 1 .. 10]
23:08:32 <lambdabot> <hint>:1:15: error: parse error on input ‘..’
23:08:39 <AndreasK> > [2*i | i <- [1 .. 10]]
23:08:40 <lambdabot> [2,4,6,8,10,12,14,16,18,20]
23:08:44 <mauke> :t scanl
23:08:44 <lambdabot> error:
23:08:44 <lambdabot> Ambiguous occurrence ‘scanl’
23:08:44 <lambdabot> It could refer to
23:09:08 <geekosaur> looks like it moved and renamed
23:09:10 <Rembane> It's so ambigious that lambdabot doesn't know what it could refer to...
23:09:12 <geekosaur> :t unfold
23:09:13 <lambdabot> (a -> (b, Maybe a)) -> a -> NonEmpty b
23:12:08 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:16:35 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:9525:b972:bf3b:9db0)
23:20:47 <jackdk> :t Data.List.scanl
23:20:48 <lambdabot> (b -> a -> b) -> b -> [a] -> [b]
23:21:26 dudek joins (~dudek@185.150.236.131)
23:25:39 king_gs joins (~Thunderbi@187.201.41.239)
23:32:06 L29Ah joins (~L29Ah@wikipedia/L29Ah)
23:34:43 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:37:28 × akegalj quits (~akegalj@37-128.dsl.iskon.hr) (Quit: leaving)
23:38:48 × dudek quits (~dudek@185.150.236.131) (Quit: Leaving)
23:42:55 × kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Ping timeout: 248 seconds)
23:44:38 × crns quits (~netcrns@user/crns) (Ping timeout: 255 seconds)
23:50:21 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
23:50:54 accord joins (uid568320@2a03:5180:f:4::8:ac00)
23:54:35 falafel joins (~falafel@2607:fb91:143f:e47f:7c10:9e2f:b315:833b)
23:55:10 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)

All times are in UTC on 2023-02-08.