Home liberachat/#haskell: Logs Calendar

Logs on 2021-12-28 (liberachat/#haskell)

00:00:38 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:00:39 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:01:58 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:01:59 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:06:42 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:07:43 otherwise joins (~otherwise@2601:602:880:90f0:ec9b:47e1:eb31:33d5)
00:09:36 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:09:37 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:12:49 ksqsf joins (~user@134.209.106.31)
00:12:52 <iphy> EvanR: https://github.com/iphydf/hs-cimple/blob/fix/test/Language/Cimple/ASTSpec.hs#L38
00:12:57 <iphy> EvanR: this is getting unwieldy :P
00:13:08 <iphy> it's kind of nice, but also kind of really not nice
00:20:02 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:20:03 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:20:25 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:20:25 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
00:20:25 wroathe joins (~wroathe@user/wroathe)
00:20:28 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
00:22:17 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
00:22:58 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
00:27:19 × max22- quits (~maxime@2a01cb0883359800f5f346d928347cfb.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
00:28:42 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:28:43 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:32:05 <EvanR> yeah
00:32:17 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:32:19 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:32:46 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:32:50 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:33:42 <EvanR> view patterns?
00:34:57 <pavonia> qrpnxz: Something is wrong with your connection
00:36:03 × Everything quits (~Everythin@37.115.210.35) (Quit: leaving)
00:36:10 <qrpnxz> Hm? Alright
00:40:31 × Tuplanolla quits (~Tuplanoll@91-159-68-119.elisa-laajakaista.fi) (Quit: Leaving.)
00:40:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
00:41:42 × otherwise quits (~otherwise@2601:602:880:90f0:ec9b:47e1:eb31:33d5) (Remote host closed the connection)
00:42:43 <iphy> EvanR: yeah, maybe
00:42:59 × neceve quits (~quassel@2.26.93.228) (Ping timeout: 256 seconds)
00:44:00 DNH joins (~DNH@2a02:8108:1100:16d8:88d3:fc83:402b:ce67)
00:44:01 <iphy> EvanR: and maybe quasiquotes at some point
00:44:48 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:44:50 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:44:51 otherwise joins (~otherwise@c-73-221-44-172.hsd1.wa.comcast.net)
00:44:51 × otherwise quits (~otherwise@c-73-221-44-172.hsd1.wa.comcast.net) (Client Quit)
00:44:59 <iphy> for now, I'm going to focus on the actual algorithms I want to write
00:45:59 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:46:01 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:47:02 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:47:04 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:48:00 <iphy> EvanR: https://github.com/iphydf/hs-cimple/blob/fix/test/Language/Cimple/ASTSpec.hs#L53
00:48:31 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:48:33 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:49:56 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:49:58 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:50:19 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:50:21 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:50:48 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:50:50 qrpnxz joins (abc4f95c31@user/qrpnxz)
00:54:57 × talismanick quits (~talismani@2601:644:8500:8350::94b) (Ping timeout: 240 seconds)
00:56:37 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
00:57:03 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection)
00:57:05 qrpnxz joins (abc4f95c31@user/qrpnxz)
01:00:19 <pragma-> settle down qrpnxz
01:02:07 <geekosaur> they've been bouncing for the past 3 hours, I doubt it's going to stop :(
01:02:09 qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: closed)
01:02:57 <geekosaur> …or maybe I'm wrong. One can hope
01:03:27 qrpnxz joins (abc4f95c31@user/qrpnxz)
01:03:50 <geekosaur> welp
01:04:07 ChanServ sets mode +o geekosaur
01:04:23 geekosaur sets mode +b *!*@user/qrpnxz
01:04:48 geekosaur sets mode -o geekosaur
01:04:50 qrpnxz parts (abc4f95c31@user/qrpnxz) ()
01:05:16 <geekosaur> ban will time out in 30 minutes
01:05:17 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 240 seconds)
01:06:57 × acidjnk quits (~acidjnk@pd9e0bdc0.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
01:09:01 euouae joins (~euouae@user/euouae)
01:09:19 <euouae> Hello, where can I read more about type theory? Types, kinds, etc
01:11:20 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81) (Remote host closed the connection)
01:14:07 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Remote host closed the connection)
01:14:34 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
01:15:16 <sm2n> TAPL is a decent start
01:15:31 <sm2n> (that's the book Types and Programming Languages)
01:15:33 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
01:18:18 <euouae> Thank you. Do you happen to know a more brief text? I might look into TAPL but it is large.
01:18:37 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
01:19:02 × jespada quits (~jespada@87.74.33.157) (Ping timeout: 240 seconds)
01:21:56 dsrt^ joins (~dsrt@207.5.54.6)
01:22:35 jespada joins (~jespada@87.74.33.157)
01:22:59 <euouae> I might be able to google the terms from the index and find some papers or something a bit more brief
01:23:05 <EvanR> https://github.com/michaelt/martin-lof
01:24:42 <euouae> EvanR, lol, looks like they don't care for copyright
01:26:18 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
01:26:27 × Morrow quits (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
01:26:34 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
01:28:23 <euouae> So `A Theory of Types` followed by `An Intuitionistic Theory of Types` is what I'm looking for?
01:28:57 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 240 seconds)
01:30:53 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
01:31:21 <euouae> Hm, wikipedia says that Martin-Lof described multiple type theories, https://en.wikipedia.org/wiki/Intuitionistic_type_theory#Martin-L%C3%B6f_type_theories
01:31:28 ksqsf joins (~user@134.209.106.31)
01:33:36 <EvanR> I think MLTT went through a few modifications
01:33:56 <EvanR> any of those old papers is a good start
01:34:25 <euouae> Is there prerequisite knowledge? Would I need to know a lot of untyped lambda calculus? Do I need the Curry-Howard corresp theorem?
01:34:38 ChanServ sets mode +o litharge
01:34:40 litharge sets mode -bo *!*@user/qrpnxz litharge
01:34:55 <EvanR> untyped lambda calculus is even more complicated, if you want to describe it with types
01:35:33 <EvanR> if you start with basic types, simply typed lambda calculus, it turns out pretty simple
01:35:35 <euouae> oh no that's not my intention I was just wondering if knowledge of how untyped lambda calculus works would be necessary/beneficial in studying the papers you linked
01:36:03 <euouae> I'm talking about the more involved properties of it, not the basic definition of what untyped lambda calculus is
01:36:16 <euouae> the reductions and such
01:36:20 <EvanR> none of those matter to lambda calculus with simple types
01:36:36 <euouae> and why do you mention lambda calculus with simple types?
01:36:49 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds)
01:37:01 <euouae> so STLC seems to start with some universe of types T, but I'm curious about the laws/rules of that universe
01:37:05 <EvanR> I assume you want to start at the beginning
01:37:51 <EvanR> a universe could consist of () and for any two types A and B, A -> B
01:37:51 <euouae> Isn't STLC equal to types (of some form) + lambda calculus? Type theory should precede it, right?
01:38:31 <EvanR> there's no one type theory, but many begin by telling you there are functions and this is how they work
01:38:46 <EvanR> make them with lambda, you can apply them, and they have a type
01:39:12 <euouae> OK but the type theory of () plus arrows does not seem to have the features such as "kinds" etc. Even if you can model those features in it, they're not explicit. Right?
01:39:34 × whaletechno quits (~whaletech@user/whaletechno) (Quit: ha det bra)
01:40:15 <EvanR> kinds comes up with theories that are more complicated but not as complicated as dependently typed lambda calculus
01:40:29 <EvanR> middlingly complicated
01:40:42 <EvanR> actually with dependent types, the kind system collapses and simplifies
01:41:03 <EvanR> sounds like you find the starting stuff boring, and as such, just go ahead and read all those papers xD
01:41:31 <euouae> so the ML type theories in those papers are dependent type theories?
01:42:13 <euouae> I don't find it boring necessarily but I want to make an incision because I don't have a lot of time
01:42:34 <EvanR> then you'd better get started!
01:42:54 <EvanR> become adept at reading especially fast
01:43:02 <euouae> yeah I'm just trying to figure out what my goal is
01:43:29 <EvanR> write a theorem prover? xD
01:44:03 <euouae> no goal in terms of what to read
01:44:38 <euouae> ncatlab point to this reference, https://www.cs.le.ac.uk/events/mgs2009/courses/gambino/lecturenotes-gambino.pdf
01:44:42 <EvanR> the first chapter of HoMM covers a lot of basics, I'm sorry it's not the size of a pamphlet
01:44:46 <euouae> This may be the first time that I was able to make use of ncatlab
01:45:06 <EvanR> it's like 10 pages
01:45:11 <euouae> What's HoMM?
01:45:21 <EvanR> heroes of might and magic
01:45:36 <EvanR> I meant to say, Homotopy Type Theory
01:45:47 <euouae> got you, okay. It's a good game btw
01:47:56 <EvanR> there is a type theory channel and a hott channel, last I checked
01:48:58 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
01:49:37 <euouae> ah nice, thank you
01:49:52 ksqsf joins (~user@134.209.106.31)
01:50:06 <euouae> I've seen so many high level discussions here in #haskell that it's my go-to channel when I'm desparate
01:50:43 <euouae> I think I'm set for now, thanks again
01:53:25 × euouae quits (~euouae@user/euouae) (Quit: )
01:53:48 × tcard_ quits (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) (Quit: Leaving)
01:54:57 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds)
01:56:49 × joo-_ quits (~joo-_@fsf/member/joo--) (Ping timeout: 268 seconds)
01:58:17 × dcoutts_ quits (~duncan@71.78.6.51.dyn.plus.net) (Ping timeout: 240 seconds)
01:58:23 joo-_ joins (~joo-_@fsf/member/joo--)
01:59:36 otherwise joins (~otherwise@2601:602:880:90f0:24b0:b2a1:8734:604f)
01:59:59 tcard joins (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp)
02:03:09 × jackson99 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
02:04:58 × DNH quits (~DNH@2a02:8108:1100:16d8:88d3:fc83:402b:ce67) (Quit: Textual IRC Client: www.textualapp.com)
02:05:46 ksqsf joins (~user@134.209.106.31)
02:05:51 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
02:06:36 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
02:08:01 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
02:08:16 geekosaur joins (~geekosaur@xmonad/geekosaur)
02:08:57 shapr hugs geekosaur
02:09:12 × otherwise quits (~otherwise@2601:602:880:90f0:24b0:b2a1:8734:604f) (Remote host closed the connection)
02:09:53 zmt01 joins (~zmt00@user/zmt00)
02:11:00 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 268 seconds)
02:12:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:12:57 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
02:14:54 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
02:18:10 otherwise joins (~otherwise@2601:602:880:90f0:a989:dd0b:eb8b:9eb4)
02:19:51 otherwis_ joins (~otherwise@2601:602:880:90f0:3c50:d90d:a6a6:9cd0)
02:20:02 × burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
02:21:36 × hubvu quits (sid495858@user/hubvu) (Ping timeout: 245 seconds)
02:22:17 × otherwise quits (~otherwise@2601:602:880:90f0:a989:dd0b:eb8b:9eb4) (Ping timeout: 240 seconds)
02:22:53 ksqsf joins (~user@134.209.106.31)
02:25:04 hubvu joins (sid495858@user/hubvu)
02:27:49 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds)
02:29:38 × nicbk quits (~nicbk@user/nicbk) (Quit: nicbk)
02:31:52 ksqsf joins (~user@134.209.106.31)
02:32:55 × vglfr quits (~vglfr@88.155.28.231) (Ping timeout: 256 seconds)
02:33:18 vglfr joins (~vglfr@88.155.28.231)
02:35:23 allensanford joins (~allensanf@c-76-108-242-88.hsd1.fl.comcast.net)
02:46:31 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
02:47:47 nattiestnate joins (~nate@114.122.105.227)
02:47:57 × xff0x quits (~xff0x@2001:1a81:53c9:5600:4d50:2309:32ab:9f17) (Ping timeout: 250 seconds)
02:49:40 xff0x joins (~xff0x@2001:1a81:5206:b200:fb79:da97:621d:d351)
02:54:48 meinside joins (uid24933@id-24933.helmsley.irccloud.com)
02:57:43 <otherwis_> • Couldn't match expected type ‘a -> [a10]’ with actual type ‘[b3]’ what do the numbers [a10] and [b3] mean in this error message? I want for error messages to be helpful, but I'm struggling to interpret them.
02:58:54 <EvanR> temporary type variables, unknowns in the type checking process
02:59:15 <EvanR> you might be able to get better messages by putting your own type signatures
02:59:46 <EvanR> even if you don't, you can see that you put a list where it thinks a function is required
03:01:13 <EvanR> forgot a function argument? put too many arguments?
03:01:23 <otherwis_> 'a -> [a10]' == 'function -> list'. when it was expecting [b3] == list. ?
03:01:31 Morrow joins (~quassel@bzq-110-168-31-106.red.bezeqint.net)
03:01:38 <EvanR> -> is a function
03:01:41 <EvanR> [ ] is a list
03:01:47 <otherwis_> Well I know what the problem was, and I put it there intentionally to see if I could interpret the error message
03:02:30 <EvanR> and the problem was?
03:02:37 <otherwis_> Oh! -> is a function, okay.
03:03:14 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
03:03:25 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
03:04:32 <EvanR> if you don't put type signatures, it has to guess what you want and there are more unknowns. If you also screwed up, things get iffy.
03:05:14 <otherwis_> > let oddSq = filter odd . map (^2) [1..] in take 2 oddSq
03:05:16 <lambdabot> error:
03:05:16 <lambdabot> • Couldn't match expected type ‘a2 -> [a3]’ with actual type ‘[b1]’
03:05:16 <lambdabot> • Possible cause: ‘map’ is applied to too many arguments
03:05:18 <EvanR> if it can't come to a single (possibly polymorphic) solution, it will barf everything it knows back at you
03:05:58 <otherwis_> > let oddSq = filter odd $ map (^2) [1..] in take 2 oddSq
03:05:59 <lambdabot> [1,9]
03:06:02 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
03:06:33 <EvanR> so you tried to compose a function with a list
03:06:46 <EvanR> compose takes 2 functions
03:06:46 alekhine_ joins (~alekhine@c-73-38-152-33.hsd1.ma.comcast.net)
03:07:08 <otherwis_> isnt map a function
03:07:26 <EvanR> parentheses
03:07:32 <EvanR> you wrote
03:07:35 otherwis_ is now known as otherwise
03:07:41 <EvanR> (filter odd) . (map (^2) [1..])
03:07:52 × alekhine_ quits (~alekhine@c-73-38-152-33.hsd1.ma.comcast.net) (Client Quit)
03:08:00 <EvanR> map (^2) [1..] isn't a function
03:08:35 <EvanR> no, the error message doesn't explain all this unfortunately
03:09:08 <EvanR> (filter odd . map (^2)) [1..] -- would work
03:10:17 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
03:10:30 <ksqsf> The error message is leaking internal details on how type inference works, which may or may not be what you want
03:10:37 machinedgod joins (~machinedg@24.105.81.50)
03:12:17 <otherwise> > let oS = (filter odd . map (^2) ) [1..] in take 3 . drop 100 . oS
03:12:18 <lambdabot> error:
03:12:18 <lambdabot> • Couldn't match expected type ‘a -> [a1]’ with actual type ‘[a0]’
03:12:18 <lambdabot> • In the second argument of ‘(.)’, namely ‘oS’
03:12:36 <otherwise> > let oS = (filter odd . map (^2) ) [1..] in take 3 $ drop 100 $ oS
03:12:37 <EvanR> now you have a problem on the right side
03:12:38 <lambdabot> [40401,41209,42025]
03:12:41 <EvanR> ok good
03:12:56 × allensanford quits (~allensanf@c-76-108-242-88.hsd1.fl.comcast.net) (Quit: allensanford)
03:13:21 <otherwise> not confident between using function composition vs function application
03:13:26 <EvanR> let f = take 3 . drop 100 . filter odd . map (^2) in f [1..]
03:13:34 <EvanR> look no parens or dollars xD
03:14:13 <dsal> $ makes your code expensive.
03:14:14 <EvanR> you should internalize that function composition of two functions is always another function
03:14:56 <dsal> Thus the result of a composition will always need an argument.
03:15:20 <EvanR> (b -> c) -> (a -> b) -> (a -> c)
03:15:37 <ksqsf> A useful equation: f (g x) = f $ g x = f . g $ x
03:16:08 <EvanR> just learning this stuff without unnecessary $ will help
03:16:27 <EvanR> even if you need parentheses sometimes
03:19:32 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
03:20:09 <EvanR> otherwise, you know unix pipelines? The pipe of two (or more) commands is a bigger command, not a string. Pipe composes
03:21:10 <otherwise> (b -> c) -> (a -> b) -> (a -> c) translates to: ('argument' 'function' 'return) 'function' ('arg' fun' 'return') 'fun' ( 'arg' 'fun' 'return') ?
03:21:27 <otherwise> i'm not any good at this yet...
03:21:58 <EvanR> that's the type of .
03:22:06 <EvanR> two functions go in, one comes out
03:23:43 <otherwise> (2 argument function in) -> ( 2 argument function in) -> (2 argument function out)
03:23:50 <EvanR> 1 argument functions
03:24:16 <EvanR> all of them
03:26:22 <dsal> otherwise: `b -> c` is a function that takes a `b` and returns a `c`
03:27:56 <dsal> Think about it at a higher level. If you have an `a` and you need a `c`, and you have a way to take an `a` and make a `b` and a way to take a `b` and make a `c`, then you can compose those and have a way to take an `a` and make a `c`. This is clearer when you use concrete types.
03:28:54 <dsal> I have a string that represents a number, and I've got a function that adds one to a number. Can I add one to the numeric value in a string?
03:28:55 <dsal> :t succ
03:28:56 <lambdabot> Enum a => a -> a
03:28:57 <dsal> :t read
03:28:58 <lambdabot> Read a => String -> a
03:29:03 <dsal> :t show . succ. read
03:29:04 <lambdabot> String -> String
03:29:12 <dsal> > (show . succ . read) 3
03:29:14 <lambdabot> error:
03:29:14 <lambdabot> • No instance for (Num String) arising from the literal ‘3’
03:29:14 <lambdabot> • In the first argument of ‘show . succ . read’, namely ‘3’
03:29:17 <dsal> > (show . succ . read) "3"
03:29:18 <lambdabot> "*Exception: Prelude.Enum.().succ: bad argument
03:29:20 <EvanR> lol, nice eexample
03:29:22 <dsal> lame
03:29:39 <dsal> This is a case where it works better when you have types written out.
03:30:01 <EvanR> (bad example overcomplicated by polymorphics, type classes, and it not working)
03:30:02 <otherwise> i dont know unix pipelines yet.
03:30:12 <EvanR> ok so that was not a great analogy either
03:30:13 <otherwise> dsal that description is very clear, thanks!
03:30:21 <dsal> > (succ . read) "3" :: Int
03:30:23 <lambdabot> 4
03:30:23 <otherwise> not the lambdabod stuff
03:30:44 <dsal> Trying to make it a String pushed it too far without describing the intermediate types.
03:30:46 <dsal> :t show . read
03:30:47 <lambdabot> String -> String
03:31:01 <otherwise> I can just do it in ghci
03:31:04 <EvanR> > (chr . (+1) . ord) 'a'
03:31:06 <lambdabot> 'b'
03:31:12 <EvanR> > (chr . (+1) . ord) 'y'
03:31:14 <lambdabot> 'z'
03:31:15 <dsal> Type Applications helps.
03:31:47 <EvanR> chr and ord are good simple functions since they deal with mono concrete types
03:31:49 <dsal> Yeah, chr/ord is narrower.
03:31:52 <dsal> :t chr
03:31:54 <lambdabot> Int -> Char
03:31:54 <dsal> :t ord
03:31:55 <lambdabot> Char -> Int
03:32:20 <dsal> Read and Show are huge even if they weren't open.
03:32:36 <otherwise> > :t (chr . (+1) . ord) 'a'
03:32:37 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
03:32:51 <otherwise> > :t ((chr . (+1) . ord) 'a')
03:32:53 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
03:32:54 <EvanR> oof
03:32:59 <dsal> :t ((chr . (+1) . ord) 'a')
03:32:59 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:32:59 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:32:59 finn_elija is now known as FinnElija
03:33:00 <lambdabot> Char
03:33:00 <EvanR> use > or :t, not both
03:33:25 <EvanR> :t chr . (+1) . ord
03:33:27 <lambdabot> Char -> Char
03:33:28 <otherwise> :t ((chr . (+1) . ord)
03:33:29 <lambdabot> error:
03:33:29 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
03:33:36 <otherwise> :t (chr . (+1) . ord
03:33:37 <lambdabot> error:
03:33:37 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
03:33:46 <EvanR> the hazards of necessary parens xD
03:33:52 <EvanR> unnecessary
03:34:07 <otherwise> ah geez, i'll leave lambdabot alone
03:36:05 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
03:38:22 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Remote host closed the connection)
03:39:19 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
03:39:20 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
03:39:34 <EvanR> drake dislikes f (g (h (foo (bar (baz x)))))
03:39:57 <EvanR> drake likes f . g . h . foo . bar . baz xD
03:41:18 <EvanR> possibly apply the x with parens over the whole thing, naming this chain something, or $ (last resort)
03:43:21 falafel_ joins (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com)
03:43:57 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
03:45:30 falafel__ joins (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com)
03:46:57 × falafel quits (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com) (Ping timeout: 240 seconds)
03:47:57 × falafel_ quits (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds)
03:48:28 kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
03:48:30 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
03:52:35 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
03:52:54 <dsal> otherwise: You can have private conversations with lambdabot
03:53:49 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
03:57:21 × td_ quits (~td@muedsl-82-207-238-094.citykom.de) (Ping timeout: 256 seconds)
03:59:08 td_ joins (~td@muedsl-82-207-238-177.citykom.de)
04:00:10 <EvanR> forgive me lambdabot for I have unsafeCoerced
04:00:51 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
04:02:57 × falafel__ quits (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds)
04:05:34 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
04:10:38 <monochrom> heh
04:11:10 <otherwise> > reverse . filter (< 'a') $ filter (/= ' ') "Oh lambdabot do you want to speak with me yes or No"
04:11:11 <lambdabot> "NO"
04:13:38 alfonsox joins (~quassel@103.92.42.161)
04:14:50 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
04:16:49 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 268 seconds)
04:18:09 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
04:19:28 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
04:19:32 × dsrt^ quits (~dsrt@207.5.54.6) (Remote host closed the connection)
04:20:59 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
04:28:49 srwm^ joins (~srwm@207.5.54.6)
04:29:20 <EvanR> lol
04:30:12 × nurupo quits (~nurupo.ga@user/nurupo) (Quit: nurupo.ga)
04:30:43 nurupo joins (~nurupo.ga@user/nurupo)
04:31:00 deadmarshal joins (~deadmarsh@95.38.112.219)
04:31:55 × amk quits (~amk@109.255.169.126) (Ping timeout: 256 seconds)
04:35:15 amk joins (~amk@109.255.169.126)
04:37:49 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
04:39:57 × n3rdy1 quits (~n3rdy1@2601:281:c780:a510:f129:8ed3:b1ff:82ed) (Ping timeout: 240 seconds)
04:43:02 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:57:57 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 240 seconds)
04:57:57 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
04:58:43 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
05:02:06 × rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Remote host closed the connection)
05:02:44 ksqsf joins (~user@134.209.106.31)
05:06:22 rekahsoft joins (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
05:07:59 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 268 seconds)
05:10:57 × waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
05:11:37 biberu\ joins (~biberu@user/biberu)
05:14:40 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
05:15:33 × biberu quits (~biberu@user/biberu) (Ping timeout: 256 seconds)
05:15:33 biberu\ is now known as biberu
05:15:37 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
05:16:57 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
05:18:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
05:18:44 Erutuon joins (~Erutuon@user/erutuon)
05:18:53 lavaman joins (~lavaman@98.38.249.169)
05:22:32 Rum joins (~bourbon@user/rum)
05:22:37 × rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds)
05:23:30 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
05:24:04 ksqsf joins (~user@134.209.106.31)
05:29:00 drewr joins (~drew@user/drewr)
05:30:30 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 260 seconds)
05:32:33 × deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 256 seconds)
05:35:54 wroathe joins (~wroathe@user/wroathe)
05:40:40 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
05:41:53 ksqsf joins (~user@134.209.106.31)
05:44:25 × Rum quits (~bourbon@user/rum) (Quit: WeeChat 3.4)
05:44:56 × ksqsf quits (~user@134.209.106.31) (Remote host closed the connection)
05:45:14 ksqsf joins (~user@134.209.106.31)
05:57:17 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 240 seconds)
05:59:08 hololeap joins (~hololeap@user/hololeap)
06:04:02 mvk joins (~mvk@2607:fea8:5cdd:f000::917a)
06:11:47 × pavonia quits (~user@user/siracusa) (Read error: Connection reset by peer)
06:13:57 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
06:18:48 pavonia joins (~user@user/siracusa)
06:19:03 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
06:25:08 spaceseller joins (~spacesell@31.147.205.13)
06:28:01 × x88x88x quits (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) (Remote host closed the connection)
06:28:50 x88x88x joins (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb)
06:32:43 notzmv joins (~zmv@user/notzmv)
06:34:13 × jinsun quits (~quassel@user/jinsun) (Ping timeout: 240 seconds)
06:36:00 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
06:38:17 Guest|80 joins (~Guest|80@185.237.102.187)
06:41:41 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
06:44:25 <Guest|80> Uploaded file: https://uploads.kiwiirc.com/files/42ec33f07bbab40fb13e82a251ba1551/installFailed.png
06:45:15 <maerwald[m]> Guest|80: your curl doesn't work
06:45:31 <maerwald[m]> Try wget
06:46:06 <Guest|80> same comand but just wget? or have I change the whole instruction?
06:46:20 <dmj`> Is it possible to figured out which packages use RankNTypes on hackage
06:46:56 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
06:47:01 <maerwald[m]> Guest|80: sec
06:47:26 <dsal> dmj`: I downloaded all of hackage to do ask questions like that once.
06:47:59 <maerwald[m]> Guest|80: `ghcup config set downloader Wget`
06:48:03 <dmj`> dsal: how'd that go?
06:48:03 <maerwald[m]> Try that
06:48:23 <dsal> dmj`: It was neat. I found a lot of neat things. It's pretty easy to answer that kind of question, but I don't have my download any longer.
06:49:10 <maerwald[m]> Guest|80: might need to run `source ~/.ghcup/env` first
06:49:11 falafel joins (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com)
06:49:57 deadmarshal joins (~deadmarsh@95.38.112.219)
06:53:08 <Guest|80> ghcup config set downloader Wget     doesnt work in tty.. maerwald  what do you mean with run .ghcup/env?  I found the data
06:53:09 <dmj`> dsal: https://github.com/nh2/hackage-download , well well
06:54:27 <maerwald[m]> Guest|80: i mean: run `source ~/.ghcup/env`
06:54:38 <maerwald[m]> What else would I mean?
06:54:47 <dsal> dmj`: I don't think I used that. It was something about a cabal command that dumps out all the things, something to make URLs out of them, and then curl to do the needful.
06:55:01 <dsal> In any case, it wasn't that hard to get all the source files down.
06:59:51 <dmj`> there should be a search engine for this stuff
07:00:00 <dmj`> "hookah"
07:00:09 <dmj`> hackage meets hoogle
07:06:29 <Guest|80> cant reach github.com. Any Idear? I ping it, but nothing...
07:07:43 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
07:08:54 <EvanR> https://www.githubstatus.com/
07:09:16 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3)
07:10:13 × spaceseller quits (~spacesell@31.147.205.13) (Quit: Leaving)
07:11:30 <Guest|80> timeout. Dont know, maybe I have made something wrong with git that this website is blocked for me? Or have I managed to block myself from github?
07:12:33 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 268 seconds)
07:13:45 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:16:20 takuan joins (~takuan@178-116-218-225.access.telenet.be)
07:16:21 <Guest|80> Uploaded file: https://uploads.kiwiirc.com/files/3c49132434b8beda7aaeeaf8edcf0ad2/githubNotKnown.png
07:17:21 <int-e> Guest|80: drop the https://
07:17:39 spaceseller joins (~spacesell@31.147.205.13)
07:17:40 <Guest|80> I have done it later down... same
07:17:41 <int-e> oh you did, sorry
07:17:58 <Guest|80> changed also dns server
07:18:54 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
07:19:13 × spaceseller quits (~spacesell@31.147.205.13) (Client Quit)
07:19:38 spaceseller joins (~spacesell@31.147.205.13)
07:21:21 × spaceseller quits (~spacesell@31.147.205.13) (Client Quit)
07:21:41 <int-e> Fun. You may have a local dns proxy that caches replies. Among a plethora of possible causes.
07:22:03 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
07:23:48 <Guest|80> With traceroute github.com its the same; the name or service not known...  Can it be that my Android-handy caches the results for me?
07:25:30 × deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 268 seconds)
07:26:10 <Guest|80> but I used Cloudflare 1.1.1.1 and could not believe they prevent me from github.com
07:26:33 <Guest|80> Uploaded file: https://uploads.kiwiirc.com/files/cf6fb0d7042c10cd85d7244b7a684524/DnsServer.png
07:26:47 spaceseller joins (~spacesell@31.147.205.13)
07:27:20 × spaceseller quits (~spacesell@31.147.205.13) (Remote host closed the connection)
07:30:37 <int-e> cool. host www.github.com 172.70.84.168 --> ;; connection timed out; no servers could be reached
07:31:36 spaceseller joins (~spacesell@31.147.205.13)
07:33:35 <Guest|80> hey the Ip-Adress works.
07:35:54 <int-e> (but Cloudflare does weird stuff with routing as its core business, your results may be different)
07:36:48 deadmarshal joins (~deadmarsh@95.38.112.219)
07:37:59 × Guest|80 quits (~Guest|80@185.237.102.187) (Quit: Connection closed)
07:40:34 <dmj`> dsal: its saying there's ~3,435 packages on hackage
07:40:34 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
07:41:30 coolnickname joins (uid531864@user/coolnickname)
07:44:57 × drewr quits (~drew@user/drewr) (Ping timeout: 240 seconds)
07:44:58 yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net)
07:46:00 <dmj`> dsal: it says 19% of hackage uses RankNTypes
07:46:07 gentauro joins (~gentauro@user/gentauro)
07:46:16 <dmj`> dsal: now, some of these packages just list RankNTypes, and don't actually use it too ...
07:47:49 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
07:48:14 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
07:50:12 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit)
07:51:02 × yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
07:51:56 YoungFrog joins (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be)
07:51:56 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
08:01:35 × deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 256 seconds)
08:02:36 deadmarshal joins (~deadmarsh@95.38.112.219)
08:07:00 × gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.3)
08:07:54 × Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:09:16 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
08:09:52 × kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
08:11:00 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
08:13:23 × nattiestnate quits (~nate@114.122.105.227) (Quit: WeeChat 3.4)
08:13:29 <dmj`> dsal: it might actually be 13%
08:14:03 × deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 256 seconds)
08:24:33 × spaceseller quits (~spacesell@31.147.205.13) (Quit: Leaving)
08:27:43 cosimone joins (~user@93-47-231-248.ip115.fastwebnet.it)
08:31:03 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
08:31:03 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
08:31:03 wroathe joins (~wroathe@user/wroathe)
08:32:46 Akiva joins (~Akiva@user/Akiva)
08:35:46 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
08:38:49 <otherwise> λ
08:39:36 qrpnxz joins (abc4f95c31@user/qrpnxz)
08:41:07 <tomsmeding> \
08:43:14 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 260 seconds)
08:46:17 <EvanR> it's simplified greek to me
08:55:13 <otherwise> concatMap work, where the function input is (+3) ?
08:55:28 <otherwise> I am only able to make concatMap work with replicate
08:57:55 <EvanR> look at the types
08:58:23 <otherwise> okay
08:58:50 <xerox> not very well
08:58:56 <otherwise> I dont know what t a means...
08:59:21 <xerox> :t concatMap
08:59:22 <lambdabot> Foldable t => (a -> [b]) -> t a -> [b]
09:00:10 × TomWesterhout[m] quits (~twesterho@2001:470:69fc:105::1:2918) (Quit: You have been kicked for being idle)
09:00:16 <otherwise> so you input a function and a list, then you input a "t a", then you get a list returned?
09:00:27 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
09:00:28 <xerox> almost
09:00:29 TomWesterhout[m] joins (~twesterho@2001:470:69fc:105::1:2918)
09:00:42 <xerox> the parens are important, the first argument is a function, the second a "t a"
09:00:43 <tomsmeding> % :t +d concatMap
09:00:44 <yahb> tomsmeding: (a -> [b]) -> [a] -> [b]
09:00:46 TomWesterhout[m] parts (~twesterho@2001:470:69fc:105::1:2918) ()
09:00:55 <tomsmeding> otherwise: you can read it like this at first
09:01:10 <xerox> i.e. the first arg is a function from 'a' to '[b]'
09:01:35 <tomsmeding> actually, concatMap is generalised to not only accept a list as the second argument, but also other stuff that's sufficiently "list-like"; for lists, t = [] so that t a = [a]
09:01:41 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:02:02 <xerox> so it's saying, given a function that assigns a [b] to any given a, and a "list of 'a's", I can make a list of 'b's
09:02:42 <tomsmeding> > concatMap (\n -> replicate n 42) [1,2,3]
09:02:44 <lambdabot> [42,42,42,42,42,42]
09:02:48 <tomsmeding> > concat (map (\n -> replicate n 42) [1,2,3])
09:02:50 <lambdabot> [42,42,42,42,42,42]
09:02:54 <tomsmeding> > map (\n -> replicate n 42) [1,2,3]
09:02:56 <lambdabot> [[42],[42,42],[42,42,42]]
09:04:00 × zmt01 quits (~zmt00@user/zmt00) (Read error: Connection reset by peer)
09:04:18 <otherwise> whoa
09:04:40 × theproffesor quits (~theproffe@user/theproffesor) (Remote host closed the connection)
09:04:45 zmt01 joins (~zmt00@user/zmt00)
09:04:45 the_proffesor joins (~theproffe@2601:282:847f:8010::5fff)
09:04:45 × the_proffesor quits (~theproffe@2601:282:847f:8010::5fff) (Changing host)
09:04:45 the_proffesor joins (~theproffe@user/theproffesor)
09:04:59 <otherwise> so is replicate the only usable function here?
09:05:06 jinsun joins (~quassel@user/jinsun)
09:05:11 <tomsmeding> anything that produces a list :)
09:05:24 <tomsmeding> that is, any function that has the type 'a -> [b]' for some a and some b
09:05:28 <otherwise> anything that produces a list, that makes sense.
09:05:54 <tomsmeding> > concatMap (\n -> map (n +) [1, 2, 3]) [4, 5, 6]
09:05:56 <lambdabot> [5,6,7,6,7,8,7,8,9]
09:06:07 <otherwise> I was trying to do something like concatMap [map (+3) [1..9]]
09:06:17 <tomsmeding> > concatMap (\_ -> [1,2,3]) [4,5,6]
09:06:18 <lambdabot> [1,2,3,1,2,3,1,2,3]
09:06:23 <otherwise> to force a nested list
09:06:29 <xerox> > concatMap (\x -> [x-1,x,x+1]) [2,5,8]
09:06:30 <lambdabot> [1,2,3,4,5,6,7,8,9]
09:06:44 <tomsmeding> otherwise: that applies concatMap to one argument, right? concatMap takes two arguments
09:07:21 <tomsmeding> otherwise: I strongly suggest reading
09:07:28 <tomsmeding> 'concatMap f l' as 'concat (map f l)'
09:07:36 <tomsmeding> (it's exactly equivalent)
09:07:59 <tomsmeding> @src concatMap
09:07:59 <lambdabot> concatMap f = foldr ((++) . f) []
09:08:02 <tomsmeding> lol
09:08:17 <tomsmeding> same thing though if you think long and hard
09:09:43 <otherwise> okay that is helpful
09:11:39 acidjnk joins (~acidjnk@p200300d0c7271e489141218671316649.dip0.t-ipconnect.de)
09:14:07 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds)
09:14:36 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
09:15:00 DNH joins (~DNH@2a02:8108:1100:16d8:4441:5555:5586:d167)
09:16:58 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Read error: Connection reset by peer)
09:17:41 geekosaur joins (~geekosaur@xmonad/geekosaur)
09:19:06 Tuplanolla joins (~Tuplanoll@91-159-68-119.elisa-laajakaista.fi)
09:19:37 × mvk quits (~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds)
09:21:15 deadmarshal joins (~deadmarsh@95.38.112.219)
09:22:14 × falafel quits (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Read error: Connection reset by peer)
09:22:26 falafel joins (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com)
09:25:20 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
09:25:50 briandaed joins (~root@185.234.208.208.r.toneticgroup.pl)
09:28:54 × DNH quits (~DNH@2a02:8108:1100:16d8:4441:5555:5586:d167) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:32:44 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
09:37:16 gehmehgeh joins (~user@user/gehmehgeh)
09:39:37 × vglfr quits (~vglfr@88.155.28.231) (Ping timeout: 240 seconds)
09:40:21 ksqsf joins (~user@134.209.106.31)
09:41:29 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection)
09:41:58 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
09:44:50 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 260 seconds)
09:45:18 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Remote host closed the connection)
09:46:03 coot joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
09:46:03 × coot quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Remote host closed the connection)
09:46:49 wroathe joins (~wroathe@user/wroathe)
09:46:59 × Morrow quits (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
09:47:20 coot joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
09:51:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
09:59:11 × coot quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot)
10:04:36 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
10:05:07 kuribas joins (~user@ptr-25vy0i81bhacxv5d2f4.18120a2.ip6.access.telenet.be)
10:13:12 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection)
10:13:31 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
10:16:02 vglfr joins (~vglfr@46.96.129.172)
10:16:17 KvL joins (~KvL@user/KvL)
10:17:36 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
10:17:36 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
10:17:36 wroathe joins (~wroathe@user/wroathe)
10:18:49 × KvL quits (~KvL@user/KvL) (Client Quit)
10:19:17 KvL joins (~KvL@user/KvL)
10:19:17 × vglfr quits (~vglfr@46.96.129.172) (Read error: Connection reset by peer)
10:19:20 syrkis joins (~syrkis@82.192.167.70)
10:19:29 vglfr joins (~vglfr@46.96.129.172)
10:22:17 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
10:24:48 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
10:25:01 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
10:26:07 Lord_of_Life_ is now known as Lord_of_Life
10:27:54 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
10:28:36 <otherwise> in prelude, we can define functions, such as "addThree = (+) 3", is there a way to then :browse and only show user defined functions during the active prelude session?
10:29:05 vysn joins (~vysn@user/vysn)
10:29:34 <otherwise> MatLab has this feature, where all user defined functions are in a sidebar window called "workspace." I'm sure Haskell has this, but I just do not know how to call it up for view...
10:31:07 <otherwise> Found it!
10:31:12 <otherwise> :show bindings
10:31:14 <otherwise> :)
10:31:44 × vglfr quits (~vglfr@46.96.129.172) (Ping timeout: 268 seconds)
10:33:03 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
10:34:18 × xff0x quits (~xff0x@2001:1a81:5206:b200:fb79:da97:621d:d351) (Ping timeout: 260 seconds)
10:34:50 xff0x joins (~xff0x@2001:1a81:5206:b200:fabe:99c1:2820:5b8f)
10:36:40 × briandaed quits (~root@185.234.208.208.r.toneticgroup.pl) (Quit: Lost terminal)
10:46:12 max22- joins (~maxime@2a01cb0883359800be9c06a9a4b3ba5d.ipv6.abo.wanadoo.fr)
10:48:23 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
10:48:23 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
10:48:23 wroathe joins (~wroathe@user/wroathe)
10:52:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
10:58:56 <tomsmeding> otherwise: "in prelude" -- that's ghci; Prelude is the name of the module that is in scope by default. The text to the left of the > in the ghci prompt is the list of modules that is in scope
11:02:17 Morrow joins (~quassel@bzq-110-168-31-106.red.bezeqint.net)
11:03:58 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
11:04:56 <otherwise> is it possible to bump out of the prelude module, but still be in ghci?
11:05:21 <otherwise> in other words, have zero modules in scope.
11:07:30 <xerox> ghci -XNoImplicitPrelude
11:07:51 vglfr joins (~vglfr@46.96.129.172)
11:09:31 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
11:12:00 <Nate[m]12> does anyone have experience with writing mathematical computing of a C++ program with haskell and whether it's better to do this way compared to C++ math libraries?
11:12:56 <Rembane> Nate[m]12: Is performance important to you?
11:13:49 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
11:14:07 × syrkis quits (~syrkis@82.192.167.70) (Ping timeout: 256 seconds)
11:14:10 <Nate[m]12> Rembane: yes of course
11:14:33 kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
11:14:49 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 256 seconds)
11:15:14 <Nate[m]12> Rembane: I'm also thinking about writing them all in rust instead of these tricks
11:15:35 × acidjnk quits (~acidjnk@p200300d0c7271e489141218671316649.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
11:16:21 <maerwald[m]> I'd pick the language with the best ecosystem for the problem, not the best language. Unless you got a lot of time on your hands
11:18:51 <Rembane> Nate[m]12: I'd do what maerwald[m] says. numpy is also surprisingly fast.
11:19:11 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
11:19:11 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
11:19:11 wroathe joins (~wroathe@user/wroathe)
11:19:32 <otherwise> xerox: thanks! However, it's kinda empty... as expected... I can't even do addition. the only type that seems to give a response is :t 2
11:19:44 <Nate[m]12> numpy is in python right?
11:20:38 <Nate[m]12> but my use case is eigen.
11:21:07 lavaman joins (~lavaman@98.38.249.169)
11:21:19 <otherwise> :q
11:21:42 <Nate[m]12> s/in/for/
11:22:57 <Rembane> Nate[m]12: What's an eigen?
11:23:22 <Nate[m]12> eigen library for c++
11:23:36 <Nate[m]12> it's a math library
11:23:37 × vglfr quits (~vglfr@46.96.129.172) (Ping timeout: 240 seconds)
11:23:44 <Rembane> otherwise: Now you need to import things from Prelude, for instance: import Prelude (Num)
11:24:10 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
11:24:10 <Rembane> Nate[m]12: Then write it in C++, I don't think it's worth it to find an eigen replacement in Haskell.
11:25:17 neurocyte0132889 joins (~neurocyte@IP-212232085135.dynamic.medianet-world.de)
11:25:17 × neurocyte0132889 quits (~neurocyte@IP-212232085135.dynamic.medianet-world.de) (Changing host)
11:25:17 neurocyte0132889 joins (~neurocyte@user/neurocyte)
11:26:01 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
11:27:34 <thomasjm[m]> https://hackage.haskell.org/package/eigen
11:33:35 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
11:35:38 rito_ joins (~rito_gh@45.112.243.151)
11:37:51 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds)
11:38:34 <otherwise> Rembane: oh of course! Thanks! :)
11:39:31 <otherwise> Certainly gives an appreciation of all the predefined libraries.
11:41:54 <otherwise> somehow (:) is included... as well as numbers, and it seems to understand []
11:42:34 <otherwise> so it's not completely empty (referencing: ghci -XNoImplicitPrelude )
11:42:41 <xerox> otherwise: yeah :)
11:44:01 CiaoSen joins (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
11:49:20 mmhat joins (~mmh@55d4c35d.access.ecotel.net)
11:50:44 DNH joins (~DNH@2a02:8108:1100:16d8:4441:5555:5586:d167)
11:50:58 × vysn quits (~vysn@user/vysn) (Read error: Connection reset by peer)
11:51:13 <xerox> otherwise: I found an use for today's concatMap example right now https://i.imgur.com/vENgIIq.png
11:52:50 <otherwise> before I peer into that code, I must say your example for concatMap was awesome! really enlightening
11:55:05 vglfr joins (~vglfr@46.96.129.172)
11:55:34 zincy joins (~zincy@host86-151-99-97.range86-151.btcentralplus.com)
11:57:29 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
12:00:21 <otherwise> looks great! I almost understand it :)
12:00:40 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:01:16 <otherwise> Holy smokes, you included my name in line 75! thanks!
12:02:22 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Client Quit)
12:02:57 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
12:10:16 × kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection)
12:10:56 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
12:19:10 × cosimone quits (~user@93-47-231-248.ip115.fastwebnet.it) (Read error: Connection reset by peer)
12:19:23 MoC joins (~moc@user/moc)
12:31:27 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
12:31:27 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
12:31:27 wroathe joins (~wroathe@user/wroathe)
12:32:47 neceve joins (~quassel@2.26.93.228)
12:32:53 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
12:33:12 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
12:34:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
12:35:01 × zincy quits (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection)
12:35:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
12:39:56 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
12:43:19 × otherwise quits (~otherwise@2601:602:880:90f0:3c50:d90d:a6a6:9cd0) ()
12:43:22 thevishy joins (~Nishant@2405:201:f005:c007:1d22:93e8:b240:6332)
12:45:01 __monty__ joins (~toonn@user/toonn)
12:45:26 × max22- quits (~maxime@2a01cb0883359800be9c06a9a4b3ba5d.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
12:49:30 ProfSimm joins (~ProfSimm@87.227.196.109)
12:56:02 kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
12:58:30 zincy joins (~zincy@host86-151-99-97.range86-151.btcentralplus.com)
12:59:07 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 268 seconds)
13:00:03 × neurocyte0132889 quits (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
13:01:42 neurocyte0132889 joins (~neurocyte@IP-212232085135.dynamic.medianet-world.de)
13:01:42 × neurocyte0132889 quits (~neurocyte@IP-212232085135.dynamic.medianet-world.de) (Changing host)
13:01:42 neurocyte0132889 joins (~neurocyte@user/neurocyte)
13:04:12 × zincy quits (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection)
13:04:37 slowtyper joins (~slowtyper@user/slowtyper)
13:06:19 × DNH quits (~DNH@2a02:8108:1100:16d8:4441:5555:5586:d167) (Ping timeout: 250 seconds)
13:06:33 montxero` joins (~user@1.145.194.51)
13:06:57 × vglfr quits (~vglfr@46.96.129.172) (Ping timeout: 240 seconds)
13:07:08 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
13:07:23 vglfr joins (~vglfr@46.96.129.172)
13:08:33 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
13:09:59 syrkis joins (~syrkis@82.192.167.70)
13:10:46 × neceve quits (~quassel@2.26.93.228) (Read error: Connection reset by peer)
13:12:08 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:13:42 × montxero` quits (~user@1.145.194.51) (Remote host closed the connection)
13:16:13 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:16:40 stilgart joins (~Christoph@chezlefab.net)
13:21:09 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
13:21:16 cosimone joins (~user@93-47-231-248.ip115.fastwebnet.it)
13:24:16 machinedgod joins (~machinedg@24.105.81.50)
13:24:38 × CiaoSen quits (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
13:31:25 Pickchea joins (~private@user/pickchea)
13:32:12 max22- joins (~maxime@2a01cb08833598008a92023ced423869.ipv6.abo.wanadoo.fr)
13:35:51 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
13:36:20 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
13:40:30 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
13:45:29 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
13:46:18 <Pickchea> Hey, I heard (>>=) is called "bind". Is there a name for (>>)?
13:46:37 zaquest joins (~notzaques@5.130.79.72)
13:49:00 <xerox> maybe you can read it "and then"
13:50:25 Digit joins (~user@user/digit)
13:52:36 slowButPresent joins (~slowButPr@user/slowbutpresent)
13:56:13 × deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 240 seconds)
14:02:46 n3rdy1 joins (~n3rdy1@2601:281:c780:a510:e4ef:c23f:2799:9ee2)
14:10:28 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
14:12:02 × xff0x quits (~xff0x@2001:1a81:5206:b200:fabe:99c1:2820:5b8f) (Ping timeout: 240 seconds)
14:13:02 xff0x joins (~xff0x@2001:1a81:5206:b200:83f6:7a30:b822:7720)
14:13:20 × KvL quits (~KvL@user/KvL) (Quit: KvL)
14:13:42 × xsperry quits (~xs@user/xsperry) (Remote host closed the connection)
14:18:14 deadmarshal joins (~deadmarsh@95.38.112.219)
14:20:37 × kmein quits (~weechat@user/kmein) (Quit: ciao kakao)
14:20:55 azimut joins (~azimut@gateway/tor-sasl/azimut)
14:20:57 kmein joins (~weechat@user/kmein)
14:21:17 × kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 240 seconds)
14:21:35 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
14:21:57 × falafel quits (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds)
14:23:02 × jinsun quits (~quassel@user/jinsun) (Ping timeout: 240 seconds)
14:23:49 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
14:26:56 aplainze1akind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
14:27:03 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Read error: Connection reset by peer)
14:28:08 × inkbottle[m] quits (~inkbottle@2001:470:69fc:105::2ff5) (Quit: Client limit exceeded: 20000)
14:28:45 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
14:28:47 <Henson> does anybody use Haskell in commercial applications who'd be interested in talking to me about it? I'd be interested in knowing somebody's experience in hiring Haskell developers, and the pros and cons from a manager's point of view over a more mainstream language like C++
14:28:48 inkbottle[m] joins (~inkbottle@2001:470:69fc:105::2ff5)
14:29:17 × deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 240 seconds)
14:31:05 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
14:31:20 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
14:31:58 azimut joins (~azimut@gateway/tor-sasl/azimut)
14:35:14 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
14:35:37 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
14:37:23 deadmarshal joins (~deadmarsh@95.38.112.219)
14:41:47 acidjnk joins (~acidjnk@p200300d0c7271e489141218671316649.dip0.t-ipconnect.de)
14:44:29 × deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 256 seconds)
14:46:34 shriekingnoise joins (~shrieking@186.137.144.80)
14:53:25 × n3rdy1 quits (~n3rdy1@2601:281:c780:a510:e4ef:c23f:2799:9ee2) (Ping timeout: 240 seconds)
14:54:12 ksqsf joins (~user@134.209.106.31)
14:54:59 <lechner> Hi, has anyone tried to generate a Haskell type from a JSON schema? Is there an example anywhere?
15:01:03 waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
15:05:17 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
15:07:29 <geekosaur> https://hackage.haskell.org/package/aeson-schema claims to be able to generate types form a schema
15:07:39 <geekosaur> *from
15:08:36 Sgeo joins (~Sgeo@user/sgeo)
15:08:53 <lechner> yeah, are there schemas other than JSON i should look at?
15:09:30 <geekosaur> that I couldn't tell you
15:09:42 <geekosaur> possibly YAML. I dislike it but it's widely used
15:11:47 kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
15:11:52 <mjrosenb> how on earth did it get to be widely used? I have literally never seen anyone who actually likes it.
15:12:31 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
15:15:42 <lechner> i meant for the automatic generation of types
15:16:23 CiaoSen joins (~Jura@p5dcc17d2.dip0.t-ipconnect.de)
15:17:07 <lechner> or perhasp someone can help me figure out how to use this? https://hackage.haskell.org/package/aeson-schema-0.4.1.2/docs/Data-Aeson-Schema-CodeGen.html
15:17:17 spaceseller joins (~spacesell@31.147.205.13)
15:17:28 <Square> lechner, protobuf, thrift, typedefs (seems half finished). Then there is hschema, schemas and mu-schema. If its just the "schema-first" thing you're after
15:17:29 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
15:17:49 <lechner> yeah
15:18:03 <geekosaur> there are also tools that convert yaml, etc. schema into json schemas, several designed for use with aeson-schema
15:18:33 <lechner> actually, the other way around my work too, but then i'm perhaps married to haskell
15:18:44 <lechner> might
15:18:58 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 260 seconds)
15:19:06 <lechner> and being married to haskell isn't all terrible
15:20:29 ksqsf joins (~user@134.209.106.31)
15:20:51 <geekosaur> sadly, neither the examples nor the tests are very enlightening about how to generate types
15:20:52 × spaceseller quits (~spacesell@31.147.205.13) (Client Quit)
15:21:12 <lechner> maybe protobuf is the way to go
15:21:34 <lechner> i have just used JSON for so long
15:22:53 lavaman joins (~lavaman@98.38.249.169)
15:25:17 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds)
15:27:33 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
15:30:48 Sgeo_ joins (~Sgeo@user/sgeo)
15:31:44 spaceseller joins (~spacesell@31.147.205.13)
15:33:13 × Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 250 seconds)
15:34:11 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
15:34:43 × kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
15:38:36 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
15:38:36 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
15:38:36 wroathe joins (~wroathe@user/wroathe)
15:44:59 ksqsf joins (~user@134.209.106.31)
15:56:30 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 276 seconds)
15:57:36 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
16:08:31 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
16:15:17 × srwm^ quits (~srwm@207.5.54.6) (Remote host closed the connection)
16:17:28 nhatanh02 joins (~satori@user/nhatanh02)
16:23:22 Guest|3 joins (~Guest|3@189.84.72.71)
16:24:24 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
16:24:25 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
16:24:25 wroathe joins (~wroathe@user/wroathe)
16:24:34 × Guest|3 quits (~Guest|3@189.84.72.71) (Client Quit)
16:30:17 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds)
16:30:37 × CiaoSen quits (~Jura@p5dcc17d2.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
16:33:48 <mjrosenb> what's the mapping of base- versions to ghc releases?
16:34:59 kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
16:35:06 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
16:35:07 dcoutts_ joins (~duncan@71.78.6.51.dyn.plus.net)
16:38:02 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
16:38:09 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:38:48 <geekosaur> https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history
16:41:00 <mjrosenb> thanks!
16:42:02 × obfusk quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (Ping timeout: 240 seconds)
16:42:32 obfusk joins (~quassel@a82-161-150-56.adsl.xs4all.nl)
16:42:55 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
16:44:53 <mjrosenb> uh-oh
16:44:57 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
16:45:03 <mjrosenb> is there a ghc-lib-parser for 8.6.5?
16:46:00 <geekosaur> I'd be surprised if there were; 8.6.5 was replaced by 8.6.6 and then 8.6.7 within the space of a week iirc
16:47:27 <geekosaur> wait, no, I'm thinking of 8.10.x
16:50:31 zincy joins (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807)
16:51:48 <mjrosenb> I'm trying to get haskell-language-server built with 8.6.5, and a bunch of things depend on ghc-lib-parser (or at least the nix-expr I'm looking at says that it does)
16:51:56 <geekosaur> mm, looks like there should be but it's difficult to tell from the cabal files
16:53:11 <geekosaur> the oldest version of ghc-lib-parser claims tested with 8.6.1, so I assume some version between that and the 8.8s works with 8.6.5
16:53:19 solidfox joins (~snake@user/snake)
16:54:36 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
16:54:36 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
16:54:36 wroathe joins (~wroathe@user/wroathe)
16:55:30 solidfox is now known as snake
16:55:41 snake parts (~snake@user/snake) ()
16:57:59 <lechner> Square: Thanks for those pointers! I further stumbled across Avro, which also appears well-supported in Haskell and offers schema evolution, although it is much less popular than the others https://hackage.haskell.org/package/avro
16:58:00 dsrt^ joins (~dsrt@207.5.54.6)
16:59:21 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
16:59:22 dcoutts__ joins (~duncan@71.78.6.51.dyn.plus.net)
16:59:28 × obfusk quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (Quit: No Ping reply in 180 seconds.)
17:00:11 gdd joins (~gdd@129.199.146.230)
17:00:42 obfusk joins (~quassel@a82-161-150-56.adsl.xs4all.nl)
17:01:05 falafel joins (~falafel@cpe-76-168-195-162.socal.res.rr.com)
17:01:52 justsomeguy joins (~justsomeg@user/justsomeguy)
17:02:03 × dcoutts_ quits (~duncan@71.78.6.51.dyn.plus.net) (Ping timeout: 250 seconds)
17:02:22 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:08:10 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
17:11:16 × coolnickname quits (uid531864@user/coolnickname) (Quit: Connection closed for inactivity)
17:13:21 burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk)
17:14:37 jakalx joins (~jakalx@base.jakalx.net)
17:14:39 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 256 seconds)
17:15:02 × acidjnk quits (~acidjnk@p200300d0c7271e489141218671316649.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
17:19:15 Akiva joins (~Akiva@user/Akiva)
17:20:41 × kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 250 seconds)
17:24:23 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
17:26:02 econo joins (uid147250@user/econo)
17:27:37 allbery_b joins (~geekosaur@xmonad/geekosaur)
17:27:37 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
17:27:40 allbery_b is now known as geekosaur
17:28:34 xsperry joins (~xs@user/xsperry)
17:30:11 × spaceseller quits (~spacesell@31.147.205.13) (Quit: Leaving)
17:34:04 deadmarshal joins (~deadmarsh@95.38.112.219)
17:35:01 × nhatanh02 quits (~satori@user/nhatanh02) (Ping timeout: 240 seconds)
17:36:01 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
17:36:21 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:41:32 × gdd quits (~gdd@129.199.146.230) (Ping timeout: 240 seconds)
17:43:00 hud joins (~hud@uwyo-129-72-161-67.uwyo.edu)
17:44:57 Guest55 joins (~Guest55@95-25-134-74.broadband.corbina.ru)
17:45:29 <hud> hi all, newb question here: why can't I run this on list a  `map ((+1).reverse) a`
17:47:07 <geekosaur> what does it mean to reverse a number?
17:47:39 <geekosaur> (`(+1)` indicates list items are numbers)
17:48:00 zebrag joins (~chris@user/zebrag)
17:48:02 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds)
17:48:03 <geekosaur> :t map ((+1) . reverse)
17:48:04 <lambdabot> Num [a] => [[a]] -> [[a]]
17:48:16 <geekosaur> so somehow a list has to be a number
17:48:18 × alfonsox quits (~quassel@103.92.42.161) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
17:49:16 <hud> yes so I wanted to just reverse a list and apply some function to it
17:49:41 <geekosaur> then you reverse the list itself, not the individual items like map does
17:49:51 <geekosaur> :t map (+1) . reverse
17:49:52 <lambdabot> Num b => [b] -> [b]
17:51:32 <hud> ahh, ok but with that I do get some error ```* Couldn't match expected type: a -> [b]
17:51:33 <hud>                   with actual type: [a0]```
17:51:46 <hud> oh sorry not sure how to write code blocks here
17:52:12 <geekosaur> my guess is you did something like: map (+1) . reverse [1,2,3]
17:52:17 <geekosaur> you have a precedence error
17:52:33 <geekosaur> > (map (+1) . reverse) [1,2,3]
17:52:35 <lambdabot> [4,3,2]
17:52:48 <yushyin> hud: old school, we use paste services like https://paste.tomsmeding.com/
17:53:00 nhatanh02 joins (~satori@123.24.172.30)
17:53:21 Guest55 is now known as GreenHat
17:53:26 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
17:54:12 <geekosaur> the composition operator (.) operates on functions, and the precedence of function application is higher than anything else. so it reads (map (+1)) . (reverse [1,2,3]), which means (reverse [1,2,3]) has to be a function. but it's not a function, it's a list
17:55:38 <hud> Ahh! that works cheers. You got that from the error message?
17:56:17 <geekosaur> yes
17:56:34 <geekosaur> the expected type was a function, the actual type was a list
17:57:09 × obfusk quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (Ping timeout: 256 seconds)
17:57:14 <geekosaur> and this is a common beginner error, it's come up 3-4 times in the past two days
17:58:49 obfusk joins (~quassel@a82-161-150-56.adsl.xs4all.nl)
17:58:51 <hud> okay thanks, how do I work this paste code/error -> I copy paste the code block, submit and then?
17:58:57 nattiestnate joins (~nate@114.122.107.61)
17:59:19 <yushyin> share the link
17:59:28 <geekosaur> when you save it, the address bar in your browser will change, and you copy-paste that
17:59:57 <geekosaur> note that you can put multiple files in a paste, so you can separate the code from the error and maintain line numbers between them
18:00:16 <monochrom> Yeah put them in separate boxes but still on the same page.
18:00:29 <monochrom> Other pastebins can't do that. Lame.
18:01:15 <hud> ok let me test https://paste.tomsmeding.com/crEf1da4
18:01:34 <monochrom> Yeah like that.
18:01:43 justsomeguy joins (~justsomeg@user/justsomeguy)
18:01:43 <EvanR> hud, "whatever -> whatever" is error message jargon for function, "[whatever]" is error message jargon for list. Actually it goes beyond error messages. Now you know
18:03:01 <geekosaur> they come up everywhere, in fact
18:03:05 <geekosaur> :t (+1)
18:03:06 <lambdabot> Num a => a -> a
18:03:11 <hud> ok cheers this has been helpful - will most likely come back with more newb questions soon
18:04:05 <EvanR> :t cake
18:04:07 <lambdabot> error:
18:04:07 <lambdabot> • Variable not in scope: cake
18:04:07 <lambdabot> • Perhaps you meant one of these:
18:04:26 <EvanR> hmm, no ready examples of a list sitting around anymore
18:04:44 <monochrom> I don't think it's healthy to avoid jargon or even think in terms of describing things as "jargon" in the first place.
18:04:45 × ksqsf quits (~user@134.209.106.31) (Remote host closed the connection)
18:05:05 × falafel quits (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 256 seconds)
18:05:14 <monochrom> A programming language is a jargon language by definition. A person who learns programming has precisely signed up for it.
18:05:23 <geekosaur> well, once you've introduced the syntax of functions,
18:05:27 <geekosaur> :t reverse
18:05:28 <lambdabot> [a] -> [a]
18:05:53 <geekosaur> which is surprisingly useful: there are only two functions with that signature, `id` applied to a list and `reverse`
18:06:47 <EvanR> this is good jargon
18:06:51 <geekosaur> since `a` is unconstrained and unavailable otherwise, you know the function can't "see" the elements, only rearrange them somehow. and there are very few ways to rearrange them that don't require more information
18:06:57 <geekosaur> so it almost has to be `reverse`
18:07:34 <EvanR> er, there are a lot of ways to "blindly" rearrange a list
18:08:00 <monochrom> @type take 3
18:08:01 <lambdabot> [a] -> [a]
18:08:03 <geekosaur> but it's pure, so most of them aren't really doable
18:08:03 <monochrom> :)
18:08:28 <geekosaur> I was leaving out the ones that had more information (like `take 3`)
18:08:30 <geekosaur> :t take
18:08:31 <lambdabot> Int -> [a] -> [a]
18:08:38 <geekosaur> has that extra Int there
18:08:40 <EvanR> the 3 can be hard coded
18:08:42 × xff0x quits (~xff0x@2001:1a81:5206:b200:83f6:7a30:b822:7720) (Ping timeout: 268 seconds)
18:08:49 <monochrom> Yeah I'm hardcoding that 3.
18:09:14 <monochrom> But I'll stop now.
18:09:18 <EvanR> :t double (x:more) = x : x : double more
18:09:19 <lambdabot> error:
18:09:19 <lambdabot> parse error on input ‘=’
18:09:20 <lambdabot> Perhaps you need a 'let' in a 'do' block?
18:09:25 CiaoSen joins (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
18:09:30 <EvanR> :t let double (x:more) = x : x : double more in double
18:09:31 <lambdabot> [a] -> [a]
18:11:25 × thevishy quits (~Nishant@2405:201:f005:c007:1d22:93e8:b240:6332) (Quit: Leaving)
18:12:15 <EvanR> :t let half (x:_:more) = x : half more in half
18:12:16 <lambdabot> [a] -> [a]
18:12:35 xff0x joins (~xff0x@2001:1a81:5206:b200:83f6:7a30:b822:7720)
18:13:05 <monochrom> I think it's a dead horse now :)
18:13:57 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
18:14:08 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
18:15:40 <monochrom> I use f::a->[a] when I teach this. While it allows many possibilities, a single test case "f ()" nails it. If you tell me "f () = [(), ()]" then I know arbitrary "f x".
18:16:41 <EvanR> so there's like a skeleton of possibilities
18:17:05 <EvanR> a subset of things you can do if it weren't polymorphic
18:17:54 <EvanR> and a = () reveals it
18:18:03 <monochrom> [a]->[a] is richer, you have to test for various input lengths, and you have to watch out for permutations and duplications too. But you "just" have to test [], [0], [0,1], [0,1,2], ... , [0..]
18:19:49 <EvanR> ah () doesn't reveal it in that case
18:20:16 <monochrom> Yeah, consider "f [x,y] = [y, y, x]; f xs = xs"
18:21:06 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
18:21:34 <monochrom> Sometimes I pose the opposite question on exams: Give two implementations that agree on these test cases but differ on other inputs.
18:24:13 <monochrom> And then the Yoneda lemma generates a lot of good exam questions.
18:25:44 <monochrom> E.g., f :: (Int -> a) -> [a], or generally replace [] by any functor.
18:26:09 <monochrom> and replace Int by any concrete type.
18:28:15 × Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
18:29:05 Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com)
18:31:24 × Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
18:31:54 Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com)
18:34:45 kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
18:35:36 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
18:37:34 timCF joins (~timCF@m91-129-100-224.cust.tele2.ee)
18:38:00 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:39:47 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
18:39:47 n3rdy1 joins (~n3rdy1@c-73-14-53-56.hsd1.co.comcast.net)
18:44:11 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
18:44:25 <EvanR> Yoneda's lemma is the only theorem from category I've heard of. And it's only a lemma
18:44:31 <EvanR> category theory
18:45:29 <monochrom> Let me share with you how seriously I take the different wordings "theorem" "lemma" "proposition" "fact".
18:46:07 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
18:46:19 coolnickname joins (uid531864@user/coolnickname)
18:46:30 <timCF> Hello! Is it possible to pass somehow type parameters (via TypeApplications or Proxy) into QuasiQuoter expression? I need it for the case where smart constructor inside QQ do require knowledge of phantom type parameter to know restrictions of values generated in compile-time. I need something like `[moneyAmt|0.01|] :: MoneyAmt 'Base 'Sell` or even better `[moneyAmt|0.01|] :: MoneyAmt dim act` for
18:46:36 <timCF> polymorphic stuff. But it seems like QQ is not aware or type annotations I'm trying to feed into it.
18:49:01 <monochrom> In PVS (http://pvs.csl.sri.com/), all of those words mean the same thing. You state a theorem by starting with "theorem" or "lemma" or "proposition" or "fact", it doesn't matter which.
18:49:23 <monochrom> In fact, or "claim", "corollary", "sublemma", even "conjecture".
18:49:32 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
18:49:32 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
18:49:32 wroathe joins (~wroathe@user/wroathe)
18:49:36 <monochrom> I was henceforth enlightened.
18:51:58 × zincy quits (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807) (Remote host closed the connection)
18:52:13 zincy joins (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71)
18:53:55 <EvanR> heh, fact vs claim
18:54:04 <monochrom> heh
18:54:10 <EvanR> is this Donald Trump's programming language of choice
18:54:52 <monochrom> Does he like dependent types? :)
18:55:03 <EvanR> that's cool that it was featured in The Martian
18:55:15 sirlensalot joins (~sirlensal@ool-44c5f8c9.dyn.optonline.net)
18:56:17 × nhatanh02 quits (~satori@123.24.172.30) (Ping timeout: 240 seconds)
19:04:17 × deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 240 seconds)
19:04:19 ubert joins (~Thunderbi@p200300ecdf0994eb50cdffdede185786.dip0.t-ipconnect.de)
19:06:11 × max22- quits (~maxime@2a01cb08833598008a92023ced423869.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds)
19:06:17 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
19:09:33 × GreenHat quits (~Guest55@95-25-134-74.broadband.corbina.ru) (Ping timeout: 256 seconds)
19:13:26 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 268 seconds)
19:13:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
19:14:16 falafel joins (~falafel@cpe-76-168-195-162.socal.res.rr.com)
19:21:19 × dcoutts__ quits (~duncan@71.78.6.51.dyn.plus.net) (Remote host closed the connection)
19:24:13 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
19:24:30 lavaman joins (~lavaman@98.38.249.169)
19:29:06 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
19:31:20 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:31:20 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
19:31:20 wroathe joins (~wroathe@user/wroathe)
19:32:30 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
19:37:00 × TonyStone quits (~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) (Quit: Leaving)
19:37:15 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
19:43:14 max22- joins (~maxime@2a01cb088335980068088847c57fd3ba.ipv6.abo.wanadoo.fr)
19:48:51 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
19:50:37 geekosaur joins (~geekosaur@xmonad/geekosaur)
19:51:59 jgeerds joins (~jgeerds@55d4ac73.access.ecotel.net)
19:55:12 × urdh quits (~urdh@user/urdh) (Quit: Boom!)
19:59:24 × ubert quits (~Thunderbi@p200300ecdf0994eb50cdffdede185786.dip0.t-ipconnect.de) (Remote host closed the connection)
20:01:59 Erutuon joins (~Erutuon@user/erutuon)
20:05:51 × juhp quits (~juhp@128.106.188.82) (Ping timeout: 268 seconds)
20:06:17 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
20:08:08 × zincy quits (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Remote host closed the connection)
20:08:17 juhp joins (~juhp@128.106.188.82)
20:09:17 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:15:24 urdh joins (~urdh@user/urdh)
20:15:46 × urdh quits (~urdh@user/urdh) (Client Quit)
20:16:57 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds)
20:18:02 × falafel quits (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 240 seconds)
20:23:37 urdh joins (~urdh@user/urdh)
20:23:39 × urdh quits (~urdh@user/urdh) (Remote host closed the connection)
20:23:55 Michal[m]1 joins (~oomiguelm@2001:470:69fc:105::1:5ab0)
20:25:02 oo_miguel joins (~pi@77.252.47.226)
20:27:22 × jeffz` quits (~user@lambda.xen.prgmr.com) (Remote host closed the connection)
20:28:32 × dan-so quits (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 240 seconds)
20:29:02 Akiva joins (~Akiva@user/Akiva)
20:29:40 jeffz` joins (~user@lambda.xen.prgmr.com)
20:29:50 dan-so joins (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
20:30:37 urdh joins (~urdh@user/urdh)
20:30:39 × urdh quits (~urdh@user/urdh) (Remote host closed the connection)
20:33:22 finalti[m] joins (~finaltima@2001:470:69fc:105::d909)
20:36:19 urdh joins (~urdh@user/urdh)
20:36:21 × urdh quits (~urdh@user/urdh) (Remote host closed the connection)
20:40:03 <c_wraith> timCF: https://hackage.haskell.org/package/template-haskell-2.18.0.0/docs/Language-Haskell-TH-Quote.html#t:QuasiQuoter
20:40:25 <c_wraith> timCF: quoteExp specified Q Exp
20:40:50 <c_wraith> timCF: So no, you can't use inference across the quote mechanism.
20:41:43 <c_wraith> timCF: you need typed template haskell to manage that.
20:42:50 <c_wraith> timCF: I'd say your best options are either moving that information into the String somehow (fragile, but maybe good enough) or using a typed template haskell splice (it can work well, but it just went through a massive API change with GHC 9, making it hard to write portably)
20:43:02 zincy joins (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71)
20:45:10 urdh joins (~urdh@user/urdh)
20:45:11 × urdh quits (~urdh@user/urdh) (Remote host closed the connection)
20:45:13 mvk joins (~mvk@2607:fea8:5cdd:f000::917a)
20:47:09 urdh joins (~urdh@user/urdh)
20:47:11 × urdh quits (~urdh@user/urdh) (Remote host closed the connection)
20:47:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
20:51:11 falafel joins (~falafel@cpe-76-168-195-162.socal.res.rr.com)
20:52:46 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
20:52:46 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
20:52:46 wroathe joins (~wroathe@user/wroathe)
20:53:43 Las[m] joins (~lasmatrix@2001:470:69fc:105::74e)
20:55:39 × falafel quits (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 256 seconds)
20:55:53 lbseale joins (~ep1ctetus@user/ep1ctetus)
20:56:23 <Las[m]> I've heard that Backpack isn't likely to be supported in GHC going forward, how true is this?
20:57:39 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
20:57:52 × xsperry quits (~xs@user/xsperry) ()
20:58:27 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
20:58:35 <geekosaur> this is probably not the best place to ask that question, but given that stack still shows no signs of supporting it and excluding ~half the ecosystem from it is a bad plan, and nobody seems to have stepped forward to support it in future ghcs, I'd suspect it's likely
20:59:44 <EvanR> oof
20:59:57 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
21:00:24 urdh joins (~urdh@user/urdh)
21:00:41 × urdh quits (~urdh@user/urdh) (Client Quit)
21:02:15 <mjrosenb> backpack?
21:02:25 pavonia joins (~user@user/siracusa)
21:02:41 <EvanR> kind of like a module system for haskell
21:02:57 × n3rdy1 quits (~n3rdy1@c-73-14-53-56.hsd1.co.comcast.net) (Ping timeout: 240 seconds)
21:04:05 urdh joins (~urdh@user/urdh)
21:04:08 × urdh quits (~urdh@user/urdh) (Remote host closed the connection)
21:04:12 <geekosaur> yeh, backpack was intended to be like SML functors (parameterized modules)
21:04:42 <Las[m]> geekosaur: Can you elaborate on the "stepped up" part?
21:04:46 <Las[m]> Is the original contributor not active anymore?
21:05:00 <geekosaur> it was a PhD thesis, they've since moved on
21:05:58 <geekosaur> iirc hvr stepped forward for a while but he's vanished as well
21:06:01 <Las[m]> That is quite unfortunate.
21:06:54 <Las[m]> Perhaps I should just use CPP for my simple use case.
21:07:13 <sm> everyone says that, but it seems nobody cares about it that much
21:07:15 urdh joins (~urdh@user/urdh)
21:07:19 <Las[m]> I just want to switch have "production" and "development" modes.
21:07:21 <geekosaur> also I think what's implemented is only part of the full system, but again nobody seems to be interested in finishing it
21:07:47 <Las[m]> I think it's likely that 99% of the people who think it is unfortunate are not comfortable enough with GHC to contribute.
21:08:03 <geekosaur> not sure backpack is worth the effort for that; I'd just use cpp
21:08:07 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
21:08:07 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
21:08:07 wroathe joins (~wroathe@user/wroathe)
21:08:13 <Las[m]> AFAICT it's limited compared to SML functors, was this supposed to be fixed/improved upon?
21:08:23 <Las[m]> It just seemed like a neat chance to use Backpack finally.
21:08:26 <geekosaur> as I said, I think it's incomplete
21:09:00 <sm> I think people who want it generally don't consider the maintenance, complexity, ecosystem costs
21:09:16 <geekosaur> and, well, with stack not supporting it I think a largeish number of Haskell folks are excluded form it anyway
21:10:04 <sm> those are what have discouraged expert devs from pushing it further, I suspect
21:10:43 <EvanR> was backpack a ghc plugin, or more than that
21:10:51 <geekosaur> more than that
21:10:52 <Las[m]> No it's integrated into GHC.
21:11:07 <Las[m]> Thanks for the information, it's really neat though.
21:11:13 <EvanR> can it be a plugin
21:11:17 <Las[m]> Much more "FP" than CPP and Cabal flags.
21:11:25 <geekosaur> too deeply woven in, I'm pretty sure
21:11:44 <geekosaur> even with the somewhat expanded plugin system in ghc9+
21:12:41 <geekosaur> suppose someone can try to get in touch with ezyang and find out his opinion on continued maintenance and maybe what's needed to complete it
21:13:05 <geekosaur> and whether there's any chance of supporting it via plugins (and what kind of changes the plugin system might need to pull that off)
21:13:18 <timCF> c_wraith: thanks for reply!
21:13:36 <mjrosenb> ooh, I do like the sound of SML-style functors.
21:13:43 Codaraxis joins (~Codaraxis@user/codaraxis)
21:13:47 <mjrosenb> I've always felt they were missing from haskell.
21:14:40 yauhsien joins (~yauhsien@118-167-42-25.dynamic-ip.hinet.net)
21:15:05 <EvanR> you can parameterize records, but records can't hold instances or local classes. And you can't "open" a record
21:15:38 × kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection)
21:16:02 kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
21:16:54 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
21:17:25 <geekosaur> not sure backpack even notionally supported "open" though
21:18:09 <geekosaur> that might have been part of why backpack never caught on, in fact
21:18:29 TonyStone joins (~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com)
21:19:39 <Las[m]> https://gitlab.haskell.org/ghc/ghc/-/wikis/Backpack-refactoring !
21:19:51 × yauhsien quits (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
21:31:25 × jespada quits (~jespada@87.74.33.157) (Ping timeout: 240 seconds)
21:32:25 <ProfSimm> I'm wondering has anyone ever thought if we have no mutable state and side-effects, is it possible to tweak Haskell so it can run in reverse, i.e. feed output to a function, it gives you the inputs?
21:33:10 <ProfSimm> Obviously this won't work with many existing functions, but you can tweak the output to produce part of the input necessary to compute in reverse, 5 + 6 => 11, 6 11 - 6 => 5, 6
21:33:25 jespada joins (~jespada@87.74.33.157)
21:34:16 <EvanR> you're getting reversibility which most functions aren't, because they aren't injective
21:34:21 <EvanR> forgetting*
21:34:30 <Las[m]> ProfSimm: In a dependently typed language you could probably define a type for a reversible function.
21:34:30 <geekosaur> yeh
21:35:06 <EvanR> and many functions should be reversible but aren't thanks to floating point :'(
21:35:29 <geekosaur> and worth noting is that in many cases you'd end up needing state to make a function injective
21:35:42 <geekosaur> so the premise may be wrong
21:37:20 <Las[m]> `reversible a b = DPair (a -> b) $ \f => DPair (b -> a) $ \g => ((x : a) -> g (f x) === x)` or something in Idris 2
21:37:31 <EvanR> any function can be made reversible by promoting the domain and range from A -> B to (A,B) -> (B,A) and tracking what argument you used
21:39:47 <EvanR> I'm wrong!
21:40:26 <geekosaur> I was wondering if running them in Writer might help
21:40:52 <ProfSimm> A, B -> C to A, B -> B, C
21:41:23 <EvanR> can't parse
21:41:27 <geekosaur> of course they'd have to tell appropriately
21:42:34 <EvanR> any function can be made reversible by promoting the codomain to a pair that saves what argument you used, and so if the computations aren't naturally reversible, you get a lot of space usage for remembering
21:45:44 <EvanR> xor can be made reversible by adding 1 more bit to the output, but and and or can't
21:48:16 <dsal> > 727477226272 `mod` 13
21:48:17 <lambdabot> 4
21:51:03 <mjrosenb> you could also probably get away with a weaker form of reversibility, which is just a function that returns *an* input that results in the desired output.
21:52:17 × mvk quits (~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds)
21:52:35 <mjrosenb> ok, so, awkward gaps in my knowledge time: what happened to `cabal sandbox` in v2?
21:53:13 <sirlensalot> nix-style builds are now the default
21:53:31 <sclv> sandbox is gone entirely
21:53:56 <sclv> it stuck around for a bit, but in the last major release it got removed entirely to clean up the codebase
21:57:43 <mjrosenb> I'm not sure how nix-style builds have replced a sandbox.
21:58:41 × kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection)
21:59:06 kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
21:59:37 <monochrom> Maybe this helps: Imagine sandboxes but if it is safe to share a built dependency then it's shared so you save some build time.
22:00:29 jtomas joins (~jtomas@153.red-83-53-252.dynamicip.rima-tde.net)
22:01:11 <monochrom> So when using v2 you can just treat your "project" directory as an automatic sandbox.
22:03:03 <sm> like a sandbox that uses a layered filesystem
22:03:31 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:03:47 <geekosaur> yeh, v2 is automatic sandboxing, sandboxes were an attempt to keep v1 builds under control without it
22:04:31 <geekosaur> the only place where I've had problems is xmonad which kinda expects to be globally (or at least user) available, but we have solutions there as well
22:04:55 <geekosaur> and I'm noodling how to extend the automatic stack support in 0.17.0 to cabal v2
22:09:23 <monochrom> How to gain reversibility depends on why you want reversibility.
22:10:09 <monochrom> "because I want quantum computing" is very different from "because I want an educational algorithm visualizer that has a bidirectional slider".
22:11:11 acidjnk joins (~acidjnk@p200300d0c7271e865819ff1869a0a668.dip0.t-ipconnect.de)
22:13:34 superstar64 joins (~superstar@2600:1700:ed80:50a0:d250:99ff:fe2c:53c4)
22:13:35 <monochrom> There is a third one. "because I want to reduce waste heat"
22:14:52 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:16:38 × MoC quits (~moc@user/moc) (Ping timeout: 260 seconds)
22:17:16 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
22:17:21 × kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
22:17:35 kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
22:18:28 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
22:20:17 × jtomas quits (~jtomas@153.red-83-53-252.dynamicip.rima-tde.net) (Ping timeout: 240 seconds)
22:23:30 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:23:43 otherwise joins (~otherwise@c-71-231-39-206.hsd1.wa.comcast.net)
22:23:53 lbseale joins (~ep1ctetus@user/ep1ctetus)
22:25:57 <mjrosenb> monochrom: makes sense.
22:29:31 notzmv joins (~zmv@user/notzmv)
22:31:16 × coolnickname quits (uid531864@user/coolnickname) (Quit: Connection closed for inactivity)
22:32:18 deadmarshal joins (~deadmarsh@95.38.229.126)
22:36:37 × deadmarshal quits (~deadmarsh@95.38.229.126) (Ping timeout: 240 seconds)
22:37:38 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
22:38:04 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
22:38:24 vicfred joins (~vicfred@user/vicfred)
22:39:08 × kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer)
22:40:25 kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it)
22:43:29 <otherwise> LYAH introduces @ without any explanation :(. map (\l@(x:xs) -> (x,length l)) [[1,1,1,1,1],[2,2],[4],[5],[000]]
22:44:11 <geekosaur> "as-pattern"
22:44:42 <geekosaur> the value of the expression matched by pattern on the right is bound by the identifier on the left
22:45:10 <geekosaur> so in this case you get the whole list as l, in addition to its head and tail as x and xs
22:46:04 <otherwise> cool! thanks, that is clear
22:46:36 <hpc> you can pop it into ghci as well
22:46:49 <hpc> and experiment with it
22:47:02 <hpc> (probably a good idea on all the other code samples too)
22:50:26 <otherwise> kind of strange to me why :t @, :doc @ and :def @ all show nothing
22:51:09 <EvanR> if you want the type of an operator you have to put ( )
22:51:17 <geekosaur> becuase it has no type
22:51:17 <EvanR> :t (!!)
22:51:18 <lambdabot> [a] -> Int -> a
22:51:22 <otherwise> hpc: that is what I love so much about haskell, is ghc makes experimentation so accessible. :)
22:51:42 <geekosaur> and is built into the compiler, as opposed to bei8ng defined somewhere that has documentation for :doc
22:51:45 <mjrosenb> well, ghci
22:52:05 <otherwise> mjrosenb yes, forgot the i
22:53:41 × zincy quits (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Remote host closed the connection)
22:53:47 <hpc> ghc too, with holes
22:54:17 <monochrom> @ is a reserved word, not an identifier. :t :doc etc do not known reserved words. No one has any expectation over ":type if".
22:55:14 <hpc> i was going to suggest hoogle, but it seems to not give results for syntax anymore :(
22:55:31 <hpc> you used to be able to hoogle things like "data" or "type" and get a paragraph or two
22:57:04 justsomeguy joins (~justsomeg@user/justsomeguy)
22:57:48 <EvanR> have to say I had a hard time reading LYAH back in the day
22:58:05 <EvanR> like, the information to nonsense ratio was low
22:58:36 <EvanR> you've been reading it for how many weeks and you just got to @ ?
22:58:36 <dsal> I find it a bit weird. I'm still trying to decide how much work I want to put into zippers. heh
22:58:45 <dsal> (the chapter on zippers came up in a search)
22:59:00 <mjrosenb> so far, my experience with haskell-language-server has proved it to be very good at showing me reserved keywords, and not so much at anything else.
22:59:41 <mjrosenb> zippers are nice to understand, and will be useful every once in a while. If it is useful, use it, if it isn't don't shoehorn it into a good solution.
22:59:47 <monochrom> If you just want to learn practical zippers, just having seen the list example and a binary tree example, you can already extrapolate to all practice use cases.
23:00:31 <monochrom> If you want to dive into the theory, that's a rabbit hole of doing formal differentiation on type expressions >:)
23:00:39 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
23:00:50 <EvanR> "the zipper design pattern" chapter by gang of λ
23:00:53 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
23:01:32 × hiato quits (~op_4@user/op-4/x-9116473) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
23:02:11 op_4 joins (~op_4@user/op-4/x-9116473)
23:02:50 <dsal> It's more tedious than I'd like.
23:04:59 <dsal> In particular, I can't randomly jump between points.
23:05:22 <EvanR> if it's a static structure, you can put all possible zippers in a map
23:06:01 <dsal> The problem is that I need to modify a few different parts.
23:06:10 biberu\ joins (~biberu@user/biberu)
23:06:35 <dsal> I started by making an iterator that would do the thing, which was pretty easy, but if I replace a hole, I get a new zipper and can't just replace holes in others and have it do something meaningful.
23:06:44 <EvanR> then zippering around seems absolutely necessary given how haskell data works
23:06:58 <EvanR> rather, how it gets modified
23:07:11 <monochrom> Zipper jumps to adjacent places only, yeah.
23:07:26 <monochrom> For random access, consider lenses and optics.
23:07:48 <dsal> The problem is that I want a logically adjacent node in a tree.
23:08:58 <dsal> When iterating, it's pretty easy because I can just keep recursing down and right and eventually visit everything. But if I find something interesting and want to find the previous value, I have to go up until I can go left and then go down and right to find the value just to the left.
23:09:18 <EvanR> find something interesting and the previous value
23:09:24 <EvanR> screams "zip ap tail"
23:09:57 × biberu quits (~biberu@user/biberu) (Ping timeout: 256 seconds)
23:09:57 biberu\ is now known as biberu
23:10:01 geekosaur wonders about comonad
23:10:03 <dsal> Yeah, it was easy to do this when I flattened things into a list, but then I can't modify both values.
23:10:06 <EvanR> that too
23:10:08 <dsal> (three values in this case)
23:10:26 <glguy> I did a version of https://adventofcode.com/2021/day/18 with zippers (just on the topic of things to do with them)
23:10:49 <dsal> glguy: Yeah, that's what reminded me that they existed. :) I'm trying to do the thing with a uniplate zipper and it mostly just seems more tedious.
23:11:15 <dsal> "trying" in this case is mostly a concern of effort and motivation and less on possibility. It just doesn't seem easier.
23:11:20 <EvanR> i used a zipper for the guts of a command line text buffer
23:11:24 <EvanR> worked
23:11:29 zincy joins (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71)
23:11:48 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
23:11:55 <dsal> zipper was super easy for split on day 18, though.
23:14:09 <glguy> How that aoc is over for the year I've been updating all the past years to use my current aoc library and get more and more haddocks written https://glguy.net/advent/
23:14:54 <dsal> I should do that. My aoc library has some gross parts I keep reusing that could be a lot better. I'm still not done with all the years.
23:15:54 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:26:14 lavaman joins (~lavaman@98.38.249.169)
23:27:36 <dsal> I guess I'm going to stop with this zipper for exploding. I can't seem to make it not be a lot more code that just numbering. This is one of those cases where the problem is so small it doesn't really matter. but it's tedious to find the right spot, fix it up, then wander up until I can wander left and then wander down and to the right to find the left thing. And then from there wander back up twice to get to the next spot.
23:28:10 <EvanR> just numbering... or wrapping in the relevant exploding data
23:29:39 <dsal> Numbering was a one-liner. The splitting was smaller with a zipper than the original thing I did. That could've also been smaller, but the zipper was really nice there.
23:30:32 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
23:30:32 <EvanR> wrapped in the relevant split data, which was a bool
23:30:46 × CiaoSen quits (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
23:31:12 × zincy quits (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Ping timeout: 268 seconds)
23:32:10 <otherwise> ghci let me do g s@(x:xs) = x:s. but if I let that be a function in main.hs, it is not allowed. weird...
23:33:07 <EvanR> that's funny
23:33:09 <geekosaur> "not allowed" in what way?
23:34:11 <EvanR> > let g ones@(x:xs) = x:ones in g (1:undefined)
23:34:12 <lambdabot> [1,1*Exception: Prelude.undefined
23:34:19 × cosimone quits (~user@93-47-231-248.ip115.fastwebnet.it) (Ping timeout: 256 seconds)
23:34:45 <EvanR> 🤡
23:35:50 <otherwise> https://paste.tomsmeding.com/lkQj1j5f
23:36:25 <EvanR> what else is in that file
23:36:55 <geekosaur> ^
23:36:58 Sgeo joins (~Sgeo@user/sgeo)
23:37:10 <geekosaur> looks like the real problem is on the line of code immediately before that definition
23:38:01 <otherwise> i wrote file.hs, but i'm reloading modules.hs
23:38:19 × Sgeo_ quits (~Sgeo@user/sgeo) (Ping timeout: 250 seconds)
23:41:42 × dan-so quits (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 268 seconds)
23:42:33 <monochrom> This is why tech support is hard without remote rootkit.
23:43:37 <otherwise> okay so it did work when I put it into its own file..
23:44:12 <EvanR> probably messed up indentation or mismatched parentheses
23:44:19 <EvanR> (earlier in the file)
23:44:43 <monochrom> http://www.vex.net/~trebla/humour/tautologies.html #4
23:45:32 xsperry joins (~xs@user/xsperry)
23:47:02 × Jing quits (~hedgehog@2604:a840:3::1067) (Remote host closed the connection)
23:47:37 Jing joins (~hedgehog@2604:a840:3::1067)
23:49:32 <otherwise> okay, it as just a missed parentheses, thats embarrassing. Also it means haskell works, so thats good!
23:49:57 ksqsf joins (~user@134.209.106.31)
23:51:26 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:52:53 <EvanR> yeah someone probably would have noticed if correct parentheses gave that error
23:53:11 <EvanR> (and indentation)
23:54:09 dan-so joins (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
23:56:58 × jgeerds quits (~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 260 seconds)
23:58:03 <otherwise> monochrom: yes, I was the cause to why the code I wrote caused an error. :)
23:58:36 madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net)
23:58:42 n3rdy1 joins (~n3rdy1@2601:281:c780:a510:9005:8349:e7c7:a7ad)
23:58:44 zincy joins (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71)

All times are in UTC on 2021-12-28.