2020/11/16

2020-11-16 00:00:00 +0100 <boom> x z y
2020-11-16 00:00:01 +0100 <koz_> Yes.
2020-11-16 00:00:11 +0100 <koz_> So let's parenthesise _that_for convenience.
2020-11-16 00:00:18 +0100 <koz_> \y . (x z y)
2020-11-16 00:00:24 +0100 <koz_> And then paste that into our original.
2020-11-16 00:00:30 +0100 <koz_> \x . (\y . (x z y))
2020-11-16 00:00:50 +0100 <koz_> Now, to deal with 'x z y', we apply the rule you pasted way back above.
2020-11-16 00:01:01 +0100 <koz_> Which says that 'x z y' is really what?
2020-11-16 00:01:07 +0100 <boom> (x z) y
2020-11-16 00:01:20 +0100 <koz_> So after convenience parenthesising and pasting, we get?
2020-11-16 00:01:47 +0100 <boom> \x . (\y . ((x z) y))
2020-11-16 00:01:53 +0100nexii(~user@38-73-246-124.starry-inc.net)
2020-11-16 00:02:08 +0100 <koz_> Does that help?
2020-11-16 00:02:27 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 00:02:37 +0100 <boom> yeah! thanks
2020-11-16 00:03:32 +0100 <koz_> @pl \f -> f x >=> f y
2020-11-16 00:03:32 +0100 <lambdabot> liftM2 (>=>) ($ x) ($ y)
2020-11-16 00:04:21 +0100 <koz_> So wait that'd be like (>=>) <$> ($ x) ($ y) f?
2020-11-16 00:04:24 +0100 <koz_> Sorry
2020-11-16 00:04:36 +0100 <koz_> (>=>) <$> ($ x) <*> ($ y) <*> f
2020-11-16 00:04:36 +0100 <boom> But in this way of doing things have we used the fact that application has priority ?
2020-11-16 00:05:04 +0100 <koz_> boom: I don't think we have, no.
2020-11-16 00:05:09 +0100 <MarcelineVQ> ((>=>) <$> ($ x) <*> ($ y)) f ?
2020-11-16 00:05:24 +0100 <koz_> MarcelineVQ: Egads lol nope.
2020-11-16 00:05:46 +0100conal(~conal@64.71.133.70)
2020-11-16 00:06:00 +0100feliocrat(~feliocrat@95.70.185.239) (Remote host closed the connection)
2020-11-16 00:06:40 +0100fendor(~fendor@178.165.131.163.wireless.dyn.drei.com) (Remote host closed the connection)
2020-11-16 00:07:25 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-16 00:09:37 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2020-11-16 00:13:09 +0100Tario(~Tario@37.218.241.6)
2020-11-16 00:14:13 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-16 00:14:57 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-11-16 00:16:37 +0100conal(~conal@64.71.133.70)
2020-11-16 00:17:01 +0100aarvar(~foewfoiew@50.35.43.33) (Ping timeout: 260 seconds)
2020-11-16 00:17:48 +0100 <monochrom> You are also in for a lot of confusion and then disillusionment about what "priority" is really for.
2020-11-16 00:18:27 +0100 <monochrom> TL;DR the highschool narrative of "do this first, do that later" is simplistic and inapplicable.
2020-11-16 00:18:51 +0100 <monochrom> Truth be told it has never been about "do what first".
2020-11-16 00:19:06 +0100 <Uniaika> :o
2020-11-16 00:19:15 +0100 <Uniaika> so what is it about then?
2020-11-16 00:19:16 +0100 <koz_> Something something order of reduction something something confluence something something.
2020-11-16 00:19:30 +0100 <monochrom> Parsing. Where you may omit parentheses.
2020-11-16 00:19:33 +0100 <koz_> I can something-something about a bazillion more terms in there.
2020-11-16 00:19:41 +0100 <koz_> (heh)
2020-11-16 00:19:54 +0100Tario(~Tario@37.218.241.6) (Read error: Connection reset by peer)
2020-11-16 00:21:04 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-ypggeakuiydyhszt) (Quit: Connection closed for inactivity)
2020-11-16 00:21:52 +0100 <monochrom> It is just a happy coincidence that highschool operators are mostly eager (anti-lazy), therefore what's deeper in the parse tree are also what's "done" earlier.
2020-11-16 00:21:59 +0100 <monochrom> However, consider this:
2020-11-16 00:22:02 +0100Tario(~Tario@37.218.241.6)
2020-11-16 00:22:41 +0100 <monochrom> @quote monochrom lazy.eval
2020-11-16 00:22:41 +0100 <lambdabot> monochrom says: some kind of lazy evaluation is already known to highschool kids. teachers tell you that in a*(b+c), "evaluate b+c first", right? well, I challenge you to take 0*(389238493+97283748)
2020-11-16 00:22:41 +0100 <lambdabot> and find one single student who faithfully evaluate 389238493+97283748 first.
2020-11-16 00:23:08 +0100 <koz_> :D
2020-11-16 00:23:13 +0100bangtree(~user@50-102-199-84.ekht.in.frontiernet.net)
2020-11-16 00:23:38 +0100 <monochrom> This proves that "precedence is about evaluation order" is a white lie.
2020-11-16 00:24:22 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 00:24:29 +0100 <monochrom> We forgive highschools for this white lie because the average people cannot cope with both concepts, evaluation order and parse tree, at the same time.
2020-11-16 00:25:02 +0100 <monochrom> But as advanced programmers we cannot hang on to that untenable model ourselves.
2020-11-16 00:25:33 +0100christo(~chris@81.96.113.213)
2020-11-16 00:30:10 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-11-16 00:30:39 +0100 <pjb> monochrom: this is bullshit. There are he precendence rules, and then there are simplifications and shortcuts. There are numbers a, b and c with non-trivial values o such as a*(b+c) can be evaluated to d quickly, by following some simplification rule. for example, 1289389183012*(812738127389173981+-812738127389173981).
2020-11-16 00:30:50 +0100 <pjb> or 1289389183012*(812738127389173981+-812738127389173980).
2020-11-16 00:32:44 +0100 <MarcelineVQ> non-trivial doesn't mean big, it means it won't show up as a question in a trivial pursuit board game
2020-11-16 00:34:56 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 256 seconds)
2020-11-16 00:35:15 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
2020-11-16 00:37:16 +0100mirrorbird(~psutcliff@176.227.57.79) (Ping timeout: 272 seconds)
2020-11-16 00:37:23 +0100Tario(~Tario@37.218.241.6) (Read error: Connection reset by peer)
2020-11-16 00:38:53 +0100forell(~forell@unaffiliated/forell) (Ping timeout: 260 seconds)
2020-11-16 00:39:58 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2020-11-16 00:40:12 +0100Tario(~Tario@201.192.165.173)
2020-11-16 00:42:54 +0100noan(~noan@2604:a880:400:d0::12fc:5001) (Quit: ZNC 1.8.1 - https://znc.in)
2020-11-16 00:42:54 +0100DigitalKiwi(~kiwi@unaffiliated/digitalkiwi) (Quit: quite.)
2020-11-16 00:43:24 +0100noan(~noan@2604:a880:400:d0::12fc:5001)
2020-11-16 00:45:19 +0100DigitalKiwi(~kiwi@unaffiliated/digitalkiwi)
2020-11-16 00:45:52 +0100ericsagn1(~ericsagne@2405:6580:0:5100:4a3c:ad37:e0cc:3345) (Ping timeout: 260 seconds)
2020-11-16 00:46:43 +0100forell(~forell@unaffiliated/forell)
2020-11-16 00:48:42 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad)
2020-11-16 00:49:48 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 00:50:28 +0100christo(~chris@81.96.113.213)
2020-11-16 00:54:09 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz)
2020-11-16 00:54:31 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-16 00:58:09 +0100ericsagn1(~ericsagne@2405:6580:0:5100:903c:6f64:11e3:36e2)
2020-11-16 01:00:01 +0100pleia21(~pleia2@92.223.89.101) ()
2020-11-16 01:00:59 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-16 01:01:22 +0100moet(~moet@mobile-166-137-178-183.mycingular.net) (Ping timeout: 260 seconds)
2020-11-16 01:02:56 +0100justsomeguy(~justsomeg@216.186.218.241)
2020-11-16 01:02:56 +0100justsomeguy(~justsomeg@216.186.218.241) (Changing host)
2020-11-16 01:02:56 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-11-16 01:03:35 +0100atk(~Arch-TK@ircpuzzles/staff/Arch-TK) (Quit: Well this is unexpected.)
2020-11-16 01:03:44 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2020-11-16 01:04:28 +0100atk(~Arch-TK@ircpuzzles/staff/Arch-TK)
2020-11-16 01:10:03 +0100bangtree(~user@50-102-199-84.ekht.in.frontiernet.net) ("ERC (IRC client for Emacs 28.0.50)")
2020-11-16 01:11:17 +0100kritzefitz(~kritzefit@212.86.56.80) (Quit: Leaving)
2020-11-16 01:13:40 +0100andreas303(~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
2020-11-16 01:14:58 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
2020-11-16 01:15:59 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 01:16:04 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
2020-11-16 01:16:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 01:16:43 +0100andreas303(~andreas@gateway/tor-sasl/andreas303)
2020-11-16 01:18:00 +0100Chi1thangoo(~Chi1thang@87.112.60.168) (Ping timeout: 256 seconds)
2020-11-16 01:19:33 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 01:20:13 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th)
2020-11-16 01:21:28 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-16 01:22:41 +0100electricityZZZZ(~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net) (Quit: Leaving)
2020-11-16 01:22:53 +0100christo(~chris@81.96.113.213)
2020-11-16 01:24:23 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-11-16 01:24:29 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad)
2020-11-16 01:25:36 +0100nineonine(~textual@S01061cabc0b095f3.vf.shawcable.net)
2020-11-16 01:26:23 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-16 01:27:47 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 265 seconds)
2020-11-16 01:29:03 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 260 seconds)
2020-11-16 01:29:33 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-eerkvmaqmqbakgpb) (Quit: Connection closed for inactivity)
2020-11-16 01:30:39 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-16 01:31:41 +0100hekkaidekapus_(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-16 01:34:43 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2020-11-16 01:38:42 +0100plutoniix(~q@ppp-223-24-167-34.revip6.asianet.co.th)
2020-11-16 01:38:51 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 01:39:10 +0100plutoniix(~q@ppp-223-24-167-34.revip6.asianet.co.th) (Read error: Connection reset by peer)
2020-11-16 01:40:29 +0100plutoniix(~q@175.176.222.7)
2020-11-16 01:43:22 +0100 <boom> I want to calculate (λx.λy.x z y)[x y/z] now. What does x y/z mean ?
2020-11-16 01:43:36 +0100 <boom> [x y/z]
2020-11-16 01:48:35 +0100 <monochrom> This depends on authors. Many authors write that to mean "replace z by (x y)".
2020-11-16 01:49:02 +0100 <monochrom> The trouble is the other authors write [z/x y] for that.
2020-11-16 01:49:51 +0100 <MarcelineVQ> oh so it's like, ommiting the := you'd see in places like the wikipedia lambda calculus article
2020-11-16 01:49:55 +0100conal(~conal@64.71.133.70)
2020-11-16 01:49:55 +0100klixto(~klixto@130.220.8.140)
2020-11-16 01:50:07 +0100 <monochrom> Metaly, I cannot believe that the text you're reading this from didn't laid out this.
2020-11-16 01:50:44 +0100 <monochrom> I very much prefer [var := expr], yes. It is much much more guessable.
2020-11-16 01:52:13 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 256 seconds)
2020-11-16 01:52:31 +0100 <monochrom> My thesis supervisor recognizes that this is formalism going overboard, so he simply writes, e.g., "(λx. x+1) 5 = (substitute 5 for x in x+1)"
2020-11-16 01:52:35 +0100 <boom> Somewhere in my notes its written x[u/x] = u , so i guess you replace x by u
2020-11-16 01:53:34 +0100 <boom> so yeah replace z by (x y)
2020-11-16 01:55:26 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 01:56:35 +0100 <monochrom> MarcelineVQ: A bit of addendum. Omitting := but putting back / in its place. And write in the other order.
2020-11-16 01:57:01 +0100 <MarcelineVQ> well =: looks silly
2020-11-16 01:57:08 +0100 <boom> if i look at λx.λy.x z y the only free variable is z
2020-11-16 01:57:50 +0100 <boom> for some reason the x y in [x y/ z] are free ?
2020-11-16 01:57:53 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) (Ping timeout: 256 seconds)
2020-11-16 01:58:40 +0100 <boom> I don't understand why my prof meant
2020-11-16 01:58:54 +0100 <monochrom> Ah, you may have to worry about variable capture, and pretend you're doing instead (λx1.λy1.x1 z y1)[x y/z]
2020-11-16 01:58:58 +0100DataComp_(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-11-16 01:59:07 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 260 seconds)
2020-11-16 01:59:19 +0100 <monochrom> Such is the problem with named variables. >:)
2020-11-16 01:59:27 +0100 <boom> yes there is somehting like that
2020-11-16 02:00:27 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-16 02:01:42 +0100lucasb(uid333435@gateway/web/irccloud.com/x-vbpjdjtpfxqmyplf) (Quit: Connection closed for inactivity)
2020-11-16 02:02:15 +0100gentauro(~gentauro@unaffiliated/gentauro) (Read error: Connection reset by peer)
2020-11-16 02:02:34 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 246 seconds)
2020-11-16 02:03:09 +0100gentauro(~gentauro@unaffiliated/gentauro)
2020-11-16 02:06:21 +0100Guest30216(~mengu@84.39.117.57) ()
2020-11-16 02:09:19 +0100Ariakenom(~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se) (Quit: Leaving)
2020-11-16 02:10:22 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2020-11-16 02:11:01 +0100keep_learning(~keep_lear@43.231.26.152)
2020-11-16 02:11:06 +0100Sgeo_(~Sgeo@ool-18b982ad.dyn.optonline.net)
2020-11-16 02:11:32 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 02:12:01 +0100moet(~moet@mobile-166-137-178-183.mycingular.net)
2020-11-16 02:12:17 +0100keep_learning(~keep_lear@43.231.26.152) (Client Quit)
2020-11-16 02:12:41 +0100keep_learning(~keep_lear@43.231.26.152)
2020-11-16 02:13:36 +0100robert___(uid452915@gateway/web/irccloud.com/x-auhharawilekbpts)
2020-11-16 02:14:37 +0100Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 260 seconds)
2020-11-16 02:15:55 +0100christo(~chris@81.96.113.213)
2020-11-16 02:20:13 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
2020-11-16 02:25:51 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de)
2020-11-16 02:27:34 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 02:28:10 +0100 <justsomeguy> In the paper "Tutorial Introduction to Lambda Calculus", I've seen [x/y] explained as "y is replaced by x for all its occurrences".
2020-11-16 02:28:24 +0100nielsonm(~nielsonm@84.39.117.57)
2020-11-16 02:29:12 +0100dmlloyd_laptop(~dmlloyd_l@193.56.252.12)
2020-11-16 02:29:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-16 02:31:05 +0100Lord_of_Life_(~Lord@46.217.220.81)
2020-11-16 02:32:07 +0100conal(~conal@64.71.133.70)
2020-11-16 02:33:13 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 260 seconds)
2020-11-16 02:33:21 +0100 <justsomeguy> Sometimes it frustrating how much of math notations meaning isn't well agreed on, or up to individual interpretation.
2020-11-16 02:34:17 +0100 <aoei> that's weird, i thought humans invented a standard symbolic language for mathematics
2020-11-16 02:34:32 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-wwiyyhwyadbuqprb)
2020-11-16 02:35:23 +0100 <dolio> [x/y] is pretty common. It's just not very good notation.
2020-11-16 02:35:45 +0100 <dolio> With just variables, it's not really very clear which thing is being substituted.
2020-11-16 02:38:15 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-223-24-93-183.revip6.asianet.co.th)
2020-11-16 02:38:40 +0100 <dolio> And it's notation that is isolated to things like lambda calculus, so it can't draw on familiarity with notation that's used in actual programming languages.
2020-11-16 02:39:06 +0100 <aoei> ah
2020-11-16 02:41:11 +0100 <dolio> One could argue that 'x := y' is no better if you haven't seen it, but a lot more people have seen things of that sort.
2020-11-16 02:43:36 +0100wroathe_(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 02:43:52 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
2020-11-16 02:46:54 +0100forell(~forell@unaffiliated/forell) (Read error: Connection reset by peer)
2020-11-16 02:47:13 +0100wroathe_wroathe
2020-11-16 02:47:48 +0100robert___(uid452915@gateway/web/irccloud.com/x-auhharawilekbpts) ()
2020-11-16 02:48:16 +0100forell(~forell@unaffiliated/forell)
2020-11-16 02:48:55 +0100Lycurgus(~niemand@cpe-45-46-134-163.buffalo.res.rr.com) (Quit: Exeunt)
2020-11-16 02:52:22 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 265 seconds)
2020-11-16 02:57:07 +0100Amras(~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds)
2020-11-16 03:02:29 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 03:03:03 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-223-24-93-183.revip6.asianet.co.th) (Ping timeout: 256 seconds)
2020-11-16 03:05:13 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 03:05:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 03:07:09 +0100christo(~chris@81.96.113.213)
2020-11-16 03:10:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2020-11-16 03:12:29 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-11-16 03:13:02 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) (Ping timeout: 256 seconds)
2020-11-16 03:13:14 +0100wei2912(~wei2912@unaffiliated/wei2912)
2020-11-16 03:15:44 +0100 <monochrom> aoei: The greatest thing about standards is there are so many to choose from!
2020-11-16 03:16:32 +0100 <dolio> I mean, it's also not true that mathematical notation is standardized.
2020-11-16 03:17:05 +0100alp(~alp@88.126.45.36) (Ping timeout: 240 seconds)
2020-11-16 03:17:07 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 246 seconds)
2020-11-16 03:17:16 +0100 <dolio> Which is probably okay, because there's a lot of bad notation out there.
2020-11-16 03:17:21 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 03:17:46 +0100 <koz_> This might be slightly off-topic: how do web frameworks actually implement routing when URLs can have captures (meaning, stuff in the URL which isn't fixed, typically for use as an input into the handler)?
2020-11-16 03:18:05 +0100 <koz_> I'm interested in 'what algorithms/data structures are used to make this not-garbage', but I'm turning up nothing.
2020-11-16 03:24:05 +0100 <dsal> My mqttd SubTree type is similar, except it's always multimatch. The naive thing worked quite well.
2020-11-16 03:24:42 +0100 <koz_> dsal: Link?
2020-11-16 03:24:47 +0100mozzarella(~sam@unaffiliated/sam113101) (Remote host closed the connection)
2020-11-16 03:25:53 +0100mozzarella(~sam@unaffiliated/sam113101)
2020-11-16 03:25:56 +0100christo(~chris@81.96.113.213)
2020-11-16 03:26:53 +0100drbean(~drbean@TC210-63-209-39.static.apol.com.tw)
2020-11-16 03:27:31 +0100 <dsal> github.com/dustin/mqttd t SubTree
2020-11-16 03:27:41 +0100 <dsal> (sorry: driving)
2020-11-16 03:28:04 +0100 <koz_> Close enough - thanks!
2020-11-16 03:28:38 +0100star_cloud(~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com)
2020-11-16 03:29:14 +0100 <dsal> + and # are wildcards and I have to return everything that matches. I don't care about the topics
2020-11-16 03:30:12 +0100benjamingr__(uid23465@gateway/web/irccloud.com/x-dkapzzdvbagqfebh) (Quit: Connection closed for inactivity)
2020-11-16 03:30:43 +0100 <koz_> Hmm, now I need a Monoid of the form 'None | One a | TooMany'.
2020-11-16 03:31:00 +0100 <dsal> The point is that I thought I'd need something complicated, but the easy thing worked. Then all my hand-written instances could be derived. I sat down to write difficult code that night.
2020-11-16 03:31:10 +0100jduhamel(~textual@bras-base-toroon4664w-grc-14-184-145-124-162.dsl.bell.ca) (Ping timeout: 256 seconds)
2020-11-16 03:31:16 +0100 <koz_> dsal: This is exactly what I wanted to see - thanks!
2020-11-16 03:31:23 +0100 <dsal> This was very specific to my mqtt needs
2020-11-16 03:31:31 +0100 <dsal> Ok, I was hoping it'd help
2020-11-16 03:34:31 +0100 <koz_> :t maybe mempty
2020-11-16 03:34:32 +0100 <lambdabot> Monoid b => (a -> b) -> Maybe a -> b
2020-11-16 03:34:39 +0100 <koz_> :t foldMap
2020-11-16 03:34:40 +0100 <lambdabot> (Foldable t, Monoid m) => (a -> m) -> t a -> m
2020-11-16 03:34:43 +0100 <koz_> :D
2020-11-16 03:34:55 +0100 <koz_> % :t foldMap @Maybe
2020-11-16 03:34:55 +0100 <yahb> koz_: Monoid m => (a -> m) -> Maybe a -> m
2020-11-16 03:36:30 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
2020-11-16 03:38:12 +0100toorevitimirp(~tooreviti@117.182.180.118)
2020-11-16 03:43:59 +0100xff0x(~fox@2001:1a81:5263:6400:a8c9:21df:16db:a24a) (Ping timeout: 272 seconds)
2020-11-16 03:45:36 +0100xff0x(~fox@2001:1a81:529e:a500:712c:5a16:6a4b:9d48)
2020-11-16 03:45:47 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 03:47:10 +0100xsperry(~as@unaffiliated/xsperry) (Remote host closed the connection)
2020-11-16 03:49:14 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 264 seconds)
2020-11-16 03:53:05 +0100guest1116(~user@49.5.6.87)
2020-11-16 04:00:01 +0100nielsonm(~nielsonm@84.39.117.57) ()
2020-11-16 04:02:01 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 264 seconds)
2020-11-16 04:02:27 +0100dmlloyd_laptop(~dmlloyd_l@193.56.252.12) (Remote host closed the connection)
2020-11-16 04:06:53 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-11-16 04:07:37 +0100jedws(~jedws@101.184.175.183)
2020-11-16 04:10:19 +0100kushNYC(4620050d@70.32.5.13)
2020-11-16 04:11:22 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 246 seconds)
2020-11-16 04:13:15 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2020-11-16 04:13:40 +0100 <kushNYC> Anyone else try to install cross-compiled ghc binaries in iSH for iOS? It’s a musl-based Alpine Linux environment. I get fairly far with installing the i386-musl build from https://github.com/redneb/ghc-alt-libc/releases - but ultimately come up against an error during install of ghc-pkg that eludes me...
2020-11-16 04:13:45 +0100 <kushNYC> ```Installing library in /opt/ghc/lib/ghc-8.10.2/ghc-8.10.2"/opt/ghc/lib/ghc-8.10.2/bin/ghc-pkg" --force --global-package-db "/opt/ghc/lib/ghc-8.10.2/package.conf.d" update rts/dist/package.conf.installghc-pkg: Couldn't open database /opt/ghc/lib/ghc-8.10.2/package.conf.d for modification: {handle:
2020-11-16 04:13:45 +0100 <kushNYC> /opt/ghc/lib/ghc-8.10.2/package.conf.d/package.cache.lock}: hLock: invalid argument (Invalid argument)make[1]: *** [ghc.mk:973: install_packages] Error 1make: *** [Makefile:51: install] Error 2```
2020-11-16 04:14:40 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad)
2020-11-16 04:14:40 +0100 <kushNYC> Tried messing with permissions and running ghc-pkg recache to no avail
2020-11-16 04:18:12 +0100s00pcan(~chris@107.181.165.217) (Ping timeout: 256 seconds)
2020-11-16 04:20:03 +0100s00pcan(~chris@075-133-056-178.res.spectrum.com)
2020-11-16 04:20:09 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-16 04:24:50 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2020-11-16 04:25:27 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 04:25:50 +0100kushNYC(4620050d@70.32.5.13) (Remote host closed the connection)
2020-11-16 04:26:25 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds)
2020-11-16 04:31:27 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-16 04:31:41 +0100Tario(~Tario@201.192.165.173)
2020-11-16 04:33:00 +0100pehjota1(~pehjota@185.204.1.185)
2020-11-16 04:35:05 +0100nexii(~user@38-73-246-124.starry-inc.net) (Ping timeout: 240 seconds)
2020-11-16 04:35:11 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 04:36:02 +0100renzhi(~renzhi@2607:fa49:655f:e600::28da) (Ping timeout: 260 seconds)
2020-11-16 04:38:08 +0100falafel_(~falafel@50.216.77.242)
2020-11-16 04:39:56 +0100nexii(~user@38-73-246-124.starry-inc.net)
2020-11-16 04:46:15 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-16 04:49:12 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-16 04:49:35 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 256 seconds)
2020-11-16 04:50:28 +0100conal_(~conal@64.71.133.70)
2020-11-16 04:52:19 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 04:52:43 +0100xerox_(~xerox@unaffiliated/xerox) (Ping timeout: 265 seconds)
2020-11-16 04:54:41 +0100theDon(~td@94.134.91.56) (Ping timeout: 260 seconds)
2020-11-16 04:55:01 +0100nexii(~user@38-73-246-124.starry-inc.net) (Read error: Connection reset by peer)
2020-11-16 04:55:33 +0100lagothrix(~lagothrix@unaffiliated/lagothrix) (Killed (orwell.freenode.net (Nickname regained by services)))
2020-11-16 04:55:39 +0100lagothrix(~lagothrix@unaffiliated/lagothrix)
2020-11-16 04:56:13 +0100xerox_(~xerox@unaffiliated/xerox)
2020-11-16 04:56:31 +0100theDon(~td@94.134.91.49)
2020-11-16 04:57:02 +0100sammuel86(~sammuel86@178.239.168.171)
2020-11-16 04:57:33 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2020-11-16 04:59:18 +0100aarvar(~foewfoiew@50.35.43.33)
2020-11-16 05:00:45 +0100xerox_(~xerox@unaffiliated/xerox) (Ping timeout: 240 seconds)
2020-11-16 05:02:22 +0100Tario(~Tario@201.192.165.173)
2020-11-16 05:05:27 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
2020-11-16 05:08:02 +0100conal_(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-16 05:08:35 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) (Quit: This computer has gone to sleep)
2020-11-16 05:10:52 +0100servo(~servo@41.92.97.254) (Ping timeout: 246 seconds)
2020-11-16 05:11:53 +0100texasmynsted(~texasmyns@212.102.45.112) (Ping timeout: 260 seconds)
2020-11-16 05:12:14 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-16 05:16:17 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 260 seconds)
2020-11-16 05:31:33 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 05:35:51 +0100tenniscp25(~tenniscp2@134.196.209.118)
2020-11-16 05:36:12 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311) ()
2020-11-16 05:38:17 +0100tenniscp25(~tenniscp2@134.196.209.118) (Client Quit)
2020-11-16 05:38:47 +0100Amras(~Amras@unaffiliated/amras0000)
2020-11-16 05:39:02 +0100guest1116(~user@49.5.6.87) (Ping timeout: 260 seconds)
2020-11-16 05:44:37 +0100xerox_(~xerox@unaffiliated/xerox)
2020-11-16 05:47:59 +0100berberman_(~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
2020-11-16 05:48:24 +0100berberman(~berberman@unaffiliated/berberman)
2020-11-16 05:53:42 +0100nineonine(~textual@S01061cabc0b095f3.vf.shawcable.net) (Read error: Connection reset by peer)
2020-11-16 05:54:58 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-11-16 05:56:02 +0100elliott__(~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 265 seconds)
2020-11-16 05:57:33 +0100guest1116(~user@49.5.6.87)
2020-11-16 05:58:13 +0100Tattletale(~Tattletal@unaffiliated/sundancertp) (Quit: rcirc on GNU Emacs 27.1)
2020-11-16 06:00:02 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 260 seconds)
2020-11-16 06:05:28 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2020-11-16 06:06:29 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-16 06:06:32 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Read error: Connection reset by peer)
2020-11-16 06:07:57 +0100tanuki(~quassel@173.168.154.189) (Ping timeout: 260 seconds)
2020-11-16 06:09:45 +0100tanuki(~quassel@173.168.154.189)
2020-11-16 06:11:14 +0100vicfred(~vicfred@unaffiliated/vicfred) (Client Quit)
2020-11-16 06:15:08 +0100elliott_(~elliott_@pool-108-51-141-12.washdc.fios.verizon.net)
2020-11-16 06:15:28 +0100elliott_(~elliott_@pool-108-51-141-12.washdc.fios.verizon.net) (Client Quit)
2020-11-16 06:15:31 +0100hackagevulkan 3.6.14 - Bindings to the Vulkan graphics API. https://hackage.haskell.org/package/vulkan-3.6.14 (jophish)
2020-11-16 06:16:31 +0100hackageVulkanMemoryAllocator 0.3.9, vulkan-utils 0.2 (jophish): https://qbin.io/cgi-immune-lgby
2020-11-16 06:17:02 +0100 <jophish> What is this qbin thing?
2020-11-16 06:17:26 +0100pehjota1(~pehjota@185.204.1.185) (Remote host closed the connection)
2020-11-16 06:17:59 +0100alx741(~alx741@186.178.110.6) (Ping timeout: 256 seconds)
2020-11-16 06:18:02 +0100 <Axman6> probably a link shortening service?
2020-11-16 06:18:27 +0100 <Axman6> looks like a paste service actually
2020-11-16 06:18:54 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-11-16 06:19:39 +0100gxt(~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection)
2020-11-16 06:20:24 +0100gxt(~gxt@gateway/tor-sasl/gxt)
2020-11-16 06:21:10 +0100tanuki(~quassel@173.168.154.189) (Ping timeout: 256 seconds)
2020-11-16 06:21:45 +0100 <jophish> weird, I uploaded those three packages at the same time
2020-11-16 06:22:43 +0100klixto(~klixto@130.220.8.140) (Quit: WeeChat 2.9)
2020-11-16 06:22:51 +0100Sanchayan(~Sanchayan@171.61.102.109)
2020-11-16 06:23:51 +0100Amras(~Amras@unaffiliated/amras0000) (Remote host closed the connection)
2020-11-16 06:23:59 +0100Amras(~Amras@unaffiliated/amras0000)
2020-11-16 06:24:20 +0100conal(~conal@64.71.133.70)
2020-11-16 06:25:47 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-16 06:28:22 +0100day_(~Unknown@unaffiliated/day)
2020-11-16 06:29:16 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th)
2020-11-16 06:29:55 +0100Amras(~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds)
2020-11-16 06:30:11 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Remote host closed the connection)
2020-11-16 06:30:21 +0100livvy(~livvy@gateway/tor-sasl/livvy)
2020-11-16 06:30:24 +0100alx741(~alx741@186.178.110.6)
2020-11-16 06:31:07 +0100tanuki(~quassel@173.168.154.189)
2020-11-16 06:31:56 +0100day(~Unknown@unaffiliated/day) (Ping timeout: 256 seconds)
2020-11-16 06:31:56 +0100day_day
2020-11-16 06:34:08 +0100cp-(~cp-@b157153.ppp.asahi-net.or.jp) (Ping timeout: 260 seconds)
2020-11-16 06:36:19 +0100boistordu1(boistordum@gateway/shell/matrix.org/x-zpdpvjbuxlhmobsh)
2020-11-16 06:38:23 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 06:40:14 +0100cp-(~cp-@b157153.ppp.asahi-net.or.jp)
2020-11-16 06:41:08 +0100heyj(sid171370@gateway/web/irccloud.com/x-sjxjehfsqkhmjbvz) (Read error: Connection reset by peer)
2020-11-16 06:41:19 +0100edwinb(sid69486@gateway/web/irccloud.com/x-elzwlqpwvreqnrml) (Read error: Connection reset by peer)
2020-11-16 06:41:24 +0100adius(sid321344@gateway/web/irccloud.com/x-uuhxlducjizxfavl) (Read error: Connection reset by peer)
2020-11-16 06:41:25 +0100mpickering(sid78412@gateway/web/irccloud.com/x-wtvxaywdclnnytlv) (Read error: Connection reset by peer)
2020-11-16 06:41:25 +0100PoliticsII______(sid193551@gateway/web/irccloud.com/x-axomckqlurkcrgnc) (Read error: Connection reset by peer)
2020-11-16 06:41:36 +0100edwinb(sid69486@gateway/web/irccloud.com/x-ucpbbzlyfldprgqw)
2020-11-16 06:41:36 +0100mpickering(sid78412@gateway/web/irccloud.com/x-pmxjkbnlbuqckyae)
2020-11-16 06:41:42 +0100adius(sid321344@gateway/web/irccloud.com/x-qiqazzoasoeaazyv)
2020-11-16 06:41:42 +0100PoliticsII______(sid193551@gateway/web/irccloud.com/x-svzvwktexytphjlp)
2020-11-16 06:43:28 +0100heyj(sid171370@gateway/web/irccloud.com/x-xrqocrtckuflwvgl)
2020-11-16 06:43:58 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2020-11-16 06:49:21 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-11-16 06:51:38 +0100cp-(~cp-@b157153.ppp.asahi-net.or.jp) (Ping timeout: 260 seconds)
2020-11-16 06:51:54 +0100ChaiTRex(~ChaiTRex@gateway/tor-sasl/chaitrex) (Remote host closed the connection)
2020-11-16 06:52:30 +0100ChaiTRex(~ChaiTRex@gateway/tor-sasl/chaitrex)
2020-11-16 06:52:54 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 256 seconds)
2020-11-16 06:53:58 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 260 seconds)
2020-11-16 06:55:07 +0100acidjnk_new(~acidjnk@p200300d0c718f605045012e87868ed0b.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-11-16 06:56:39 +0100cp-(~cp-@b157153.ppp.asahi-net.or.jp)
2020-11-16 06:57:24 +0100 <dminuoso> % data Foo = Foo { foo, bar :: Int }
2020-11-16 06:57:24 +0100 <yahb> dminuoso:
2020-11-16 06:57:35 +0100 <dminuoso> Uh oh. This is permitted. :<
2020-11-16 06:57:40 +0100 <dminuoso> % :t foo
2020-11-16 06:57:41 +0100 <yahb> dminuoso: Foo -> Int
2020-11-16 07:00:01 +0100sammuel86(~sammuel86@178.239.168.171) ()
2020-11-16 07:09:11 +0100_xor(~xor@74.215.46.133) (Quit: brb)
2020-11-16 07:10:42 +0100_xor(~xor@74.215.46.133)
2020-11-16 07:13:58 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 07:15:04 +0100RandIter(~RandIter@178.162.212.214)
2020-11-16 07:18:06 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal)
2020-11-16 07:18:21 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 07:29:52 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
2020-11-16 07:31:09 +0100 <moet> is there some requirement that a typeclass have a concrete (*) type?
2020-11-16 07:31:41 +0100 <moet> >:kind! Num
2020-11-16 07:31:53 +0100GuerrillaMonkey(~Jeanne-Ka@66.115.189.224) (Ping timeout: 260 seconds)
2020-11-16 07:32:05 +0100 <moet> ok, the bot doesn't like that but it prints 'Num :: * -> Constraint' for me
2020-11-16 07:32:24 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2020-11-16 07:32:44 +0100pavonia_(~user@unaffiliated/siracusa)
2020-11-16 07:33:16 +0100 <moet> is there any trick defining instances of standard classes over a closed set of types (lifted by datakinds) .. eg.. 'data T = A | B'
2020-11-16 07:33:49 +0100 <moet> instance Num 'A where ... fails because `'A :: T` but `Num :: * -> Constraint`
2020-11-16 07:34:04 +0100towel(~towel@unaffiliated/towel) (Quit: ZNC - https://znc.in)
2020-11-16 07:34:05 +0100{abby}(~{abby}@unaffiliated/demhydraz) (Quit: Ping timeout (120 seconds))
2020-11-16 07:34:11 +0100{abby}2(~{abby}@unaffiliated/demhydraz)
2020-11-16 07:34:38 +0100guest1116(~user@49.5.6.87) (Ping timeout: 265 seconds)
2020-11-16 07:35:02 +0100towel(~towel@unaffiliated/towel)
2020-11-16 07:35:07 +0100pavonia(~user@unaffiliated/siracusa) (Ping timeout: 260 seconds)
2020-11-16 07:35:09 +0100pavonia_pavonia
2020-11-16 07:38:47 +0100 <moet> nevermind.. the problem was a stuck type family upstream ..
2020-11-16 07:39:43 +0100coot_(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl)
2020-11-16 07:40:43 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 256 seconds)
2020-11-16 07:40:44 +0100coot_coot
2020-11-16 07:41:12 +0100Sanchayan(~Sanchayan@171.61.102.109) (Quit: leaving)
2020-11-16 07:41:26 +0100 <moet> now i have questions about stuck type families if anybody has their polykinds hat on
2020-11-16 07:41:32 +0100quarters(~quarters@unaffiliated/quarters)
2020-11-16 07:41:40 +0100 <moet> otherwise i'll just figure it out
2020-11-16 07:43:05 +0100 <quarters> hello. I'm following http://learnyouahaskell.com/syntax-in-functions and noticed that type declarations are shown above every function. Is this something that can be replicated in the ghci repl? when I try it, I get <interactive>:18:1: error:
2020-11-16 07:43:05 +0100 <quarters> • No instance for (Show (Integer -> String))
2020-11-16 07:43:05 +0100 <quarters> arising from a use of ‘print’
2020-11-16 07:43:05 +0100 <quarters> (maybe you haven't applied a function to enough arguments?)
2020-11-16 07:43:06 +0100 <quarters> • In a stmt of an interactive GHCi command: print it
2020-11-16 07:43:30 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-11-16 07:43:30 +0100matthew-(~matthew@smtp.wellquite.org) (Ping timeout: 272 seconds)
2020-11-16 07:43:50 +0100matthew-(~matthew@smtp.wellquite.org)
2020-11-16 07:47:12 +0100 <moet> quarters: yes, there are two ways https://termbin.com/zngt
2020-11-16 07:47:47 +0100 <moet> quarters: one is to type a one-liner lambda on the rhs of a let, parenthesize the whole lambda, and then give it a type
2020-11-16 07:47:52 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-11-16 07:48:05 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 256 seconds)
2020-11-16 07:48:14 +0100 <moet> quarters: the other is to write a multi-line-function just as you would in a file, by preceding it with :{ and then following it with :}
2020-11-16 07:48:24 +0100 <moet> see the paste at https://termbin.com/zngt
2020-11-16 07:48:37 +0100Sanchayan(~Sanchayan@171.61.102.109)
2020-11-16 07:49:34 +0100 <quarters> moet: awesome. thank you!
2020-11-16 07:50:01 +0100falafel_(~falafel@50.216.77.242) (Ping timeout: 264 seconds)
2020-11-16 07:52:58 +0100 <moet> does making a type-family have a result of kind `k` automatically make the type family "stuck"? is there a way to inspect the result?
2020-11-16 07:55:03 +0100 <Axman6> :kind! should show you it in as evaluated for as possible
2020-11-16 07:55:19 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-16 07:55:32 +0100 <Axman6> (that's probably not a precide definition of what it does, but :kind! is probably what you're after)
2020-11-16 07:56:02 +0100avn(~avn@78-56-108-78.static.zebra.lt)
2020-11-16 07:56:22 +0100santa_1(~santa_@185.163.110.116)
2020-11-16 07:58:19 +0100 <moet> Axman6: hrm.. that tool does help me to identify the problem but my question is more about what the meaning of a polymorphic typeclass is
2020-11-16 07:58:37 +0100 <moet> Axman6: if you have a sec, take a look at this minimal example: https://termbin.com/n79h
2020-11-16 07:59:13 +0100 <moet> in the example, i've made a type family that seems to be useless, because it is stuck due to its polymorphic result
2020-11-16 08:00:48 +0100 <dminuoso> moet: No, typeclasses can have instances for non-* types as well. See Functor
2020-11-16 08:01:12 +0100 <dminuoso> Oh, scrolled up again.
2020-11-16 08:01:52 +0100 <Axman6> this is definitely beyond my knowledge of these things
2020-11-16 08:02:07 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving)
2020-11-16 08:02:51 +0100 <moet> dminuoso: heh, yeah, i realized the issue with that typeclass was actually the stuck type family not resolving to the type which matched the typeclass :)
2020-11-16 08:03:09 +0100 <moet> Axman6: thanks for taking a look anyhow.. it's beyond my knowledge too!
2020-11-16 08:03:17 +0100 <dminuoso> Im surprised this typechecks at all
2020-11-16 08:03:37 +0100 <dminuoso> Or kindchecks, rather
2020-11-16 08:04:10 +0100 <moet> dminuoso: it does admittedly require like 4 extensions
2020-11-16 08:04:27 +0100 <keltono> try `:t funcName`
2020-11-16 08:04:35 +0100 <keltono> whoops, wrong channel
2020-11-16 08:04:41 +0100 <dminuoso> moet: which ones?
2020-11-16 08:04:48 +0100 <dminuoso> TypeFamilies and PolyKinds presumably
2020-11-16 08:04:50 +0100 <dminuoso> Which else?
2020-11-16 08:04:56 +0100 <moet> DataKinds and KindSignatures
2020-11-16 08:05:08 +0100 <dminuoso> Ah, well those make sense too
2020-11-16 08:05:12 +0100 <moet> Though DataKinds is probably only because i used tuple on RHS
2020-11-16 08:05:15 +0100 <dminuoso> Right
2020-11-16 08:05:25 +0100 <dminuoso> You could alternatively say
2020-11-16 08:05:32 +0100 <dminuoso> % type family TF (a :: *) :: k
2020-11-16 08:05:32 +0100 <yahb> dminuoso:
2020-11-16 08:05:40 +0100 <dminuoso> % type instance TF Bool = Type
2020-11-16 08:05:40 +0100 <yahb> dminuoso: ; <interactive>:102:25: error:; Ambiguous occurrence `Type'; It could refer to; either `Language.Haskell.TH.Type', imported from `Language.Haskell.TH' (and originally defined in `Language.Haskell.TH.Syntax'); or `Data.Kind.Type', imported from `Data.Kind' (and originally defined in `GHC.Types')
2020-11-16 08:05:57 +0100 <dminuoso> % type instance TF Bool = Data.Kind.Type
2020-11-16 08:05:57 +0100 <yahb> dminuoso:
2020-11-16 08:06:02 +0100 <dminuoso> % type instance TF Int = Data.Kind.Type -> Data.Kind.Type
2020-11-16 08:06:03 +0100 <yahb> dminuoso:
2020-11-16 08:07:42 +0100 <moet> % :kind! TF Bool
2020-11-16 08:07:43 +0100 <yahb> moet: k; = TF Bool
2020-11-16 08:07:47 +0100 <moet> % :kind! TF Int
2020-11-16 08:07:47 +0100 <yahb> moet: k; = TF Int
2020-11-16 08:07:52 +0100 <moet> also stuck?
2020-11-16 08:08:06 +0100 <dminuoso> I dont think "stuck" is the right terminology here
2020-11-16 08:08:19 +0100 <dminuoso> % :kind! TF Int
2020-11-16 08:08:19 +0100 <yahb> dminuoso: forall {k}. k; = TF Int
2020-11-16 08:08:33 +0100 <dminuoso> (I added :set -fprint-explicit-foralls in a query)
2020-11-16 08:08:46 +0100 <dminuoso> So it returns a polymorphic kind
2020-11-16 08:08:58 +0100 <moet> yes, i think it's because k cannot be both * and (* -> *) at the sametime
2020-11-16 08:09:04 +0100 <dminuoso> The confusing thing is why the tf instances type check at all, because `Type` is certainly *not* polymorphic
2020-11-16 08:09:46 +0100 <dminuoso> But then again, I only know how you can have polymorphic kinds in negative positions (say like Const)
2020-11-16 08:09:54 +0100 <dminuoso> Or *polymorphic types rather
2020-11-16 08:10:18 +0100 <dminuoso> Let's say we did
2020-11-16 08:10:29 +0100 <dminuoso> % data C (forall k. t :: k) = C
2020-11-16 08:10:30 +0100 <yahb> dminuoso: ; <interactive>:111:9: error:; Unexpected type `forall k. t :: k'; In the data declaration for `C'; A data declaration should have form; data C a = ...
2020-11-16 08:11:02 +0100 <dminuoso> Oh that's not allowed?
2020-11-16 08:11:37 +0100 <glguy> % :kind! TF Bool :: *
2020-11-16 08:11:37 +0100 <yahb> glguy: *; = *
2020-11-16 08:11:48 +0100 <glguy> % :kind! [TF Bool]
2020-11-16 08:11:48 +0100 <yahb> glguy: *; = [*]
2020-11-16 08:12:11 +0100 <moet> % :kind! [TF Int]
2020-11-16 08:12:11 +0100 <yahb> moet: *; = [* -> *]
2020-11-16 08:12:15 +0100 <moet> oh, wow..
2020-11-16 08:12:17 +0100 <dminuoso> Is it possible this tyfam crosses universes and returns a proper kind?
2020-11-16 08:12:29 +0100 <dminuoso> (Sort of TypeInType)
2020-11-16 08:12:50 +0100 <dminuoso> No this is still weird
2020-11-16 08:12:51 +0100 <glguy> You have to know the desired result kind to know which TF instance to use
2020-11-16 08:13:14 +0100 <glguy> % type instance TF Bool = (->)
2020-11-16 08:13:14 +0100 <yahb> glguy:
2020-11-16 08:13:18 +0100 <dminuoso> glguy: What's the meaning of `TF Bool` without a kind signature then?
2020-11-16 08:14:10 +0100 <dminuoso> % type instance TF Bool = Int
2020-11-16 08:14:10 +0100 <yahb> dminuoso: ; <interactive>:103:15: error:; Conflicting family instance declarations:; TF Bool = * -- Defined at <interactive>:103:15; TF Bool = Int -- Defined at <interactive>:123:15
2020-11-16 08:14:12 +0100 <dminuoso> % type instance TF Bool = Const
2020-11-16 08:14:13 +0100 <yahb> dminuoso: ; <interactive>:119:15: error:; Conflicting family instance declarations:; TF Bool = (->) -- Defined at <interactive>:119:15; forall {k}. TF Bool = Const -- Defined at <interactive>:124:15
2020-11-16 08:14:14 +0100 <dminuoso> Oh
2020-11-16 08:14:18 +0100 <glguy> % :kind! TF Bool :: * -> * -> *
2020-11-16 08:14:18 +0100 <yahb> glguy: * -> * -> *; = (->)
2020-11-16 08:14:32 +0100 <glguy> % :kind! TF Bool :: *
2020-11-16 08:14:32 +0100 <yahb> glguy: *; = *
2020-11-16 08:14:35 +0100 <dminuoso> Interesting, so this tyfam is essentially parametrized over not just a type, but a kind as well?
2020-11-16 08:15:07 +0100 <glguy> Yeah, this is relying on PolyKinds to work
2020-11-16 08:15:30 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 08:15:42 +0100mrchampion(~mrchampio@216-211-57-41.dynamic.tbaytel.net) (Ping timeout: 256 seconds)
2020-11-16 08:16:20 +0100 <moet> soo.... this makes sense, kinda .. the result is polymorphic so we need to either infer or annotate the result for it to be computed
2020-11-16 08:16:25 +0100 <dminuoso> Is this interaction documented anywhere in the GHC manual? I cant seem to find a reference in either the tyfam nor polykinds sections
2020-11-16 08:17:45 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2020-11-16 08:18:25 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-16 08:18:41 +0100 <moet> glguy: dminuoso: thanks
2020-11-16 08:19:19 +0100bitmagie(~Thunderbi@200116b806468f00a548803c2a7d669f.dip.versatel-1u1.de)
2020-11-16 08:20:00 +0100 <dminuoso> glguy, moet: Ah I think I found a reference. It's a bit short but it's there https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/poly_kinds.html?highlight=polykinds#kind-i…
2020-11-16 08:20:06 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 08:20:12 +0100 <dminuoso> So these are called "kind-indexed type families"
2020-11-16 08:20:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-16 08:21:07 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 08:21:44 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
2020-11-16 08:22:09 +0100 <moet> i see that; it's rather brief... thank yo
2020-11-16 08:22:57 +0100 <moet> since my only purpose was to create typeclass instances of the RHS of this type family, it's not going to work i think.. i'll take to take another approach!
2020-11-16 08:26:35 +0100guest1116(~user@49.5.6.87)
2020-11-16 08:27:05 +0100ericsagn1(~ericsagne@2405:6580:0:5100:903c:6f64:11e3:36e2) (Ping timeout: 272 seconds)
2020-11-16 08:28:20 +0100mrchampion(~mrchampio@216-26-218-246.dynamic.tbaytel.net)
2020-11-16 08:28:26 +0100Lowl3v3l(~Lowl3v3l@dslb-002-203-195-108.002.203.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
2020-11-16 08:29:14 +0100Lowl3v3l(~Lowl3v3l@dslb-002-203-195-108.002.203.pools.vodafone-ip.de)
2020-11-16 08:33:40 +0100Sgeo_(~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
2020-11-16 08:35:06 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2020-11-16 08:35:59 +0100thc202(~thc202@unaffiliated/thc202)
2020-11-16 08:36:47 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-16 08:37:38 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2020-11-16 08:39:05 +0100ericsagn1(~ericsagne@2405:6580:0:5100:1774:2bb5:b05f:edf1)
2020-11-16 08:40:03 +0100asheshambasta(~user@ptr-e1lysawl9rr13i61o92.18120a2.ip6.access.telenet.be)
2020-11-16 08:40:31 +0100 <glguy> What was the original thing you were trying to do?
2020-11-16 08:43:03 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-11-16 08:44:34 +0100bitmagie(~Thunderbi@200116b806468f00a548803c2a7d669f.dip.versatel-1u1.de) (Quit: bitmagie)
2020-11-16 08:45:58 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
2020-11-16 08:47:50 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-11-16 08:49:46 +0100dhouthoo(~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be)
2020-11-16 08:50:02 +0100bahamas(~lucian@unaffiliated/bahamas)
2020-11-16 08:52:43 +0100 <bahamas> how do I get out of multiline mode in ghci? meaning, I just pasted a multiline string and noticed that the prompt changed from "ghci> " to "Prelude|". using the command `:unset +m` didn't change the prompt
2020-11-16 08:53:12 +0100zopsi_(zopsi@2600:3c00::f03c:91ff:fe14:551f) ()
2020-11-16 08:54:21 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-16 08:54:49 +0100 <dminuoso> bahamas: :unset +m works for me
2020-11-16 08:55:01 +0100 <dminuoso> bahamas: Perhaps this only works outside a multiline block?
2020-11-16 08:56:01 +0100 <bahamas> dminuoso: ok, I found that Ctrl+D gets me back to `ghci> `. but the variable that I defined in the multiline mode is not available anymore
2020-11-16 08:56:30 +0100 <dminuoso> bahamas: Oh you mean manually leave a multiline block?
2020-11-16 08:56:41 +0100 <bahamas> I basically have a multiline string that I want to clean.
2020-11-16 08:56:57 +0100 <bahamas> that's what I'm trying to accomplish
2020-11-16 08:57:05 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-16 08:59:07 +0100xff0x(~fox@2001:1a81:529e:a500:712c:5a16:6a4b:9d48) (Ping timeout: 260 seconds)
2020-11-16 08:59:31 +0100 <dminuoso> % (&) = fromIntegral
2020-11-16 08:59:31 +0100 <yahb> dminuoso:
2020-11-16 08:59:35 +0100 <dminuoso> % (10&)
2020-11-16 08:59:36 +0100 <yahb> dminuoso: 10
2020-11-16 08:59:55 +0100 <dminuoso> Finally a non annoying way to use fromIntegral and realToFrac :>
2020-11-16 08:59:59 +0100xff0x(~fox@2001:1a81:529e:a500:a7e0:336:a54e:d7a5)
2020-11-16 09:00:33 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 09:00:49 +0100 <bahamas> ok, I guess multiline mode doesn't help with multiline strings
2020-11-16 09:01:07 +0100Merfont(~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
2020-11-16 09:01:28 +0100Merfont(~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
2020-11-16 09:02:15 +0100jedws(~jedws@101.184.175.183)
2020-11-16 09:02:28 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2020-11-16 09:04:19 +0100 <yushyin> dminuoso: lol
2020-11-16 09:05:48 +0100jedws(~jedws@101.184.175.183) (Client Quit)
2020-11-16 09:06:36 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-16 09:08:36 +0100alp(~alp@2a01:e0a:58b:4920:8cf5:bc2e:8b7a:9a8e)
2020-11-16 09:08:52 +0100Amras(~Amras@unaffiliated/amras0000)
2020-11-16 09:09:02 +0100p8m(p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 260 seconds)
2020-11-16 09:09:18 +0100zopsi(zopsi@2600:3c00::f03c:91ff:fe14:551f)
2020-11-16 09:11:25 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone)
2020-11-16 09:11:38 +0100jedws(~jedws@101.184.175.183)
2020-11-16 09:15:01 +0100polyphem(~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Quit: WeeChat 2.9)
2020-11-16 09:15:22 +0100 <merijn> dminuoso: I will haunt your dreams >.<
2020-11-16 09:16:04 +0100 <merijn> bahamas: tbh, I would just abandon multiline ghci use entirely, any "support" for it was ad hoc hacked into it
2020-11-16 09:17:31 +0100jespada(~jespada@90.254.245.49)
2020-11-16 09:19:49 +0100p8m(p8m@gateway/vpn/protonvpn/p8m)
2020-11-16 09:20:15 +0100gxt(~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection)
2020-11-16 09:21:01 +0100gxt(~gxt@gateway/tor-sasl/gxt)
2020-11-16 09:25:53 +0100benjamingr__(uid23465@gateway/web/irccloud.com/x-hiupvfuftqbhepbs)
2020-11-16 09:28:11 +0100recon_-_(~quassel@2602:febc:0:b6::6ca2) (Quit: No Ping reply in 180 seconds.)
2020-11-16 09:29:00 +0100Kaeipi(~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
2020-11-16 09:29:27 +0100recon_-(~quassel@2602:febc:0:b6::6ca2)
2020-11-16 09:29:33 +0100Merfont(~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: Connection reset by peer)
2020-11-16 09:30:20 +0100idhugo(~idhugo@users-1190.st.net.au.dk)
2020-11-16 09:30:56 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-16 09:31:31 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-11-16 09:33:45 +0100nados(~dan@69-165-210-185.cable.teksavvy.com) (Ping timeout: 260 seconds)
2020-11-16 09:34:54 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 09:36:49 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 264 seconds)
2020-11-16 09:38:22 +0100drbean(~drbean@TC210-63-209-39.static.apol.com.tw) (Ping timeout: 256 seconds)
2020-11-16 09:40:13 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 09:42:47 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-16 09:48:54 +0100cyphase(~cyphase@unaffiliated/cyphase) (Ping timeout: 272 seconds)
2020-11-16 09:52:57 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 09:55:07 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 09:57:35 +0100cyphase(~cyphase@unaffiliated/cyphase)
2020-11-16 09:57:46 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
2020-11-16 09:58:37 +0100borne(~fritjof@200116b864b5430099e934deb93b1409.dip.versatel-1u1.de)
2020-11-16 10:00:01 +0100santa_1(~santa_@185.163.110.116) ()
2020-11-16 10:00:04 +0100DeadComaGrayce[m(commagra1@gateway/shell/matrix.org/x-azdmcqjbsmchjvtv) (Quit: Idle for 30+ days)
2020-11-16 10:00:06 +0100wrunt[m](wruntmatri@gateway/shell/matrix.org/x-fajabshtqlxbdigd) (Quit: Idle for 30+ days)
2020-11-16 10:00:33 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 10:01:43 +0100cheater(~user@unaffiliated/cheater) (Quit: (BitchX) "got bitchx?")
2020-11-16 10:04:03 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-16 10:04:29 +0100cfricke(~cfricke@unaffiliated/cfricke)
2020-11-16 10:04:56 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr)
2020-11-16 10:05:32 +0100 <moet> glguy: ah, i'll have to get back to you on that tomorrow..
2020-11-16 10:06:05 +0100kuribas(~user@ptr-25vy0iaahu2pezvpnfb.18120a2.ip6.access.telenet.be)
2020-11-16 10:07:14 +0100 <Ivan__1> q
2020-11-16 10:07:17 +0100Ivan__1(~yudin@gw.mat.uc.pt) (Quit: leaving)
2020-11-16 10:07:38 +0100christo(~chris@81.96.113.213)
2020-11-16 10:11:12 +0100 <runeks> Anyone know a mirror for https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-apple-darwin.tar.xz? I'm getting 20-30 KB/s from that link...
2020-11-16 10:11:16 +0100cheater(~user@unaffiliated/cheater)
2020-11-16 10:11:56 +0100 <dminuoso> runeks: https://distfiles.macports.org/ghc/
2020-11-16 10:12:04 +0100 <dminuoso> Be sure to check the signatures against the ones from haskell.org
2020-11-16 10:12:42 +0100cheater(~user@unaffiliated/cheater) (Read error: Connection reset by peer)
2020-11-16 10:13:25 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 240 seconds)
2020-11-16 10:14:04 +0100 <runeks> @dminuoso Thank you! I checked the hash and it matches that of the haskell.org file.
2020-11-16 10:14:04 +0100 <lambdabot> Unknown command, try @list
2020-11-16 10:14:06 +0100enoq(~textual@194-208-146-143.lampert.tv)
2020-11-16 10:14:16 +0100 <runeks> dminuoso: Thank you! I checked the hash and it matches that of the haskell.org file.
2020-11-16 10:16:25 +0100Guest2620(~Christoph@chezlefab.net) (Ping timeout: 264 seconds)
2020-11-16 10:16:25 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 10:16:33 +0100stilgart(~Christoph@chezlefab.net)
2020-11-16 10:17:01 +0100orzo(joe@lasker.childrenofmay.org) (Ping timeout: 264 seconds)
2020-11-16 10:17:01 +0100peutri(~peutri@ns317027.ip-94-23-46.eu) (Ping timeout: 264 seconds)
2020-11-16 10:17:10 +0100peutri(~peutri@ns317027.ip-94-23-46.eu)
2020-11-16 10:17:10 +0100orzo(joe@lasker.childrenofmay.org)
2020-11-16 10:17:49 +0100guest1116(~user@49.5.6.87) (Ping timeout: 246 seconds)
2020-11-16 10:18:02 +0100moet(~moet@mobile-166-137-178-183.mycingular.net) (Ping timeout: 272 seconds)
2020-11-16 10:18:02 +0100seveg(~gabriel@2a02-ab04-0249-8d00-7d49-c4e2-4790-91c2.dynamic.v6.chello.sk) (Ping timeout: 264 seconds)
2020-11-16 10:18:26 +0100 <dminuoso> merijn: What can I say, my code is plastered with putWord8/putWord16be/putWord32be
2020-11-16 10:18:40 +0100 <dminuoso> And sadly I cant track Word8/Word16/Word32 cleanly through
2020-11-16 10:19:27 +0100 <dminuoso> So what I realistically do is, I keep them as Word32 and narrow wherever. Validation before serialization will catch potential bugs here.
2020-11-16 10:19:33 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-wwiyyhwyadbuqprb) (Quit: Connection closed for inactivity)
2020-11-16 10:19:52 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds)
2020-11-16 10:20:05 +0100seveg(~gabriel@188-167-252-154.dynamic.chello.sk)
2020-11-16 10:20:13 +0100berberman(~berberman@unaffiliated/berberman)
2020-11-16 10:21:53 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 10:22:37 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de)
2020-11-16 10:23:35 +0100fendor(~fendor@178.115.131.226.wireless.dyn.drei.com)
2020-11-16 10:23:44 +0100lxsameer(~lxsameer@unaffiliated/lxsameer) (Ping timeout: 272 seconds)
2020-11-16 10:25:35 +0100 <merijn> Hopefully ;)
2020-11-16 10:25:35 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th)
2020-11-16 10:27:08 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-11-16 10:27:21 +0100cheater(~user@unaffiliated/cheater)
2020-11-16 10:28:22 +0100Amras(~Amras@unaffiliated/amras0000) (Ping timeout: 260 seconds)
2020-11-16 10:29:02 +0100 <dminuoso> Well, for deserialization I could use int-cast I guess
2020-11-16 10:30:35 +0100Franciman(~francesco@host-82-56-223-169.retail.telecomitalia.it)
2020-11-16 10:33:48 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
2020-11-16 10:34:38 +0100Amras(~Amras@unaffiliated/amras0000)
2020-11-16 10:36:00 +0100lxsameer(lxsameer@gateway/vpn/protonvpn/lxsameer)
2020-11-16 10:36:48 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 10:37:45 +0100Cale(~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds)
2020-11-16 10:37:49 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 265 seconds)
2020-11-16 10:37:58 +0100jzl(~jzl@unaffiliated/jzl) (Ping timeout: 260 seconds)
2020-11-16 10:38:11 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2020-11-16 10:38:32 +0100jzl(~jzl@2607:5300:60:1422::1)
2020-11-16 10:38:32 +0100jzl(~jzl@2607:5300:60:1422::1) (Changing host)
2020-11-16 10:38:32 +0100jzl(~jzl@unaffiliated/jzl)
2020-11-16 10:40:12 +0100Cale(~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com)
2020-11-16 10:40:42 +0100bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds)
2020-11-16 10:42:11 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 10:43:17 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 10:46:20 +0100grimgnr(~user@94.19.246.43)
2020-11-16 10:48:04 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-11-16 10:48:21 +0100zebrag(~inkbottle@aaubervilliers-654-1-73-14.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2020-11-16 10:48:42 +0100zebrag(~inkbottle@aaubervilliers-654-1-73-14.w86-212.abo.wanadoo.fr)
2020-11-16 10:48:50 +0100bahamas(~lucian@unaffiliated/bahamas)
2020-11-16 10:51:48 +0100guest1116(~user@49.5.6.87)
2020-11-16 11:01:36 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-16 11:01:59 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 265 seconds)
2020-11-16 11:04:30 +0100tromp(~tromp@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer)
2020-11-16 11:05:06 +0100tromp(~tromp@dhcp-077-249-230-040.chello.nl)
2020-11-16 11:05:31 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th)
2020-11-16 11:07:31 +0100tromp_(~tromp@dhcp-077-249-230-040.chello.nl)
2020-11-16 11:07:31 +0100tromp(~tromp@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer)
2020-11-16 11:09:57 +0100 <Martinsos> Hi all! I am not so new to Haskell, but I am new to IRC - any best practices to share on how to get most of haskell IRC channel? I am usually on reddit but I heard haskell IRC channel is the best place to learn/ask. I am right now using ERC in Emacs, but I am not sure how to go about it since I can't see the old messages -> do you have IRC turned on all the time? Do you also use ERC in Emacs or do you use smth else? What is your
2020-11-16 11:09:57 +0100 <Martinsos> workflow about participating in IRC while also getting stuff done? Thanks!
2020-11-16 11:11:28 +0100 <merijn> Some people stay logged in all the time via a "bouncer" (basically a VPS forwarding to your local machine), but personally I just treat IRC as transient, there is not much point in attempting to keep up with everything that happens
2020-11-16 11:11:48 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55)
2020-11-16 11:11:51 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Read error: Connection reset by peer)
2020-11-16 11:11:52 +0100lxsameer(lxsameer@gateway/vpn/protonvpn/lxsameer) (Ping timeout: 256 seconds)
2020-11-16 11:14:57 +0100 <Martinsos> merijn: do you keep it open in separate window, or if you are using it through emacs do you just keep the buffer in the background and open it every so and so?
2020-11-16 11:15:34 +0100 <merijn> I don't use emacs at all :p I just have it open in a seperate tmux window
2020-11-16 11:16:26 +0100 <[exa]> Martinsos: I got permanently running irssi on a server, connecting just with ssh+tmux
2020-11-16 11:16:45 +0100 <Martinsos> merijn: ok great, thanks a lot :)! I also just realized there are logs at tunes.org, so that is also useful.
2020-11-16 11:16:58 +0100 <merijn> Also https://ircbrowse.tomsmeding.com/haskell
2020-11-16 11:17:01 +0100 <Martinsos> merijn++
2020-11-16 11:17:37 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 264 seconds)
2020-11-16 11:17:38 +0100 <Martinsos> @karma Martinsos
2020-11-16 11:17:38 +0100 <lambdabot> You have a karma of 0
2020-11-16 11:17:50 +0100 <Martinsos> @karma merijn
2020-11-16 11:17:50 +0100 <lambdabot> merijn has a karma of 76
2020-11-16 11:18:48 +0100 <Martinsos> [exa]++
2020-11-16 11:19:23 +0100rprije(~rprije@124.148.131.132) (Ping timeout: 260 seconds)
2020-11-16 11:21:14 +0100 <[exa]> Martinsos: worry not, karma tracks itself here
2020-11-16 11:21:54 +0100 <Martinsos> [exa]: Aha, what do you mean by that, how does it track itself?
2020-11-16 11:24:27 +0100 <boxscape> @hoogle (a -> b) -> (a -> c) -> a -> (b, c)
2020-11-16 11:24:28 +0100 <lambdabot> Data.Tuple.Extra (&&&) :: (a -> b) -> (a -> c) -> a -> (b, c)
2020-11-16 11:24:28 +0100 <lambdabot> Extra (&&&) :: (a -> b) -> (a -> c) -> a -> (b, c)
2020-11-16 11:24:28 +0100 <lambdabot> Control.Wire.Core (&&&!) :: (a -> b) -> (a -> c) -> (a -> (b, c))
2020-11-16 11:24:31 +0100acidjnk_new(~acidjnk@p200300d0c718f648045012e87868ed0b.dip0.t-ipconnect.de)
2020-11-16 11:24:39 +0100 <boxscape> hmm it doesn't find the Arrow one
2020-11-16 11:25:58 +0100lxsameer(~lxsameer@unaffiliated/lxsameer)
2020-11-16 11:28:52 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Ping timeout: 256 seconds)
2020-11-16 11:28:53 +0100 <boxscape> @pl \(^.) -> ((^.bla) &&& (^.foo))
2020-11-16 11:28:53 +0100 <lambdabot> (line 1, column 3):
2020-11-16 11:28:53 +0100 <lambdabot> unexpected "^"
2020-11-16 11:28:53 +0100 <lambdabot> expecting pattern
2020-11-16 11:29:01 +0100 <boxscape> this is a lambdabot restriction, right?
2020-11-16 11:29:09 +0100 <boxscape> or pointless restriction, rather
2020-11-16 11:30:33 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 11:30:50 +0100hidedagger(~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9)
2020-11-16 11:32:59 +0100 <merijn> pl is rather dumb
2020-11-16 11:33:07 +0100 <merijn> It doesn't properly parse Haskell, iirc
2020-11-16 11:33:51 +0100 <boxscape> I see
2020-11-16 11:35:04 +0100 <merijn> > (\(^.) -> 5 ^. 3) (+)
2020-11-16 11:35:07 +0100 <lambdabot> 8
2020-11-16 11:35:12 +0100 <merijn> Seems to work :)
2020-11-16 11:37:02 +0100w1gz(~do@159.89.11.133) (Quit: WeeChat 2.9)
2020-11-16 11:40:28 +0100 <Martinsos> > 314 + 42
2020-11-16 11:40:31 +0100 <lambdabot> 356
2020-11-16 11:44:23 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 11:44:45 +0100vonfry(~user@116.236.75.207)
2020-11-16 11:44:45 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 11:45:18 +0100subttle(~anonymous@unaffiliated/subttle)
2020-11-16 11:46:52 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th)
2020-11-16 11:48:55 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-11-16 11:49:27 +0100{abby}2{abby}
2020-11-16 11:50:52 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 11:52:03 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
2020-11-16 11:52:05 +0100bidabong(uid272474@gateway/web/irccloud.com/x-baxncysxwetsxiet)
2020-11-16 11:52:23 +0100Feuermagier(~Feuermagi@213.178.26.41)
2020-11-16 11:57:41 +0100guest1116(~user@49.5.6.87) (Remote host closed the connection)
2020-11-16 11:57:50 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-16 11:58:16 +0100jaspervdj(~jaspervdj@213.55.241.138)
2020-11-16 11:58:43 +0100w1gz(~do@159.89.11.133)
2020-11-16 12:01:09 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) (Remote host closed the connection)
2020-11-16 12:01:14 +0100alp(~alp@2a01:e0a:58b:4920:8cf5:bc2e:8b7a:9a8e) (Ping timeout: 264 seconds)
2020-11-16 12:01:25 +0100jakob_(~textual@p200300f49f1622008dbefd778746ea7f.dip0.t-ipconnect.de)
2020-11-16 12:01:38 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-16 12:03:22 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net) (Remote host closed the connection)
2020-11-16 12:03:41 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) ()
2020-11-16 12:03:53 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-16 12:04:04 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 12:04:59 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-16 12:05:04 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 12:06:23 +0100wei2912(~wei2912@unaffiliated/wei2912) (Remote host closed the connection)
2020-11-16 12:08:57 +0100christo(~chris@81.96.113.213)
2020-11-16 12:11:10 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 12:13:25 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
2020-11-16 12:13:31 +0100christo(~chris@81.96.113.213) (Ping timeout: 265 seconds)
2020-11-16 12:19:19 +0100alp(~alp@2a01:e0a:58b:4920:1c72:d61a:7e48:b350)
2020-11-16 12:22:48 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-16 12:23:33 +0100bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds)
2020-11-16 12:26:04 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 12:27:08 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-16 12:31:06 +0100cosimone(~cosimone@5.171.26.79)
2020-11-16 12:31:30 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 12:31:34 +0100andreas303(~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
2020-11-16 12:32:16 +0100vonfry(~user@116.236.75.207) (Remote host closed the connection)
2020-11-16 12:32:36 +0100knupfer(~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de)
2020-11-16 12:33:04 +0100knupfer(~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) (Client Quit)
2020-11-16 12:33:15 +0100Tario(~Tario@201.192.165.173)
2020-11-16 12:34:40 +0100andreas303(~andreas@gateway/tor-sasl/andreas303)
2020-11-16 12:35:57 +0100knupfer(~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de)
2020-11-16 12:38:27 +0100cgfuh(~cgfuh@181.167.191.58)
2020-11-16 12:38:35 +0100Unhammerd(~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection)
2020-11-16 12:38:43 +0100mirrorbird(~psutcliff@176.227.57.79)
2020-11-16 12:39:33 +0100Unhammerd(~Unhammer@gateway/tor-sasl/unhammer)
2020-11-16 12:40:14 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 264 seconds)
2020-11-16 12:41:05 +0100berberman(~berberman@unaffiliated/berberman)
2020-11-16 12:42:47 +0100ericsagn1(~ericsagne@2405:6580:0:5100:1774:2bb5:b05f:edf1) (Ping timeout: 260 seconds)
2020-11-16 12:47:26 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 12:51:02 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) (Ping timeout: 256 seconds)
2020-11-16 12:51:11 +0100hekkaidekapus_(~tchouri@gateway/tor-sasl/hekkaidekapus) (Quit: hekkaidekapus_)
2020-11-16 12:51:48 +0100wi[m](w1gzmatrix@gateway/shell/matrix.org/x-xtlrgyxrbktyedto)
2020-11-16 12:52:32 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-16 12:53:50 +0100sh9(~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8)
2020-11-16 12:53:58 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 12:54:49 +0100ericsagn1(~ericsagne@2405:6580:0:5100:1e63:f75b:d40e:f87e)
2020-11-16 13:04:07 +0100cheater(~user@unaffiliated/cheater) (Ping timeout: 260 seconds)
2020-11-16 13:04:30 +0100hackageZ-Data 0.1.9.0 - Array, vector and text https://hackage.haskell.org/package/Z-Data-0.1.9.0 (winterland)
2020-11-16 13:05:56 +0100cosimone(~cosimone@5.171.26.79) (Quit: cosimone)
2020-11-16 13:06:03 +0100cheater(~user@unaffiliated/cheater)
2020-11-16 13:07:52 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 13:08:21 +0100mirrorbird(~psutcliff@176.227.57.79) (Quit: Leaving)
2020-11-16 13:09:36 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net)
2020-11-16 13:13:17 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 13:15:43 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-16 13:22:29 +0100knupfer(~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) (Quit: knupfer)
2020-11-16 13:23:33 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 256 seconds)
2020-11-16 13:24:32 +0100sh9(~sh9@softbank060116136158.bbtec.net)
2020-11-16 13:25:17 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-16 13:28:10 +0100Stanley00(~stanley00@unaffiliated/stanley00) (Remote host closed the connection)
2020-11-16 13:29:12 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 13:32:44 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-223-24-151-50.revip6.asianet.co.th)
2020-11-16 13:34:40 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 13:38:01 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-11-16 13:43:30 +0100hackagevulkan 3.6.15 - Bindings to the Vulkan graphics API. https://hackage.haskell.org/package/vulkan-3.6.15 (jophish)
2020-11-16 13:46:08 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 13:47:52 +0100carlomagno(~cararell@148.87.23.8) (Remote host closed the connection)
2020-11-16 13:48:30 +0100hackagehpqtypes-extras 1.10.3.0 - Extra utilities for hpqtypes library https://hackage.haskell.org/package/hpqtypes-extras-1.10.3.0 (arybczak)
2020-11-16 13:49:15 +0100ulidtko(~ulidtko@193.111.48.79)
2020-11-16 13:50:05 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2020-11-16 13:52:51 +0100Sanchayan(~Sanchayan@171.61.102.109) (Quit: leaving)
2020-11-16 13:53:14 +0100plutoniix(~q@175.176.222.7) (Quit: Leaving)
2020-11-16 13:54:39 +0100texasmynsted(~texasmyns@212.102.45.103)
2020-11-16 13:58:03 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-16 14:01:52 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
2020-11-16 14:04:28 +0100urodna(~urodna@unaffiliated/urodna)
2020-11-16 14:07:56 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-223-24-151-50.revip6.asianet.co.th) (Ping timeout: 272 seconds)
2020-11-16 14:09:36 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-16 14:10:58 +0100Rudd0(~Rudd0@185.189.115.103) (Ping timeout: 260 seconds)
2020-11-16 14:13:26 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net) (Ping timeout: 256 seconds)
2020-11-16 14:14:05 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-16 14:14:18 +0100whatisRT(~whatisRT@ip5b416a33.dynamic.kabel-deutschland.de)
2020-11-16 14:15:01 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr)
2020-11-16 14:17:07 +0100knupfer(~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de)
2020-11-16 14:17:12 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-16 14:19:44 +0100 <tomjaguarpaw> Can I disable the garbage collector temporarily at run time and then re-enable by running some IO action?
2020-11-16 14:20:03 +0100 <merijn> tomjaguarpaw: Not really
2020-11-16 14:20:09 +0100 <merijn> tomjaguarpaw: Why?
2020-11-16 14:20:15 +0100 <tomjaguarpaw> For benchmarking
2020-11-16 14:20:30 +0100 <tomjaguarpaw> or at least to determine whether it's GC that's taking time in my benchmarks
2020-11-16 14:20:35 +0100 <merijn> tomjaguarpaw: You can *force* a collection ahead of time
2020-11-16 14:20:45 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-16 14:20:53 +0100 <tomjaguarpaw> Hmm, OK, that will be a good start
2020-11-16 14:21:01 +0100 <merijn> tomjaguarpaw: That's what criterion does. Fully evaluate all data structures before benchmark, then trigger GC explicitly, then benchmark
2020-11-16 14:21:09 +0100 <merijn> Which should make major collections unlikely
2020-11-16 14:21:23 +0100 <tomjaguarpaw> How do I do that?
2020-11-16 14:21:29 +0100 <merijn> @Hoogle performGC
2020-11-16 14:21:30 +0100 <lambdabot> Maybe you meant: hoogle google
2020-11-16 14:21:33 +0100 <merijn> @hoogle performGC
2020-11-16 14:21:33 +0100 <lambdabot> System.Mem performGC :: IO ()
2020-11-16 14:21:33 +0100 <lambdabot> BasePrelude performGC :: IO ()
2020-11-16 14:21:33 +0100 <lambdabot> Pipes.Concurrent performGC :: IO ()
2020-11-16 14:23:15 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-16 14:23:30 +0100 <tomjaguarpaw> merijn: Cool, thanks! I will give it a go.
2020-11-16 14:23:41 +0100 <merijn> tomjaguarpaw: You can study how criterion works too
2020-11-16 14:23:49 +0100 <merijn> (or just use criterion if possible :p)
2020-11-16 14:26:16 +0100vjoki(vjoki@2a00:d880:3:1::fea1:9ae) (Quit: ...)
2020-11-16 14:26:57 +0100vjoki(vjoki@2a00:d880:3:1::fea1:9ae)
2020-11-16 14:27:08 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-16 14:27:38 +0100rdivacky(~rdivacky@212.96.173.4) (Read error: Connection reset by peer)
2020-11-16 14:27:54 +0100rdivacky(~rdivacky@212.96.173.4)
2020-11-16 14:27:54 +0100lockshaw(~lockshaw@165.22.163.71) (Quit: ZNC 1.7.2+deb3 - https://znc.in)
2020-11-16 14:29:04 +0100Guest2830(~geekosaur@84.39.117.57)
2020-11-16 14:33:31 +0100lockshaw(~lockshaw@165.22.163.71)
2020-11-16 14:34:03 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-nsgilupshvjjyzul)
2020-11-16 14:34:09 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-16 14:38:17 +0100lep-deletetest
2020-11-16 14:38:36 +0100testlep-delete
2020-11-16 14:40:30 +0100hackagegit-annex 8.20201116 - manage files with git, without checking their contents into git https://hackage.haskell.org/package/git-annex-8.20201116 (JoeyHess)
2020-11-16 14:41:22 +0100toorevitimirp(~tooreviti@117.182.180.118) (Ping timeout: 246 seconds)
2020-11-16 14:41:34 +0100raichoo(~raichoo@dslb-088-077-025-015.088.077.pools.vodafone-ip.de)
2020-11-16 14:41:52 +0100toorevitimirp(~tooreviti@117.182.180.118)
2020-11-16 14:47:45 +0100knupfer(~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2020-11-16 14:48:36 +0100ggole(~ggole@2001:8003:8119:7200:a813:5a33:e96f:8fc6)
2020-11-16 14:49:25 +0100Yumasi(~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Ping timeout: 264 seconds)
2020-11-16 14:49:53 +0100Yumasi(~guillaume@static-176-175-104-214.ftth.abo.bbox.fr)
2020-11-16 14:52:21 +0100bahamas(~lucian@unaffiliated/bahamas)
2020-11-16 14:53:27 +0100RandIter(~RandIter@178.162.212.214) (Remote host closed the connection)
2020-11-16 14:53:43 +0100Sanchayan(~Sanchayan@171.61.102.109)
2020-11-16 14:56:32 +0100Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net)
2020-11-16 15:00:58 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 246 seconds)
2020-11-16 15:02:41 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 265 seconds)
2020-11-16 15:02:58 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th)
2020-11-16 15:03:23 +0100servo(~servo@41.92.32.131)
2020-11-16 15:03:24 +0100servo(~servo@41.92.32.131) (Max SendQ exceeded)
2020-11-16 15:03:33 +0100cinimod_(uid93893@gateway/web/irccloud.com/x-jjuixteopossqepf)
2020-11-16 15:03:47 +0100servo(~servo@41.92.32.131)
2020-11-16 15:03:48 +0100servo(~servo@41.92.32.131) (Max SendQ exceeded)
2020-11-16 15:04:12 +0100servo(~servo@41.92.32.131)
2020-11-16 15:04:13 +0100servo(~servo@41.92.32.131) (Max SendQ exceeded)
2020-11-16 15:04:34 +0100servo(~servo@41.92.97.254)
2020-11-16 15:04:35 +0100servo(~servo@41.92.97.254) (Max SendQ exceeded)
2020-11-16 15:04:56 +0100servo(~servo@41.92.97.254)
2020-11-16 15:04:57 +0100servo(~servo@41.92.97.254) (Max SendQ exceeded)
2020-11-16 15:05:00 +0100christo(~chris@81.96.113.213)
2020-11-16 15:05:16 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad)
2020-11-16 15:05:20 +0100servo(~servo@41.92.97.254)
2020-11-16 15:05:21 +0100servo(~servo@41.92.97.254) (Max SendQ exceeded)
2020-11-16 15:05:46 +0100servo(~servo@41.92.32.131)
2020-11-16 15:05:47 +0100servo(~servo@41.92.32.131) (Max SendQ exceeded)
2020-11-16 15:06:09 +0100servo(~servo@41.92.97.254)
2020-11-16 15:06:10 +0100servo(~servo@41.92.97.254) (Max SendQ exceeded)
2020-11-16 15:06:32 +0100hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net)
2020-11-16 15:06:36 +0100servo(~servo@41.92.32.131)
2020-11-16 15:06:37 +0100servo(~servo@41.92.32.131) (Max SendQ exceeded)
2020-11-16 15:07:00 +0100servo(~servo@41.92.97.254)
2020-11-16 15:08:09 +0100Jajik(xchlup2@gateway/shell/fi.muni.cz/x-dpprselxanrtxlgk) (Quit: Ping timeout (120 seconds))
2020-11-16 15:08:22 +0100Jajik(xchlup2@gateway/shell/fi.muni.cz/x-jfxvsfpdsqpqvolb)
2020-11-16 15:09:05 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2020-11-16 15:09:22 +0100mmfood(~mmfood@81-232-132-159-no64.tbcn.telia.com)
2020-11-16 15:11:11 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 15:11:39 +0100cinimod_(uid93893@gateway/web/irccloud.com/x-jjuixteopossqepf) ()
2020-11-16 15:11:53 +0100cinimod_(uid93893@gateway/web/irccloud.com/x-wrzxrzpvqphwukyg)
2020-11-16 15:13:30 +0100Kaivo(~Kaivo@104-200-86-99.mc.derytele.com) (Quit: WeeChat 2.9)
2020-11-16 15:13:40 +0100xsperry(~as@unaffiliated/xsperry)
2020-11-16 15:15:50 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-11-16 15:19:18 +0100machinedgod(~machinedg@24.105.81.50)
2020-11-16 15:19:43 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) (Ping timeout: 260 seconds)
2020-11-16 15:19:59 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-16 15:25:26 +0100 <kuribas> How do I model some subtype relation with classes? For example A contains some B, B contains some C, then I want a function that gives me all C in A.
2020-11-16 15:25:40 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
2020-11-16 15:25:55 +0100 <kuribas> like "allChildren someA @C"
2020-11-16 15:26:15 +0100 <kuribas> I could do this with overlapping type-classes, but they aren't recommended?
2020-11-16 15:26:36 +0100 <merijn> kuribas: tbh, what your asking also sounds "not recommended" :p
2020-11-16 15:27:07 +0100 <kuribas> merijn: so you would model every combination of subsets?
2020-11-16 15:27:30 +0100 <merijn> You're going to have to get a lot more specific about what that even means :)
2020-11-16 15:27:46 +0100gxt(~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection)
2020-11-16 15:28:51 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2020-11-16 15:28:58 +0100 <kuribas> well in lisp we have (select :park :sensor-box), and it would return all sensor-boxes in a park.
2020-11-16 15:29:06 +0100gxt(~gxt@gateway/tor-sasl/gxt)
2020-11-16 15:29:08 +0100 <geekosaur> ti sounded more like generics than classes to me
2020-11-16 15:30:33 +0100knupfer(~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de)
2020-11-16 15:31:05 +0100 <kuribas> merijn: or you would explicitly compose them?
2020-11-16 15:31:32 +0100 <kuribas> like parkInverters >>> inverterSensorBoxes
2020-11-16 15:31:38 +0100jchia(~jchia@58.32.36.109) (*.net *.split)
2020-11-16 15:31:38 +0100TMA(tma@twin.jikos.cz) (*.net *.split)
2020-11-16 15:31:38 +0100jdt(~jdt@208.85.233.130) (*.net *.split)
2020-11-16 15:31:38 +0100adamCS(~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) (*.net *.split)
2020-11-16 15:31:38 +0100Ranhir(~Ranhir@157.97.53.139) (*.net *.split)
2020-11-16 15:31:38 +0100qz(~quetzal@li272-85.members.linode.com) (*.net *.split)
2020-11-16 15:31:38 +0100[exa](exa@unaffiliated/exa/x-5381537) (*.net *.split)
2020-11-16 15:31:38 +0100ring0`(~ringo@unaffiliated/ring0/x-8667941) (*.net *.split)
2020-11-16 15:31:38 +0100kqr(~kqr@vps.xkqr.org) (*.net *.split)
2020-11-16 15:31:49 +0100[exa](exa@srv3.blesmrt.net)
2020-11-16 15:31:54 +0100qz(~quetzal@li272-85.members.linode.com)
2020-11-16 15:31:54 +0100jdt(~jdt@208.85.233.130)
2020-11-16 15:31:59 +0100adamCS(~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com)
2020-11-16 15:32:03 +0100TMA(tma@twin.jikos.cz)
2020-11-16 15:32:05 +0100Ranhir(~Ranhir@157.97.53.139)
2020-11-16 15:32:12 +0100 <merijn> kuribas: Are you maybe (accidentally) trying to reinvent the cursor stuff from xml-conduit?
2020-11-16 15:32:18 +0100ring0`(~ringo@unaffiliated/ring0/x-8667941)
2020-11-16 15:32:18 +0100kqr(~kqr@vps.xkqr.org)
2020-11-16 15:32:43 +0100jchia(~jchia@45.32.62.73)
2020-11-16 15:33:11 +0100 <kuribas> well, I have a containment relation.
2020-11-16 15:33:22 +0100 <merijn> kuribas: https://hackage.haskell.org/package/xml-conduit-1.8.0.1/docs/Text-XML-Cursor.html
2020-11-16 15:33:26 +0100Stanley00(~stanley00@unaffiliated/stanley00) (Ping timeout: 272 seconds)
2020-11-16 15:33:46 +0100 <merijn> This handles exactly queries like "all XML tags with property Y starting from node X" style queries
2020-11-16 15:33:56 +0100 <merijn> Which sounds similar to what you're doing?
2020-11-16 15:34:04 +0100 <kuribas> merijn: yeah
2020-11-16 15:34:11 +0100 <kuribas> merijn: but this goes to the DB
2020-11-16 15:35:06 +0100renzhi(~renzhi@2607:fa49:655f:e600::28da)
2020-11-16 15:35:31 +0100 <kuribas> merijn: another example is a class relationship. Let's say I have a "attribute" type. (Attribute class tp), meaning I can extract a value of "tp" from an object of type "Object class"
2020-11-16 15:35:54 +0100 <kuribas> So "get :: Object class -> Attribute class tp -> m tp"
2020-11-16 15:36:08 +0100 <kuribas> But class has superclasses.
2020-11-16 15:36:32 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 15:37:03 +0100 <kuribas> so I want "get :: SuperClassOf class2 class1 => Object class1 -> Attribute class2 tp -> m tp"
2020-11-16 15:37:16 +0100 <kuribas> but then that only works if I use overlapping instances.
2020-11-16 15:37:29 +0100 <merijn> I would personally never contemplate going this route
2020-11-16 15:37:31 +0100 <kuribas> to get the transitive closure of superclasses.
2020-11-16 15:37:38 +0100 <kuribas> merijn: which route would you go then.
2020-11-16 15:37:40 +0100 <merijn> This'll all end in tears
2020-11-16 15:37:58 +0100 <kuribas> tell me which route well end in happiness
2020-11-16 15:38:07 +0100 <merijn> I don't really know what I *would* do, because I've never attempted this
2020-11-16 15:38:34 +0100cgfuh(~cgfuh@181.167.191.58) (Quit: WeeChat 2.9)
2020-11-16 15:38:40 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2020-11-16 15:38:47 +0100 <merijn> kuribas: I would probably try and encode the accesors as a GADT and then just have transformers that can map them to their containing objects
2020-11-16 15:38:47 +0100Chi1thangoo(~Chi1thang@87.112.60.168)
2020-11-16 15:38:50 +0100 <kuribas> of course I could invent a "fancy haskell" solution, using type level lists, etc...
2020-11-16 15:39:20 +0100 <merijn> Any sort of "inheritance" style design with typeclasses always ends in cryptic errors, overlapping/incoherent instance nightmares, etc.
2020-11-16 15:39:49 +0100cgfuh(~cgfuh@181.167.191.58)
2020-11-16 15:40:45 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 15:41:24 +0100 <kuribas> merijn: I could make a custom type error
2020-11-16 15:41:40 +0100 <merijn> If "Attribute class tp" was a datatype with just the explicit function to make the appropriate lookup you can then define a Category and Profunctor instance and then generalising is just contramap the class type to the more general type
2020-11-16 15:41:46 +0100Tario(~Tario@201.192.165.173)
2020-11-16 15:42:02 +0100toorevitimirp(~tooreviti@117.182.180.118) (Ping timeout: 264 seconds)
2020-11-16 15:42:08 +0100 <tomjaguarpaw> Can I get access to RTS statistics at run time? I would like to see if it really is garbage collection that is causing my strange performance.
2020-11-16 15:42:14 +0100 <merijn> tomjaguarpaw: Yes
2020-11-16 15:42:23 +0100 <tomjaguarpaw> Where do I look for those?
2020-11-16 15:42:29 +0100 <merijn> tomjaguarpaw: Somewhere in the GHC.* modules in base
2020-11-16 15:42:51 +0100 <kuribas> merijn: you mean explicit subtyping?
2020-11-16 15:43:05 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
2020-11-16 15:43:12 +0100 <merijn> I mean "forgetting the term subtyping entirely"
2020-11-16 15:43:39 +0100 <kuribas> like: asClass :: IsSubClass a b => Attribute a tp -> Attribute b tp
2020-11-16 15:43:53 +0100 <kuribas> merijn: the model is already subtyped, I cannot change that.
2020-11-16 15:44:03 +0100 <tomjaguarpaw> Hmm GHC.Stats, I guess
2020-11-16 15:44:10 +0100 <merijn> Except, if Attribute is a datatype and has a profunctor instance then you don't even need IsSubClass or anything
2020-11-16 15:44:16 +0100 <merijn> You just need a function "a -> b"
2020-11-16 15:45:02 +0100 <kuribas> merijn: but class is just a phantom type to ensure you don't send an attribute to the wrong object.
2020-11-16 15:45:30 +0100 <kuribas> merijn: so a function a -> b is impossible.
2020-11-16 15:46:03 +0100 <kuribas> a and b are uninhabited
2020-11-16 15:46:05 +0100christo(~chris@81.96.113.213)
2020-11-16 15:47:34 +0100jchia(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-16 15:47:36 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 15:47:56 +0100jchia(~jchia@45.32.62.73)
2020-11-16 15:48:09 +0100Sanchayan(~Sanchayan@171.61.102.109) (Quit: leaving)
2020-11-16 15:48:12 +0100 <merijn> So, that just means you can't use profunctor. You can define a Convertible type with phantom attributes (probably as GADT or data family?) and then have "Convert a b -> Attribute a tp -> Attribute b tp" or something?
2020-11-16 15:49:12 +0100jchia(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-16 15:49:29 +0100 <kuribas> what's so bad about overlapping instances?
2020-11-16 15:49:33 +0100avdb(~avdb@ip-62-235-12-238.dsl.scarlet.be)
2020-11-16 15:49:58 +0100 <hekkaidekapus> tomjaguarpaw: 1) ghc -O2 -eventlog M.hs 2) ./M +RTS -lau 3) Roam Hackage searching the best events analyser for your liking.
2020-11-16 15:50:02 +0100acidjnk_new(~acidjnk@p200300d0c718f648045012e87868ed0b.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-11-16 15:50:08 +0100jchia(~jchia@58.32.36.109)
2020-11-16 15:51:12 +0100alp(~alp@2a01:e0a:58b:4920:1c72:d61a:7e48:b350) (Ping timeout: 260 seconds)
2020-11-16 15:51:26 +0100 <hekkaidekapus> tomjaguarpaw: <https://www.well-typed.com/blog/2019/09/eventful-ghc/>
2020-11-16 15:52:23 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-11-16 15:52:49 +0100 <merijn> kuribas: Instance selection is implementation defined and may change depending on which instances are defined/exposed in your dependencies
2020-11-16 15:53:10 +0100 <kuribas> merijn: they are all predefined
2020-11-16 15:53:29 +0100 <merijn> hekkaidekapus: THat's not at runtime, though
2020-11-16 15:53:36 +0100 <merijn> hekkaidekapus: At least not *within* the code
2020-11-16 15:54:34 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 260 seconds)
2020-11-16 15:54:43 +0100 <hekkaidekapus> merijn: Not within the code but profiling an executable for GC events may be more helpful.
2020-11-16 15:55:05 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-27-55-82-144.revip3.asianet.co.th)
2020-11-16 15:57:00 +0100hackageprolude 0.0.0.8 - ITProTV's custom prelude https://hackage.haskell.org/package/prolude-0.0.0.8 (goolord)
2020-11-16 15:57:43 +0100nados(~dan@69-165-210-185.cable.teksavvy.com)
2020-11-16 15:59:14 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-16 16:00:01 +0100Guest2830(~geekosaur@84.39.117.57) ()
2020-11-16 16:00:32 +0100xff0x(~fox@2001:1a81:529e:a500:a7e0:336:a54e:d7a5) (Ping timeout: 260 seconds)
2020-11-16 16:00:46 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2020-11-16 16:00:50 +0100jakob_(~textual@p200300f49f1622008dbefd778746ea7f.dip0.t-ipconnect.de) (Quit: Textual IRC Client: www.textualapp.com)
2020-11-16 16:00:56 +0100cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
2020-11-16 16:01:00 +0100__monty__(~toonn@unaffiliated/toonn)
2020-11-16 16:04:03 +0100gxt(~gxt@gateway/tor-sasl/gxt) (Ping timeout: 240 seconds)
2020-11-16 16:04:20 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-27-55-82-144.revip3.asianet.co.th) (Ping timeout: 256 seconds)
2020-11-16 16:04:59 +0100 <magicman> The fact that Data.Map.Merge.{Lazy,Strict} exist makes me happy. Thanks to whomever did this. I don't know how long they've been there, but they're great.
2020-11-16 16:06:02 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 264 seconds)
2020-11-16 16:06:08 +0100 <merijn> I think micro-optimising that stuff in containers is David Feuer's baby?
2020-11-16 16:07:40 +0100jedws(~jedws@101.184.175.183)
2020-11-16 16:09:59 +0100lucasb(uid333435@gateway/web/irccloud.com/x-ezcrumvhrckwfdja)
2020-11-16 16:12:39 +0100xff0x(~fox@2001:1a81:529e:a500:a7e0:336:a54e:d7a5)
2020-11-16 16:13:22 +0100albert(~albert@user-5-173-8-190.play-internet.pl)
2020-11-16 16:13:53 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-16 16:15:40 +0100idhugo(~idhugo@users-1190.st.net.au.dk) (Ping timeout: 265 seconds)
2020-11-16 16:17:48 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-11-16 16:20:39 +0100 <siraben> Why would you need both lazy and strict map merging?
2020-11-16 16:21:27 +0100 <merijn> siraben: If you need to combine values for existing keys then how you do that depends on whether you have a strict or lazy map :p
2020-11-16 16:22:14 +0100 <siraben> I see. Does Data.Map default to strict or lazy?
2020-11-16 16:22:40 +0100 <merijn> Data.Map exports lazy
2020-11-16 16:22:55 +0100 <merijn> You need to import Data.Map.Strict for strict
2020-11-16 16:22:58 +0100 <siraben> I see.
2020-11-16 16:23:19 +0100 <merijn> (Note that the datatype is the same in both modules, only the functions chance)
2020-11-16 16:23:21 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 16:24:13 +0100 <siraben> I've used IntMap to represent the store in a Scheme interpreter. Is that best strict or lazy?
2020-11-16 16:25:42 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-16 16:26:34 +0100 <merijn> siraben: The Map itself is always strict, so strict/lazy refers to the elements stored in it. So lazy map stores the (lazy, unevaluated) computation as value, whereas strict will store the evaluated thing as value
2020-11-16 16:27:09 +0100 <merijn> So if you have a map storing "small" values (like Int) and you know that computing the value is cheap and/or you will always use all values, then you probably want strict
2020-11-16 16:27:13 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 264 seconds)
2020-11-16 16:27:51 +0100thunderrd(~thunderrd@183.182.111.169) (*.net *.split)
2020-11-16 16:28:38 +0100vacm(~vacwm@70.23.92.191)
2020-11-16 16:28:53 +0100 <siraben> The IntMap can be strict but grow unbounded in size right?
2020-11-16 16:29:02 +0100 <merijn> because storing an int obviously costs less space than an arbitrary thunk
2020-11-16 16:29:19 +0100 <siraben> https://github.com/siraben/r5rs-denot/blob/126031d43b222dd1056f93e8fa078317c8701d2d/src/SchemeType…
2020-11-16 16:29:22 +0100 <merijn> siraben: strict just means that "values are evaluated to WHNF when you insert them"
2020-11-16 16:29:50 +0100 <siraben> Sounds like I'd want a strict IntMap then since these values are Scheme values or functions
2020-11-16 16:30:34 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 16:30:41 +0100Ariakenom(~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se)
2020-11-16 16:31:00 +0100mmfood(~mmfood@81-232-132-159-no64.tbcn.telia.com) (Quit: Leaving)
2020-11-16 16:31:53 +0100 <tomjaguarpaw> I've just noticed something very amusing. I can't pass +RTS to my executable when invoking cabal v2-exec because it as swallowed by cabal itself.
2020-11-16 16:32:46 +0100 <merijn> tomjaguarpaw: Use -- before the +RTS
2020-11-16 16:33:10 +0100 <merijn> tomjaguarpaw: So "cabal v2-exec myexe -- +RTS ..."
2020-11-16 16:33:45 +0100 <reactormonk> I'm on "which recursion scheme function do I use?". I've got Recursive / Corecursive instances over my AST. I wanna change an annotation (and its type). That annotation depends on the value of the current node and its leaves.
2020-11-16 16:33:59 +0100thunderrd(~thunderrd@183.182.111.169)
2020-11-16 16:34:34 +0100 <merijn> tomjaguarpaw: Someone already thought of and solved that problem ;)
2020-11-16 16:35:05 +0100 <tomjaguarpaw> What a clever person. And if there are two levels of nesting, -- -- ?
2020-11-16 16:35:13 +0100 <tomjaguarpaw> I just used -with-rtsopts :D
2020-11-16 16:36:51 +0100 <merijn> tomjaguarpaw: No clue, I've never had that problem nested doubly before :p
2020-11-16 16:36:51 +0100knupfer(~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2020-11-16 16:37:37 +0100gxt(~gxt@gateway/tor-sasl/gxt)
2020-11-16 16:38:28 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th)
2020-11-16 16:45:31 +0100hackageZ-Data 0.1.9.1 - Array, vector and text https://hackage.haskell.org/package/Z-Data-0.1.9.1 (winterland)
2020-11-16 16:48:00 +0100pavonia(~user@unaffiliated/siracusa) (Quit: Bye!)
2020-11-16 16:48:05 +0100 <kuribas> merijn: I can make this work without overlapping instances. It's just more ugly.
2020-11-16 16:48:29 +0100 <kuribas> merijn: I would need a extra phantom type in the multiparam typeclass
2020-11-16 16:48:44 +0100 <kuribas> merijn: A boolean to signify "stop searching"
2020-11-16 16:48:45 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 240 seconds)
2020-11-16 16:50:11 +0100jespada(~jespada@90.254.245.49)
2020-11-16 16:50:14 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-zpttjkkcshfghzwp)
2020-11-16 16:51:27 +0100albert(~albert@user-5-173-8-190.play-internet.pl) (Quit: Leaving)
2020-11-16 16:51:37 +0100ericsagn1(~ericsagne@2405:6580:0:5100:1e63:f75b:d40e:f87e) (Ping timeout: 260 seconds)
2020-11-16 16:53:40 +0100idhugo(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net)
2020-11-16 16:56:42 +0100GothAlice1(~GothAlice@178.162.212.214)
2020-11-16 16:58:49 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-16 16:59:14 +0100servo(~servo@41.92.97.254) (Remote host closed the connection)
2020-11-16 16:59:15 +0100conal(~conal@64.71.133.70)
2020-11-16 16:59:43 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-16 17:00:01 +0100carlomagno(~cararell@148.87.23.10)
2020-11-16 17:01:06 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Ping timeout: 265 seconds)
2020-11-16 17:01:21 +0100Rudd0(~Rudd0@185.189.115.103)
2020-11-16 17:03:02 +0100ericsagn1(~ericsagne@2405:6580:0:5100:af5d:a404:2c6:5e7e)
2020-11-16 17:04:55 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-16 17:05:41 +0100 <dminuoso> 15:43:39 kuribas | like: asClass :: IsSubClass a b => Attribute a tp -> Attribute b tp
2020-11-16 17:05:46 +0100 <dminuoso> kuribas: Take a look at optics
2020-11-16 17:05:57 +0100 <dminuoso> They implement a hierarchy with subtyping, supported by type families
2020-11-16 17:06:20 +0100 <dminuoso> Including utilities to calculate least upper bounds
2020-11-16 17:06:29 +0100alp(~alp@2a01:e0a:58b:4920:e453:474f:9209:5f93)
2020-11-16 17:06:30 +0100 <dminuoso> See
2020-11-16 17:06:32 +0100 <dminuoso> https://hackage.haskell.org/package/optics-core-0.3.0.1/docs/Optics-Internal-Optic-Subtyping.html#…
2020-11-16 17:06:32 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Remote host closed the connection)
2020-11-16 17:06:35 +0100 <dminuoso> https://hackage.haskell.org/package/optics-core-0.3.0.1/docs/Optics-Internal-Optic-Subtyping.html#…
2020-11-16 17:06:48 +0100 <dminuoso> And https://hackage.haskell.org/package/optics-core-0.3.0.1/docs/Optics-Internal-Optic.html#v:castOptic
2020-11-16 17:06:49 +0100idhugo(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 264 seconds)
2020-11-16 17:07:04 +0100justsomeguy(~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b)
2020-11-16 17:07:04 +0100justsomeguy(~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b) (Changing host)
2020-11-16 17:07:04 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-11-16 17:07:21 +0100 <dminuoso> (It's very boilerplaty, but it works because the hierarchy is pretty much fixed in size.)
2020-11-16 17:09:09 +0100bahamas(~lucian@unaffiliated/bahamas) (Quit: leaving)
2020-11-16 17:10:05 +0100 <kuribas> dminuoso: actually, that should work for my case!
2020-11-16 17:10:34 +0100mirrorbird(~psutcliff@89.40.182.152)
2020-11-16 17:11:05 +0100 <kuribas> I don't even need type families IMO...
2020-11-16 17:11:46 +0100avdb(~avdb@ip-62-235-12-238.dsl.scarlet.be) (Ping timeout: 256 seconds)
2020-11-16 17:11:56 +0100 <dminuoso> Depends on what your goals are. Here, the Join type family is useful because if you compose two optics, the resulting optic is their least upper bound
2020-11-16 17:12:13 +0100 <dminuoso> (i.e. A_Prism composed with A_Lens gives you An_AffineFold)
2020-11-16 17:12:40 +0100idhugo(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net)
2020-11-16 17:13:42 +0100zfnmxt(~zfnmxt@unaffiliated/zfnmxt) (Quit: Bye!)
2020-11-16 17:13:50 +0100 <kuribas> instance IsA k k; IsA MySubClass b => instance IsA b MyClass
2020-11-16 17:14:30 +0100 <kuribas> ah no, that's overlapping...
2020-11-16 17:14:32 +0100zfnmxt(~zfnmxt@unaffiliated/zfnmxt)
2020-11-16 17:21:59 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 17:22:12 +0100xff0x(~fox@2001:1a81:529e:a500:a7e0:336:a54e:d7a5) (Ping timeout: 260 seconds)
2020-11-16 17:22:24 +0100lottaquestions_(~nick@2607:fa49:5040:d100:54ba:4f0:c193:a93d)
2020-11-16 17:22:43 +0100mirrorbird(~psutcliff@89.40.182.152) (Quit: Leaving)
2020-11-16 17:22:52 +0100xff0x(~fox@2001:1a81:529e:a500:93fd:46ff:4df5:fd50)
2020-11-16 17:24:01 +0100lottaquestions_(~nick@2607:fa49:5040:d100:54ba:4f0:c193:a93d) ("Konversation terminated!")
2020-11-16 17:24:31 +0100cads2(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-16 17:25:03 +0100Sgeo_(~Sgeo@ool-18b982ad.dyn.optonline.net)
2020-11-16 17:27:25 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 240 seconds)
2020-11-16 17:28:25 +0100Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 264 seconds)
2020-11-16 17:29:58 +0100 <tomjaguarpaw> Hmm, so according to getRTSStats GC is taking a lot (80%) of the time of the function I want to benchmark
2020-11-16 17:30:20 +0100 <kuribas> dminuoso: nevermind, these are generated, I could as well generate instance for every possible superclass.
2020-11-16 17:30:24 +0100 <tomjaguarpaw> Well, about 3% for small input data and 80% for large input data (the input data are expression trees)
2020-11-16 17:31:04 +0100 <Uniaika> tomjaguarpaw: :o
2020-11-16 17:31:27 +0100 <dminuoso> kuribas: Im not telling you this is how you should do it, just as an inspiration perhaps.
2020-11-16 17:31:43 +0100 <dminuoso> The underlying implementation works because the inheritance is given by constraint mixing.
2020-11-16 17:32:00 +0100 <dminuoso> (So castOptic relies on constraint implications to work properly)
2020-11-16 17:33:01 +0100 <dminuoso> class Is k l where implies :: (Constraints k p => r) -> (Constraints l p => r)
2020-11-16 17:33:12 +0100 <kuribas> dminuoso: looks complicated ...
2020-11-16 17:33:34 +0100 <dminuoso> kuribas: Well the idea is rather simple really
2020-11-16 17:33:46 +0100 <Uniaika> tomjaguarpaw: would you need mutable datastructures?
2020-11-16 17:34:04 +0100 <dminuoso> kuribas: Handwavingly, an optic is something of type: type Optic c s t a b = forall p. c p => p a b -> p s t
2020-11-16 17:34:07 +0100 <kuribas> dminuoso: so my solution would verbose but simple: data SomeClass; instance IsSubClass SomeClass SuperClass; instance IsSubClass SomeClass SuperClassOfSuperClass
2020-11-16 17:34:12 +0100 <dminuoso> Where c is some constraints
2020-11-16 17:34:24 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
2020-11-16 17:34:32 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2020-11-16 17:34:54 +0100 <dminuoso> So `type Lens s t a b = forall p. Strong p => p a b -> p s t`
2020-11-16 17:35:12 +0100 <dminuoso> And `type Prism s t a b = forall p. Choice p => p a b -> p s t`
2020-11-16 17:35:28 +0100 <kuribas> for a funny definition of "simple"
2020-11-16 17:35:31 +0100 <dminuoso> Hold on!
2020-11-16 17:35:54 +0100 <kuribas> dminuoso: you don't need to convince me, this is meant for haskell newbees.
2020-11-16 17:36:12 +0100 <dminuoso> `type AffineTraversal s t a b = forall p. Visiting p => p a b -> p s t`
2020-11-16 17:36:13 +0100avdb(~avdb@ip-213-49-61-183.dsl.scarlet.be)
2020-11-16 17:36:16 +0100 <dminuoso> kuribas: The idea now is:
2020-11-16 17:36:49 +0100 <dminuoso> Strong and Choice give you Visiting.
2020-11-16 17:38:07 +0100 <dminuoso> Because: class (Choice p, Strong p) => Visiting p
2020-11-16 17:39:18 +0100electricityZZZZ(~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net)
2020-11-16 17:41:48 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2020-11-16 17:43:01 +0100 <dminuoso> kuribas: *sorry there was a typo. The other way around, Visibility implies Choice and Strong.
2020-11-16 17:43:40 +0100idhugo(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Read error: Connection reset by peer)
2020-11-16 17:43:42 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2020-11-16 17:44:13 +0100idhugo(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net)
2020-11-16 17:44:15 +0100 <kuribas> dminuoso: that's hardly easy...
2020-11-16 17:44:19 +0100 <dminuoso> So if you plug in something that gives Visiting, then you can also treat this as Choice and Strong
2020-11-16 17:44:46 +0100 <kuribas> I just feel that most of what is in lens is fluff
2020-11-16 17:44:50 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-16 17:44:50 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 17:44:58 +0100 <kuribas> it's nice, and cool it's possible, but not that necessary
2020-11-16 17:45:19 +0100 <kuribas> there's a small core which is very useful, like lenses, prisms, traversals
2020-11-16 17:48:40 +0100vacm(~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 17:49:34 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad)
2020-11-16 17:50:06 +0100conal(~conal@64.71.133.70)
2020-11-16 17:50:10 +0100 <tomjaguarpaw> Uniaika: I'm not sure what you mean "Would I need mutable datastructures". Everything I am doing is without mutation
2020-11-16 17:50:21 +0100 <kuribas> dminuoso: if I want to put emphasis on the benefits of haskell to a non-haskell programmer, and I show them this, they think I am crazy.
2020-11-16 17:50:24 +0100 <tomjaguarpaw> Are you saying mutable data structures could cause less garbage?
2020-11-16 17:51:19 +0100 <merijn> tomjaguarpaw: Are you, by any chance, using the threaded runtime system?
2020-11-16 17:51:25 +0100 <Uniaika> tomjaguarpaw: well, if you're applying a lot of transformations on an immutable datastructure, it produces a lot of garbage, right?
2020-11-16 17:51:27 +0100 <tomjaguarpaw> Not knowingly
2020-11-16 17:51:40 +0100 <merijn> Uniaika: That's not really relevant, though
2020-11-16 17:51:43 +0100 <tomjaguarpaw> I don't have "-threaded" in my cabal file
2020-11-16 17:51:46 +0100 <Uniaika> merijn: alright
2020-11-16 17:51:48 +0100 <merijn> Uniaika: GC time doesn't scale with amount of garbage
2020-11-16 17:51:59 +0100 <Uniaika> merijn: oh? my bad :)
2020-11-16 17:52:01 +0100 <merijn> Uniaika: GHC's GC scales with "amount of non-garbage"
2020-11-16 17:52:08 +0100 <kuribas> but ghc is optimized for lots of garbage.
2020-11-16 17:52:18 +0100 <justsomeguy> What does the “temp->data = value;” in the code sample here https://en.wikipedia.org/wiki/Linked_list#Singly_linked_lists mean? Is this like “data.value = temp”, where ``data.value`` is a record data with a field value?
2020-11-16 17:52:20 +0100 <tomjaguarpaw> I have large amounts of non-garbage, but perhaps only 1GB
2020-11-16 17:52:23 +0100 <kuribas> using mutable data can be even worse.
2020-11-16 17:52:24 +0100 <merijn> Uniaika: For exactly this reason, lazy evaluation produces *tons* of garbage :)
2020-11-16 17:52:44 +0100 <merijn> tomjaguarpaw: Oh, yes, that can hurt you
2020-11-16 17:52:48 +0100 <Uniaika> kuribas: TIL, thanks for correcting me
2020-11-16 17:53:00 +0100 <Uniaika> merijn: I'm interested in knowing more about how non-garbage affects GC times
2020-11-16 17:53:02 +0100 <merijn> tomjaguarpaw: Is this large amount constant during most of your application?
2020-11-16 17:53:10 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-16 17:53:27 +0100 <tomjaguarpaw> No, it's the benchmark input data
2020-11-16 17:53:43 +0100 <tomjaguarpaw> So I generate something that's about 1 GB, run a function on it, GOTO 10
2020-11-16 17:53:49 +0100jlamothe(~jlamothe@198.251.55.207) (Quit: leaving)
2020-11-16 17:53:52 +0100 <merijn> Uniaika: GHC uses a "copy & compact" collector, so when GC is triggered, we allocate a new heap and copy all "live" (i.e. non-garbage) data to the new heap, and then throw away the entire old heap
2020-11-16 17:54:10 +0100 <merijn> Uniaika: So if there's only 20 bytes of live data and 20 GB of garbage, you only copy 20 bytes and are done
2020-11-16 17:54:35 +0100 <Uniaika> oh my, this is indeed genius when you have lots of garbage
2020-11-16 17:54:39 +0100 <merijn> tomjaguarpaw: Ok, rephrase, this input should be independent of your benchmark, yes
2020-11-16 17:54:44 +0100 <merijn> Uniaika: It has some other benefits too
2020-11-16 17:54:58 +0100 <tomjaguarpaw> What do you mean by "independent"?
2020-11-16 17:55:36 +0100 <merijn> Uniaika: One problem with many GC solutions is "fragmentation" i.e. if all your data is scattered throughout your memory, it can be hard to find space to allocate huge chunks. Compacting avoids this by resulting in zero fragmentation
2020-11-16 17:56:02 +0100 <merijn> tomjaguarpaw: Well, you can use a compact region to GC you 1 GB ahead of time and make future GC (during your benchmark) essentially free
2020-11-16 17:56:30 +0100 <merijn> Uniaika: There's another benefit. If all data in your heap is compact at the start of your heap, your allocator becomes *really* cheap
2020-11-16 17:56:37 +0100 <tomjaguarpaw> Interesting. I have never done that.
2020-11-16 17:56:50 +0100 <tomjaguarpaw> That sounds nice.
2020-11-16 17:57:01 +0100hackagelz4-hs 0.1.5.1 - lz4 bindings for Haskell https://hackage.haskell.org/package/lz4-hs-0.1.5.1 (vmchale)
2020-11-16 17:57:05 +0100enoq(~textual@194-208-146-143.lampert.tv) (Quit: Textual IRC Client: www.textualapp.com)
2020-11-16 17:57:21 +0100 <merijn> Uniaika: Basically, your allocator is just "a pointer to the end of the current use region of the heap", allocation is just "increment pointer by 20 bytes". Which is good because lazy languages don't just produce a lot of garbage, they allocate a lot too
2020-11-16 17:58:06 +0100 <merijn> tomjaguarpaw: Basically, you GC an entire chunk of data into a separate compact region and instead of copying the data on every GC, it only copies the entry point to the region
2020-11-16 17:58:36 +0100 <merijn> tomjaguarpaw: https://tech.channable.com/posts/2020-04-07-lessons-in-managing-haskell-memory.html
2020-11-16 17:58:38 +0100vacm(~vacwm@70.23.92.191)
2020-11-16 17:59:18 +0100 <tomjaguarpaw> Cool, thanks merijn! That could be very handy. Right now I am measuring GC time and subtracting it :P
2020-11-16 18:00:08 +0100 <merijn> tomjaguarpaw: It will obviously slow down your overall time to run the benchmarks (if you use data only once and need to copy all of it first, that's slower). But it's deterministic at least
2020-11-16 18:00:29 +0100knupfer(~Thunderbi@200116b82cb80f00d4db69fffe520a17.dip.versatel-1u1.de)
2020-11-16 18:00:29 +0100knupfer(~Thunderbi@200116b82cb80f00d4db69fffe520a17.dip.versatel-1u1.de) (Client Quit)
2020-11-16 18:00:31 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-16 18:00:43 +0100knupfer(~Thunderbi@i5E86B4E0.versanet.de)
2020-11-16 18:01:31 +0100Amras(~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds)
2020-11-16 18:01:53 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
2020-11-16 18:02:01 +0100 <tomjaguarpaw> I don't really mind that. Copying the data will be quick compared to running the function.
2020-11-16 18:02:51 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-11-16 18:03:44 +0100kritzefitz_(~kritzefit@212.86.56.80)
2020-11-16 18:03:50 +0100idhugo_(~idhugo@80-62-116-202-mobile.dk.customer.tdc.net)
2020-11-16 18:04:01 +0100 <glguy> Anyone what the complexity is of ghc-compat's compactAdd? I'm wondering if it has to copy the whole compact region or if it is able to add incrementally
2020-11-16 18:04:31 +0100 <merijn> glguy: Sounds like a question for #ghc :)
2020-11-16 18:04:45 +0100quarters(~quarters@unaffiliated/quarters) (Ping timeout: 240 seconds)
2020-11-16 18:06:05 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-16 18:06:50 +0100idhugo(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 265 seconds)
2020-11-16 18:07:48 +0100incertia(~incertia@d60-65-215-180.col.wideopenwest.com) (Ping timeout: 265 seconds)
2020-11-16 18:10:43 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
2020-11-16 18:11:06 +0100Ariakenom(~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se) (Read error: Connection reset by peer)
2020-11-16 18:11:21 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-16 18:11:25 +0100 <Martinsos> I read that ghc recently added a new type of GC, "incremental", that works in a different fashion and should help with avoiding big spikes of GC. How does that fit into the discussion? Can we choose which one we use? Does it affect the strategies around GC?
2020-11-16 18:11:51 +0100 <merijn> Martinsos: There is a new GC in recent GHCs yes
2020-11-16 18:11:51 +0100idhugo__(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net)
2020-11-16 18:12:15 +0100 <merijn> Martinsos: The answer is the if you do not require stable latency, the default one is probably best
2020-11-16 18:12:19 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-11-16 18:12:26 +0100asheshambasta(~user@ptr-e1lysawl9rr13i61o92.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
2020-11-16 18:12:50 +0100incertia(~incertia@d60-65-215-180.col.wideopenwest.com)
2020-11-16 18:13:02 +0100knupfer(~Thunderbi@i5E86B4E0.versanet.de) (Ping timeout: 272 seconds)
2020-11-16 18:14:17 +0100 <Martinsos> merijn: Makes sense! I am planning to try to build a game as a side project, in Haskell, so that is why I was reading about GC - this new GC should be better for games if I got it correctly, to avoid sudden loss of ticks/frames. So I guess we need to set some flag to use non-default one?
2020-11-16 18:14:52 +0100idhugo_(~idhugo@80-62-116-202-mobile.dk.customer.tdc.net) (Ping timeout: 246 seconds)
2020-11-16 18:15:12 +0100 <merijn> Martinsos: It'd be better for games, yes. Although, honestly I don't think the latency guaranteed by the new GC is good enough for high FPS games
2020-11-16 18:15:41 +0100 <merijn> At least, not without managing the amount of live data, etc. manually
2020-11-16 18:17:32 +0100christo(~chris@81.96.113.213)
2020-11-16 18:18:04 +0100 <Martinsos> merijn: Cool! I am aware Haskell is probably not the best choice for high FPS games due to GC, C++ would or some lower language would be better choice, but I doubt my game will require that level of performance so it should be fine, and I am excited about modeling everything in Haskell.
2020-11-16 18:18:20 +0100 <merijn> Martinsos: The max pause time for the new one is 20ms, but a 60 FPS framerate gives you 16.6ms *max* per frame
2020-11-16 18:19:04 +0100 <merijn> Martinsos: OTOH, you could consider writing a dedicated render loop in C that talkes with Haskell code implementing game logic
2020-11-16 18:19:19 +0100 <merijn> Then you might get logic pauses, without hitting framerate
2020-11-16 18:19:37 +0100 <Martinsos> Right, I was hoping I could extract some parts into C if needed!
2020-11-16 18:19:59 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection)
2020-11-16 18:20:18 +0100 <merijn> And also, just because you *can* hit that latency, doesn't mean you will. If your gamestate is small even the regular collector might be good enough
2020-11-16 18:20:24 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-16 18:21:53 +0100 <Martinsos> Sure, the game will be 2D with lightweight graphics so I don't think it should be an issue. If it will be it will at least be an opportunity to learn more about GC :D.
2020-11-16 18:22:02 +0100christo(~chris@81.96.113.213) (Ping timeout: 256 seconds)
2020-11-16 18:22:24 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-16 18:26:37 +0100kuribas(~user@ptr-25vy0iaahu2pezvpnfb.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2020-11-16 18:29:54 +0100hexreel(~h@2600:1700:28e2:14d0:b0ee:1522:822e:a283)
2020-11-16 18:30:17 +0100Tario(~Tario@201.192.165.173)
2020-11-16 18:31:30 +0100conal(~conal@64.71.133.70)
2020-11-16 18:35:43 +0100borne(~fritjof@200116b864b5430099e934deb93b1409.dip.versatel-1u1.de) (Ping timeout: 272 seconds)
2020-11-16 18:36:12 +0100conal_(~conal@107.181.166.220)
2020-11-16 18:36:20 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-16 18:36:30 +0100conal(~conal@64.71.133.70) (Ping timeout: 260 seconds)
2020-11-16 18:37:12 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-nsgilupshvjjyzul) (Quit: Connection closed for inactivity)
2020-11-16 18:38:51 +0100Iceland_jack(~user@31.124.48.169)
2020-11-16 18:41:25 +0100hiroaki(~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2020-11-16 18:42:45 +0100hiroaki(~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de)
2020-11-16 18:45:57 +0100conal_(~conal@107.181.166.220) (Quit: Computer has gone to sleep.)
2020-11-16 18:48:33 +0100crdrost(~crdrost@2601:646:8280:85f0:51fc:6f63:a768:a428)
2020-11-16 18:49:02 +0100christo(~chris@81.96.113.213)
2020-11-16 18:49:36 +0100avdb(~avdb@ip-213-49-61-183.dsl.scarlet.be) (Read error: Connection reset by peer)
2020-11-16 18:50:23 +0100ChaiTRex(~ChaiTRex@gateway/tor-sasl/chaitrex) (Ping timeout: 240 seconds)
2020-11-16 18:50:31 +0100avdb(~avdb@ip-213-49-61-183.dsl.scarlet.be)
2020-11-16 18:50:59 +0100conal(~conal@64.71.133.70)
2020-11-16 18:51:28 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-16 18:52:15 +0100conal(~conal@64.71.133.70)
2020-11-16 18:52:45 +0100ChaiTRex(~ChaiTRex@gateway/tor-sasl/chaitrex)
2020-11-16 18:53:05 +0100christo(~chris@81.96.113.213) (Ping timeout: 240 seconds)
2020-11-16 18:53:25 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2020-11-16 18:53:26 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection)
2020-11-16 18:53:35 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 18:53:49 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-16 18:55:35 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-16 18:56:01 +0100otulp(~otulp@ti0187q162-6038.bb.online.no)
2020-11-16 18:57:02 +0100Varis(~Tadas@unaffiliated/varis) (Ping timeout: 264 seconds)
2020-11-16 18:58:42 +0100jlamothe(~jlamothe@198.251.55.207)
2020-11-16 18:58:47 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311) (Ping timeout: 260 seconds)
2020-11-16 19:00:01 +0100GothAlice1(~GothAlice@178.162.212.214) ()
2020-11-16 19:00:25 +0100xff0x(~fox@2001:1a81:529e:a500:93fd:46ff:4df5:fd50) (Ping timeout: 272 seconds)
2020-11-16 19:01:04 +0100xff0x(~fox@2001:1a81:529e:a500:b7fe:796e:1fbb:7036)
2020-11-16 19:01:42 +0100crdrost(~crdrost@2601:646:8280:85f0:51fc:6f63:a768:a428) (Ping timeout: 260 seconds)
2020-11-16 19:02:27 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-16 19:03:04 +0100moet(~moet@mobile-166-137-177-145.mycingular.net)
2020-11-16 19:04:28 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net)
2020-11-16 19:08:52 +0100Wood(~wood@2001:d08:1003:2574:5caf:6abd:a992:e5a2)
2020-11-16 19:08:52 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-11-16 19:09:12 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl)
2020-11-16 19:10:42 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 256 seconds)
2020-11-16 19:12:13 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-16 19:13:04 +0100howdoi(uid224@gateway/web/irccloud.com/x-pvtzxvglhmvabpwf)
2020-11-16 19:13:57 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-16 19:14:27 +0100conal(~conal@64.71.133.70)
2020-11-16 19:15:18 +0100hexreel(~h@2600:1700:28e2:14d0:b0ee:1522:822e:a283) ()
2020-11-16 19:17:28 +0100avdb(~avdb@ip-213-49-61-183.dsl.scarlet.be) (Quit: avdb)
2020-11-16 19:17:43 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 260 seconds)
2020-11-16 19:18:19 +0100chaosmasttter(~chaosmast@p200300c4a73c52016862557d78ae998a.dip0.t-ipconnect.de)
2020-11-16 19:19:32 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
2020-11-16 19:22:40 +0100Frost(~Frost@185.163.110.116)
2020-11-16 19:22:46 +0100cads2(~cads@ip-64-72-99-232.lasvegas.net) (Read error: Connection reset by peer)
2020-11-16 19:22:50 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-16 19:23:38 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-16 19:24:29 +0100alp(~alp@2a01:e0a:58b:4920:e453:474f:9209:5f93) (Ping timeout: 272 seconds)
2020-11-16 19:24:33 +0100conal(~conal@64.71.133.70)
2020-11-16 19:26:04 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 19:30:36 +0100 <sm[m]> people making "normal" (non-AAA, non-huge) games have said even the standard GC was not a problem
2020-11-16 19:31:15 +0100buterthebuddha(~user@35.1.134.251)
2020-11-16 19:32:56 +0100otulp(~otulp@ti0187q162-6038.bb.online.no) (Quit: Lost terminal)
2020-11-16 19:35:19 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-16 19:36:42 +0100idhugo__(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 260 seconds)
2020-11-16 19:37:30 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-16 19:38:06 +0100vacm(~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 19:41:26 +0100Unhammerd(~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection)
2020-11-16 19:42:04 +0100Unhammerd(~Unhammer@gateway/tor-sasl/unhammer)
2020-11-16 19:43:38 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 19:45:53 +0100AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl)
2020-11-16 19:47:56 +0100mwehner(~martin@li910-8.members.linode.com)
2020-11-16 19:48:09 +0100 <edwardk> merijn: i figure if i'm going to write a game in haskell i'm probably aiming for 30fps and doing a bit of lerping over the last two physics frames (using an approach by gafferongames) to try to hit anything higher.
2020-11-16 19:48:50 +0100 <merijn> edwardk: I'd probably consider is an excuse to finally learn Rust :p
2020-11-16 19:48:59 +0100 <edwardk> Martinsos: for 2d, especially with fairly tightly designed game logic and an eye towards unboxing you'll likely be okay
2020-11-16 19:49:33 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Remote host closed the connection)
2020-11-16 19:49:55 +0100vacm(~vacwm@70.23.92.191)
2020-11-16 19:50:19 +0100 <edwardk> merijn: heh i was working on a toy project to do something in a browser and was going to drive it with ghcjs, so i first stopped and wrote the most optimized version of the basic code path i could in javascript to see if i could even get the gc pauses down to an acceptable level. then i never got around to writing the haskell version.
2020-11-16 19:50:41 +0100 <edwardk> and then davean decided to do something else anyways so it died =P
2020-11-16 19:50:42 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net) (Remote host closed the connection)
2020-11-16 19:51:09 +0100motherfsck(~motherfsc@unaffiliated/motherfsck)
2020-11-16 19:51:16 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-16 19:52:23 +0100 <edwardk> hah, it still runs. http://ekmett.github.io/arcade/static/ loads in chrome, wasd, 1-9 spawns stuff, 0 wipes it all out, mouse grabs, q/e raises lowers what you have grabbed. c and b show some debugging info, the menus are basically nonsense.
2020-11-16 19:52:37 +0100 <edwardk> iirc it doesn't work in firefox
2020-11-16 19:52:49 +0100 <bollu> does anyone have references to haskell codebases other than GHC that do a lot of analysis / transformations on an AST?
2020-11-16 19:53:40 +0100 <merijn> bollu: "literally every compiler written in Haskell"? ;)
2020-11-16 19:53:45 +0100 <bollu> merijn yes, which ones? ;)
2020-11-16 19:53:50 +0100 <bollu> ermine doesn't do many transformations
2020-11-16 19:54:00 +0100 <merijn> What does Idris do?
2020-11-16 19:54:06 +0100 <davean> edwardk: ... that causes 'lens'
2020-11-16 19:54:08 +0100 <edwardk> especially in the haskell codebase that we never finished
2020-11-16 19:54:09 +0100 <bollu> good question. I should check
2020-11-16 19:54:22 +0100 <davean> edwardk: The project litterly became 'lens' and there was no way lens was getting done in time :-p
2020-11-16 19:54:43 +0100 <edwardk> davean: nah, lens was done first. the game engine lens came out of was ~5 years before this
2020-11-16 19:54:52 +0100 <edwardk> THAT one wasn't getting done on time =)
2020-11-16 19:55:03 +0100 <merijn> edwardk: I think games pretty much the only reason I'd use Rust, because for the rest of the stuff I ever write GHC's GC is perfectly fine :p
2020-11-16 19:55:07 +0100 <bollu> hm seems like idris2 is self hosted
2020-11-16 19:55:17 +0100 <bollu> so I gotta read the original idris if I want to get a sense of Haskellisms
2020-11-16 19:55:23 +0100 <edwardk> but yeah. rust has me super jealous at times. i look at makepad and weep.
2020-11-16 19:55:45 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection)
2020-11-16 19:55:49 +0100Deide(~Deide@217.155.19.23)
2020-11-16 19:56:04 +0100 <davean> I'm sad at the state of wasm, particularly because its the new JVM
2020-11-16 19:56:07 +0100 <merijn> bollu: Agda? But that's not very optimising I guess?
2020-11-16 19:56:08 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-16 19:56:14 +0100 <edwardk> https://makepad.nl/ is written in rust, as an editor for rust, compiling to either native of web assembly, renders using shaders compiled from rust...
2020-11-16 19:56:21 +0100 <davean> I strongly back having a good wasm backend soon.
2020-11-16 19:56:41 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-16 19:56:59 +0100 <edwardk> the idealized form of a haskell version of the same thing would be a ratsnest of EDSLs that aren't quite up to the same task
2020-11-16 19:57:27 +0100Ariakenom(~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se)
2020-11-16 19:57:31 +0100 <davean> Yah, rust has a MUCH better compilation story.
2020-11-16 19:57:34 +0100 <edwardk> heck, the makepad stuff can even use webxr to render as a vr scene at this point
2020-11-16 19:58:02 +0100 <merijn> davean: Their compile times seem to be about as bad as GHC, though :p
2020-11-16 19:58:08 +0100 <davean> merijn: eh, so what?
2020-11-16 19:58:10 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 19:58:13 +0100 <edwardk> merijn: idris 2 has much better compile times
2020-11-16 19:58:27 +0100 <edwardk> or do you mean rust?
2020-11-16 19:58:32 +0100 <merijn> edwardk: Wait, we were talking about Rust, no?
2020-11-16 19:58:44 +0100 <edwardk> ah, thought you might be replying to bollu still
2020-11-16 19:58:45 +0100jamm_(~jamm@unaffiliated/jamm)
2020-11-16 19:58:55 +0100 <davean> merijn: I'd be happy to give GHC a few CPU-months if I could get 10% better optimization.
2020-11-16 19:58:59 +0100 <merijn> davean: I'm an ADHD millenial, I ain't got the patience for that >.<
2020-11-16 19:59:15 +0100 <bollu> merijn yeah, I don't think Agda "does much" with the AST. I could be wrong
2020-11-16 19:59:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
2020-11-16 20:00:13 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
2020-11-16 20:00:15 +0100 <davean> merijn: --pay-for-it-to-be-faster $2000
2020-11-16 20:00:41 +0100 <merijn> davean: I'm a millenial, I ain't got any money ;)
2020-11-16 20:00:47 +0100Tario(~Tario@201.192.165.173)
2020-11-16 20:01:00 +0100jespada(~jespada@90.254.245.49) (Quit: Leaving)
2020-11-16 20:01:03 +0100 <davean> merijn: not if you pay for the hosts to run slow code you won't!
2020-11-16 20:01:26 +0100 <edwardk> davean: i'm still working on that fungibility of compilation performance story =P
2020-11-16 20:01:28 +0100 <monochrom> Oh haha great, in-compiler purchase, "us$0.99 for 1 percentile speedup"
2020-11-16 20:01:44 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds)
2020-11-16 20:01:49 +0100 <merijn> davean: See, I've got a super good lifehack to work around that!
2020-11-16 20:02:01 +0100 <monochrom> The best of both worlds of FOSS and capitalism. Thanks merijn for the great idea. >:)
2020-11-16 20:02:05 +0100 <merijn> davean: I just don't host or run any code, because of the aforementioned lack of money ;)
2020-11-16 20:02:33 +0100 <davean> What annoys me is when type checking gets slow.
2020-11-16 20:02:35 +0100 <edwardk> monochrom: if we have to compile in the cloud and try a rather non-trivial number of constructions using lots of machines that isn't actually an unreasonable approach. it has been kind of my mental model for a while now.
2020-11-16 20:02:43 +0100 <davean> I very rarely want to compile my code, I often want to type check it.
2020-11-16 20:03:12 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds)
2020-11-16 20:03:21 +0100 <dolio> It sounds unreasonable to me.
2020-11-16 20:03:23 +0100 <edwardk> "how do i spin up 10k machines on tasks like program synthesis and verification and spend them efficiently?" is very much in my line of research.
2020-11-16 20:03:37 +0100berberman(~berberman@unaffiliated/berberman)
2020-11-16 20:03:41 +0100 <electricityZZZZ> edwardk: oh hey, can we dm regarding that?
2020-11-16 20:03:43 +0100 <monochrom> Err I mean davean! Thanks davean for the great idea >:)
2020-11-16 20:03:58 +0100 <edwardk> electricityZZZZ: we can, today is going to be a bit busy for me, but i'll try to respond as i can
2020-11-16 20:04:03 +0100 <electricityZZZZ> cool
2020-11-16 20:04:25 +0100 <davean> monochrom: I'm already on that idea :-p
2020-11-16 20:04:46 +0100 <edwardk> in any event, let's just say that existing cloud hosting providers get pissy about providing for that much burst traffic =P
2020-11-16 20:05:10 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
2020-11-16 20:05:32 +0100 <davean> edwardk: not QUITE true
2020-11-16 20:05:48 +0100 <monochrom> davean: -fno-code helps for just checking syntax and types.
2020-11-16 20:05:57 +0100 <davean> monochrom: I'm aware, I do that all the time :)
2020-11-16 20:06:03 +0100 <davean> As I said, I almost never compile my code.
2020-11-16 20:06:11 +0100 <davean> Compiling is for releasing!
2020-11-16 20:06:17 +0100 <monochrom> Although, in the framework of cabal, it is annoying to manually switch it on and off and on again and off again...
2020-11-16 20:06:18 +0100 <edwardk> davean: i spent much of the last year wrestling with AWS, google cloud, etc. trying to get them to let me exchange money for goods and services.
2020-11-16 20:06:29 +0100 <edwardk> it appears that capitalism has yet to reach the cloud.
2020-11-16 20:06:41 +0100 <davean> edwardk: Spot market man.
2020-11-16 20:06:53 +0100 <monochrom> Haha great, "compiling is for releasing!" is even stronger than "if it type-checks it's correct".
2020-11-16 20:08:00 +0100otulp(~otulp@ti0187q162-6038.bb.online.no)
2020-11-16 20:08:29 +0100raichoo(~raichoo@dslb-088-077-025-015.088.077.pools.vodafone-ip.de) (Quit: Lost terminal)
2020-11-16 20:09:17 +0100 <monochrom> For it means you don't even test your ship/release/deployment step. "I'll gen code on the shipment day!"
2020-11-16 20:09:43 +0100 <davean> No, you gen code and run the tests and release.
2020-11-16 20:09:59 +0100 <edwardk> davean: yeah. you just need to beg and plead until they give you access to it at any meaningful capacity.
2020-11-16 20:10:16 +0100 <edwardk> MIRI has good access to these things, but I was originally doing this on my private accounts
2020-11-16 20:10:19 +0100 <monochrom> "You know what, this is an open-source project 'release' just means posting the source code on github, so I won't even need to gen code"
2020-11-16 20:11:01 +0100moet(~moet@mobile-166-137-177-145.mycingular.net) (Ping timeout: 264 seconds)
2020-11-16 20:11:12 +0100 <monochrom> "This is known as proof erasure in type theory." >:)
2020-11-16 20:12:34 +0100argent0(~argent0@168.227.98.83)
2020-11-16 20:13:36 +0100kritzefitz(~kritzefit@212.86.56.80) (Ping timeout: 256 seconds)
2020-11-16 20:13:40 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 20:14:51 +0100 <monochrom> burst traffic sounds like analogous to electricity industry's notion of inductive load
2020-11-16 20:14:53 +0100subttle(~anonymous@unaffiliated/subttle) (Quit: leaving)
2020-11-16 20:15:16 +0100kritzefitz_(~kritzefit@212.86.56.80) (Ping timeout: 246 seconds)
2020-11-16 20:15:37 +0100kritzefitz_(~kritzefit@fw-front.credativ.com)
2020-11-16 20:20:13 +0100 <dminuoso> edwardk: Hiya, a while ago you noted that the main problem witch catching pure exceptions with unsafePerformIO was that "it isn't monotone", followed by a remark "in [pure code] if you make your inputs more defined all that can happen is that at worst your output becomes more defined. in a world with catchPure that is no longer the case"
2020-11-16 20:20:22 +0100idhugo__(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net)
2020-11-16 20:20:31 +0100 <dminuoso> I have a vague idea, but I wanted to clarify. What exactly do you mean by monotonicity here?
2020-11-16 20:21:33 +0100 <monochrom> if input is more defined, then output stays the same or is more defined. For example doesn't change sideways.
2020-11-16 20:22:17 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-16 20:22:46 +0100 <monochrom> For example suppose you have a function f, and f bottom = 4 : bottom, f (1 : bottom) = 4 : 5 : bottom, that's OK, so far so good.
2020-11-16 20:23:01 +0100 <monochrom> On the input side, 1:bottom is more defined than bottom.
2020-11-16 20:23:17 +0100 <monochrom> On the output side, 4:5:bottom is more defined than 4:bottom.
2020-11-16 20:23:55 +0100 <monochrom> But if you have g such that g bottom = 4 : bottom, g (1:bottom) = []. Now that's bad.
2020-11-16 20:24:50 +0100 <dminuoso> How exactly is that bad?
2020-11-16 20:25:31 +0100 <monochrom> [] is not more defined than 4:bottom.
2020-11-16 20:25:40 +0100 <monochrom> Intuitively, it's a sideway change.
2020-11-16 20:25:42 +0100acidjnk_new(~acidjnk@p200300d0c718f648045012e87868ed0b.dip0.t-ipconnect.de)
2020-11-16 20:27:32 +0100 <monochrom> Technically, "more defined" for [Integer] is defined by: the smallest relation that satisfies: everything is equal to or more defined than bottom; x:y is equal to or more defined than a:b iff x is equal to or more defined than a and y is equal to or more defined than b.
2020-11-16 20:27:58 +0100 <edwardk> dminuoso: this is really the fundamental difference between _|_ and NULL. You can check for null. So you have to worry about NULL being a semantically distinguishable element at every step in your program. Boolean would then have 3 values, True, False, NULL. IN haskell. If a function gives an answer for _|_ it has to give an answer that is 'at least as defined' if you give it True or False, because _|_ is less defined than either.
2020-11-16 20:28:00 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-16 20:28:27 +0100 <monochrom> https://en.wikibooks.org/wiki/Haskell/Denotational_semantics is a good explanation, except it is wrong about "there is a bottom type".
2020-11-16 20:28:42 +0100Amras(~Amras@unaffiliated/amras0000)
2020-11-16 20:28:46 +0100 <Rembane> The table flip operator, because it looks like a flipped table and it flips the table.
2020-11-16 20:28:49 +0100 <edwardk> it means if you feed a program a partially defined input and get an answer, making the input more defined never hurts you.
2020-11-16 20:29:50 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Quit: leaving)
2020-11-16 20:30:07 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Quit: Lost terminal)
2020-11-16 20:30:10 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
2020-11-16 20:31:23 +0100 <monochrom> Perhaps you're wondering why we care about this relation.
2020-11-16 20:31:26 +0100 <dolio> The point of things containing ⊥ in denotational semantics is to be approximations of more-defined things. That way you can reason about behavior of infinite things by approximating them with partial definitions.
2020-11-16 20:31:42 +0100thaumavorio(~thaumavor@thaumavor.io) (Quit: ZNC 1.7.1 - https://znc.in)
2020-11-16 20:31:44 +0100 <dolio> But if you can observe ⊥ and act differently, then that is out the window. It's just a different value.
2020-11-16 20:31:48 +0100 <edwardk> dolio++
2020-11-16 20:32:13 +0100 <monochrom> We use bottom to also stand for: The computer doesn't give an answer for now, but perhaps if you throw more computing resource, the computer can finally figure out the answer.
2020-11-16 20:32:28 +0100 <dolio> Then it's just side effects.
2020-11-16 20:32:54 +0100conal(~conal@64.71.133.70)
2020-11-16 20:33:05 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 20:33:16 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit)
2020-11-16 20:33:42 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 20:33:52 +0100 <monochrom> And even: the computer doesn't give an answer now because the input is incomplete for now. Perhaps if the incomplete part of the input arrives later, the computer can also figure out more of the output.
2020-11-16 20:34:28 +0100 <monochrom> That would be a model for a function that transduces an input lazy list to an output lazy list, for example.
2020-11-16 20:34:46 +0100thaumavorio(~thaumavor@thaumavor.io)
2020-11-16 20:34:51 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit)
2020-11-16 20:35:16 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-16 20:35:24 +0100 <dolio> And essentially, you should not care about behavior on ⊥ in Haskell in itself, but because it is a methodology for thinking about the behavior on more-defined values.
2020-11-16 20:35:29 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 20:35:40 +0100 <dolio> Thinking about ⊥ tells you about how well-defined values are demanded and whatnot.
2020-11-16 20:35:55 +0100aarvar(~foewfoiew@50.35.43.33) (Ping timeout: 246 seconds)
2020-11-16 20:35:58 +0100 <monochrom> So "f bottom" means none of the input has arrived yet, but how much f can start working right away?
2020-11-16 20:36:56 +0100 <wz1000> You also lose the ability to do topology in Haskell
2020-11-16 20:36:56 +0100 <monochrom> And "f (1: bottom)" means OK one cons cell has arrived, now f can possibly do a bit more work before it's stuck again needing the rest of the input.
2020-11-16 20:37:45 +0100 <bollu> wz1000 wdym?
2020-11-16 20:38:06 +0100 <wz1000> functions are no longer continuous
2020-11-16 20:38:14 +0100 <monochrom> In the case of g, it means g can start outputing the 1st cons cell of the output lazy list right away without needing input, but once you provide some input, it says "I withdraw my previous output, I change my mind, it's the empty list now"
2020-11-16 20:38:24 +0100quarters(~quarters@104-0-129-162.lightspeed.irvnca.sbcglobal.net)
2020-11-16 20:38:28 +0100thaumavorio(~thaumavor@thaumavor.io) (Client Quit)
2020-11-16 20:38:35 +0100 <wz1000> bollu: https://www.cs.bham.ac.uk/~mhe/papers/entcs87.pdf
2020-11-16 20:38:52 +0100avdb(~avdb@ip-213-49-61-183.dsl.scarlet.be)
2020-11-16 20:39:16 +0100thaumavorio(~thaumavor@thaumavor.io)
2020-11-16 20:39:45 +0100nullheroes(~danielvu@168.235.66.22) (Quit: WeeChat 2.9)
2020-11-16 20:39:59 +0100ashbreeze(~mark@184-157-32-219.dyn.centurytel.net)
2020-11-16 20:40:11 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit)
2020-11-16 20:40:38 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-16 20:42:13 +0100_ashbreeze_(~mark@72-161-252-32.dyn.centurytel.net) (Ping timeout: 246 seconds)
2020-11-16 20:43:36 +0100luke(~luke@bitnomial/staff/luke)
2020-11-16 20:44:31 +0100aarvar(~foewfoiew@50.35.43.33)
2020-11-16 20:44:32 +0100sondr3(54d33884@cm-84.211.56.132.getinternet.no)
2020-11-16 20:44:50 +0100aarvar(~foewfoiew@50.35.43.33) (Remote host closed the connection)
2020-11-16 20:45:29 +0100 <sondr3> drive-by question: is it possible to use the new-* cabal commands by default when using cabal?
2020-11-16 20:45:49 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-16 20:46:13 +0100ystael(~ystael@209.6.50.55) (Ping timeout: 260 seconds)
2020-11-16 20:46:18 +0100 <monochrom> Yes if your cabal-install version is 3.0 or 3.2 or 3.4
2020-11-16 20:46:40 +0100 <bollu> wz1000 sure I've read it
2020-11-16 20:46:51 +0100 <bollu> wz1000 we need bottoms to get the semi decidability structure
2020-11-16 20:46:59 +0100 <bollu> wz1000 so I'm not sure what you mean that we lose topology?
2020-11-16 20:47:06 +0100 <merijn> monochrom: 3.4 is rather hard, considering that's not released yet :p
2020-11-16 20:47:23 +0100 <wz1000> bollu: I mean if you make bottom observable
2020-11-16 20:47:32 +0100 <bollu> wz1000 ah OK, sure.
2020-11-16 20:47:35 +0100 <bollu> :)
2020-11-16 20:47:39 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 20:47:45 +0100conal(~conal@64.71.133.70) (Ping timeout: 240 seconds)
2020-11-16 20:47:47 +0100 <sondr3> thanks monochrom, I couldn't find much by searching
2020-11-16 20:48:41 +0100 <merijn> sondr3: You should upgrade to 3.0 or 3.2 anyway if you use v2-build, there's been a bunch of improvements and bugfixes in those two versions
2020-11-16 20:48:57 +0100Franciman(~francesco@host-82-56-223-169.retail.telecomitalia.it) (Quit: Leaving)
2020-11-16 20:49:48 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 20:49:52 +0100 <sondr3> I'm on 3.2 already, just haven't been following the Haskell world closely for a while :) Thanks
2020-11-16 20:49:53 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-16 20:49:55 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2020-11-16 20:51:45 +0100 <sondr3> Is it then possible to run my executable with cabal run automatically and not have it include the test suite?
2020-11-16 20:52:59 +0100conal(~conal@66.115.176.210)
2020-11-16 20:53:21 +0100 <merijn> "maybe?" I'm not quite sure what you mean?
2020-11-16 20:53:23 +0100ski. o O ( non-monotonic logics )
2020-11-16 20:53:46 +0100 <dminuoso> monochrom: Okay, so some reasoning level I understand what monotonicity means. I just fail to see the impact of breaking that.
2020-11-16 20:54:59 +0100 <monochrom> Suppose mylazylist is a lazy list, but when evaluated it takes a while to emit the next cons cell and number.
2020-11-16 20:55:02 +0100 <sondr3> I get a "cabal: The run command is for running a single executable at once. [...]" message, saying it includes the executable and the test suite, I want cabal run to only run the executable
2020-11-16 20:55:05 +0100 <dminuoso> Naively, I'd just say "So say I have some `f :: String -> Int` that perhaps failed, it'd be *very* annoying to have to fix their code for a lack of Maybe, or feed IO through potentially half my program just to deal with it sensibly. This idea of monotonicity seems more like philosophical beauty than something I would care about
2020-11-16 20:55:32 +0100 <monochrom> print (f mylazylist) makes sense. print (g mylazylist) doesn't.
2020-11-16 20:55:48 +0100 <merijn> sondr3: What's the exact command you write?
2020-11-16 20:56:11 +0100 <sondr3> merijn: cabal run
2020-11-16 20:56:34 +0100 <merijn> sondr3: A package can have many executables in it, the intended use is "cabal run yourExeName"
2020-11-16 20:57:02 +0100 <dminuoso> 20:23:55 monochrom | But if you have g such that g bottom = 4 : bottom, g (1:bottom) = []. Now that's bad.
2020-11-16 20:57:04 +0100 <dminuoso> Mmm
2020-11-16 20:57:07 +0100 <ski> (in logic programming, you have an analogue of non-monotonic functions : non-steadfast predicates/relations. if you provide more information (in parameters) upfront to it, it can suddenly gain solutions which are not substitution instances of the ones it had with only less information available. it's generally agreed that this hurts reasonability / predictive power)
2020-11-16 20:57:43 +0100 <dminuoso> monochrom: Are you referring to the same f and g you introduced at the beginning?
2020-11-16 20:58:18 +0100 <monochrom> "print (f mylazlist)" can do this: print 4 right away, then wait for mylazylist to spit out its first item 1, then print 5 when that happens.
2020-11-16 20:58:37 +0100ericsagn1(~ericsagne@2405:6580:0:5100:af5d:a404:2c6:5e7e) (Ping timeout: 260 seconds)
2020-11-16 20:58:41 +0100 <monochrom> "print (g mylazylist)" cannot do this unless it can roll back time or output transactions.
2020-11-16 20:58:44 +0100 <dminuoso> I mean the only reason you're saying "it doesn't make sense" is because your equating "bottom induced by infinite computation" and "bottom as pure exceptions"
2020-11-16 20:58:51 +0100 <monochrom> Yes, same f and g.
2020-11-16 20:58:52 +0100 <dminuoso> catchPure only deals with the latter
2020-11-16 20:59:04 +0100 <dminuoso> On a technical level, catchPure doesn't break g.
2020-11-16 20:59:12 +0100Wood(~wood@2001:d08:1003:2574:5caf:6abd:a992:e5a2) (Ping timeout: 260 seconds)
2020-11-16 20:59:14 +0100pavonia(~user@unaffiliated/siracusa)
2020-11-16 20:59:18 +0100 <dminuoso> It just ruins your paradise of perfect symmetry and beauty
2020-11-16 20:59:30 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Quit: Lost terminal)
2020-11-16 20:59:57 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 20:59:58 +0100 <dminuoso> Because `f (g mylazylist)` would just print [] and be done with it
2020-11-16 21:00:05 +0100 <dminuoso> After a while.
2020-11-16 21:00:08 +0100 <sondr3> merijn: fair, it's just annoying since I don't care about the test-suite when I do cabal run :)
2020-11-16 21:00:38 +0100 <merijn> sondr3: If you write out the name you shouldn't get that, but if you wanna frequently test an executable while developing I've got a lifehack for you
2020-11-16 21:01:06 +0100gstv(59e9c219@89-233-194-25.cust.bredband2.com)
2020-11-16 21:01:13 +0100juuandyy(~juuandyy@90.166.144.65)
2020-11-16 21:01:34 +0100 <merijn> sondr3: https://paste.tomsmeding.com/9sTHIIML adjust the path to cabal.project file and executable name as needed, and done!
2020-11-16 21:01:45 +0100bidabong(uid272474@gateway/web/irccloud.com/x-baxncysxwetsxiet) (Quit: Connection closed for inactivity)
2020-11-16 21:02:02 +0100conal(~conal@66.115.176.210) (Quit: Computer has gone to sleep.)
2020-11-16 21:02:17 +0100 <sondr3> merijn: awesome, thanks
2020-11-16 21:02:33 +0100 <merijn> sondr3: For my own programs I have a shell script like that in my path so I can conveniently test/use them while developing, automatically compiling the latest version and then running
2020-11-16 21:03:18 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 260 seconds)
2020-11-16 21:03:39 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
2020-11-16 21:04:02 +0100vacm(~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-16 21:04:14 +0100batuhan35(9f920e61@159.146.14.97)
2020-11-16 21:05:05 +0100vacm(~vacwm@70.23.92.191)
2020-11-16 21:05:11 +0100ph88(~ph88@2a02:8109:9e00:7e5c:64a6:6e00:3dc3:e56a) (Ping timeout: 272 seconds)
2020-11-16 21:05:18 +0100avdb(~avdb@ip-213-49-61-183.dsl.scarlet.be) (Quit: avdb)
2020-11-16 21:06:00 +0100conal(~conal@66.115.176.210)
2020-11-16 21:06:32 +0100 <dolio> dminuoso: The justification for 'pure exceptions' is that they are equated with non-terminatiaon bottom.
2020-11-16 21:06:48 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2020-11-16 21:07:04 +0100 <dolio> At least as far as the pure calculus is concerned.
2020-11-16 21:07:30 +0100batuhan35(9f920e61@159.146.14.97) ()
2020-11-16 21:07:35 +0100sondr3(54d33884@cm-84.211.56.132.getinternet.no) (Remote host closed the connection)
2020-11-16 21:07:49 +0100gstv(59e9c219@89-233-194-25.cust.bredband2.com) (Remote host closed the connection)
2020-11-16 21:08:39 +0100knupfer(~Thunderbi@200116b82cb80f0020dbfffffeb9f29f.dip.versatel-1u1.de)
2020-11-16 21:08:39 +0100knupfer(~Thunderbi@200116b82cb80f0020dbfffffeb9f29f.dip.versatel-1u1.de) (Client Quit)
2020-11-16 21:08:53 +0100knupfer(~Thunderbi@i5E86B4E0.versanet.de)
2020-11-16 21:09:52 +0100idhugo__(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 246 seconds)
2020-11-16 21:10:38 +0100thaumavorio(~thaumavor@thaumavor.io) (Quit: ZNC 1.7.1 - https://znc.in)
2020-11-16 21:10:50 +0100ericsagn1(~ericsagne@2405:6580:0:5100:465:234f:7cb8:28a5)
2020-11-16 21:11:04 +0100falafel(~falafel@2600:1007:b0ad:6e87:7811:313f:d0f3:f9f4)
2020-11-16 21:11:32 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Read error: Connection reset by peer)
2020-11-16 21:11:49 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 21:14:44 +0100jamm_(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-11-16 21:15:17 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit)
2020-11-16 21:18:51 +0100 <monochrom> dminuoso: Yes OK, it is a more complicated model, but it can work.
2020-11-16 21:19:26 +0100 <dminuoso> monochrom: I want to stress that Im not arguing why `catchPure` is fine, just trying to understand why there's this strong opposition.
2020-11-16 21:21:04 +0100falafel(~falafel@2600:1007:b0ad:6e87:7811:313f:d0f3:f9f4) (Read error: Connection reset by peer)
2020-11-16 21:21:28 +0100 <monochrom> I still like the simpler model most of the time. When in the rare cases I can benefit from the complication, I would rather use explicit Maybe's so it is a non-pervasive opt-in system.
2020-11-16 21:21:49 +0100alp(~alp@2a01:e0a:58b:4920:d8db:f457:3fb6:53df)
2020-11-16 21:22:06 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2020-11-16 21:23:19 +0100 <dminuoso> monochrom: the thing is just, it seems as if the argument is: introducing `catchPure` would allow for "non-sensical" g
2020-11-16 21:23:35 +0100 <dminuoso> Which is a non-issue, because catchPure couldn't (possibly) solve the halting problem
2020-11-16 21:24:40 +0100 <dminuoso> I get how it would break monotonicity (meaning more defined inputs do not create more defined outputs), but perhaps Im just not seeing the value of that possible reasoning
2020-11-16 21:24:42 +0100juuandyy(~juuandyy@90.166.144.65) (Quit: Konversation terminated!)
2020-11-16 21:25:00 +0100 <dminuoso> That is, is there a motivating example where its useful to think `oh, if I make this input more defined, the output becomes more defined`
2020-11-16 21:25:34 +0100 <dminuoso> So far Im getting the impression this is just some "academic purity" in the way of "a practical function"
2020-11-16 21:26:02 +0100 <dolio> Once you have side effects, you start having to worry about exact evaluation orders.
2020-11-16 21:26:03 +0100dhouthoo(~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
2020-11-16 21:26:07 +0100 <dolio> That's not academic.
2020-11-16 21:26:39 +0100 <dminuoso> Sure, but there's no side effects in pure code.
2020-11-16 21:26:55 +0100 <dolio> There are once you can catch exceptions and look at them.
2020-11-16 21:27:26 +0100 <monochrom> You have a pervasive exception system, that's what it is. As usual, the price for a pervasive exception system is documentation: For each value, you have to tell the user: if some input throws an exception, what do you do? and under what circumstance you will throw exceptions.
2020-11-16 21:28:31 +0100 <monochrom> This community is already pretty unhappy that most IO actions are pretty undocumented on the pretty anticipated IO exceptions.
2020-11-16 21:28:42 +0100 <monochrom> Now imagine bringing that to all of Prelude.
2020-11-16 21:28:44 +0100ggole(~ggole@2001:8003:8119:7200:a813:5a33:e96f:8fc6) (Quit: Leaving)
2020-11-16 21:28:55 +0100 <dminuoso> But.. I just stumbled over a very convincing example of dfeuer that suggests catchPure is really bad
2020-11-16 21:28:58 +0100quarters(~quarters@104-0-129-162.lightspeed.irvnca.sbcglobal.net) (Changing host)
2020-11-16 21:28:58 +0100quarters(~quarters@unaffiliated/quarters)
2020-11-16 21:29:16 +0100 <dminuoso> (let a = a in a) `seq` error "hallo!"
2020-11-16 21:29:32 +0100 <monochrom> Oh that one is even more sinister.
2020-11-16 21:29:35 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-16 21:29:51 +0100 <dminuoso> And he says that in the presence of catchPure this could *sometimes* be defined, othertimes not..
2020-11-16 21:29:58 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-11-16 21:30:15 +0100 <dolio> Yeah, because GHC also assumes that 'pure exceptions' are equal to non-termination.
2020-11-16 21:30:16 +0100 <dminuoso> (obviously, because seq makes no assumption about the ordering)
2020-11-16 21:30:46 +0100 <monochrom> "div 1 0" is the kind that we all agree is an exception, the only contention is on language design: should this be bottom or not.
2020-11-16 21:30:51 +0100 <dminuoso> dolio: I think its not even that, Id say it's just because `seq` does not guarantee the left side to be evaluated first.
2020-11-16 21:31:05 +0100 <dminuoso> So its up to whatever the implementation does in the situation
2020-11-16 21:31:21 +0100 <dminuoso> (Which could vary from place to place if the optimizer was up for it)
2020-11-16 21:31:48 +0100 <monochrom> "a = a" is a non-termination that is clearly bottom but some compiler optimization can make it detectable, so now you're looking at fragile code optimization getting turned on or off.
2020-11-16 21:32:00 +0100fendor(~fendor@178.115.131.226.wireless.dyn.drei.com) (Remote host closed the connection)
2020-11-16 21:32:04 +0100 <dminuoso> oh, or that
2020-11-16 21:33:05 +0100fendor(~fendor@178.115.131.226.wireless.dyn.drei.com)
2020-11-16 21:35:19 +0100 <dolio> Anyhow, if you're just using it to paper over a poorly designed API, then that's one thing.
2020-11-16 21:35:52 +0100 <dolio> That can't really be justified as treating pure exceptions as actual control flow pervasively.
2020-11-16 21:36:36 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-16 21:36:41 +0100 <dminuoso> Right. It's just that edward made that comment a while ago, and it kept lingering in my head because I couldn't quite argue to myself why he was right.
2020-11-16 21:36:52 +0100 <_deepfire> Is there a way to pass 'ghci' flags, when it's invoked via cabal repl?
2020-11-16 21:37:17 +0100 <merijn> --repl-options
2020-11-16 21:37:28 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2020-11-16 21:37:42 +0100xff0x(~fox@2001:1a81:529e:a500:b7fe:796e:1fbb:7036) (Ping timeout: 260 seconds)
2020-11-16 21:37:56 +0100boxscape(86ab2c1f@gateway/web/cgi-irc/kiwiirc.com/ip.134.171.44.31)
2020-11-16 21:38:16 +0100 <dminuoso> But this last example is motivating enough to me. An example of how/why `catchPure` could have a bad impact on my quality of life
2020-11-16 21:38:21 +0100xff0x(~fox@2001:1a81:529e:a500:7f56:5167:60df:e24a)
2020-11-16 21:38:40 +0100 <dolio> Yeah, just `let a = a in a` can get you unpredictable results.
2020-11-16 21:38:48 +0100 <dminuoso> Right
2020-11-16 21:39:12 +0100 <dminuoso> Having fallen prey to not respecting the unsafeness of unsafePerformIO once makes me appreciate being careful to do things in pure code you're not supposed to.
2020-11-16 21:40:06 +0100 <_deepfire> merijn: I'm using cabal 3.0, but cabal repl TARGET -O0 --repl-options=-ghci-script=.ghci.local -- doesn't have effect
2020-11-16 21:40:09 +0100thc202(~thc202@unaffiliated/thc202) (Quit: thc202)
2020-11-16 21:40:43 +0100 <dminuoso> monochrom, dolio, edwardk: Thank you all for your insights and arguments.
2020-11-16 21:40:57 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-16 21:41:12 +0100 <merijn> _deepfire: Maybe "cabal repl" does something else that renders -ghci-script in effective
2020-11-16 21:42:00 +0100 <_deepfire> merijn: thank you, nevertheless -- I've missed that option in the long list of cabal's options.. : -)
2020-11-16 21:42:26 +0100luke(~luke@bitnomial/staff/luke) (Quit: sleep)
2020-11-16 21:42:27 +0100 <merijn> _deepfire: I know that because the original way was using --ghc-options and I broke that :p
2020-11-16 21:43:01 +0100 <_deepfire> merijn: Oh, yes, I've tried --ghc-options and --ghci-options (which is logical, but doesn't parse..)
2020-11-16 21:43:47 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-16 21:47:41 +0100 <monochrom> Hey --repl-option=-fdefer-type-errors solves my problem, it doesn't [re-]build every hackaage dependency. Thanks merijn
2020-11-16 21:50:03 +0100 <monochrom> To be fair, manually entering ":set -fdefer-type-error" isn't that bad.
2020-11-16 21:50:39 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-16 21:50:43 +0100knupfer(~Thunderbi@i5E86B4E0.versanet.de) (Ping timeout: 256 seconds)
2020-11-16 21:50:53 +0100Lord_of_Life_Lord_of_Life
2020-11-16 21:51:25 +0100Iceland_jack(~user@31.124.48.169) (Ping timeout: 240 seconds)
2020-11-16 21:55:20 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 21:55:26 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving)
2020-11-16 21:57:17 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz)
2020-11-16 21:57:33 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-11-16 21:57:42 +0100 <tomjaguarpaw> c
2020-11-16 21:58:09 +0100 <koz_> I'm in 'StateT s (Either e) a', and have a function 'f :: s -> Either e s'. Is there something similar to 'modify' that would let me pass 'f', to produce a result of type 'StateT s (Either e) ()'?
2020-11-16 21:58:16 +0100 <merijn> monochrom: That's why I added --repl-options :p
2020-11-16 21:58:42 +0100 <monochrom> Oh you. Many thanks and <3 <3 <3
2020-11-16 21:58:46 +0100 <merijn> monochrom: I added flag filtering for ghc-options so the world wouldn't be rebuild, then that broke ghci's use of ghc-options, so I added --repl-options to fix it
2020-11-16 21:59:06 +0100 <merijn> repl-options never hit the configuration/hash and thus won't affect dependencies
2020-11-16 21:59:19 +0100 <monochrom> Yeah, I notice that cabal build --ghc-option=-ferror-span does not affect the hash.
2020-11-16 21:59:26 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-11-16 21:59:30 +0100 <merijn> monochrom: It's a bit hacky and ad hoc atm
2020-11-16 21:59:30 +0100wroathe_(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 21:59:57 +0100 <merijn> It makes for an impressive "power of monoids" showcase, though ;)
2020-11-16 22:00:01 +0100Frost(~Frost@185.163.110.116) ()
2020-11-16 22:00:09 +0100 <monochrom> That one I understand. I am thankful for the dirty but necessary work.
2020-11-16 22:01:00 +0100 <merijn> monochrom: If you notice something rebuilding that you think shouldn't you should make a Cabal issue and tag me in it
2020-11-16 22:01:08 +0100ystael(~ystael@160.sub-174-242-87.myvzw.com)
2020-11-16 22:01:08 +0100 <merijn> monochrom: https://github.com/haskell/cabal/blob/master/Cabal/src/Distribution/Simple/Program/GHC.hs#L49-L304 ;)
2020-11-16 22:01:41 +0100 <monochrom> Oh, the only current one that affects me is https://github.com/haskell/cabal/issues/6906
2020-11-16 22:02:07 +0100 <merijn> I'm particularly proud of the 'from' and 'to' version checks and how they combine monoidally
2020-11-16 22:02:08 +0100 <monochrom> because I would love so much to have ~/.cabal/config contain "ghc-options: -haddock"
2020-11-16 22:02:37 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 256 seconds)
2020-11-16 22:02:42 +0100 <merijn> And I still think we need "Monoid m => Bool -> m -> m" in base, but it's hard to find a good name for it
2020-11-16 22:03:01 +0100 <merijn> I've been using various versions of mif, mwhen, etc. in my own code, but a good name is hard
2020-11-16 22:03:30 +0100 <int-e> :t StateT . (((,) () <$>) .)
2020-11-16 22:03:31 +0100 <lambdabot> Functor m => (s -> m s) -> StateT s m ()
2020-11-16 22:04:14 +0100 <koz_> int-e: Lol, that's impressively APLy. Thanks!
2020-11-16 22:04:56 +0100 <koz_> We should add that to transformers as 'modifyInner'.
2020-11-16 22:05:02 +0100 <koz_> Or modifyM or something.
2020-11-16 22:05:18 +0100wroathe_(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2020-11-16 22:06:23 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-11-16 22:06:29 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-16 22:07:08 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
2020-11-16 22:07:47 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-16 22:08:57 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 22:11:09 +0100 <int-e> :t \f -> traverse lift (Identity f) >>= put . runIdentity -- hmm
2020-11-16 22:11:10 +0100 <lambdabot> (MonadTrans t, Monad m, MonadState s (t m)) => m s -> t m ()
2020-11-16 22:11:47 +0100 <koz_> That's the mtl version. :P
2020-11-16 22:12:00 +0100hackagephonetic-languages-examples 0.6.0.0 - A generalization of the uniqueness-periods-vector-examples functionality. https://hackage.haskell.org/package/phonetic-languages-examples-0.6.0.0 (OleksandrZhabenko)
2020-11-16 22:12:50 +0100wpcarro(sid397589@gateway/web/irccloud.com/x-yrrbrsudnjmjbakp) (Read error: Connection reset by peer)
2020-11-16 22:13:06 +0100wpcarro(sid397589@gateway/web/irccloud.com/x-jyvrhcovkjnuufaq)
2020-11-16 22:13:10 +0100ryjm(sid383513@gateway/web/irccloud.com/x-aavthkgvqaggakcc) (Ping timeout: 256 seconds)
2020-11-16 22:13:16 +0100natim87(sid286962@gateway/web/irccloud.com/x-uifctbbgftadercs) (Read error: Connection reset by peer)
2020-11-16 22:13:16 +0100ReinH__(sid179972@gateway/web/irccloud.com/x-sdlypohklafvyaji) (Read error: Connection reset by peer)
2020-11-16 22:13:24 +0100aristid(sid1599@gateway/web/irccloud.com/x-ckvrkhwfnpsjpxkc) (Read error: Connection reset by peer)
2020-11-16 22:13:24 +0100bradparker(sid262931@gateway/web/irccloud.com/x-hcrjjmdklhbtocmc) (Read error: Connection reset by peer)
2020-11-16 22:13:27 +0100natim87(sid286962@gateway/web/irccloud.com/x-mexmpkxgonbwfktv)
2020-11-16 22:13:33 +0100Cir0X(sid221743@gateway/web/irccloud.com/x-ouxxoxkrtirtgzgf) (Read error: Connection reset by peer)
2020-11-16 22:13:35 +0100aristid(sid1599@gateway/web/irccloud.com/x-ieumvqzkylmookgw)
2020-11-16 22:13:37 +0100benwr____(sid372383@gateway/web/irccloud.com/x-ygzdfppyyhwzwtmh) (Read error: Connection reset by peer)
2020-11-16 22:13:37 +0100d0liver(sid363046@gateway/web/irccloud.com/x-kkcazzfyjgmdigdk) (Read error: Connection reset by peer)
2020-11-16 22:13:38 +0100bradparker(sid262931@gateway/web/irccloud.com/x-nbpjheuowgmlbzcp)
2020-11-16 22:13:41 +0100banjiewen_(sid115913@gateway/web/irccloud.com/x-pwjllhheogrzlube) (Read error: Connection reset by peer)
2020-11-16 22:13:44 +0100benwr____(sid372383@gateway/web/irccloud.com/x-wqbchwbubajgshwl)
2020-11-16 22:13:45 +0100ryjm(sid383513@gateway/web/irccloud.com/x-xyruibfadgkaupwy)
2020-11-16 22:13:50 +0100Cir0X(sid221743@gateway/web/irccloud.com/x-mvlinpkrmvmsfsvf)
2020-11-16 22:13:56 +0100d0liver(sid363046@gateway/web/irccloud.com/x-lvzpszsyngerfkjs)
2020-11-16 22:13:58 +0100banjiewen_(sid115913@gateway/web/irccloud.com/x-jwitackpjevkejhs)
2020-11-16 22:14:09 +0100ReinH__(sid179972@gateway/web/irccloud.com/x-ujhxicmjajcluchu)
2020-11-16 22:15:24 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-16 22:15:50 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-16 22:17:13 +0100 <int-e> :t (>>= modify) . traverse lift -- ah, that's it.
2020-11-16 22:17:14 +0100 <lambdabot> (MonadState s (t m), Traversable ((->) s), MonadTrans t, Monad m) => (s -> m s) -> t m ()
2020-11-16 22:17:29 +0100 <quarters> I was wondering if anyone can recommend any site that help a noob like myself build out a minimal web app like on http://todomvc.com/
2020-11-16 22:17:36 +0100ystael(~ystael@160.sub-174-242-87.myvzw.com) (Read error: Connection reset by peer)
2020-11-16 22:17:40 +0100conal(~conal@66.115.176.210) (Quit: Computer has gone to sleep.)
2020-11-16 22:17:42 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone)
2020-11-16 22:17:52 +0100 <koz_> int-e: The 'Traversable ((->) s)' constraint is a bit onerous, surely?
2020-11-16 22:18:14 +0100 <int-e> indeed
2020-11-16 22:18:28 +0100 <int-e> never mind then, I give up.
2020-11-16 22:18:38 +0100 <koz_> The others were good, though.
2020-11-16 22:18:50 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
2020-11-16 22:18:51 +0100 <koz_> I mean, if you wanna APL it, you can probably run attempt #2 through @pl.
2020-11-16 22:18:54 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Remote host closed the connection)
2020-11-16 22:19:01 +0100 <koz_> @pl \f -> traverse lift (Identity f) >>= put . runIdentity
2020-11-16 22:19:01 +0100 <lambdabot> (put . runIdentity =<<) . traverse lift . Identity
2020-11-16 22:19:06 +0100 <quarters> a haskell noob, rather. I noticed that there isn't a haskell version on that site and while I can try for something similar like the scala one, I figured that wouldn't give me the exposure to the tooling used for building out a haskell backed todo list web app
2020-11-16 22:19:16 +0100cosimone(~cosimone@93-47-228-249.ip115.fastwebnet.it)
2020-11-16 22:19:26 +0100 <int-e> koz_: #2 didn't quite have the right type
2020-11-16 22:19:43 +0100 <koz_> int-e: Ah, yeah, upon further reading I can see why.
2020-11-16 22:20:02 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk)
2020-11-16 22:20:13 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 246 seconds)
2020-11-16 22:20:40 +0100 <int-e> :t \f -> get >>= \s -> traverse lift (Identity (f s)) >>= put . runIdentity -- and this is beginning to look awfully clumsy
2020-11-16 22:20:41 +0100 <lambdabot> (MonadState s (t m), Monad m, MonadTrans t) => (s -> m s) -> t m ()
2020-11-16 22:21:01 +0100 <int-e> @pl \f -> get >>= \s -> traverse lift (Identity (f s)) >>= put . runIdentity
2020-11-16 22:21:01 +0100 <lambdabot> (get >>=) . flip flip (put . runIdentity) . (((>>=) . traverse lift . Identity) .)
2020-11-16 22:21:09 +0100 <int-e> eww.
2020-11-16 22:21:20 +0100 <koz_> Dat flip . flip.
2020-11-16 22:21:26 +0100 <koz_> I mean, 'flip flip'.
2020-11-16 22:21:39 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 22:21:58 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit)
2020-11-16 22:22:31 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 22:22:45 +0100 <Flonk> Say I have a simple BST (https://hastebin.com/bexopesayo.hs) with an insert function. If the element is already in the tree I'd like to save space and return the original tree - at the moment I'm creating a lot of duplicate nodes which is unneccessary. What programming pattern am I looking for?
2020-11-16 22:23:08 +0100 <int-e> :t \f -> get >>= \s -> lift (f s) >>= put -- yeah the whole traverse idea is just stupid, I guess
2020-11-16 22:23:10 +0100 <lambdabot> (MonadState s (t m), Monad m, MonadTrans t) => (s -> m s) -> t m ()
2020-11-16 22:23:16 +0100 <Flonk> Feels similar to exceptions in imperative languages.
2020-11-16 22:24:13 +0100 <int-e> @pl \f -> get >>= \s -> lift (f s) >>= put
2020-11-16 22:24:13 +0100 <lambdabot> (get >>=) . flip flip put . (((>>=) . lift) .)
2020-11-16 22:24:21 +0100 <int-e> still double-flipping
2020-11-16 22:24:40 +0100 <int-e> flipping out, with a typo?
2020-11-16 22:25:00 +0100 <koz_> int-e: flipTable = flip flip
2020-11-16 22:25:17 +0100 <koz_> :t flip flip
2020-11-16 22:25:18 +0100 <lambdabot> b -> (a -> b -> c) -> a -> c
2020-11-16 22:25:31 +0100 <koz_> Feels like there should be a bird for this.
2020-11-16 22:26:01 +0100 <int-e> hmm, flipping the bird?
2020-11-16 22:26:06 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 260 seconds)
2020-11-16 22:26:14 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
2020-11-16 22:26:34 +0100 <koz_> The all-new Yelling Bird combinator.
2020-11-16 22:27:34 +0100 <int-e> koz_: I'm still wondering whether there's something more natural for this. Or perhaps some obscure lens approach...
2020-11-16 22:28:00 +0100ystael(~ystael@160.sub-174-242-87.myvzw.com)
2020-11-16 22:28:23 +0100conal(~conal@66.115.176.210)
2020-11-16 22:28:50 +0100moet(~moet@mobile-166-137-178-187.mycingular.net)
2020-11-16 22:28:56 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-16 22:29:43 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk) (Quit: Leaving)
2020-11-16 22:29:59 +0100ystael(~ystael@160.sub-174-242-87.myvzw.com) (Read error: Connection reset by peer)
2020-11-16 22:30:07 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2020-11-16 22:30:16 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk)
2020-11-16 22:32:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-16 22:32:39 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-16 22:34:51 +0100chaosmasttter(~chaosmast@p200300c4a73c52016862557d78ae998a.dip0.t-ipconnect.de) (Quit: WeeChat 2.9)
2020-11-16 22:35:06 +0100wtw(~wtw@unaffiliated/wtw) ()
2020-11-16 22:37:59 +0100Inoperable(~PLAYER_1@fancydata.science) (Excess Flood)
2020-11-16 22:38:14 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-16 22:39:02 +0100machined1od(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 22:39:07 +0100Ariakenom(~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se) (Read error: Connection reset by peer)
2020-11-16 22:39:21 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection)
2020-11-16 22:39:36 +0100machined1od(~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection)
2020-11-16 22:39:51 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz)
2020-11-16 22:40:00 +0100 <dolio> :t \f -> state (fmap ((,) ()) . f)
2020-11-16 22:40:02 +0100 <lambdabot> MonadState ((), b) m => (((), b) -> (a, b)) -> m a
2020-11-16 22:40:15 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-16 22:40:15 +0100 <eacameron> Question about TH. I barely know how to get my way around TH. Some libraries (here, postgresql-simple-interpolate) offer intelligent Haskell splicing into quasiquoters and they use haskell-ext-meta/etc. to parse the haskell code. This has numerous downsides though as the parser isn't aware of the all the extensions etc in the file using the QQ. However the thought came to me: Why parse these splices at all?
2020-11-16 22:40:31 +0100 <dolio> Oh, that won't work, right.
2020-11-16 22:40:34 +0100 <eacameron> Can't I just take them out and put them in a let binding with a new name and then use the name when building the string later?
2020-11-16 22:40:38 +0100ystael(~ystael@160.sub-174-242-87.myvzw.com)
2020-11-16 22:41:13 +0100boom(56ca6780@lfbn-lyo-1-7-128.w86-202.abo.wanadoo.fr) (Remote host closed the connection)
2020-11-16 22:41:52 +0100 <eacameron> This presupposes I'm able to take raw strings in the QQ as supplied by the user and then tell TH: Just splat this verbatim into the output.
2020-11-16 22:42:42 +0100falafel(~falafel@2600:1007:b0ad:6e87:7811:313f:d0f3:f9f4)
2020-11-16 22:42:58 +0100AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving)
2020-11-16 22:43:31 +0100 <Boomerang> TH doesn't let you "splat" raw strings, you have to build the AST of the Haskell you want to generate
2020-11-16 22:44:14 +0100ystael(~ystael@160.sub-174-242-87.myvzw.com) (Read error: Connection reset by peer)
2020-11-16 22:44:55 +0100 <eacameron> Boomerang: Well that sucks :P
2020-11-16 22:45:50 +0100 <Boomerang> It does have tools to make it easier, special TH QuasiQuotes [e| ... |], [t| ... |], ...
2020-11-16 22:46:14 +0100Inoperable(~PLAYER_1@fancydata.science)
2020-11-16 22:46:15 +0100 <eacameron> Boomerang: Yeah sounds like at that point I'd need Template template haskell...
2020-11-16 22:46:48 +0100 <Boomerang> It might be possible/already exists, but I don't know of such a library
2020-11-16 22:47:18 +0100falafel(~falafel@2600:1007:b0ad:6e87:7811:313f:d0f3:f9f4) (Read error: Connection reset by peer)
2020-11-16 22:50:55 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-16 22:54:01 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-16 22:55:29 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-16 22:55:36 +0100DTZUZU(~DTZUZU@207.81.171.116) (Remote host closed the connection)
2020-11-16 22:55:52 +0100DTZUZU(~DTZUZU@207.81.171.116)
2020-11-16 22:56:08 +0100ebf0(~ebf0@184.75.221.35)
2020-11-16 22:56:44 +0100oish(~charlie@228.25.169.217.in-addr.arpa)
2020-11-16 22:59:44 +0100borne(~fritjof@200116b864b5430099e934deb93b1409.dip.versatel-1u1.de)
2020-11-16 23:00:32 +0100jaspervdj(~jaspervdj@213.55.241.138) (Quit: leaving)
2020-11-16 23:00:33 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
2020-11-16 23:03:46 +0100nagisa(~Android@198-84-255-4.cpe.teksavvy.com)
2020-11-16 23:03:47 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-16 23:06:24 +0100Feuermagier_(~Feuermagi@213.178.26.41)
2020-11-16 23:07:15 +0100Lord_of_Life(~Lord@46.217.220.81) (Excess Flood)
2020-11-16 23:07:43 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-16 23:07:54 +0100Feuermagier(~Feuermagi@213.178.26.41) (Read error: Connection reset by peer)
2020-11-16 23:08:37 +0100wildtrees(wildtrees@gateway/vpn/protonvpn/wildtrees)
2020-11-16 23:10:08 +0100Lord_of_Life(~Lord@46.217.220.81)
2020-11-16 23:10:08 +0100Lord_of_Life(~Lord@46.217.220.81) (Changing host)
2020-11-16 23:10:08 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362)
2020-11-16 23:10:55 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2020-11-16 23:12:28 +0100 <monochrom> wz1000: Thanks for the synthetic topology link, I also get interested.
2020-11-16 23:14:32 +0100rprije(~rprije@124.148.131.132)
2020-11-16 23:14:40 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-16 23:16:15 +0100 <wz1000> monochrom: to model everything with the full expressive power you also need unamb, which is implemented using unsafePerformIO: https://hackage.haskell.org/package/unamb-0.2.7/docs/Data-Unamb.html
2020-11-16 23:17:04 +0100 <ski> @hackage lvish
2020-11-16 23:17:04 +0100 <lambdabot> https://hackage.haskell.org/package/lvish
2020-11-16 23:17:20 +0100__monty__(~toonn@unaffiliated/toonn) (Quit: leaving)
2020-11-16 23:17:52 +0100 <ski> (Escardó's work's interesting, yes)
2020-11-16 23:21:23 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-16 23:21:41 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net)
2020-11-16 23:24:45 +0100ski. o O ( "Abstract Stone Duality" by Paul Taylor at <https://www.paultaylor.eu/~pt/ASD/> )
2020-11-16 23:27:37 +0100hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 256 seconds)
2020-11-16 23:30:13 +0100alp(~alp@2a01:e0a:58b:4920:d8db:f457:3fb6:53df) (Ping timeout: 272 seconds)
2020-11-16 23:30:58 +0100Yumasi(~guillaume@static-176-175-104-214.ftth.abo.bbox.fr) (Ping timeout: 272 seconds)
2020-11-16 23:31:29 +0100Amras(~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds)
2020-11-16 23:36:28 +0100brettgilio(~brettgili@brettgilio.com) (Remote host closed the connection)
2020-11-16 23:36:32 +0100joeytwiddle(~joeytwidd@162.243.115.31) (Quit: ZNC - http://znc.in)
2020-11-16 23:36:45 +0100Cathy(~Cathy@unaffiliated/cathy) (Ping timeout: 240 seconds)
2020-11-16 23:36:47 +0100sulu(~sulu@unaffiliated/sulu) (Quit: No Ping reply in 180 seconds.)
2020-11-16 23:36:52 +0100nagisa(~Android@198-84-255-4.cpe.teksavvy.com) (Quit: -a- IRC for Android 2.1.58)
2020-11-16 23:37:15 +0100joeytwiddle(~joeytwidd@162.243.115.31)
2020-11-16 23:37:45 +0100luigy(~luigy@104.236.106.229) (Ping timeout: 240 seconds)
2020-11-16 23:38:03 +0100sulu(~sulu@unaffiliated/sulu)
2020-11-16 23:38:19 +0100luigy(~luigy@104.236.106.229)
2020-11-16 23:38:25 +0100peutri(~peutri@ns317027.ip-94-23-46.eu) (Ping timeout: 240 seconds)
2020-11-16 23:38:33 +0100peutri(~peutri@ns317027.ip-94-23-46.eu)
2020-11-16 23:38:38 +0100Cathy(~Cathy@unaffiliated/cathy)
2020-11-16 23:38:52 +0100brettgilio(~brettgili@brettgilio.com)
2020-11-16 23:44:12 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-16 23:46:23 +0100inkbottle(~inkbottle@aaubervilliers-654-1-89-20.w86-212.abo.wanadoo.fr)
2020-11-16 23:47:22 +0100zebrag(~inkbottle@aaubervilliers-654-1-73-14.w86-212.abo.wanadoo.fr) (Ping timeout: 246 seconds)
2020-11-16 23:47:58 +0100ystael(~ystael@209.6.50.55)
2020-11-16 23:48:31 +0100inkbottlezebrag
2020-11-16 23:51:43 +0100TxBiGuy(~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net)
2020-11-16 23:51:49 +0100TxBiGuy(~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net) (Remote host closed the connection)
2020-11-16 23:54:17 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
2020-11-16 23:56:07 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-16 23:56:33 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-16 23:56:59 +0100kritzefitz(~kritzefit@212.86.56.80) (Remote host closed the connection)
2020-11-16 23:57:01 +0100stree(~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception)
2020-11-16 23:57:01 +0100star_cloud(~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com) (Remote host closed the connection)
2020-11-16 23:57:19 +0100stree(~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net)
2020-11-16 23:57:31 +0100conal(~conal@66.115.176.210) (Quit: Computer has gone to sleep.)
2020-11-16 23:58:17 +0100[exa](exa@srv3.blesmrt.net) (Changing host)
2020-11-16 23:58:17 +0100[exa](exa@unaffiliated/exa/x-5381537)
2020-11-16 23:58:25 +0100star_cloud(~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com)
2020-11-16 23:59:25 +0100 <sshine> hm. apparently the 'data-fix' package doesn't have a 'para'.