Home liberachat/#haskell: Logs Calendar

Logs on 2022-01-26 (liberachat/#haskell)

00:00:17 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
00:02:29 <dsal> ST is awesome.
00:03:25 <hpc> purity is just a convenient side-effect of first-class IO :P
00:03:59 <SrPx> not sure I agree, I'd rather maintain a mutable mergesort in Rust than how it looks like in Haskell, for example
00:04:13 <SrPx> but for pure algorithms, Haskell is just lightyears ahead
00:04:17 <SrPx> but I guess it is a matter of taste
00:04:32 × little_mac quits (~little_ma@2601:410:4300:3ce0:88e2:d81e:ca89:4a84) (Remote host closed the connection)
00:04:44 <hpc> SrPx: that was mostly a joke
00:05:06 <hpc> but i quite like being able to throw IO actions around without having to do goofy () -> whatever functions
00:05:16 <SrPx> I meant that I don't agree ST is so awesome
00:05:22 <hpc> oh, yeah
00:05:26 <EvanR> SrPx, ST is a pure computation
00:05:28 <SrPx> interestingly I do agree with what you said
00:05:34 little_mac joins (~little_ma@2601:410:4300:3ce0:e0d9:54a6:eecc:ef77)
00:05:40 <hpc> hah
00:05:49 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
00:05:55 <SrPx> EvanR: it is a pure computation wrapped in 7 layers of obtuse abstractions
00:05:59 <hpc> SrPx: try this one on for size, haskell is my favorite imperative language and perl is my favorite functional language
00:06:07 <SrPx> to represent an impure computation
00:06:11 <EvanR> don't look at how many layers everything else has
00:06:27 <EvanR> we want our layers to be air tight, which ST is
00:06:34 <EvanR> like everything else pure here
00:07:00 <SrPx> I look at the code. The code is just ugly. The kind of thing I'd rather touch than work with in my career
00:07:16 <SrPx> perhaps my experience is affected by when I *had* to mess with ST a lot, a few years ago
00:07:21 <SrPx> things might be way better by now
00:07:52 <EvanR> giving someone, or yourself in the future, a pure function that you can just use and works, even if it uses impurity behind the scenes, is good
00:08:10 <EvanR> otoh if someone or yourself in the future has to work on the insides for whatever reason, not so good
00:08:19 <EvanR> but that's another story
00:08:58 <EvanR> putting lego bricks together to make stuff is fun, messing with molten thermoplastic that lego bricks come from, not so great
00:09:03 Erutuon joins (~Erutuon@user/erutuon)
00:10:22 <dsal> It's still a container that has specific rules you know things about.
00:10:25 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
00:12:40 <SrPx> hmmmm
00:13:21 <EvanR> an ST value is a container? 🤔
00:13:33 <geekosaur> tomsmeding, I just realized that what I gave you will malfunction at the end of a line, although you may not care. /foo($|[^.]|\.($|[^c]|c($|[^o]|o($|[^m]))))/i *now* it's ugly :)
00:13:53 <geekosaur> an ST computation is a container
00:13:53 <hololeap> something else to note is that ST is a monad and you can run pure code in it just like you can with IO or anything else
00:14:27 <geekosaur> within which you can use impurity as long as you don't let it leak out, and the container prevents you from making such leaks
00:14:45 <EvanR> interesting take on the containing
00:14:53 <dolio> ST is a way of calculating a pure result with an impure method, with a mechanism for ensuring that the impurity is localized. It's not just a pure representation of an impure method like IO.
00:14:56 <EvanR> it doesn't contain a result, it contains the state thread
00:15:07 <geekosaur> that's more or less what "state thread" means
00:15:31 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
00:15:38 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
00:15:54 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
00:16:03 ChaiTRex joins (~ChaiTRex@user/chaitrex)
00:16:36 <geekosaur> once upon a time I had a script to work those regexes for me since it's pretty mechanical… then came pcre
00:16:37 <EvanR> containing in the sense of imprisoning something
00:17:26 <EvanR> where as containers package is about eventually letting the things out
00:17:48 <geekosaur> well, you are letting something out. just not the impurity with it
00:17:52 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
00:23:32 <geekosaur> (ironically it was a perl script. perl was around for a while before pcre appeared)
00:24:02 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
00:25:56 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
00:27:28 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
00:28:20 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 250 seconds)
00:28:57 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
00:28:57 × haskellberryfinn quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds)
00:30:00 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
00:30:40 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
00:32:00 × ix quits (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922) (Remote host closed the connection)
00:32:09 ix joins (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922)
00:32:18 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
00:32:47 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
00:33:39 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
00:37:52 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 250 seconds)
00:38:25 lavaman joins (~lavaman@98.38.249.169)
00:38:28 Swahili joins (~Swahili@a95-94-208-187.cpe.netcabo.pt)
00:38:42 dsrt^ joins (~dsrt@96-86-240-178-static.hfc.comcastbusiness.net)
00:41:04 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
00:41:41 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection)
00:41:52 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba)
00:42:13 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
00:43:45 justsomeguy joins (~justsomeg@user/justsomeguy)
00:44:22 × joo-_ quits (~joo-_@fsf/member/joo--) (Ping timeout: 250 seconds)
00:45:57 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
00:46:15 joo-_ joins (~joo-_@80-62-116-31-mobile.dk.customer.tdc.net)
00:46:15 × joo-_ quits (~joo-_@80-62-116-31-mobile.dk.customer.tdc.net) (Changing host)
00:46:15 joo-_ joins (~joo-_@fsf/member/joo--)
00:48:18 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
00:48:29 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
00:48:57 <romesrf> hey everyone
00:48:57 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
00:49:59 <geekosaur> o/
00:51:00 Guest44 joins (~Guest44@44.190.189.46.rev.vodafone.pt)
00:52:11 <monochrom> ST is like a space telescope that shields noisy infrared from desired infrared signals... >:)
00:52:33 Gurkenglas joins (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de)
00:52:52 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
00:53:05 <geekosaur> are st tutorials the new monad tutorials?
00:53:11 <romesrf> AHA
00:53:41 <romesrf> it'd be good because i haven't gotten into the ST yet, though i do have simon's paper waiting on my bedside table
00:53:53 <monochrom> You also have to unfold it like you unwrap a burrito!
00:55:25 <romesrf> it's funny i really like burritos but i can't like that <<<<<<analogy>>>>>>
00:55:44 <monochrom> It's OK, I'm joking :)
00:56:12 <romesrf> i know ;)
00:56:19 <geekosaur> late nite on #haskell þ
00:56:49 <geekosaur> (well, early night but it feels late to me because I got up several hours earlier than I ought've)
01:01:20 cyphase joins (~cyphase@user/cyphase)
01:02:40 alt-romes joins (~romes@44.190.189.46.rev.vodafone.pt)
01:04:19 × Guest44 quits (~Guest44@44.190.189.46.rev.vodafone.pt) (Ping timeout: 256 seconds)
01:04:44 × romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 250 seconds)
01:08:18 mvk joins (~mvk@2607:fea8:5cdc:bf00::a2bf)
01:09:30 × Gurkenglas quits (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) (Ping timeout: 250 seconds)
01:10:26 × alt-romes quits (~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
01:11:15 × alp quits (~alp@user/alp) (Ping timeout: 268 seconds)
01:11:42 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:12:32 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
01:14:53 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
01:15:37 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
01:15:48 Erutuon joins (~Erutuon@user/erutuon)
01:16:37 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
01:17:48 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:21:09 <dsal> EvanR: Yeah, I didn't even think of container as "bucket" as much as "containment." Words are weird.
01:23:00 xsperry joins (~xs@user/xsperry)
01:25:04 cynomys joins (~cynomys@user/cynomys)
01:27:01 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
01:27:08 <int-e> The burrito analogy is still brilliant... because it kind of works and I suspect there's pretty unanimous agreement that it fails to capture the essence of monads :P
01:28:38 <int-e> (burritos are just leaky containers :-P)
01:29:27 × mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
01:32:33 vysn joins (~vysn@user/vysn)
01:33:04 lispy joins (~lispy4@84.69.59.93)
01:33:17 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev)
01:35:37 × xsperry quits (~xs@user/xsperry) (Ping timeout: 240 seconds)
01:36:29 <remexre> is there something for reformatting deriving-Show'd values to have "friendlier" whitespace?
01:39:03 <ephemient> @hackage pretty-simple
01:39:03 <lambdabot> https://hackage.haskell.org/package/pretty-simple
01:39:49 <remexre> thanks!
01:40:37 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds)
01:41:21 yauhsien joins (~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
01:43:29 xsperry joins (~xs@user/xsperry)
01:44:10 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
01:45:06 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
01:45:10 lbseale joins (~ep1ctetus@user/ep1ctetus)
01:47:38 <sm> or
01:47:38 <sm> @hackage pretty-show
01:47:38 <lambdabot> https://hackage.haskell.org/package/pretty-show
01:47:42 FroskyArr joins (~froskyarr@120.239.9.244)
01:49:20 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
01:50:58 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
01:50:58 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
01:50:58 wroathe joins (~wroathe@user/wroathe)
01:54:22 zaquest joins (~notzaques@5.130.79.72)
01:55:40 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
01:58:32 × xsperry quits (~xs@user/xsperry) (Ping timeout: 240 seconds)
02:00:44 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
02:01:41 × mmhat quits (~mmh@55d40230.access.ecotel.net) (Quit: WeeChat 3.4)
02:01:58 ec joins (~ec@gateway/tor-sasl/ec)
02:09:49 deadmarshal joins (~deadmarsh@95.38.116.147)
02:12:37 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
02:14:13 × deadmarshal quits (~deadmarsh@95.38.116.147) (Ping timeout: 256 seconds)
02:14:35 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
02:20:41 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
02:20:57 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds)
02:21:37 × xff0x quits (~xff0x@2001:1a81:53ac:af00:ba25:4d71:4d47:a3a5) (Ping timeout: 240 seconds)
02:21:54 <pfurla-matrix> Does anybody recalls what is the Java/JVM equivalent of MVar?
02:22:53 × x88x88x quits (~x88x88x@149.28.53.172) (Read error: Connection reset by peer)
02:23:05 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
02:23:14 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:23:27 <monochrom> The "synchronized" reserved word.
02:23:52 xff0x joins (~xff0x@2001:1a81:53ec:e00:db2b:9281:840d:9e3c)
02:24:06 <monochrom> OK, there may be something in the library that's closer, but I bet they are based upon "synchronized".
02:24:23 xsperry joins (~xs@user/xsperry)
02:24:33 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
02:25:13 <monochrom> Well, "synchronized" and the "wait()" method.
02:25:46 Guest|redshift1 joins (~Guest|red@165.16.48.46)
02:26:13 × soft quits (~soft@2001:470:69fc:105::c75) (Quit: Client limit exceeded: 20000)
02:27:43 ec joins (~ec@gateway/tor-sasl/ec)
02:29:53 <pfurla-matrix> yeah, I could do that, but I was hoping something would take care of the synchronized for me already
02:30:57 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
02:32:52 SummerSonw joins (~The_viole@203.77.49.232)
02:37:58 × ensyde quits (~ensyde@2600:1700:2050:1040:6816:2795:9c3:9492) (Read error: Connection reset by peer)
02:41:07 <int-e> pfurla-matrix: http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/Slot.html rather suggests that there's nothing doing that directly in the standard library
02:41:20 soft joins (~soft@2001:470:69fc:105::c75)
02:43:07 <int-e> and yeah, having language blessed re-entrant monitors built in goes a long way towards explaining that.
02:43:32 × yauhsien quits (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
02:49:36 <sm> \o/! Someone other than me recommended HTAC.
02:49:36 <sm> https://www.reddit.com/r/haskell/comments/sc41tj/learn_haskell_by_doing/hu5x46p
02:54:51 califax- joins (~califax@user/califx)
02:57:22 × Guest|redshift1 quits (~Guest|red@165.16.48.46) (Quit: Connection closed)
02:58:21 × califax quits (~califax@user/califx) (Ping timeout: 276 seconds)
02:58:21 califax- is now known as califax
03:00:07 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
03:08:05 <ephemient> pfurla-matrix: BlockingQueue of size 1?
03:08:42 <pfurla-matrix> ephemient: yeah, that's a good one, I might end up doing exactly that
03:08:45 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
03:14:16 × Swahili quits (~Swahili@a95-94-208-187.cpe.netcabo.pt) (Remote host closed the connection)
03:14:17 × td_ quits (~td@muedsl-82-207-238-208.citykom.de) (Ping timeout: 256 seconds)
03:15:55 td_ joins (~td@94.134.91.245)
03:18:53 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
03:35:09 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
03:39:17 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Ping timeout: 240 seconds)
03:39:31 × Adran quits (~adran@botters/adran) (Quit: Este é o fim.)
03:40:36 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
03:41:08 zebrag joins (~chris@user/zebrag)
03:41:29 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
03:41:33 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
03:42:01 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
03:42:05 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
03:42:37 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:43:14 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
03:43:39 × zebrag quits (~chris@user/zebrag) (Client Quit)
03:46:17 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Ping timeout: 240 seconds)
03:46:54 Adran joins (adran@botters/adran)
03:51:08 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds)
03:53:10 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
04:01:02 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
04:01:07 yauhsien joins (~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
04:04:08 geranim0 joins (~geranim0@d-132-204-221-88.res.umontreal.ca)
04:05:17 × yauhsien quits (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
04:08:24 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
04:08:24 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
04:08:24 wroathe joins (~wroathe@user/wroathe)
04:10:35 <justsomeguy> So, I was asking myself "How do you measure the complexity of an expression in the pure lambda calculus?", and came across some versions of the lambda calculus that have explicit rules about how to perform reductions, using rewrite rules, and also sometimes using annotations for when to share results of sub-expressions. Has anyone else recently looked into this stuff -- what do you think?
04:11:31 <justsomeguy> (I don't really understand the subject, as you can tell, but I think the question is interesting, and it's neat to see so many approaches to coming up with and answer.)
04:13:43 <justsomeguy> I mean, maybe I doesn't even make sense to ask how to measure a lambda expression unless I'm talking about a particular implementation of the lambda calculus.
04:14:11 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
04:14:35 justsomeguy brushes aside his half-baked theory questions and goes back to debugging his crummy hangman game.
04:15:57 × waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
04:16:17 × ralu quits (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 240 seconds)
04:18:32 × dolio quits (~dolio@130.44.130.54) (Quit: ZNC 1.8.2 - https://znc.in)
04:18:57 × SummerSonw quits (~The_viole@203.77.49.232) (Ping timeout: 240 seconds)
04:20:12 ralu joins (~ralu@static.211.245.203.116.clients.your-server.de)
04:21:17 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
04:21:28 <c_wraith> there is some sort of notion of "steps required to reduce"
04:21:41 <c_wraith> There's even theory on minimizing that - optimal evaluation.
04:22:11 <c_wraith> (it turns out optimal evaluation isn't really optimal for computers most of the time - it's too expensive to figure out what the optimal approach is)
04:25:54 <davean> Just doing it can be better than doing it well
04:25:58 dolio joins (~dolio@130.44.130.54)
04:25:58 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
04:26:16 img joins (~img@user/img)
04:27:23 × shriekingnoise quits (~shrieking@201.231.16.156) (Ping timeout: 256 seconds)
04:29:29 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
04:29:29 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
04:29:29 wroathe joins (~wroathe@user/wroathe)
04:30:40 Jing joins (~hedgehog@240e:390:7c53:a7e1:b574:732d:3b12:8f10)
04:32:17 × mvk quits (~mvk@2607:fea8:5cdc:bf00::a2bf) (Ping timeout: 240 seconds)
04:32:42 <justsomeguy> I came across two cool resources... Someone linked to Barry Jay's Closure Calculus. There is also https://researchportal.bath.ac.uk/en/projects/typed-lambda-calculi-with-sharing-and-unsharing. I tried to summarize them, but realized I don't understand them well enought to do that.
04:34:11 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
04:34:29 × little_mac quits (~little_ma@2601:410:4300:3ce0:e0d9:54a6:eecc:ef77) (Remote host closed the connection)
04:35:31 little_mac joins (~little_ma@2601:410:4300:3ce0:dc0a:b5a8:5147:7a4f)
04:39:48 deadmarshal joins (~deadmarsh@95.38.116.147)
04:42:46 shriekingnoise joins (~shrieking@201.231.16.156)
04:43:09 dut joins (~dut@user/dut)
04:46:57 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
04:48:28 SummerSonw joins (~The_viole@203.77.49.232)
04:49:35 PigDude parts (~PigDude@159.203.16.199) ()
04:50:41 <dsal> Trying out copilot. It wrote this function for me: `sortStringsByNumber = sortBy (compare `on` (read . head . words))`
04:52:07 × shailangsa quits (~shailangs@host86-185-98-37.range86-185.btcentralplus.com) (Ping timeout: 256 seconds)
04:53:32 × SummerSonw quits (~The_viole@203.77.49.232) (Ping timeout: 250 seconds)
04:56:41 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
04:57:43 <dsal> I typed `doesThisHalt` and it just spat out a solution to the halting problem: https://www.irccloud.com/pastebin/CnZCMWic/halting.hs
04:57:56 <ephemient> sortOn f is supposedly better than sortBy (comparing f), isn't it? at least the docs say it has better performance
04:59:09 <int-e> ephemient: it depends on whether f is cheap or expensive and a bit on how big the results of f are
04:59:32 <int-e> (since sortOn will store those results while the list is being sorted)
05:00:47 × p3n quits (~p3n@217.198.124.246) (Quit: ZNC 1.8.2 - https://znc.in)
05:01:03 p3n joins (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1)
05:04:10 <g> sortBy (comparing snd) would be better than sortOn snd
05:04:21 × vysn quits (~vysn@user/vysn) (Ping timeout: 268 seconds)
05:04:26 <g> Or any other record selector, for example
05:09:01 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 240 seconds)
05:09:34 × vglfr quits (~vglfr@46.96.147.122) (Ping timeout: 250 seconds)
05:11:08 <ephemient> sure. I expect sortOn is defined as something like map fst . sortBy (comparing snd) . map (id &&& f) so if sortOn snd were better than sortBy (comparing snd), it would be better to replace that, and again, and again… which would be absurd
05:11:37 × geranim0 quits (~geranim0@d-132-204-221-88.res.umontreal.ca) (Ping timeout: 240 seconds)
05:12:11 <ephemient> but in the case of f = read . head . words that copilot learned from somewhere, which would that be?
05:12:23 <ephemient> although I guess that might require benchmarking to determine
05:13:20 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
05:13:20 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
05:13:20 wroathe joins (~wroathe@user/wroathe)
05:13:40 <ephemient> that `doesThisHalt` is… curious. what kind of code did copilot learn that from
05:17:03 lionhairdino joins (~jacoo@121.131.39.82)
05:17:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
05:18:37 <dsal> It's interesting because it like, does something, I just don't know where `halt` comes from. My first attempt to solve the halting problem, I let it create the signature which it decided should be `:: [Int] -> Bool` and then the implementation was `doesThisHalt xs = (length xs) == (length $ filter (==0) xs)`
05:25:24 <int-e> does extended exposure to copilot lead to brain damage?
05:25:54 <int-e> (these examples are pretty painful)
05:27:15 <dsal> Haha. Yeah. The examples so far have been pretty terrible.
05:28:05 Erutuon joins (~Erutuon@user/erutuon)
05:30:17 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
05:33:59 <monochrom> Wait, does copilot guess from your meaningful function names?
05:34:25 <monochrom> Is it like a marriage of GPT3 and genetic algorithms? >:)
05:35:07 <monochrom> Does it understand "awesomeHaskellCompiler"? >:)
05:35:09 shailangsa joins (~shailangs@host86-185-98-37.range86-185.btcentralplus.com)
05:40:40 <dsal> monochrom: I don't think it thinks that's supposed to do something: `awesomeHaskellCompiler :: Compiler`
05:41:11 <int-e> gruesomeHaskellCompiler (short... ah let's just leave it at the long version)
05:41:41 <dsal> I changed it to a verb: https://www.irccloud.com/pastebin/oFaoUzPE/compile.hs
05:42:24 <EvanR> it is pitch black
05:42:34 <monochrom> Haha wait am I seeing it outsourcing the job to ghc?
05:42:34 <EvanR> you've been eaten by a gruesome haskell compiler
05:42:55 <dsal> monochrom: Yeah, kind of cheating.
05:42:59 <monochrom> This is smarter than most students :)
05:43:02 <dsal> That's not the kind of cheating I'm trying to do.
05:44:05 <monochrom> Sad to say it understands ExceptT and System.Process better than most querents in this channel!
05:44:06 <int-e> dsal: what do you want? `compileHaskellCode _ = let _ = "todo" in fix error`
05:44:55 <dsal> I wanted it to write hugs.
05:46:00 <int-e> hugs are incompatible with current social distancing rules
05:46:28 <monochrom> haha
05:46:33 <dsal> I asked it to write me a function called "fixedPointOfFunction" and it came up with `fixedPointOfFunction :: (a -> a) -> a -> a; fixedPointOfFunction f x = let x' = f x in if x' == x then x' else fixedPointOfFunction f x'`
05:47:21 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
05:53:58 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
05:54:07 <monochrom> That's not bad in the sense of fixed points in real analysis.
05:54:50 <int-e> I have written that code, sans the overly polymorphic signature
05:54:57 × cheater quits (~Username@user/cheater) (Ping timeout: 240 seconds)
05:56:43 <int-e> and possibly cosmetic differences, including relying on ghc's opportunistic CSE: stabilize f x | x == f x = x | otherwise = stabilize f (f x)
05:58:06 × little_mac quits (~little_ma@2601:410:4300:3ce0:dc0a:b5a8:5147:7a4f) (Remote host closed the connection)
05:59:45 × ishutin quits (~ishutin@84-236-1-73.pool.digikabel.hu) (Ping timeout: 256 seconds)
06:01:20 ishutin joins (~ishutin@87-97-82-177.pool.digikabel.hu)
06:01:55 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
06:02:26 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 250 seconds)
06:04:17 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
06:04:53 <xerox> :t let g f x = maybe x (g f) (f x) in g -- reminds me of this
06:04:54 <lambdabot> (a -> Maybe a) -> a -> a
06:05:14 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
06:05:20 Erutuon joins (~Erutuon@user/erutuon)
06:05:48 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
06:06:05 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
06:06:34 bliminse_ joins (~bliminse@host86-188-36-166.range86-188.btcentralplus.com)
06:06:45 <ephemient> > let fix f x = y where ys = iterate f x; (y, _):_ = dropWhile (uncurry (/=)) $ zip ys (tail ys) in fix cos 0 -- I vaguely remember something like this happening the other day but don't remember context
06:06:46 <lambdabot> 0.7390851332151607
06:06:55 × bliminse quits (~bliminse@host86-188-36-178.range86-188.btcentralplus.com) (Ping timeout: 256 seconds)
06:09:17 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
06:11:38 <dsal> GHCI doesn't bring symbols from :{ into scope. Is this normal or am I doing something wrong (other than trying to use :{) ?
06:12:32 <monochrom> Works for me.
06:12:37 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
06:12:57 <monochrom> I entered "f x = x + 1" and "g x = f x + 1" between :{ and :}
06:13:12 <monochrom> Outside, f 4 and g 4 give expected answers.
06:13:48 <dsal> This ghci is kind of mangled for various reasons. Oh, I have more than one computer. This is the one that has the broken readline thing as well.
06:14:28 <monochrom> That's one more moving parts thrown into the wrench or some mixed up metaphor, yeah. :)
06:16:08 <dsal> The ghci from ghcup works.
06:16:37 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
06:17:06 cheater joins (~Username@user/cheater)
06:24:49 <dsal> I'm confused by this data-fix hylomorphism. How does one use this? `:: Functor f => (f b -> b) -> (a -> f a) -> a -> b`
06:25:24 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds)
06:26:18 <dsal> It's supposed to be "anamorphism followed by catamorphism" so I guess the first function is the catamorphism and the second is the anamorphism. But it looks like a ~ b.
06:27:24 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
06:28:26 emf joins (~emf@2620:10d:c090:400::5:fe1a)
06:29:25 <dsal> That's the same signature recursion-schemes uses.
06:32:24 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:33:09 × dut quits (~dut@user/dut) (Quit: Leaving)
06:37:58 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
06:39:46 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
06:40:43 <dsal> I was thinking about going to be early a couple hours ago. Maybe I'll do that instead.
06:42:18 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 250 seconds)
06:43:20 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
06:45:07 <c_wraith> dsal: works just fine when a is not the same type as b. Though... Uh... It's a bit of a funny one.
06:50:03 <prasad> :q
06:50:14 × prasad quits (~user@c-73-170-49-136.hsd1.ca.comcast.net) (Remote host closed the connection)
06:51:04 _ht joins (~quassel@2a02:a468:b619:1:8a98:8031:2935:e3fc)
06:54:40 <dsal> c_wraith: I'm going to try to understand it in The Future. My `fold . unfoldr f` thing was easy to write, but I want to do sightly better
06:59:56 mikoto-chan joins (~mikoto-ch@213.177.151.239)
07:00:32 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
07:01:03 × lispy quits (~lispy4@84.69.59.93) (Quit: Leaving)
07:04:21 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds)
07:05:21 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
07:05:55 alp joins (~alp@user/alp)
07:07:00 × deadmarshal quits (~deadmarsh@95.38.116.147) (Ping timeout: 250 seconds)
07:10:45 × xsperry quits (~xs@user/xsperry) (Read error: Connection reset by peer)
07:14:08 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
07:14:08 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
07:14:08 wroathe joins (~wroathe@user/wroathe)
07:14:22 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 250 seconds)
07:14:49 deadmarshal joins (~deadmarsh@95.38.116.147)
07:14:59 × cynomys quits (~cynomys@user/cynomys) (Remote host closed the connection)
07:16:22 cfricke joins (~cfricke@user/cfricke)
07:19:24 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
07:19:46 gehmehgeh joins (~user@user/gehmehgeh)
07:19:47 mbuf joins (~Shakthi@122.173.242.184)
07:23:12 michalz joins (~michalz@185.246.204.37)
07:23:17 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
07:25:31 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
07:27:32 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
07:30:21 ensyde joins (~ensyde@2600:1700:2050:1040:3990:b270:fa9e:e455)
07:32:14 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
07:32:37 lortabac joins (~lortabac@2a01:e0a:541:b8f0:71ea:518b:f248:7591)
07:35:15 xsperry joins (~xs@user/xsperry)
07:38:37 × emf quits (~emf@2620:10d:c090:400::5:fe1a) (Ping timeout: 240 seconds)
07:39:25 akegalj joins (~akegalj@141-136-245-236.dsl.iskon.hr)
07:39:25 little_mac joins (~little_ma@2601:410:4300:3ce0:45a2:92d3:66c6:d0a1)
07:41:01 × xsperry quits (~xs@user/xsperry) (Read error: Connection reset by peer)
07:44:23 xsperry joins (~xs@user/xsperry)
07:47:26 Chewt joins (~hayden@2601:1c0:8101:7310::144a)
07:51:40 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
07:51:55 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Quit: WeeChat 3.4)
07:53:59 × gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.3)
07:54:00 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
07:54:45 × xsperry quits (~xs@user/xsperry) (Read error: Connection reset by peer)
07:56:17 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
07:56:21 SummerSonw joins (~The_viole@203.77.49.232)
07:56:55 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
07:58:06 mikoto-chan joins (~mikoto-ch@84.199.144.235)
07:59:13 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:59:50 cosimone joins (~user@93-44-185-255.ip98.fastwebnet.it)
08:01:10 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
08:04:26 xsperry joins (~xs@user/xsperry)
08:06:05 vysn joins (~vysn@user/vysn)
08:06:21 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
08:06:29 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
08:08:35 Major_Biscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net)
08:10:42 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:71ea:518b:f248:7591) (Ping timeout: 250 seconds)
08:11:47 lortabac joins (~lortabac@2a01:e0a:541:b8f0:23a9:7efc:99f6:4072)
08:12:49 chele joins (~chele@user/chele)
08:14:57 mc47 joins (~mc47@xmonad/TheMC47)
08:16:20 × p3n quits (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (Ping timeout: 250 seconds)
08:16:49 p3n joins (~p3n@217.198.124.246)
08:21:39 AlexNoo_ is now known as AlexNoo
08:28:35 fef joins (~thedawn@user/thedawn)
08:28:59 fendor joins (~fendor@77.119.167.8.wireless.dyn.drei.com)
08:30:20 <dminuoso_> megaparsec question. Let's say I want to parse "foo" are separated by dots with a trailing dot. Naively I tried: thingBetween `sepBy1` chunk ".", but that cant parse `"foo.foo.", as megaparsec will rightfully expect a trailing "foo"
08:30:56 <dminuoso_> I can of course parse this as: many (thingBetween <* chunk ".")
08:31:19 <dminuoso_> Ah hold on.
08:31:32 <dminuoso_> As I was writing the second part of it, I realized I simply need two completely separate parsers.
08:31:41 <dminuoso_> Thanks for being a rubber duck.
08:32:13 <tomsmeding> dminuoso_: many (thingBetween <* chunk ".") ?
08:32:18 <tomsmeding> or some, perhaps
08:32:38 <dminuoso_> tomsmeding: No my problem was I wanted to find a way to do both with a leading dot and without.
08:32:58 <dminuoso_> But it means I must in one place use `many (thingBetween <* chunk ".")` and `thingBetween `sepBy1` chunk "."` for the other
08:33:15 <dminuoso_> In attoparsec I merely used the latter, and it worked out just fine due to backtracking
08:33:26 <tomsmeding> "separated by dots with a trailing dot" to me means a dot after each foo
08:33:37 <dminuoso_> Sure
08:34:50 <tomsmeding> but if you solved your own problem already don't listen to me :)
08:35:13 jgeerds joins (~jgeerds@55d4a547.access.ecotel.net)
08:35:26 <dminuoso_> Next up I should rewrite this parser with alex/happy.
08:35:53 ubert1 joins (~Thunderbi@p200300ecdf09940ed781da24ea780c96.dip0.t-ipconnect.de)
08:36:04 <dminuoso_> What's the minimal dependency footprint I can bring? Surely I can preexecute alex/happy and just ship the generated lexer/parser files right?
08:36:52 <dminuoso_> https://github.com/glguy/config-value looks like it
08:37:04 Gurkenglas joins (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de)
08:37:32 × ph88^ quits (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
08:38:00 × xff0x quits (~xff0x@2001:1a81:53ec:e00:db2b:9281:840d:9e3c) (Ping timeout: 250 seconds)
08:38:20 × Major_Biscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 268 seconds)
08:39:04 xff0x joins (~xff0x@2001:1a81:53ec:e00:81a4:7fd8:2f5d:f55d)
08:44:37 ph88^ joins (~ph88@2a02:8109:9e00:71d0:a803:7e6c:9fe5:13b9)
08:45:31 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
08:46:24 × gentauro quits (~gentauro@user/gentauro) (Quit: leaving)
08:48:11 kuribas joins (~user@ptr-25vy0i9nxqs797laykw.18120a2.ip6.access.telenet.be)
08:50:21 machinedgod joins (~machinedg@24.105.81.50)
08:51:36 sprout joins (~quassel@2a02:a467:ccd6:1:8844:e45a:1aab:92c2)
08:53:13 × little_mac quits (~little_ma@2601:410:4300:3ce0:45a2:92d3:66c6:d0a1) (Remote host closed the connection)
08:54:18 gentauro joins (~gentauro@user/gentauro)
08:55:36 × sprout_ quits (~quassel@2a02:a467:ccd6:1:5d8f:20db:5ddd:bcf4) (Ping timeout: 268 seconds)
08:57:02 × simmsb quits (~simmsb@2001:470:69fc:105::1:55c3) (Quit: Client limit exceeded: 20000)
08:58:13 <tomsmeding> Axman6: I tried Data.Discrimination.Sorting.sort because I was curious, and it seems it's at roughly the same performance in my test as Data.List.sort
08:58:21 <tomsmeding> though the quickcheck tests are MUCH slower for some reasons
08:58:24 <tomsmeding> s/.$//
08:58:27 simmsb joins (~simmsb@2001:470:69fc:105::1:55c3)
08:58:35 <tomsmeding> like, taking 10x as long
08:58:57 <tomsmeding> perhaps it has a higher constant factor for short lists? quickcheck only tests lists with lengths [0..99]
08:59:16 <tomsmeding> Axman6: actually, not Data.List.sort, but quacksort lol
09:01:22 Major_Biscuit joins (~MajorBisc@c-001-019-027.client.tudelft.eduvpn.nl)
09:05:05 dminuoso_ is now known as dminuoso
09:05:14 <c_wraith> quacksort? Is that like a single pass of bubble sort? "most lists are nearly sorted already, this will be fine!"
09:05:31 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
09:05:59 Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
09:06:07 xkuru joins (~xkuru@user/xkuru)
09:06:42 × vysn quits (~vysn@user/vysn) (Ping timeout: 268 seconds)
09:07:49 max22- joins (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
09:09:20 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection)
09:09:35 × jle` quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 256 seconds)
09:09:48 <tomsmeding> c_wraith: something written by SrPx last night, bit of a simplistic mix of mergesort and quicksort
09:10:16 <tomsmeding> and is slightly slower (~30%) than Data.List.sort in my tests, but I fixed a bug in their code in a really inefficient way
09:10:34 <tomsmeding> c_wraith: https://paste.tomsmeding.com/RVS64Lfd
09:11:07 jle` joins (~jle`@cpe-23-240-75-236.socal.res.rr.com)
09:12:47 <c_wraith> that's the fixed code? That seems to have weird inefficiencies all over
09:13:02 × shailangsa quits (~shailangs@host86-185-98-37.range86-185.btcentralplus.com) ()
09:13:23 <tomsmeding> yeah that's the fixed code
09:13:59 <tomsmeding> c_wraith: this was their original code https://gist.github.com/VictorTaelin/2a1cf354ea710f1eae1b6d15281813ca
09:14:38 <tomsmeding> (the bug was that if the first element is maximal, all elements fall into one bucket and it loops infinitely)
09:15:03 <c_wraith> why are you passing information into quack and place that is always derived exactly the same way from other parameters?
09:15:15 <tomsmeding> yeah I dunno
09:15:24 <tomsmeding> but I would expect ghc to optimise that one particular thing out
09:15:39 × dminuoso quits (~dminuoso@static.88-198-218-68.clients.your-server.de) (Changing host)
09:15:39 dminuoso joins (~dminuoso@user/dminuoso)
09:15:57 <c_wraith> I care less about that and more about how it makes the code harder to read
09:17:32 allbery_b joins (~geekosaur@xmonad/geekosaur)
09:17:32 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
09:17:35 allbery_b is now known as geekosaur
09:20:15 <tomsmeding> c_wraith: is quacksort2 here more readable? https://paste.tomsmeding.com/hyJfdqVt
09:22:24 <c_wraith> a lot
09:23:58 caro is now known as akhesacaro
09:29:11 <c_wraith> also, that looks like it goes O(n^2) on inputs like [9,7,5,3,1,2,4,6,8,10]
09:30:16 <tomsmeding> c_wraith: yeah, the naive pivot selection doesn't ensure n log n
09:30:36 <tomsmeding> also the benchmark is on random lists, which is quite relevant to interpreting the results
09:30:56 <c_wraith> Data.List.sort is O(n) on inputs like that.
09:32:15 × SummerSonw quits (~The_viole@203.77.49.232) (Ping timeout: 256 seconds)
09:32:29 × cosimone quits (~user@93-44-185-255.ip98.fastwebnet.it) (Remote host closed the connection)
09:36:39 haskellberryfinn joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
09:38:51 flipchan joins (~filip@user/flipchan)
09:43:28 <tomsmeding> c_wraith: benchmarked against inputs like that ([1], [1,2], [3,1,2], [3,1,2,4], etc.), you get the desc-asc ones here: https://tomsmeding.com/f/sorting-comparison-criterion-1.html
09:43:40 <tomsmeding> i.e. confirms your observation :p
09:43:50 <tomsmeding> hint: click the x-axis on the overview chart to switch to log scale
09:44:25 <c_wraith> that's a cool UI
09:44:34 <tomsmeding> yeah, criterion is cool
09:44:43 <c_wraith> I've never used its HTML output
09:45:21 <tomsmeding> if you use criterion's defaultMain, just pass '-o out.html' to the executable
09:45:29 <merijn> c_wraith: to be fair, O(n^2) worst case is accurate for quicksort :p
09:45:42 <tomsmeding> merijn: not if you have a well-chosen pivot (which this one doesn't)
09:45:53 <merijn> *insert my usual rant that the only thing quicksort has going for it is the marketing from it's name*
09:47:03 <c_wraith> Oh. Here's what I don't get about that algorithm. The merge should always be doing (++)
09:47:10 <tomsmeding> SrPx: https://tomsmeding.com/f/sorting-comparison-criterion-1.html -- also posting this to you in case you're interested
09:47:32 <c_wraith> it's a quicksort with a slower string concatenation named "merge"
09:48:24 <tomsmeding> that is correct lol
09:48:49 <tomsmeding> doesn't do much to its benchmark time though
09:48:56 <c_wraith> no, it's not much slower
09:49:16 <c_wraith> chasing the pointers costs much more time than the comparisons
09:50:01 <tomsmeding> much more, I'm only seeing a 1% improvement or something
09:50:15 <tomsmeding> well, maybe 4%
09:50:46 <c_wraith> did you actually verify the results are still sorted?
09:50:59 <c_wraith> I might have analyzed it incorrectly!
09:51:04 vglfr joins (~vglfr@88.155.70.5)
09:51:30 <tomsmeding> quickcheck is okay with it
09:51:48 <tomsmeding> which isn't a proof, but gives me pretty good confidence
09:52:01 <c_wraith> yeah, sounds pretty good
09:52:19 <tomsmeding> in case you're interested, combined chart: https://tomsmeding.com/f/sorting-comparison-criterion-2.html
09:52:57 shailangsa joins (~shailangs@host86-185-98-37.range86-185.btcentralplus.com)
09:55:29 × OscarH_ quits (~OscarH@90.201.86.195) (Ping timeout: 252 seconds)
09:58:35 × bjourne quits (~bjourne@2001:6b0:1:1140:42bf:ff4:f8fa:50e5) (Quit: Konversation terminated!)
09:58:40 × Jing quits (~hedgehog@240e:390:7c53:a7e1:b574:732d:3b12:8f10) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:59:12 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
09:59:26 lavaman joins (~lavaman@98.38.249.169)
10:00:58 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 268 seconds)
10:01:31 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
10:02:00 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
10:02:46 SummerSonw joins (~The_viole@203.77.49.232)
10:03:16 OscarH joins (~OscarH@2a02:c7f:a0da:ae00:ba27:ebff:fe84:d2f4)
10:08:57 × ensyde quits (~ensyde@2600:1700:2050:1040:3990:b270:fa9e:e455) (Ping timeout: 240 seconds)
10:09:45 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba)
10:10:40 × amk quits (~amk@109.255.169.126) (Remote host closed the connection)
10:11:06 × michalz quits (~michalz@185.246.204.37) (Read error: No route to host)
10:11:40 amk joins (~amk@109.255.169.126)
10:12:17 michalz joins (~michalz@185.246.204.37)
10:14:02 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Ping timeout: 240 seconds)
10:14:17 Jing joins (~hedgehog@240e:390:7c53:a7e1:491:83dc:6241:13db)
10:16:22 cosimone joins (~user@93-44-185-255.ip98.fastwebnet.it)
10:19:39 × Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: Leaving)
10:23:17 mvk joins (~mvk@2607:fea8:5cdc:bf00::a2bf)
10:24:30 yauhsien joins (~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
10:26:15 × ph88^ quits (~ph88@2a02:8109:9e00:71d0:a803:7e6c:9fe5:13b9) (Ping timeout: 268 seconds)
10:26:28 ph88^ joins (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de)
10:26:28 × aeka quits (~aeka@user/hiruji) (Quit: ZNC 1.8.2 - https://znc.in)
10:26:40 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
10:27:57 aeka joins (~aeka@2606:6080:1001:18:8d41:9604:d435:36b6)
10:28:37 × yauhsien quits (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
10:30:59 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
10:31:56 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
10:31:56 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
10:31:56 wroathe joins (~wroathe@user/wroathe)
10:34:10 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
10:35:18 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
10:36:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
10:37:06 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
10:46:17 × davros quits (~davros@host86-184-180-214.range86-184.btcentralplus.com) (Ping timeout: 240 seconds)
10:47:37 × vglfr quits (~vglfr@88.155.70.5) (Ping timeout: 256 seconds)
10:49:19 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
10:49:34 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
10:51:05 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Remote host closed the connection)
10:51:29 coot joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827)
10:54:47 <kuribas> If haskell is great because of its expressive typesystem, wouldn't idris be better, since the type level is just the language?
10:55:17 <kuribas> types are just values, so expressing something in a type is as simple as expressing it in a value.
10:55:32 <[exa]> it might be the delicate separation of the concerns that makes it great.
10:56:11 <kuribas> haskell?
10:56:18 <[exa]> yes
10:56:29 <dminuoso> Mmm, is there any alex-mode for emacs?
10:56:42 <kuribas> I am not even sure haskell is "great".
10:57:15 <dminuoso> kuribas: Counter argument, haskell is great for simple things like highly reusable ADTs such as Maybe.
10:57:39 <dminuoso> Simple and elegant ways to define and discriminate on ADTs is what I love most. :)
10:57:41 <kuribas> dminuoso: you can have that with dependently typed languages?
10:57:45 <dminuoso> Sure you can.
10:57:51 <dminuoso> But I dont care for dependently typed things.
10:57:53 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
10:57:57 <dminuoso> In fact, I dont leverage the type system much in Haskell
10:58:26 <kuribas> dminuoso: how do you make a specification then?
10:58:37 <kuribas> it's strictly separate from the code?
10:58:47 <dminuoso> Mostly in tests
10:58:57 <dminuoso> Or completely separate, yes.
10:58:58 davros joins (~davros@host86-184-82-149.range86-184.btcentralplus.com)
10:59:32 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
10:59:56 <dminuoso> I'd rather have our team able to work on my code, than be the sole maintainer with grand delusions about my code being bug-free.
11:00:12 <dminuoso> It's just more productive this way :)
11:00:18 <kuribas> bug-free or "correctness" is an illusion.
11:00:26 <dminuoso> Indeed
11:00:59 <kuribas> Most of that time you get a vague spec, which can be interpreted in many ways.
11:02:20 <kuribas> more interesting is "consistent with itself and the rest of the system".
11:02:44 × mikoto-chan quits (~mikoto-ch@84.199.144.235) (Ping timeout: 250 seconds)
11:03:11 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
11:04:13 <kuribas> IMO one of the primary benefits of DT can be to express the API spec in the code, and show it's consistent with the implementation.
11:04:32 <kuribas> Like servant, but the spec can be just a value.
11:05:01 <kuribas> you could even calculate the spec from another spec :)
11:06:37 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
11:07:16 vglfr joins (~vglfr@88.155.70.5)
11:07:16 <kuribas> Or for exampe to prove that your API matches the database schema.
11:07:29 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
11:07:31 <kuribas> True you can do this in tests as well.
11:07:41 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
11:09:58 ekai-zendo[m] joins (~ekai-zend@2001:470:69fc:105::1:7756)
11:14:34 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:15:35 × haskellberryfinn quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds)
11:17:16 × dsrt^ quits (~dsrt@96-86-240-178-static.hfc.comcastbusiness.net) (Remote host closed the connection)
11:21:32 × jgeerds quits (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 240 seconds)
11:26:28 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
11:30:02 ekai-zendo[m] is now known as ekai[m]
11:30:07 × ph88^ quits (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
11:31:28 × tubogram4 quits (~tubogram@user/tubogram) (Quit: See ya later!)
11:34:02 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
11:35:49 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
11:41:07 timmot joins (~timmot@207.148.85.201)
11:42:03 jakalx parts (~jakalx@base.jakalx.net) ()
11:42:48 × Gurkenglas quits (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) (Read error: Connection reset by peer)
11:43:14 Gurkenglas joins (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de)
11:48:19 <dminuoso> Servant stretches it quite far, honestly. Perhaps OpenAPI with a static code generator is ultimately the most pragmatic thing.
11:48:38 <dminuoso> Especially if it could generate client/server stub code, similar to say CORBA IDL compilers
11:49:29 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
11:49:50 <dminuoso> Fighting for servant to keep everything inside the type system makes it difficult to extend it. To implement custom combinators you need to have advanced type-level skills and work with large portions of mostly undocumented code.
11:50:17 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
11:50:20 <dminuoso> And the diagnostics are quite poor as well - even generic servant suffers from various poor ergonomics.
11:50:23 <dminuoso> Not to mention the performance impact.
11:50:37 <dminuoso> We have a relatively small servant library, but compiling the servant glue code alone takes over 2 minutes here.
11:51:42 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
11:52:17 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
11:55:03 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds)
11:58:37 vysn joins (~vysn@user/vysn)
11:59:49 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
12:02:20 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
12:02:32 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
12:03:04 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 268 seconds)
12:03:49 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
12:06:37 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
12:06:57 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
12:08:50 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
12:12:04 jakalx joins (~jakalx@base.jakalx.net)
12:15:42 yauhsien joins (~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
12:16:47 on^ joins (~on@96-86-240-178-static.hfc.comcastbusiness.net)
12:19:20 geranim0 joins (~geranim0@d-132-204-221-88.res.umontreal.ca)
12:26:05 Guest52 joins (~Guest52@80-100-97-100.ip.xs4all.nl)
12:26:30 × max22- quits (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 268 seconds)
12:31:32 ec joins (~ec@gateway/tor-sasl/ec)
12:32:44 jgeerds joins (~jgeerds@55d4a547.access.ecotel.net)
12:34:39 × yauhsien quits (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Remote host closed the connection)
12:39:49 × HotblackDesiato_ quits (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Remote host closed the connection)
12:40:32 × Guest52 quits (~Guest52@80-100-97-100.ip.xs4all.nl) (Ping timeout: 240 seconds)
12:40:43 <dminuoso> tomsmeding: Hah I recall why I wanted it this way. So this is a domain label parser (which roughly just produces [String] for each label). I wanted to use: `(label `sepBy` chunk ".") <* chunk "."` as to neatly allow "." to be parsed.
12:41:33 <dminuoso> The elegant form would be to rather to pretend that absolute domains are relative domains too, with the final label being empty
12:41:37 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
12:42:03 <dminuoso> Which incidentally is the original intent in DNS
12:42:10 yauhsien joins (~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
12:42:21 ph88^ joins (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de)
12:43:45 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
12:44:24 __monty__ joins (~toonn@user/toonn)
12:46:37 × yauhsien quits (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
12:51:30 × kjak quits (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 250 seconds)
12:54:23 × alp quits (~alp@user/alp) (Remote host closed the connection)
12:54:42 alp joins (~alp@user/alp)
12:56:09 <tomsmeding> dminuoso: heh nice hack
12:56:17 <tomsmeding> which, as you say, is not actually really a hack
13:00:11 <dminuoso> Well it doesnt work with megaparsec anymore
13:00:42 <dminuoso> Im kind of curious how to parse an absolute domain name representation into labels, turning "." into the empty list of labels
13:01:10 HotblackDesiato joins (~HotblackD@gateway/tor-sasl/hotblackdesiato)
13:03:00 <dminuoso> Of course I can special case this with the monadic power, where I first try and parse for `chunk "." *> eof`, and if that fails I fallback to the other logic
13:03:21 <dminuoso> But I dislike having to waste those CPU cycles for an edge case nobody will ever use..
13:04:33 <tomsmeding> dminuoso: many alphaNum `sepBy1` char '.', then filter on empties?
13:04:42 <dminuoso> tomsmeding: That will fail.
13:04:47 <tomsmeding> (parsec language, not megaparsec)
13:04:53 <tomsmeding> counterexample?
13:05:08 <dminuoso> Oh.
13:05:10 <dminuoso> Mmm
13:05:17 <dminuoso> tomsmeding: Yeah, so here comes the problem
13:05:46 <dminuoso> tomsmeding: The label parser cannot be bootstrapped from `many`eable in my acse
13:06:02 <dminuoso> Well, strictly speaking I could I guess.
13:06:13 <tomsmeding> dminuoso: as long as it will never parse a dot, it's fine, right?
13:06:20 <tomsmeding> can wrap it in 'optional' maybe
13:07:28 <dminuoso> tomsmeding: So yeah, the ugly truth is domain name representations are not well defined, so strictly speaking I can admit whatever I want.
13:07:36 <dminuoso> even a dot in principle is admissable
13:07:43 <tomsmeding> that makes no sense
13:07:43 <dminuoso> the wire protocol allows for dots inside a domain label
13:08:09 <dminuoso> tomsmeding: what you read as `foo.bar.` is just a representation, and that representation is not standardized. equivalently, there's no such standardized input format.
13:08:10 <tomsmeding> how is someone going to provide a domain name component containing a dot?
13:08:17 <tomsmeding> right
13:08:21 <dminuoso> that's for you to decide. maybe escape characters?
13:08:25 <tomsmeding> :p
13:08:37 <tomsmeding> or punycode
13:08:45 <dminuoso> sure
13:09:08 <dminuoso> I really want to do this with alex/happy, but they dont work on arbitrary bytestrings.
13:09:10 <dminuoso> :(
13:09:35 <dminuoso> Perhaps I should just use them, and simply forbid bytesequences outside the ASCII planes.
13:09:44 <dminuoso> And then have the alex output turn the labels back into bytestrings
13:09:48 <dminuoso> Or *happy rather
13:10:41 <dminuoso> tomsmeding: So the problem with your `many` is that I cant allow arbitrary characters (for irrelevant reasons) unless I allow for escape cahracters
13:10:42 <tomsmeding> dminuoso: I'm still not sure how exactly your envisioned grammar is different from "label `endBy` char '.'"
13:11:00 <dminuoso> Uh hold on
13:11:06 <dminuoso> Never seen endBy
13:11:10 fendor_ joins (~fendor@77.119.174.56.wireless.dyn.drei.com)
13:11:23 <tomsmeding> just one of the convenience combinators
13:11:37 <tomsmeding> in parsec: endBy p sep = many (do{ x <- p; _ <- sep; return x })
13:13:27 <dminuoso> tomsmeding: Oh hah I was thinking about it all wrong.
13:13:36 × fendor quits (~fendor@77.119.167.8.wireless.dyn.drei.com) (Ping timeout: 250 seconds)
13:13:38 <dminuoso> absDomainLabelsP = DomainLabels <$> label `endBy` M.chunk "."
13:13:39 <dminuoso> relDomainLabelsP = DomainLabels <$> label `sepBy` M.chunk "."
13:13:41 <dminuoso> So simple..
13:14:09 <dminuoso> Guess I should use `char` rather than `chunk` as well
13:15:23 <tomsmeding> relOrAbsDomainLabelsP = DomainLabels <$> label `sepBy` M.char '.' <* optional (char '.')
13:15:48 <tomsmeding> can even case on the optional result to know which one it is :)
13:16:12 × xff0x quits (~xff0x@2001:1a81:53ec:e00:81a4:7fd8:2f5d:f55d) (Ping timeout: 250 seconds)
13:16:14 <dminuoso> For our use case we only ever care about absolute domains anyway
13:16:22 <dminuoso> The other one is just added for completeness. :)
13:17:17 xff0x joins (~xff0x@2001:1a81:53ec:e00:324f:b25a:5d11:7fc0)
13:18:32 × Major_Biscuit quits (~MajorBisc@c-001-019-027.client.tudelft.eduvpn.nl) (Ping timeout: 240 seconds)
13:19:48 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
13:24:07 gaff joins (~gaff@49.207.213.209)
13:24:28 × jgeerds quits (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 268 seconds)
13:24:28 × Clint quits (~Clint@user/clint) (Ping timeout: 268 seconds)
13:24:37 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds)
13:24:42 <dminuoso> tomsmeding: Mmm, the absDomainLabelsP still doesnt parse "."
13:24:53 <dminuoso> But I understand why
13:25:15 Major_Biscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net)
13:25:42 <gaff> does `read "0b11111111" :: Int` work if you set the "BinaryLiterals" extension? when i tried, it throws an exception in GHCi.
13:26:31 <tomsmeding> gaff: I think the BinaryLiterals extension just modifies the syntax that ghc accepts, it doesn't modify the semantics of any library functios
13:27:13 <tomsmeding> imagine, if one file in your project has the extension on, and another file has not, would 'read' return two different things in both files? What if you call a function from the other file in one file, which in turn calls read? Madness!
13:27:34 <dminuoso> tomsmeding: I have an evil cunning plan.
13:27:43 <dminuoso> I will simply prepend a null byte to the original string, and then fixup the grammar
13:27:56 <dminuoso> (well put it at the end I mean)
13:27:58 <tomsmeding> dminuoso: how does your 'label' parser even look if you're considering this
13:28:05 <gaff> tomsmeding: well, `read "0xFF00" :: Int` works ... so why not?
13:28:17 <dminuoso> tomsmeding: absDomainLabelsP = DomainLabels <$> label `endBy` M.char (c2w '.') <* M.char 0
13:28:20 <tomsmeding> dminuoso: also if you're putting it at the end anyway, what about replacing your detection of that null byte with 'eof'
13:28:32 <dminuoso> Sorry hold on
13:28:33 <tomsmeding> dminuoso: I meant 'label'
13:28:34 <dminuoso> No I meant:
13:28:43 <tomsmeding> gaff: because that has always worked :p
13:28:55 <dminuoso> tomsmeding: I dont want to use the monadic power
13:29:06 <tomsmeding> ah
13:29:06 <dminuoso> my honor forbids it
13:29:18 <tomsmeding> is there an actual practical reason you don't want to use it?
13:29:23 <dminuoso> Not at all
13:29:26 <tomsmeding> cool
13:29:56 <tomsmeding> still, if you allow choice, then you probably had that null-byte recogniser in an alternative there; just replace that with 'eof'?
13:29:57 <geekosaur> "Reading integers
13:29:57 <geekosaur> GHC’s implementation of the Read class for integral types accepts hexadecimal and octal literals (the code in the Haskell 98 report doesn’t)."
13:30:04 <dminuoso> If I had some formal education in grammar, I would probably just specify a grammar and then match the megaparsec to follow this
13:30:08 <geekosaur> nothing about binary literals
13:30:50 <gaff> geekosaur: i see ... so why have binary literals?
13:30:59 <merijn> gaff: Why not?
13:30:59 <tomsmeding> gaff: another way to look at this: 'read' doesn't parse haskell, it parses something that looks like a subset of haskell. By extension that means that if you add a language extensions that modifies ghc's understanding of "haskell", 'read' doesn't change.
13:31:01 <dminuoso> geekosaur: Arguably, if GHC modifies what GHC accepts syntactically, the generated Read instances should be altered as well. :p
13:31:03 <gaff> what's the extension for?
13:31:03 <geekosaur> dunno, I didn't propose them
13:31:09 <dminuoso> Of course that's completely unreasonable given the open-world assumption
13:31:14 <merijn> gaff: For writing binary numbers as literals?
13:31:14 <tomsmeding> % :set -XBinaryLiterals
13:31:14 <yahb> tomsmeding:
13:31:16 <tomsmeding> % 0b1010
13:31:17 <yahb> tomsmeding: 10
13:31:17 × xff0x quits (~xff0x@2001:1a81:53ec:e00:324f:b25a:5d11:7fc0) (Ping timeout: 240 seconds)
13:31:39 <geekosaur> anyone can propose an extension to ghc
13:31:52 <tomsmeding> dminuoso: see my argument about two modules having differing extension sets :p
13:31:58 <merijn> I mean, wanting to write specific bit patterns is pretty common in programming. Especially when interfacing with binary file formats, network protocols, etc. the ability to directly write bit patterns is kinda convenient
13:32:05 <geekosaur> it's more likely to be accepted if it includes an implementation
13:32:06 <gaff> dminuoso: i agree with you what you said ... i don't understand the other side of the argument
13:32:16 <dminuoso> tomsmeding: I think this is one of those cases where the extension isn't well suited for Haskell. There's clearly a strange and surprising interaction.
13:32:29 xff0x joins (~xff0x@2001:1a81:53ec:e00:6733:4fa5:6e13:2687)
13:32:30 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
13:32:58 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
13:33:07 <gaff> tomsmeding: by the way, your argument about extensions would all extensions
13:33:10 <tomsmeding> evidently it is indeed surprising to some, which makes it surprising overall. Though I personally don't find it surprising that a language syntax modification doesn't change the behaviour of a library function :)
13:33:13 <merijn> tbh, I think it's easier to just kill off Read
13:33:21 <dminuoso> Read and Show both should be gone.
13:33:26 <merijn> Read is just bad, besides moderate convenience benefit while writing
13:33:29 <merijn> Show is fine I think
13:33:34 <dminuoso> Show should use Text.
13:33:41 <merijn> Most bad show instances are a result of people wanting to use Read :p
13:33:46 <dminuoso> The amount of showT I use in my code base is absurd.
13:33:59 ac joins (~aloiscoch@2001:470:69fc:105::65)
13:34:02 <dminuoso> I use Show as poor mans pretty.
13:36:13 <gaff> merijn: so writing bit pattersn is important, but reading them is not?
13:36:44 <merijn> gaff: Dynamically modifying class instances (like Show) is an absolute nightmare idea. Ideally Haskell Prime (ahaha! Funny, I make it sound like that will ever happen) to include a bunch of the benign numeric literal extension into the report, making them standard, then updating Read to accept them
13:37:06 <merijn> gaff: It is. But if you're using Read you're already messing up, so I don't particularly care about Read supporting them.
13:37:25 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
13:37:26 <geekosaur> harder these days as modifying Read is libraries committee, not ghc committee, and libraries is much more conservative
13:37:30 <merijn> I would actually argue Read not supporing them is "Good (TM)", since it'll hopefull deter people from thinking Read is a remotely sane choice
13:37:46 frosky_ joins (~froskyarr@120.239.9.244)
13:37:57 <kuribas> dminuoso: exactly, servant is painful because you have a different language at type level.
13:38:10 <gaff> merijn: so instead of `Read`, what do you use?
13:38:10 <kuribas> dminuoso: with DT, you could just do all this at value level.
13:38:23 <merijn> gaff: (mega)parsec and attoparsec
13:38:28 <gaff> ah
13:38:34 <gaff> gee
13:38:38 <dminuoso> kuribas: I think this is an equally bad here for this use case.
13:38:47 <merijn> gaff: For "one of" numbers there's also the Numeric module in base
13:38:52 <dminuoso> This type of problem is better suited to a domain specific language and code generation tools.
13:38:54 <geekosaur> read uses a half-assed, slow, ambiguous (but then it tries to hide it) parser
13:39:05 <kuribas> dminuoso: well, DT is kind of code generation.
13:39:22 <tomsmeding> gaff: suppose I have one module A, that calls 'read "0b10". I have another module B that sets BinaryLiterals and also calls 'read "0b10"'. Furthermore, A defines a function 'foo' that itself calls 'read "0b10"', and B has a function 'bar' that calls A.foo . Should 'bar' succeed?
13:39:33 <merijn> gaff: Which has readers for bin, oct, decimal, hex, and even custom versions
13:39:39 <dminuoso> merijn: Im slowly thinking we should use less megaparsec and more alex/happy
13:39:53 <dminuoso> Im slowly experiencing the wonders of these ancient and almost forgotten tools.
13:40:00 <merijn> dminuoso: I don't think it's worth it for most human readable formats
13:40:12 × SwarmCollective quits (~joseph@2603-6011-bc02-b600-af23-4557-ff2b-bd76.res6.spectrum.com) (Remote host closed the connection)
13:40:12 × eL_Bart0 quits (eL_Bart0@dietunichtguten.org) (Read error: Connection reset by peer)
13:40:15 <merijn> dminuoso: alex/happy are *great* if you have a grammar that's set in stone
13:40:15 <dminuoso> Predictably high performance and acceptable diagnostics? Yes please.
13:40:17 × FroskyArr quits (~froskyarr@120.239.9.244) (Ping timeout: 240 seconds)
13:40:27 × pieguy128 quits (~pieguy128@bras-base-mtrlpq5031w-grc-52-65-93-194-105.dsl.bell.ca) (Ping timeout: 256 seconds)
13:40:33 <dminuoso> merijn: Maybe that's the problem, people not formally specifying grammars for what they want.
13:40:34 SwarmCollective joins (~joseph@2603-6011-bc02-b600-2151-3d00-3640-3cd8.res6.spectrum.com)
13:40:35 <merijn> Most time I write a parser in megaparsec, my grammar is *not* set in stone and kinda half-assed
13:40:40 <gaff> merijn: yeah, i know. but don't you think haskell should have a `Read`, a better one even if the current stuff has many things amiss?
13:41:11 <dminuoso> merijn: Like, have you tried parsing markdown? What is the original markdown syntax even? Who knows, even the reference implementation is bugged with respect to their own examples.
13:41:12 <merijn> gaff: The API of Read is just kinda bad for doing anything efficient. Read is *horribly* slow
13:41:18 <kuribas> dminuoso: code generation is messy.
13:41:20 <merijn> dminuoso: Markdown is just it's own hell
13:41:27 <gaff> ok
13:41:39 <merijn> dminuoso: I'm thinking more of "parsing output from my own programs"
13:41:47 <dminuoso> gaff: Not to mention that Read has absolutely no diagnostics for when it doesnt parse.
13:42:19 <gaff> dminuoso: i agree, but i am arguing for a "better" read.
13:42:19 <dminuoso> merijn: I tend to define interchange formats (say via JSON). So at least you have a kind of schema inside that.
13:42:36 <merijn> dminuoso: Half of the time I'm using megaparsec to parse some ad hoc format my own code outputs somewhere else. Usually simple enough that a "proper grammar" is more work than necessary, but *not* using parser combinators would make the input really annoying to deal with
13:43:55 pieguy128 joins (~pieguy128@bas1-montreal02-65-92-163-251.dsl.bell.ca)
13:44:49 <gaff> thanks everyone
13:44:56 × gaff quits (~gaff@49.207.213.209) ()
13:45:59 <merijn> In general I think the Numeric module is one of those base modules that is more obscure than it should be
13:46:05 eL_Bart0 joins (eL_Bart0@dietunichtguten.org)
13:46:32 <geekosaur> yes
13:46:39 <geekosaur> in several senses
13:48:20 <dminuoso> Python definitely has an advantage with respect to easing beginners into solving immediate problems by giving them simple tools to parse and and process data.
13:49:03 <dminuoso> Not that I prefer it, but from a beginners perspective I can see how Haskell might seem unwieldy when it's not even obvious and simple how to "take a file and process it" given just base.
13:50:09 <merijn> Sure.
13:50:30 <merijn> It's just one of those things where "what's easy for beginners" and "what is good long term" are not remotely the same
13:54:41 × deadmarshal quits (~deadmarsh@95.38.116.147) (Ping timeout: 268 seconds)
13:55:04 deadmarshal joins (~deadmarsh@95.38.112.231)
13:56:07 Guest52 joins (~Guest52@80-100-97-100.ip.xs4all.nl)
13:56:59 tubogram4 joins (~tubogram@user/tubogram)
13:57:37 <maerwald> dminuoso: even as a non-beginner, it's confusing
13:59:33 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
14:01:40 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
14:01:59 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
14:02:49 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
14:04:33 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds)
14:05:57 × tubogram4 quits (~tubogram@user/tubogram) (Quit: See ya later!)
14:07:32 × pieguy128 quits (~pieguy128@bas1-montreal02-65-92-163-251.dsl.bell.ca) (Ping timeout: 240 seconds)
14:08:01 tubogram4 joins (~tubogram@user/tubogram)
14:08:11 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
14:08:48 × tubogram4 quits (~tubogram@user/tubogram) (Client Quit)
14:12:48 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
14:13:12 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba)
14:13:29 tubogram4 joins (~tubogram@user/tubogram)
14:15:31 × tubogram4 quits (~tubogram@user/tubogram) (Client Quit)
14:15:51 max22- joins (~maxime@2a01cb0883359800c869e03b4284e26a.ipv6.abo.wanadoo.fr)
14:16:15 tubogram4 joins (~tubogram@user/tubogram)
14:16:32 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
14:17:17 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Ping timeout: 240 seconds)
14:17:18 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 250 seconds)
14:18:49 pieguy128 joins (~pieguy128@bas8-montreal02-65-93-195-202.dsl.bell.ca)
14:18:54 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
14:19:04 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
14:22:05 deadmarshal_ joins (~deadmarsh@95.38.116.86)
14:22:23 × deadmarshal quits (~deadmarsh@95.38.112.231) (Ping timeout: 256 seconds)
14:25:08 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
14:27:17 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
14:28:21 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
14:30:58 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
14:32:24 haskellberryfinn joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
14:32:41 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
14:32:41 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
14:32:41 wroathe joins (~wroathe@user/wroathe)
14:35:23 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds)
14:38:23 azimut joins (~azimut@gateway/tor-sasl/azimut)
14:38:50 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
14:41:57 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds)
14:43:18 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 250 seconds)
14:43:21 × on^ quits (~on@96-86-240-178-static.hfc.comcastbusiness.net) (Remote host closed the connection)
14:45:37 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 256 seconds)
14:46:24 <dminuoso> tomsmeding: https://gitlab.com/wobcom/haskell/dns-patterns/-/blob/master/lib/Network/DNS/Pattern.hs#L165-169
14:46:29 <dminuoso> I decided to special case it after all.
14:46:39 × shailangsa quits (~shailangs@host86-185-98-37.range86-185.btcentralplus.com) ()
14:46:45 <dminuoso> I feel like this is still cheating, Im looking for something grammatically pleasing
14:49:13 <tomsmeding> dminuoso: you can't get around branching on whether you have the root domain somehow, because you have to act differently depending on whether the input starts with a dot (root domain, nothing can come after) or not (non-root domain, must have a label then dot then etc.)
14:49:34 <tomsmeding> the branch doesn't need lookahead though, so it's all good :)
14:50:12 <dminuoso> tomsmeding: I can get around it if I employ my "append a nul byte" trick though.
14:50:30 <tomsmeding> can you?
14:51:07 × SummerSonw quits (~The_viole@203.77.49.232) (Read error: Connection reset by peer)
14:52:13 shriekingnoise joins (~shrieking@201.231.16.156)
14:52:19 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
14:54:37 × mvk quits (~mvk@2607:fea8:5cdc:bf00::a2bf) (Ping timeout: 240 seconds)
14:55:15 imalsogreg joins (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net)
14:57:53 <dminuoso> tomsmeding: Yes, given that now my labels permit nul bytes
14:58:05 <dminuoso> Or..
14:58:07 <dminuoso> mmm.
14:58:20 <tomsmeding> you'd need to _prepend_ a nul byte, right?
14:58:32 <tomsmeding> that would work
14:58:43 <tomsmeding> but I find that uglier than fixing the grammar, which is what you've done now
14:58:46 <tomsmeding> but subjective
14:58:46 <dminuoso> No it would not
14:58:51 <dminuoso> Because I have to get that nul byte out again
14:58:55 waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
14:59:03 <tomsmeding> though you could do that with an fmap
14:59:15 <dminuoso> an fmap1 really
14:59:24 <tomsmeding> fmap1?
14:59:30 <dminuoso> Sure, consider this input:
14:59:40 tomsmeding has a meeting now but will be back later and see your stuff
14:59:43 <dminuoso> "\NUL."
15:00:05 <dminuoso> If I prepend a \NUL, this ends up producing DomainLabels ["\NUL\NUL"]
15:00:08 <dminuoso> And similarly:
15:00:22 <dminuoso> "\NUL.\NUL. would produce DomainLabels ["\NUL\NUL", "\NUL"]
15:00:36 <dminuoso> I cant just fmap over the result
15:00:48 soxen joins (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
15:00:51 <dminuoso> I must only drop the first character on the first element
15:01:10 <dminuoso> hence `fmap1` (which just maps over the first element)
15:03:58 dyeplexer joins (~dyeplexer@user/dyeplexer)
15:05:02 <sshine> oh, like 'fmap f (First xs)'? https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Monoid.html#t:First
15:06:42 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
15:06:42 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
15:09:20 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3)
15:10:05 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
15:11:06 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Client Quit)
15:12:17 FroskyArr joins (~froskyarr@203.175.13.219)
15:12:59 bliminse_ is now known as bliminse
15:14:17 × frosky_ quits (~froskyarr@120.239.9.244) (Ping timeout: 240 seconds)
15:14:49 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
15:14:49 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
15:14:49 wroathe joins (~wroathe@user/wroathe)
15:15:27 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
15:15:59 <kuribas> merijn: there should be a language which is easy for beginners, but also with clear semantics.
15:16:14 <dminuoso> kuribas: golang is that.
15:16:20 <dminuoso> It's probably part of its success story.
15:16:44 <dminuoso> If only it had tools to write scalable software..
15:17:20 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Remote host closed the connection)
15:19:16 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds)
15:19:26 × akegalj quits (~akegalj@141-136-245-236.dsl.iskon.hr) (Quit: leaving)
15:19:48 Sgeo joins (~Sgeo@user/sgeo)
15:22:04 <merijn> kuribas: I'm not sure that's possible, tbh
15:30:24 gaff joins (~gaff@49.207.213.209)
15:31:27 <gaff> someone suggested a few minutes back that `Numeric` module has function to read binary literals, but i don't see it there.
15:32:26 <gaff> `readBin` not there in `Numeric`
15:32:33 Clint joins (~Clint@user/clint)
15:32:59 <merijn> https://hackage.haskell.org/package/base-4.16.0.0/docs/Numeric.html#v:readBin
15:33:06 <merijn> Are you looking at the right version?
15:34:27 <gaff> but it is not showing up on GHCi. i am using 8.10.4
15:34:47 <merijn> Ah, looks like it's fairly new
15:35:03 <merijn> You can use readInt to make your own easily enough, though
15:35:31 <gaff> merijn: it is fairly new
15:35:53 <gaff> my base is 4.14, the link you have posted, the base version is 4.16
15:35:56 <gaff> no wonder
15:36:13 × pooryorick quits (~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 240 seconds)
15:37:07 <gaff> merijn: thanks a bunch, anyway. nice to know it exists in the future :)
15:39:53 <geekosaur> why are you on 8.10.4 instead of 8.10.7? (although 8.10.7 still doesn't have readBin, it does have a number of bugfixes and Apple M1 support)
15:40:26 <merijn> geekosaur: Inertia? :p
15:40:37 × waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
15:40:48 <gaff> geekosaur: i am using an old macbook air laptop, so i am risking a newer version because of my OS.
15:41:13 <gaff> sorry, i am not risking a newer version because of my OS
15:41:43 <gaff> thanks for the information anyway.
15:41:45 <merijn> I mean, how old are we talking?
15:42:06 <gaff> gee, 9 years old
15:42:19 <gaff> nearly 10 years
15:42:26 <merijn> oof, ok, that's more extreme than me :p
15:42:39 <gaff> yeah, but it is going well
15:42:53 × alex[m] quits (~alexchete@2001:470:69fc:105::1:1001) (Quit: Client limit exceeded: 20000)
15:42:57 geekosaur remembers his old macbook air
15:43:08 <gaff> 8.10.4 GHC installation was a rollercoster .... so
15:43:11 alex[m] joins (~alexchete@2001:470:69fc:105::1:1001)
15:43:12 pooryorick joins (~pooryoric@87-119-174-173.tll.elisa.ee)
15:43:31 <geekosaur> battery eventually went kaput, held onto it for a while and then decided I was never going to use it again and ditched it
15:44:07 <gaff> geekosaur: my battery holding well, though. did change one 5 years back.
15:46:53 <gaff> thnaks
15:46:58 × gaff quits (~gaff@49.207.213.209) ()
15:48:15 × prrxddq[m] quits (~prrxddqma@2001:470:69fc:105::1:4f72) (Quit: Client limit exceeded: 20000)
15:48:46 × SridharRatnakuma quits (~sridmatri@2001:470:69fc:105::1c2) (Quit: Client limit exceeded: 20000)
15:50:05 slack1256 joins (~slack1256@191.125.227.221)
15:56:25 × haskellberryfinn quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Quit: WeeChat 3.3)
15:56:58 × soxen quits (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 250 seconds)
15:57:35 haskellberryfinn joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
16:00:06 × FroskyArr quits (~froskyarr@203.175.13.219) (Remote host closed the connection)
16:00:30 FroskyArr joins (~froskyarr@203.175.13.219)
16:09:24 Guest|81 joins (~Guest|81@49.37.170.120)
16:09:43 × Guest|81 quits (~Guest|81@49.37.170.120) (Client Quit)
16:12:43 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Quit: WeeChat 3.3)
16:13:00 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 250 seconds)
16:16:16 jpds joins (~jpds@gateway/tor-sasl/jpds)
16:18:38 × slack1256 quits (~slack1256@191.125.227.221) (Remote host closed the connection)
16:20:29 yauhsien_ joins (~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
16:24:24 × imalsogreg quits (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net) (Remote host closed the connection)
16:24:53 × yauhsien_ quits (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
16:25:22 imalsogreg joins (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net)
16:26:02 × qwedfg quits (~qwedfg@user/qwedfg) (Quit: ZNC - https://znc.in)
16:28:14 <tomsmeding> dminuoso: well you have to fmap (in the parser monad) fmap1 (on the list)
16:28:15 prrxddq[m] joins (~prrxddqma@2001:470:69fc:105::1:4f72)
16:28:27 SridharRatnakuma joins (~sridmatri@2001:470:69fc:105::1c2)
16:28:45 <tomsmeding> I don't see how _appending_ \NUL would help with making this parse with less choice
16:29:00 <tomsmeding> though maybe at this point I'm beating a dead horse :p
16:29:12 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:23a9:7efc:99f6:4072) (Quit: WeeChat 2.8)
16:29:28 × imalsogreg quits (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net) (Ping timeout: 250 seconds)
16:29:52 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
16:30:30 qwedfg joins (~qwedfg@user/qwedfg)
16:31:34 thomas_ joins (~thomas@2a02:a03f:666e:c500:92eb:d341:15bc:3f3d)
16:32:01 imalsogreg joins (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net)
16:34:45 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
16:38:25 ShalokShalom joins (~ShalokSha@194-118-168-233.hdsl.highway.telekom.at)
16:38:31 <ShalokShalom> hi there
16:38:55 <ShalokShalom> I read about a new version of Haskell, that has a selection of extensions build in
16:39:04 <ShalokShalom> What version is this?
16:39:57 econo joins (uid147250@user/econo)
16:40:31 <geekosaur> 9.2.1 has -XGHC2021 which turns on a selection of extensions. this extension is enabled by default
16:41:01 <ShalokShalom> thanks a lot
16:41:42 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba)
16:42:34 × ShalokShalom quits (~ShalokSha@194-118-168-233.hdsl.highway.telekom.at) (Client Quit)
16:43:28 × mbuf quits (~Shakthi@122.173.242.184) (Quit: Leaving)
16:45:02 yauhsien_ joins (~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
16:47:36 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
16:48:08 lbseale joins (~ep1ctetus@user/ep1ctetus)
16:48:18 Akiva joins (~Akiva@user/Akiva)
16:49:49 × o quits (~niko@libera/staff/niko) (Ping timeout: 633 seconds)
16:49:50 × yauhsien_ quits (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
16:51:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
16:52:00 myShoggoth joins (~myShoggot@97-120-67-120.ptld.qwest.net)
16:54:07 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
16:57:23 zmt00 joins (~zmt00@user/zmt00)
16:59:20 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection)
17:01:37 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
17:02:31 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba)
17:04:29 mvk joins (~mvk@2607:fea8:5cdc:bf00::a2bf)
17:05:06 <janus> is 9.0.2 more reliable than 9.2.1?
17:05:19 <maerwald> probably
17:07:05 <geekosaur> certainly more reliable on apple m1, because of late severe bugs found in the native codegen
17:07:17 × lionhairdino quits (~jacoo@121.131.39.82) (Ping timeout: 240 seconds)
17:07:39 × FroskyArr quits (~froskyarr@203.175.13.219) (Remote host closed the connection)
17:07:55 zebrag joins (~chris@user/zebrag)
17:08:04 FroskyArr joins (~froskyarr@203.175.13.219)
17:11:46 <c_wraith> It probably still has a lot of the 9.0 new-feature bugs (as opposed to regressions) that 9.2 fixed, though.
17:12:14 <ephemient> would ghc-9.2.1 with -fllvm be better than 9.0.2 then? (I don't have an M1, just curious)
17:12:16 <c_wraith> If you're not looking for bleeding edge stuff, it's definitely the right choice.
17:13:01 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
17:13:30 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:14:38 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
17:14:45 <geekosaur> -fllvm is not generally recommended for any platform but apple m1s. the codegen bugs in 9.2.1 only affect m1s
17:17:43 <janus> c_wraith: which is definitely the right choice? you seem affirmative but that is inconsistent with ephemient's question
17:19:34 <EvanR> to quickly reload a haskell "file", module, that has changed and say use the new version of some top level data value there, would mueval work?
17:19:41 <EvanR> some kind of eval solution
17:19:50 <geekosaur> 9.0.2 is most recently released and fixes the bugs in 9.0.1. 9.2.1 has several bugs but all of them are in new features in the 9.2 series, so unloess you need those features I'd stick with 9.0.2 or even 8.10.7
17:20:18 <geekosaur> (lots of people have not upgraded from 8.10.7 yet)
17:21:33 <sclv> with m1 its sort of a bad story all round in my experience. i couldn't get the llvm stuff working right, but also afaik its the only option.
17:21:34 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
17:22:27 <sclv> that said, i'm using an m1 and 9.2.1 without llvm because i'm developing and not deploying, so i can live with buggy codegen for a smooth dev experience at the moment :-P
17:22:56 × imalsogreg quits (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net) (Remote host closed the connection)
17:23:03 <c_wraith> janus: I meant 9.0.2 is right unless you need bleeding-edge features that work better (or only exist) in 9.2
17:23:59 × ph88^ quits (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Quit: Leaving)
17:24:31 <janus> sclv: do you expect these issues to be resolved by 9.2.2?
17:24:41 ec joins (~ec@gateway/tor-sasl/ec)
17:25:20 emf joins (~emf@2601:602:9400:8f0:435:b386:5ad4:6eb2)
17:25:33 <geekosaur> that's the plan. although they intended to release 9.2.2 by the end of the month, and that's fast approaching :(
17:26:21 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
17:27:07 <c_wraith> hackage has finally mostly caught up with 9.2
17:27:19 <janus> Olkiluoto 3 is also supposed to be grid-connected at the end of this month :O bad omen o_O
17:27:27 <geekosaur> stackage hasn't though
17:27:40 <geekosaur> lts is still 8.10.7, nightly 9.0.2
17:28:14 <janus> gonna be exciting to see when the first ghc9 lts will come, i don't really understand the decision process
17:28:42 × fef quits (~thedawn@user/thedawn) (Ping timeout: 276 seconds)
17:28:46 <c_wraith> It's almost certain there won't be a 9.x LTS until at least 9.2.2
17:29:16 <janus> oh, why? nightly has 3k packages, seems all right
17:30:09 <c_wraith> wanting to wait for features to stabilize more than in 9.0, and codegen to stabilize more than in 9.2.1
17:31:04 <janus> seems super subjetive, i don't understand how this is even measured
17:31:30 <janus> i must be blessed since i am not having problems on 9.0
17:31:39 <geekosaur> is there even an objective measure relevant to stackage?
17:32:32 × thomas_ quits (~thomas@2a02:a03f:666e:c500:92eb:d341:15bc:3f3d) (Quit: Leaving)
17:32:35 <EvanR> ah mueval seems to be totally sandboxed... is there no way to get at the value that the string represents for the host's purposes
17:32:43 <geekosaur> also one relevant issue for 9.x is there is no hls support for either 9.0.2 or 9.2.1 yet, and they're having trouble with that support if I understood discussion in #ghc yesterday correctly
17:32:49 leibniz joins (~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net)
17:33:24 <geekosaur> EvanR, even ghc-api is boxed for that purpose
17:33:51 <geekosaur> there are ways to force reloading but they're not easy. most of the easy mechanisms create a completely independent "session"
17:33:54 <janus> when lts-18 was released, amazing m1 support and hls support was not a requirement. i don't think it is totally logical that it now would be
17:34:22 <leibniz> how do i uninstall haskell
17:34:23 <leibniz> ?
17:34:44 <janus> aaargh is it you, fog?
17:34:56 <geekosaur> if you installed it via your package manager, use your package manager. if you installed via ghcup, use ghcup
17:35:04 <EvanR> ghc-api...
17:35:27 <maerwald> leibniz: windows?
17:35:47 <leibniz> maerwald: yup
17:35:54 <maerwald> leibniz: I have a video for you lol
17:36:08 <maerwald> https://www.youtube.com/watch?v=bB4fmQiUYPw&t=152s
17:36:41 <leibniz> its titled "install" but i want "unistall" it has this also?
17:36:45 <maerwald> yes
17:36:53 <leibniz> ok thanks
17:37:23 <leibniz> janus: is it important?
17:37:27 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection)
17:37:56 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
17:38:25 <janus> yes, because a lot of people have already lost confidence in fog, and they deserve to know that they are now spending their time with the same person (with a new name)
17:39:13 <leibniz> ah, right, it *is* important
17:39:29 <leibniz> so its a lifetime deplatforming?
17:39:35 <leibniz> and an associated dox
17:39:37 <leibniz> !?
17:39:45 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
17:39:48 <leibniz> and this is community ethos!?
17:40:53 <EvanR> so ghc API is how mueval, plugins library, all these hot code live code thingies work?
17:41:08 <leibniz> are you trying to encourage a form of communication, whereby even if i *associate* with my past code, that other comunity members will start a "pile on" (actually now an *illigal* form of cyberbullying)
17:41:23 little_mac joins (~little_ma@2601:410:4300:3ce0:4001:9094:16f1:84ab)
17:41:50 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
17:41:53 <c_wraith> janus: well, I've got a sample bit of code that works really nicely on ghc 9.2 but gives "sorry, we didn't implement that yet" errors on GHC 9.0.2 :P
17:42:11 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:42:19 <leibniz> because if your trying to make that part of the haskell communities standard response to *people*, i would strongly discourage that
17:43:04 <leibniz> there have been numerous instances of people accusing each other of being bots, etc.
17:43:11 <leibniz> haskell has no place for this behaviour
17:43:11 vicfred joins (~vicfred@user/vicfred)
17:43:19 <maerwald> leibniz: did you manage to uninstall?
17:43:53 <leibniz> i was slightly perturbed, will try to watch the video again. apologies
17:46:10 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
17:46:25 <leibniz> maerwald: its not clear that if the previous install was not via ghcup, that this install script would work. do you know if thats the case?
17:46:57 <maerwald> leibniz: do you have the uninstall script?
17:47:40 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
17:48:59 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
17:49:38 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Quit: WeeChat 3.3)
17:50:25 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
17:50:37 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:51:35 × SwarmCollective quits (~joseph@2603-6011-bc02-b600-2151-3d00-3640-3cd8.res6.spectrum.com) (Remote host closed the connection)
17:51:58 SwarmCollective joins (~joseph@2603-6011-bc02-b600-b30f-c0b6-681c-4c69.res6.spectrum.com)
17:54:48 <EvanR> System.Eval.Haskell> xy <- eval @((),Char,Bool) "((), 'c', True)" []
17:54:59 <EvanR> <command line>: cannot satisfy -package plugins
17:55:01 <EvanR> so close xD
17:55:10 × thevishy quits (~Nishant@2405:201:f005:c007:39ad:8b3b:de67:f2a2) (Quit: Leaving)
17:56:29 slowButPresent joins (~slowButPr@user/slowbutpresent)
17:57:32 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
17:58:32 zebrag joins (~chris@user/zebrag)
17:58:39 <leibniz> maerwald: its busy installing some ancient version of ghc and complaining about not being on the path
17:58:54 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
17:58:56 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
17:59:58 × Jing quits (~hedgehog@240e:390:7c53:a7e1:491:83dc:6241:13db) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:01:26 <[exa]> how much ancient btw?
18:01:34 <leibniz> 8.10
18:01:46 <leibniz> i had 9.2 before
18:01:48 <[exa]> that's not that bad
18:02:03 <EvanR> https://i.imgur.com/urwQYaR.png
18:02:07 <leibniz> i think there is a breaking change though, i was using the new records dot syntax
18:02:20 <EvanR> I'm on 8.10.7
18:02:25 × chele quits (~chele@user/chele) (Remote host closed the connection)
18:02:35 <EvanR> I don't hate it
18:02:36 <leibniz> speaking of new features, has anyone had a chance to experiment with linear types much yet?
18:02:37 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 240 seconds)
18:03:46 <maerwald> leibniz: I don't understand. I thought you want to uninstall
18:03:48 <leibniz> hmm, the uninstall script didnt unistall the old version
18:03:49 <[exa]> hm the OverloadedRecordDot might be there since 9.2, yes
18:03:50 <maerwald> now you're installing?
18:04:16 <leibniz> thats how you get the uninstall script according to the video
18:04:21 <maerwald> lol
18:04:30 <leibniz> i ran the script, and it just removed the ghcup version
18:04:32 <leibniz> not much good
18:04:39 <maerwald> xD
18:04:45 <[exa]> I'd delete it manually tbh
18:04:53 <leibniz> seems that way
18:05:10 <[exa]> on windows that's the safest way anyway
18:05:12 <leibniz> im just not sure how it points to the appdata local repo or wherever it puts all the packages
18:05:18 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
18:05:22 <EvanR> I see plugins is old enough that it doesn't understand how cabal works anymore
18:05:32 <leibniz> like which cabal and which ghc it uses has always been a total mystery
18:06:09 <leibniz> wasnt there some kind of sandbox thing?
18:06:25 <leibniz> i dont want to have to resort to stack for everything
18:06:43 <EvanR> I still don't have stack
18:06:47 <EvanR> for anything
18:06:57 <leibniz> but cabal keeps breaking
18:07:00 <EvanR> ?
18:07:05 <EvanR> not for me
18:07:29 <leibniz> probably you dont accidently do terrible things like unregistering base
18:07:38 <sclv> don't worry about uninstalling.
18:07:44 <sclv> just install a new fresh clean version, full stop
18:07:47 ec joins (~ec@gateway/tor-sasl/ec)
18:07:53 <sclv> and make sure your path points to it, done
18:09:39 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
18:09:43 <leibniz> ahh, ok, now i see some environemtal variables like CABAL_DIR and appdata\cabal\roaming\bin on path
18:10:11 <leibniz> i guess i could just go to each of these locations and delete everything
18:10:29 <EvanR> I don't need to unregister base since I only use things in cabal isolation
18:10:30 <leibniz> i wouldnt want anything it could end up somehow splicing into a newer build
18:10:57 <leibniz> EvanR even v2 commands nolonger work, everything is totally broken. idk how
18:11:12 <c_wraith> probably because of a belief in uninstalling things
18:11:28 <leibniz> this is what i was thinking. that i would have to reinstall windows
18:11:32 <EvanR> actually, haskell was the only thing I really had working on windows before I got on this linux lifeboat a few months back
18:11:44 <EvanR> uninstall windows xD
18:12:02 <leibniz> EvanR: same. haskell forces me to reinstall windows so regularly that no other programs survive
18:12:04 × coot quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot)
18:12:23 <leibniz> good language!
18:12:38 <EvanR> why would haskell force you to reinstall windows, I dare ask
18:12:49 <leibniz> c_wraith 18:11:13
18:12:49 <leibniz> probably because of a belief in uninstalling things
18:12:54 <leibniz> this kind of logic^
18:13:01 <monochrom> For the record, other windows users don't feel forced to reinstall windows for haskell.
18:13:13 <leibniz> i cant safely ensure i dodnt delete everything that could cause something to go wrong
18:13:30 <leibniz> so its like, one wrong cabal command from total OS disruption
18:13:36 <EvanR> um
18:13:49 <leibniz> monochrom: probably they dont refuse to use v2 because they are unable to read
18:14:16 <leibniz> if there was a "clean reinstall" thing... but i guess thats what stack is for
18:14:25 <leibniz> but whenever i mention stack people are like "pah"
18:15:12 <leibniz> basically, i think probably if i really carfully see anything haskell related on path, and delete it.. but by that time its easier just to reinstall windows
18:17:03 <leibniz> i guess the problem is the ghc team do things like ghcup so they can ensure the install can be reversed. but the chocolatey toolchain is advised via the haskell platform - it should be uninstallable
18:17:04 × MatrixTravelerbo quits (~voyagert2@2001:470:69fc:105::22) (K-Lined)
18:17:17 <leibniz> like, its not as if it were obtained in a totally untoward way
18:17:23 <maerwald> leibniz: chocolatey has a uninstall method
18:17:27 <sclv> https://docs.chocolatey.org/en-us/choco/commands/uninstall
18:17:28 <leibniz> aha!!
18:17:30 <leibniz> nice
18:17:39 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
18:18:20 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
18:19:42 <maerwald> it's a little annoying, because there's a uninstall order to follow
18:20:26 <leibniz> hmm, google nolonger sends me to the choco install section when i search for haskell platform
18:20:31 <leibniz> now i find ghcup
18:20:40 <sm> I don't say pah leibniz . stack has always been great at windows support
18:20:54 <leibniz> +1
18:21:25 <leibniz> well, if they are going to advise users go via ghcup from now on, then i shouldnt be using chocolatey anymore i guess
18:21:46 <leibniz> so if i just reinstall windows and use ghcup from now on at least if i break anything i can reinstall everything easily
18:21:47 <maerwald> not sure stack has a uninstaller though on windows?
18:21:52 <leibniz> stupid v1 conflicts
18:22:14 <leibniz> i cant find how to unsintall via chocolatey
18:22:32 <leibniz> neither choco unisntall haskell, or choco unisntall haskell-platform work
18:22:47 <maerwald> try 'choco uninstall cabal' first
18:23:06 <leibniz> yeah that works
18:23:15 <leibniz> and then ghc?
18:23:19 <maerwald> yeah
18:23:24 <maerwald> that's what I said with uninstall order
18:23:31 <leibniz> actually, maybe i dont need to uninstall ghc
18:23:50 <maerwald> well, good luck having multiple tools install ghc
18:23:58 <leibniz> Unable to uninstall 'cabal 3.6.2.0' because 'ghc 9.2.1, haskell-dev 0.0.1' depend on it
18:24:06 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
18:24:08 <maerwald> yeah, uninstall ghc first
18:24:10 <maerwald> :D
18:24:38 <maerwald> chocolatey is really not great at usability
18:24:46 gehmehgeh joins (~user@user/gehmehgeh)
18:24:58 <leibniz> haskell-dev first, then ghc, then cabal, seems to work
18:25:08 <leibniz> (uninstall order)
18:25:41 <EvanR> once I used ghcup on windows, everything worked much better. Now I'm using ghcup on ubuntu
18:25:57 <EvanR> I also use it on osx
18:26:01 <EvanR> full house
18:26:04 <leibniz> so now that i have managed to unistall via chocolatey, should i reinstall there too?
18:26:15 <leibniz> seems to get the more up to dat ghc version
18:27:22 <leibniz> EvanR: ok fine, if thats the way to go ill just do that
18:27:30 <leibniz> how to make it get the 9.2.2 though?
18:27:42 <EvanR> the UI lets you select ghc version
18:27:44 <maerwald> 9.2.2?
18:28:02 <leibniz> erp, 9.2.1
18:28:07 <maerwald> EvanR: there's no TUI in windows :(
18:28:24 <EvanR> ah, however it lets you select
18:28:29 <maerwald> leibniz: after installation, open a powershell user session and type 'ghcup install ghc latest'
18:29:30 × Ram-Z quits (~Ram-Z@li1814-254.members.linode.com) (Quit: ZNC - http://znc.in)
18:29:36 <leibniz> the installation get a ghc though, and it takes ages
18:29:43 <leibniz> cant i get ghcup without?
18:29:45 ProfSimm joins (~ProfSimm@87.227.196.109)
18:30:00 <maerwald> yeah
18:30:01 <leibniz> https://www.haskell.org/ghcup/
18:30:08 <maerwald> you can
18:30:08 <leibniz> im pasting that into powershell
18:30:49 <leibniz> hmm, but i ran the unistaller and it unistalled everything
18:31:03 <leibniz> now i dont have ghcup andymore, and that command installed a ghc last time i ran it
18:31:10 <leibniz> so how can i?
18:31:10 <maerwald> wait a second
18:31:30 imalsogreg joins (~imalsogre@2601:147:300:f930::ee17)
18:31:47 Ram-Z joins (Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df)
18:32:03 <maerwald> Set-ExecutionPolicy Bypass -Scope Process -Force;[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;Invoke-Command -ScriptBlock ([ScriptBlock]::Create((Invoke-WebRequest https://www.haskell.org/ghcup/sh/bootstrap-haskell.ps1 -UseBasicParsing))) -ArgumentList $true, $true
18:32:05 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 250 seconds)
18:32:18 <maerwald> note the additional ", $true" at the end
18:32:24 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 276 seconds)
18:32:40 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
18:32:56 <leibniz> what does that do?
18:33:14 <maerwald> that will make it just install ghcup and nothing else
18:33:20 <maerwald> so you decide after installation what to install
18:33:30 <maerwald> see https://www.haskell.org/ghcup/guide/#basic-usage
18:33:50 <leibniz> this is some dark art
18:33:56 <leibniz> this extra true flag
18:34:03 <leibniz> totally obscure
18:34:05 <maerwald> windows powershell makes it extra hard
18:34:16 gehmehgeh joins (~user@user/gehmehgeh)
18:34:18 <maerwald> there's no other sane way to do this in a single command
18:34:27 × grabb0id[m] quits (~alangmatr@2001:470:69fc:105::b489) (Quit: Client limit exceeded: 20000)
18:34:32 <leibniz> choco install ghcup would be good!
18:34:47 grabb0id[m] joins (~alangmatr@2001:470:69fc:105::b489)
18:34:54 Tuplanolla joins (~Tuplanoll@91-159-68-166.elisa-laajakaista.fi)
18:34:58 <geekosaur> seems a bit weird to me, using an installer to install an installer
18:35:44 <leibniz> ah yeah i guess, to get chocolatey its;
18:35:46 <leibniz> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
18:35:50 <EvanR> if you start with neither, if you could conceptually run them on each other to form a yinyang of hypothetical GHCs
18:35:54 <leibniz> same gibberish
18:35:59 <maerwald> yeah
18:36:17 <leibniz> to get python i type pythin in the microsoft store
18:36:23 <leibniz> python*
18:36:35 <leibniz> its gets pip and everything which you used to have to do seperately in windows
18:36:44 <leibniz> they seem to have used the store to their advantage
18:37:00 <maerwald> well, how do you get stuff into the windows store?
18:37:02 <EvanR> you didn't want to get ghcup and ghc at the same time, you wanted to do it separately
18:37:28 <leibniz> maerwald: idk, cross compile it to android, put it on the play store and then migrate it!?!?
18:37:39 <leibniz> might be an easier way...
18:37:44 <geekosaur> I'm glad I'm not the only one who makes that typo ("pythin")
18:37:51 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba)
18:38:13 <maerwald> android?
18:38:15 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
18:38:22 <maerwald> ok, I'll pass
18:38:34 <leibniz> EvanR: i guess whatever .msi installer the store runs behind the scenes could basically just get ghcup and then use it to get ghc and cabal and stack
18:38:42 jgeerds joins (~jgeerds@55d4a547.access.ecotel.net)
18:38:50 <EvanR> pythin, son of python, son of pythong, son of cnut
18:38:52 <leibniz> maerwald: i mean, it would be cool to know how to do that
18:38:53 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
18:39:19 <leibniz> for the monitization
18:39:41 <leibniz> probably if i had been able to publish to the play store i would have long ago escaped this compiler hell
18:39:44 <polyphem> maybe reinstall of windows store helps ...
18:39:49 <leibniz> lol
18:40:19 <EvanR> I don't lose sleep over ghc not having a .msi install experience
18:40:29 neceve joins (~quassel@2.26.93.228)
18:40:48 Ocelot joins (~ocelot@50-78-208-189-static.hfc.comcastbusiness.net)
18:40:50 <maerwald> to publish on windows store you first need to obtain a developer certificate and pay for it
18:40:50 <leibniz> it used to though, the regression seems ominous, as if they are actually *losing* personel
18:41:17 <leibniz> maerwald: probably they have a python foundation or something
18:41:25 <maerwald> and then you pay for a developer account at MS store too
18:41:28 <EvanR> I guess I'm lucky not having most of my time occupied with installing and uninstalling things
18:41:46 <leibniz> wierd how MS research cant even afford a MS publishers account...
18:41:55 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection)
18:42:01 <leibniz> youd think they would fund themselves or something
18:42:04 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba)
18:42:42 <leibniz> EvanR: yes, that
18:43:23 <leibniz> i can remember spending hours with msys, mingw and cygwin, trying to build unix things before they finally made wsl
18:43:34 <EvanR> on the uninstall front, I've had success just deleting a directory and if I had added env vars at some point, undoing that
18:43:54 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
18:44:18 <maerwald> given that HF is so excited about windows... maybe they should start creating a dev accounts on MS store and obtain signing certificates
18:44:31 nvmd joins (~nvmd@user/nvmd)
18:44:50 <maerwald> and talk to python foundation on how they managed to do that
18:44:54 <EvanR> in before visual studio includes haskell as one of the new project options? xD
18:45:23 <EvanR> haskellution
18:45:24 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
18:45:26 <polyphem> leibnitz: you said your windows is "clean" apart from ghc , and you have lots of experience with unix-tools , why dont install linux and use ghcup in there, would make abetter dev experience ?
18:45:33 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
18:45:58 <leibniz> i have an install on wsl too
18:46:04 <leibniz> there is slight latency
18:46:10 <leibniz> i prefer to use the native version
18:46:16 <leibniz> also it has issues with the path
18:46:26 <leibniz> backslashes in particular
18:46:53 <polyphem> switch to a real linux ... i mean
18:47:02 <leibniz> i had a script that pplaced things onto the /mnt/c/usr/home directory, so it could use a nix install which required wsl
18:47:12 <leibniz> but it would be way better if nix just worked on windows
18:47:26 <leibniz> polyphem: i think your missing the point
18:47:44 <leibniz> it needs to work for users, so they dont have to abandon their chosen OS!
18:47:46 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
18:47:46 <polyphem> leibniz: i think you are missing the point
18:47:56 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
18:48:07 <leibniz> sure
18:48:33 <polyphem> seems like your chosen Os gives you headache ...
18:48:38 × matijja quits (~matijja@193.77.181.201) (Quit: ZNC 1.8.1 - https://znc.in)
18:49:18 <leibniz> listen, at the point where the community of a language starts accusing the worlds most common opperating system of being the problem in their toolchain, i think that is the point where that language begins to seem stupid to the rest of the world. this is not ok.
18:49:30 <yushyin> polyphem: but don't force linux on anyone ...
18:49:38 × ubert1 quits (~Thunderbi@p200300ecdf09940ed781da24ea780c96.dip0.t-ipconnect.de) (Remote host closed the connection)
18:49:49 <leibniz> haskell on windows has never been bad
18:49:58 <sm> leibniz, you're right. It does seem like a thing the HF could and probably will invest in
18:50:01 <leibniz> unix libs on windows are another issue entierly!
18:50:13 <geekosaur> polyphem, to be fair ghc's windows story is kinda atrocious. mingw is a hack to try to pretend windows is a unixlike
18:50:28 matijja joins (~matijja@193.77.181.201)
18:50:35 <leibniz> but now i can just use wsl for things like cblas, so its fine
18:50:42 <leibniz> windows, again, to the rescue
18:50:59 × Major_Biscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 256 seconds)
18:51:01 <geekosaur> (iirc the haskell foundation wants to hire someone to improve things there)
18:51:02 <leibniz> "oh just use bare metal linux" - really though, why?
18:51:23 × quintasan quits (~quassel@quintasan.pl) (Quit: quintasan)
18:51:36 <leibniz> wsl is fine, only sligt latency, and just for things like nix pushes to amazon servers, where the slight latency is no issue
18:51:40 <yushyin> wsl(2) is a misnomer, it's not a subsystem anymore
18:51:43 <geekosaur> I use bare metal linux because I've been using unixes since 1981. it's still a lousy experience for most people though
18:51:53 <polyphem> i heard that leibniz's interest involve haskell and unix-tools and i think he had less headache if he would use a real linux , especially since he stated that his current windos is "clean2 ...
18:52:02 <leibniz> maybe for blas opperations its not so great though, i dont want to have to train nets through an OS latency
18:52:14 <leibniz> hmm, maybe a bare metal linux wouldnt actually be a bad idea
18:53:07 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
18:53:07 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
18:53:07 wroathe joins (~wroathe@user/wroathe)
18:53:42 <leibniz> polyphem: well, since the choco tools are actually capable of an unistall, and now i have ghcup, maybe i wont need to keep reinstalling windows, and can actually have other apps!
18:53:56 <geekosaur> I man, I ran Mac for years so I could get the power of unix with a UX that didn't make me want to kill myself
18:54:12 <geekosaur> *I mean
18:54:13 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
18:54:46 <sm> I really don't think you ever need to be reinstalling windows for haskell. Just learn a little more about where things are
18:55:02 × Guest52 quits (~Guest52@80-100-97-100.ip.xs4all.nl) (Ping timeout: 240 seconds)
18:55:05 <leibniz> its wierd, the girl upstairs started laughing just as you mentioned suicidal ideations resulting from being an essential dev in fundamentally important technology
18:55:20 <leibniz> now she is banging at the floor angrily, id better go
18:55:51 <Ocelot> Godspeed.
18:56:57 × leibniz quits (~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed)
18:57:49 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
18:57:58 <EvanR> alright, so ghc API is a rabbit hole but potentially powerful
18:58:18 <EvanR> I guess that's potentially redundant
18:59:22 × nunggu quits (~q@user/nunggu) (Remote host closed the connection)
18:59:29 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
18:59:52 nunggu joins (~q@user/nunggu)
18:59:55 <monochrom> No, there are many powerless rabbit holes :)
19:00:13 <monochrom> And many powerful non-holes.
19:00:46 <monochrom> A powerful drill is a powerful co-hole, for example >:)
19:01:45 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
19:01:55 lispy joins (~lispy4@84.69.59.93)
19:01:58 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
19:02:27 <EvanR> >There is a similar problem for plugins. If a module uses a plugin then depending on the ABI of a plugin is usually not enough. Modules defining plugins expose one identifier plugin :: Plugin and so the ABI does not often change.
19:02:59 <maerwald[m]> nix on windows? Like... the worst of both worlds?
19:03:01 <EvanR> is this talking about dynamically loaded modules, or compiler plugins
19:03:16 <geekosaur> that sounds like compiler plugin abi
19:03:36 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
19:03:44 <EvanR> oof
19:03:47 quintasan joins (~quassel@quintasan.pl)
19:03:48 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection)
19:04:03 mixfix41 joins (~homefame@user/mixfix41)
19:04:22 <EvanR> come on haskell pretend to be a dynamic language
19:04:43 <monochrom> @quote monochrom hugs
19:04:43 <lambdabot> No quotes match. My mind is going. I can feel it.
19:04:48 <monochrom> ugh
19:04:49 <geekosaur> if you want module plugins you probably want https://hackage.haskell.org/package/plugins
19:05:01 <EvanR> I've been messing with that for the last few hours
19:05:02 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
19:05:07 <geekosaur> oh
19:05:12 <lispy> html is the world's most popular dynamic programming language, consider learning it
19:05:12 × nvmd quits (~nvmd@user/nvmd) (Quit: Later, nerds.)
19:05:36 <EvanR> currently fails to mediate with ghc behind the scenes with a command line error like "unable to satisfy -package plugins"
19:06:00 <EvanR> on github, the maintainer says "I don't know how this library works, I just accept pull requests and update hackage"
19:06:06 <geekosaur> mm, are you using stack or cabal v2? I think that package expects to be globally installed
19:06:12 <monochrom> @quote monochrom runghc
19:06:12 <lambdabot> monochrom says: just add #! /usr/bin/runghc to your haskell file. then type errors occur at runtime only.
19:06:14 <EvanR> really
19:06:17 <monochrom> That. :)
19:06:42 <EvanR> globally installed... alright
19:06:44 ec joins (~ec@gateway/tor-sasl/ec)
19:06:50 EvanR tightens belt
19:06:58 <geekosaur> cabal install --lib
19:07:06 <monochrom> Yeah plugin was in the era of v1. v2 didn't exist.
19:07:16 <monochrom> plugins
19:07:33 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
19:07:57 × max22- quits (~maxime@2a01cb0883359800c869e03b4284e26a.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
19:09:10 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
19:09:35 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
19:09:54 <monochrom> Ironically v2 solves "depending on the ABI of a plugin is usually not enough". v2 says you depend on complete build context.
19:09:57 × ralu quits (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 240 seconds)
19:10:52 × abrar_ quits (~abrar@static-108-2-152-54.phlapa.fios.verizon.net) (Quit: WeeChat 3.1)
19:10:55 <EvanR> so... remove plugins from the project build-depends
19:10:57 × merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
19:11:04 <monochrom> Then again v2 redefines "ABI" to mean complete build context :)
19:11:08 <EvanR> install --lib plugins globally
19:11:12 abrar joins (~abrar@static-108-2-152-54.phlapa.fios.verizon.net)
19:12:02 <EvanR> now the program depends on a combination of sandboxed packages and global packages
19:12:04 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
19:12:31 × deadmarshal_ quits (~deadmarsh@95.38.116.86) (Ping timeout: 256 seconds)
19:12:32 <geekosaur> yes. I don't think there's a good fix or workaround for that
19:12:34 <EvanR> also, leaving the dir and doing cabal install --lib plugins doesn't seem to do anything
19:12:49 <EvanR> I guess it's already installed
19:13:41 <EvanR> did I already say this, if plugins is unmaintained, how does it even still work with newer ghc
19:14:08 <EvanR> confirm... it worked
19:14:15 × nunggu quits (~q@user/nunggu) (Remote host closed the connection)
19:14:17 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
19:14:34 <geekosaur> someone submitted a pull request for it
19:14:37 <monochrom> In this case, since there is no need to rebuild, "cabal install --lib" does not have to waste time, it just has to update your environment file. (You can see it is changed.)
19:15:19 <monochrom> I guess the GHC API has not changed that much.
19:16:16 <geekosaur> I would not be surprised to find it doesn't work with 9.0.2 or 9.2.1, but 8.10.7 is proibably fine. (ghc-api has been changing a lot especially in 9.2.1, actually)
19:16:25 <monochrom> Or rather, plugins just needs to ask GHC API to load things. That part doesn't change a lot.
19:16:26 <EvanR> well that eval succeeds is serendipitous
19:17:01 ircbrowse_tom joins (~ircbrowse@2a01:4f8:1c1c:9319::1)
19:17:02 Server sets mode +Cnt
19:18:17 × tomsmeding quits (~tomsmedin@tomsmeding.com) (Quit: ZNC 1.8.2 - https://znc.in)
19:19:15 waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
19:19:42 <EvanR> the eval action takes about 2 seconds of latency
19:19:58 <EvanR> to turn "True" into Just True xD
19:20:12 <EvanR> > True
19:20:14 <lambdabot> True
19:20:18 <EvanR> lambdabot is faster
19:20:55 Akiva joins (~Akiva@user/Akiva)
19:21:16 ralu joins (~ralu@static.211.245.203.116.clients.your-server.de)
19:21:18 <monochrom> Does it still take 2 seconds the 2nd time?
19:21:45 <monochrom> I think that there is a lot of dynamic lazy loading that was forced the 1st time.
19:23:41 <EvanR> 2 seconds for the first eval, then 0.2 seconds for each subsequent eval
19:23:42 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
19:23:52 <EvanR> pretty good
19:24:13 gehmehgeh joins (~user@user/gehmehgeh)
19:24:42 <EvanR> 0.2 might be too slow turn around for linux torvalds though
19:24:49 <EvanR> linus*
19:25:25 <EvanR> eval takes a list of module names, but it says on stderr it can't find any
19:25:43 <geekosaur> you're probably still building a new runtime environment for each expression. if you rearrange things to keep one around instead of naïvelyy calling eval each time, does it get any faster?
19:25:46 <EvanR> I guess I need to use the more elaborate call that allows flags to be specified
19:26:17 <EvanR> good point
19:26:20 Major_Biscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e)
19:26:22 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
19:26:28 <geekosaur> might have to dig into the source of eval to see how to do that though
19:26:33 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
19:26:48 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
19:26:58 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
19:27:17 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
19:27:38 <geekosaur> or better yet the source to ghci, which is almost standalone by design
19:27:43 <EvanR> it calls out to ghc
19:27:59 <EvanR> using a command line
19:28:06 <geekosaur> ghc -e? that'd do it
19:28:19 <geekosaur> go poke at ghci sources to see how to do it properly
19:28:44 <EvanR> to be clear, we're talking about not using plugins right xD
19:29:10 <geekosaur> yes
19:29:26 <geekosaur> with the price that this uses a separate runtime environment from your main program
19:29:35 <geekosaur> so you can't readily share data
19:30:36 × Major_Biscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Ping timeout: 250 seconds)
19:31:04 tomsmeding joins (~tomsmedin@tomsmeding.com)
19:31:11 <EvanR> I want to change the definition of a value or a function, then yield the updated value or function to the main program
19:31:17 <EvanR> which somehow eval is doing
19:31:28 <EvanR> using Typeable to check if it's remotely valid
19:31:38 <monochrom> I think data is sharable.
19:32:23 <monochrom> The real price is that the separate runtime environment comes from the very same compiler you used to compile your main program.
19:32:39 Major_Biscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e)
19:32:41 <monochrom> "same" is down to which directory you installed GHC in.
19:33:31 <EvanR> meaning don't expect to ship this exe easily? xD
19:33:36 <monochrom> If you ship your exe to another computer, you have to also ship your GHC installation verbatim, yes.
19:33:40 × jgeerds quits (~jgeerds@55d4a547.access.ecotel.net) (Quit: Leaving)
19:33:48 <monochrom> Either that, or reproduce the same installation effect.
19:34:00 <geekosaur> yes
19:34:01 <EvanR> I guess that's why people write new programming languages
19:34:05 <EvanR> within haskell
19:34:08 lbseale joins (~ep1ctetus@user/ep1ctetus)
19:34:41 <EvanR> looking at this now https://github.com/ghc/ghc/tree/master/ghc/GHCi
19:34:42 <monochrom> This is why back in the days of whatever was before HLS, it was so fragile.
19:34:47 <geekosaur> in particular it needs the settings file and the package database from your ghc installation, plus anything pointed to by the settings file
19:35:10 <monochrom> Also it was cabal-v1, to add more hell.
19:35:25 <EvanR> is hugs or something like that an option?
19:35:31 <EvanR> as a library
19:36:43 <polyphem> isn't android the worlds most common operating system ?
19:37:07 <monochrom> Hugs is much smaller. You wouldn't feel guilty shipping it. But I don't know that Hugs has a library API.
19:37:23 × Major_Biscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Ping timeout: 252 seconds)
19:37:54 <EvanR> and hugs may not have some advance stuff
19:38:05 <monochrom> Linux kernel version 2.4 is the world's most common OS because home routers. :)
19:38:31 <EvanR> whatever OS runs on all the microcontrollers in your car
19:38:36 <geekosaur> EvanR, but has its own (Trex is iirc better than anything ghc has come up with in terms of a record system)
19:38:42 <monochrom> Hugs has TREX. More advanced than GHC. Today.
19:38:55 <polyphem> hmm, i guess a household has a router and maybe some cell phones ...
19:39:00 <EvanR> orly
19:39:02 <monochrom> TREX also solve all your record problems :)
19:39:26 <monochrom> OK I was kidding, phones are more abundant than home routers.
19:39:48 <monochrom> Or rather, I don't have data either way.
19:40:15 <polyphem> yes , but android is technically linux based
19:40:20 <geekosaur> I, uh, spent some time in a homeless shelter. No home routers, but *everyone* had a smartphone
19:40:44 <geekosaur> not to mention that it seems like every kid these days has their own smartphone
19:41:02 <geekosaur> I would absolutely not be surprised if phone OSes vastly outnumber desktops and laptops
19:41:39 <monochrom> But I already blamed everything on Windows long before I heard of Haskell.
19:41:52 <monochrom> As a C and C++ user I blamed Windows too.
19:42:17 <monochrom> And did not suddenly make C or C++ unappealing to newcomers.
19:42:23 <EvanR> now that I'm using Haskell i can blame C and C++
19:42:38 <EvanR> one day I'll be on language blub 9000, and blame Haskell
19:43:06 × vysn quits (~vysn@user/vysn) (Ping timeout: 268 seconds)
19:43:11 <monochrom> I bet every programming language community thinks of Windows lowly.
19:43:25 <EvanR> dot net?
19:43:42 <monochrom> If anything, it's OCaml, not Haskell, that really gives the finger to Windows.
19:44:03 <polyphem> when i was 14 , on win95 i heard about this strange os that had 9 virtual terminals, i went to the local bookstore and bought a book on linex, and was flashed, when i realized thet it had a cdrom with redhat linux for free ... :)
19:44:41 <EvanR> you saw a book on linux, and was flashed. By men in black from microsoft
19:44:45 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba)
19:45:14 <EvanR> open source is a cancer!
19:45:24 <EvanR> get the facts
19:46:00 × fendor_ quits (~fendor@77.119.174.56.wireless.dyn.drei.com) (Remote host closed the connection)
19:46:00 <monochrom> The world is like a CDROM. It's flat.
19:46:34 <polyphem> ... i imideatly formated my 1024 MB drive win95 install and installed redhat
19:47:00 <geekosaur> oh, I also have to wonder how linux installs compare to windows installs due to WSL(2). obviously can't be greater, but approaching parity would be interesting
19:47:28 <EvanR> you can't have multiple linux installs?
19:47:39 <geekosaur> also I am a bit surprised ot hear that there is some latency in WSL2, it should be very close to bare metal because of how they designed it
19:47:58 <geekosaur> sure you can, and swithc between them and windows via grub
19:48:18 <EvanR> I mean within the WSL framework
19:48:31 <geekosaur> afaik no
19:48:50 <EvanR> so it's a linux shaped hole that is empty or filled
19:48:52 <geekosaur> might not take much work to enable it but it'd have to be done by Microsoft
19:48:55 <EvanR> MVar Linux
19:49:01 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
19:49:10 <geekosaur> that's not exactly right either
19:49:31 <polyphem> windows used to overwrite your linux install if you wanted to do multiboot in those days , you had to first install windows and then linux
19:49:42 <geekosaur> remember windows is a microkernel architecture since winnt. WSL2 is just linux as a microkernel client
19:50:16 <geekosaur> wsl1 was more of an emulation, I think
19:50:18 max22- joins (~maxime@2a01cb0883359800ca42cd4ecfb21dbb.ipv6.abo.wanadoo.fr)
19:50:44 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
19:50:58 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
19:51:18 <EvanR> embrace extend extinguish, microsoft is at it again!
19:51:21 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
19:51:45 <geekosaur> well, actually, no, it seems like they actually mean it
19:52:00 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
19:52:09 <geekosaur> they were getting their asses eaten in the cloud because windows is such a lousy cloud OS
19:52:15 gehmehgeh joins (~user@user/gehmehgeh)
19:52:34 <geekosaur> it *really* wants a physical console
19:52:58 <geekosaur> and things like remote desktop and even powershell just weren't enough
19:53:06 <polyphem> ms had xenix, right
19:53:10 <geekosaur> yes
19:53:15 <geekosaur> then they sold it off to SCO
19:53:24 lbseale joins (~ep1ctetus@user/ep1ctetus)
19:53:32 <geekosaur> then SCO sold itself out and became a shell for lawyers
19:54:13 <EvanR> I worked at a place with SCO unix
19:54:18 <geekosaur> but it was amusing, I once had the developer manual or ms-dos 2.11 and it talked about a future migration path that had dos and xenix merging sometime around dos 6.0
19:54:25 <EvanR> not as ergonomic as linux
19:54:27 <kuribas> My uncle was CEO of SCO benelux.
19:54:33 <geekosaur> *for ms-dos
19:54:34 <maerwald> well, windows at least has proper hardware support for laptops. Linux is a nightmare (suspend to ram, cpu throttling... all trash)
19:54:44 <kuribas> before they went rogue.
19:54:45 <maerwald> but I still can't force myself to switch
19:55:06 <EvanR> macbook air my dude
19:55:14 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
19:55:15 <monochrom> Oh, so that's why DOS went from the file-control-block model to the file-handle (so file descriptor) model...
19:56:26 <geekosaur> the file controlo block model was left over from dos 1.0 being a poor ripoff of cp/m
19:56:36 <monochrom> Yeah
19:56:37 intersect joins (~ivoolivei@a109-50-190-38.cpe.netcabo.pt)
19:57:26 <polyphem> dos 1.0 was int21h + command.com + gwbasic
19:57:35 <polyphem> + autoexec.bat
19:57:58 <geekosaur> actuslly I don't recall if dos .0 had int21h
19:58:01 <geekosaur> 1.0
19:58:10 <EvanR> back when your computer came with nothing but a programming environment
19:58:28 <geekosaur> it still had jumping to address 0005 to make syscalls, which is part of the cp/m "emulation"
19:58:39 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480::41)
19:59:14 trillp joins (~trillp@2600:1700:28e2:14d0::3a)
19:59:26 <intersect> Hello guys, how can i find how to use lambdabot?
20:00:08 <monochrom> I lurked here and watched other people use it.
20:00:32 <polyphem> wasn't the story of ms success being they tookover a deal to use cp/m as os for ibm-compatible pcs ,and instead bought the int21h handler from some students added their gwbasig and a shell command.com and made the deal with ibm
20:00:37 <dminuoso> Yeah, it's best to just use the channel history, and dig through 10 years of chatlogs. We dont have any other documentation for it.
20:00:41 <monochrom> But the most frequently used thing is this:
20:00:44 <monochrom> > 1+1
20:00:46 <lambdabot> 2
20:01:07 <EvanR> @botsnack
20:01:08 <lambdabot> :)
20:01:17 <monochrom> It has some kind of @help command, but you will find it not very helpful.
20:01:47 <intersect> hum, i was trying to figure out how to use it to make a pointwise function in to pointfree
20:01:48 <dminuoso> I personally just use yahb at the end, for it is just an IRC bot bolted onto GHCi.
20:01:59 <dminuoso> Which makes it simple to use
20:02:06 <EvanR> @pl \x -> x + 1
20:02:06 <lambdabot> (1 +)
20:02:14 <EvanR> wait
20:02:15 <monochrom> Yeah yahb is a real ghci, much more complete than lambdabot's >
20:02:26 <EvanR> @pl \x -> x - 1
20:02:26 <lambdabot> subtract 1
20:02:27 × tomsmeding quits (~tomsmedin@tomsmeding.com) (Quit: ZNC 1.8.2 - https://znc.in)
20:02:31 <EvanR> @pl \x -> x / 1
20:02:31 <lambdabot> (/ 1)
20:02:43 <EvanR> /1, 1+
20:02:52 <monochrom> Oh interesting.
20:02:53 <EvanR> it is assuming commutativitiy or
20:03:22 <EvanR> I guess have laws for Num now
20:03:31 <dminuoso> See, this is one of those things.
20:03:39 <intersect> f(g(h(i))(x,y)
20:03:59 <monochrom> Some human wrote @pl and perhaps their opinion went into it too.
20:04:09 <monochrom> Right? I thought it was obvious.
20:04:25 <monochrom> Every program exists because, only because, it's some programmer's opinion.
20:04:39 <EvanR> that's a very constructive take
20:04:49 <EvanR> brouwer would be proud
20:05:45 <EvanR> let's see if their opinion extended to matrix multiplication
20:05:52 <EvanR> @pl \x -> x * 1
20:05:52 <lambdabot> id
20:05:55 × juhp quits (~juhp@128.106.188.82) (Ping timeout: 268 seconds)
20:06:03 <EvanR> the world may never know
20:06:07 <monochrom> Matrix multiplication is a social construct.
20:06:22 <monochrom> I mean, >:)
20:07:23 juhp joins (~juhp@128.106.188.82)
20:07:39 <EvanR> @pl \i x y -> f (g (h i)) (x,y)
20:07:39 <lambdabot> (. (,)) . (.) . f . g . h
20:07:54 <EvanR> @pl \i x y -> f (g (h i)) x y
20:07:54 <lambdabot> f . g . h
20:08:14 <monochrom> Ho hum that turns out surprisingly neat.
20:09:24 × mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection)
20:09:24 ub joins (~Thunderbi@141.98.252.232)
20:10:28 mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001)
20:10:53 × ubert quits (~Thunderbi@p548c8cd6.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
20:10:53 ub is now known as ubert
20:10:55 <geekosaur> I still need to flesh out my commands list so it's usable :(
20:11:59 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
20:11:59 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
20:11:59 wroathe joins (~wroathe@user/wroathe)
20:12:34 cynomys joins (~cynomys@user/cynomys)
20:14:01 Pickchea joins (~private@user/pickchea)
20:15:29 × kuribas quits (~user@ptr-25vy0i9nxqs797laykw.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
20:15:32 × jle` quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 240 seconds)
20:15:41 haskellb1 joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
20:17:26 jle` joins (~jle`@cpe-23-240-75-236.socal.res.rr.com)
20:18:02 × intersect quits (~ivoolivei@a109-50-190-38.cpe.netcabo.pt) (Ping timeout: 240 seconds)
20:19:05 × trillp quits (~trillp@2600:1700:28e2:14d0::3a) (Quit: trillp)
20:19:33 intersect joins (~ivoolivei@a109-50-190-38.cpe.netcabo.pt)
20:22:37 ec joins (~ec@gateway/tor-sasl/ec)
20:22:51 segfaultfizzbuzz joins (~rustisafu@2602:306:cd3c:9350:59e3:db49:aa0a:46e5)
20:23:55 × intersect quits (~ivoolivei@a109-50-190-38.cpe.netcabo.pt) (Ping timeout: 256 seconds)
20:24:11 Erutuon joins (~Erutuon@user/erutuon)
20:25:02 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
20:27:29 ultsllt joins (~ultsllt@50.231.5.242)
20:31:21 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
20:31:40 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
20:31:40 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
20:31:40 wroathe joins (~wroathe@user/wroathe)
20:31:57 × xsperry quits (~xs@user/xsperry) (Ping timeout: 240 seconds)
20:33:33 jeetelongname joins (~jeet@88-111-159-26.dynamic.dsl.as9105.com)
20:37:57 yauhsien_ joins (~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
20:39:52 Feuermagier joins (~Feuermagi@user/feuermagier)
20:41:15 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
20:42:32 × yauhsien_ quits (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
20:45:00 intersect joins (~ivoolivei@a109-50-190-38.cpe.netcabo.pt)
20:47:44 zincy joins (~zincy@host86-151-99-97.range86-151.btcentralplus.com)
20:51:12 × denbrahe[m] quits (~denbrahem@2001:470:69fc:105::19c0) (Quit: Client limit exceeded: 20000)
20:52:09 × little_mac quits (~little_ma@2601:410:4300:3ce0:4001:9094:16f1:84ab) (Remote host closed the connection)
20:52:15 machinedgod joins (~machinedg@24.105.81.50)
20:53:36 ec joins (~ec@gateway/tor-sasl/ec)
20:53:54 <intersect> 1+1
20:54:06 denbrahe[m] joins (~denbrahem@2001:470:69fc:105::19c0)
20:54:12 <intersect> >1+1
20:54:16 <intersect> > 1+1
20:54:18 <lambdabot> 2
20:54:58 <intersect> > f(x) = x
20:55:00 <lambdabot> <hint>:1:6: error: parse error on input ‘=’
20:55:22 <intersect> > f(x) .=. x
20:55:24 <lambdabot> error:
20:55:24 <lambdabot> • Variable not in scope: (.=.) :: t0 -> Expr -> t
20:55:24 <lambdabot> • Perhaps you meant one of these:
20:56:06 pavonia joins (~user@user/siracusa)
20:56:23 <monochrom> No definition. But you can use "let ... in ..."
20:56:24 <geekosaur> no assignments at the lambdabot prompt
21:00:32 × neceve quits (~quassel@2.26.93.228) (Ping timeout: 240 seconds)
21:01:28 <monochrom> Generally maybe you should pick up a bit of basic Haskell before using lambdabot.
21:02:57 × n3rdy1 quits (~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
21:03:53 × lechner quits (~lechner@debian/lechner) (Ping timeout: 268 seconds)
21:04:22 <dsal> (at least, in a public channel)
21:05:00 <EvanR> 1+1 is notation from basic math, f x y z is notation from lisp... I'mean... pick a side
21:05:21 × _ht quits (~quassel@2a02:a468:b619:1:8a98:8031:2935:e3fc) (Remote host closed the connection)
21:07:58 little_mac joins (~little_ma@2601:410:4300:3ce0:dc4e:59ab:7b42:4b50)
21:08:22 <dsal> BASIC math.
21:08:36 briandaed joins (~root@185.234.208.208.r.toneticgroup.pl)
21:10:21 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
21:10:34 × lispy quits (~lispy4@84.69.59.93) (Quit: Leaving)
21:11:01 × jushur quits (~human@user/jushur) (Quit: ¯\_(ツ)_/¯)
21:14:51 jushur joins (~human@user/jushur)
21:16:08 n3rdy1 joins (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
21:19:06 coot joins (~coot@89-64-85-93.dynamic.chello.pl)
21:21:37 <Henson> I'm trying to interact with some C++ functions from Haskell that just do some referentially-transparent calculations and memory allocation. Is it okay to put those kinds of things into an unsafePerformIO?
21:21:44 × briandaed quits (~root@185.234.208.208.r.toneticgroup.pl) (Quit: Lost terminal)
21:22:15 <geekosaur> memory allocation is explicitly not safe for that
21:23:22 <EvanR> is the memory temporary, released before the computation is done, or
21:23:41 <EvanR> (or released in case of error before computation is done, or)
21:25:30 × CHUD quits (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
21:28:56 <Henson> the thing I'm trying to do is interact with some OpenCV functions in C++, which will take in a cv::Mat wrapped in a ForeignPtr, do some image processing on it, then allocate a new cv::Mat and return a pointer to that, which will then be wrapped in a ForeignPtr. Ideally I'd like to try to make these image processing operations not have to be in IO, and some of the OpenCV libraries I've seen for...
21:29:13 <Henson> Haskell make it so these IO operations are behind an unsafePerformIO so they can be done in pure code.
21:30:03 <geekosaur> I'm pretty sure if they are allocating memory under an unsafePerformIO they're playing with fire
21:30:13 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
21:30:55 <geekosaur> the basic rule of unsafePerformIO is "if it breaks you get to keep the pieces", so if you insist on doing it it's your problem
21:31:35 <Henson> haha, ok
21:31:36 <EvanR> unsafePerformIO only makes sense when the IO action is pure, which it doesn't sound like your thing is
21:31:48 <EvanR> I went through this yesterday with opengl
21:32:01 <geekosaur> well, it could be pure right up until it allocates a new one, which isn't
21:32:27 <geekosaur> if the image processing is deterministic and repeatable, at least
21:33:18 <EvanR> allocating a new object to hold the answer rather than modifying the original is how normal haskell works though
21:33:58 <EvanR> the question is if anything I care about can observe that allocation in a bad way
21:34:21 <EvanR> or interfere with it
21:34:43 <ephemient> the unsafePerformIO allocation might get inlined and duplicated or cse'd and unduplicated, both of which could be problematic
21:34:43 <Henson> it looks like they use unsafeCoerce to convert it from an IO action to whatever they're returning
21:35:16 <EvanR> doubling the allocation or undoubling could lead to a change in performance but not necessarily semantics
21:36:13 <EvanR> of course... there's... THREAD SAFETY
21:36:38 <EvanR> two threads try to compute on the same thing at the same time
21:36:45 <Henson> EvanR: it looks like they allocate a new image to hold the answer, then get OpenCV to put the answer in the thing they've allocated. But the allocation is still being done at the C++ layer
21:37:19 <EvanR> yes ForeignPtr is for that, holding a ref to a foreign object, potentially calling a finalizer when haskell loses track of it
21:37:29 <geekosaur> EvanR, I think that can't happen. unsafePerformIO has a mutex, unsafeDupablePerformIo doens't, iirc
21:38:04 <EvanR> speaking of just the IO action yeah
21:38:11 × jeetelongname quits (~jeet@88-111-159-26.dynamic.dsl.as9105.com) (Ping timeout: 250 seconds)
21:38:17 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
21:38:18 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
21:38:18 wroathe joins (~wroathe@user/wroathe)
21:38:20 <davean> I mean theres the blackhole
21:38:39 <davean> is it locked on compute or update?
21:38:47 <Henson> EvanR: but is there any difference from performing the allocation in C++ and creating a ForeignPtr from it, then calling C++ with the Ptr (getting OpenCV to put the answer in the image you've previously allocated) compared to C++ taking in your image and allocating an image for the answer, and then you creating a ForeignPtr for the answer post-facto?
21:39:01 <EvanR> I am reading into what Henson is doing, that they will have some foreign data that two haskel threads accesses after the fact, but maybe I'm off the deep end now
21:39:29 <EvanR> Henson, wait, you're now allocating space in one action, and later doing a call to fill in the answer?
21:39:38 <EvanR> or rewriting an already made object? or
21:39:43 <ephemient> if it was a single unsafePerformIO wrapping the whole "allocate and fill in" then it seems potentially okay-ish to me? but if it's a unsafePerformIO allocate, some pure Haskell code, then unsafePerformIO fill, that is questionable
21:39:57 <EvanR> yes that's ... not going to turn out good
21:40:29 <EvanR> Henson, yeah, big diff
21:40:58 <EvanR> esp if you're trying to do it all without admitting it's IO
21:41:08 <Henson> EvanR: I would never have OpenCV perform in-place operations on the image I've passed it. I would always have it put the results in a new image
21:41:25 <EvanR> but what's this idea of passing it a pointer to empty space
21:41:26 <dolio> Are you just asking if it matters who does the allocation?
21:41:51 <Henson> EvanR: but whether that destination image has been pre-allocated in a previous C++ function call and has already been turned into a ForeignPtr, or it's allocated within the image processing call and then gets turned into a ForeignPtr afterwards is the question.
21:42:00 <Henson> dolio: yes
21:42:11 <EvanR> it sounds like C++ does the allocation regardless
21:42:14 <Henson> in both bases C++ does the allocation
21:42:28 <dolio> I think if you have C++ do the allocation, you might have to write your own finalizer that calls back into C++.
21:42:36 <Henson> in the pre-allocation case there's a ForeignPtr for the answer before the image processing function is called.
21:42:36 <dolio> Which sounds more complicated.
21:42:41 <EvanR> you can make 2 calls, but you better not make two unsafePerformIOs
21:42:41 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
21:42:50 <davean> Henson: what about the deallocate linked to the F Ptr?
21:42:53 <Henson> dolio: yes. It's not that complicated, it's just a simple cast and a free. I've got that written already.
21:42:55 <davean> Henson: you want that called, right?
21:42:56 <EvanR> assuming you determine unsafePerformIO is even safe
21:43:06 <davean> so you don't want to create 2 new images
21:43:13 <davean> and have one of them not exist to the GC
21:43:37 × myShoggoth quits (~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds)
21:43:57 myShoggoth joins (~myShoggot@97-120-67-120.ptld.qwest.net)
21:44:23 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
21:44:33 <Henson> davean: correct, I don't want to do that. I simply want to do a referentially-transparent image operation that will not modify the things I'm sending in, but will return something that will involve memory allocation at the C++ level. I'm wondering how safe/unsafe doing that is with unsafePerformIO so I can use it in pure code instead of in IO.
21:44:49 × OscarH quits (~OscarH@2a02:c7f:a0da:ae00:ba27:ebff:fe84:d2f4) (Quit: ZNC 1.7.2+deb3 - https://znc.in)
21:45:00 <dolio> That's basically what unsafePerformIO is for.
21:45:04 OscarH joins (~OscarH@2a02:c7f:a0da:ae00:ba27:ebff:fe84:d2f4)
21:45:10 <ephemient> if some things get lost and never end up finalized/freed by the GC, it can still be considered "safe"
21:45:41 <EvanR> do that in 1 unsafePerformIO, make sure to use a finalizer, and accept that the whole thing may happen more than once if inlining happens...
21:45:43 <davean> Henson: unsafePerformIO can be done correctly, but its certainly not dupable
21:45:44 <ephemient> but you probably do want to have a ForeignPtr+finalizer in there for practical purposes
21:46:16 <Henson> davean: what do you mean by "dupable"?
21:46:20 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
21:46:27 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
21:46:31 <EvanR> two threads execute your computation at the same time
21:46:42 <Henson> ephemient: yes, anything allocated in C++ that gets returned as a Ptr will be converted to a ForeignPtr with an appropriate finalizer.
21:47:06 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds)
21:47:20 <EvanR> which might happen with unsafeDupablePerformIO
21:47:57 <Henson> EvanR: can you explain a bit more about the call happening more than once with inlining?
21:48:03 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
21:48:04 <EvanR> well you claim it's pure so
21:48:18 <EvanR> let x = unsafePerformIO stuff = (x, x)
21:48:26 <EvanR> let x = unsafePerformIO stuff in (x, x)
21:48:31 <EvanR> that's the same as
21:48:40 <EvanR> (unsafePerformIO stuff, unsafePerformIO stuff)
21:48:58 <EvanR> it got inlined
21:49:10 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
21:49:46 <Henson> EvanR: in that case would Haskell not evaluate one of them because the function and arguments are the same for both of them?
21:50:03 <EvanR> you mean common subexpression elimination? undoing the inlinine it just did? xD
21:50:20 <EvanR> usually no
21:50:20 <geekosaur> there's more thn that. if it's pure then ghc can decide to lift the operation out of e.g. a loop
21:50:28 travisb_ joins (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
21:50:43 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
21:50:46 <EvanR> yeah it could happen multiple times, or fewer times than you thought
21:50:48 <geekosaur> this caused major problems for bytestring when they thought it wss okay to cheat like that
21:50:49 <ephemient> pure expressions have no side effects so Haskell is free to evaluate them any number of times, including fewer or more than you wrote
21:51:35 <davean> EvanR: you can mark it expensive
21:51:51 <EvanR> mark it expensive?
21:51:52 <Henson> EvanR: but in let x = unsafePerformIO stuff in (x, x) Haskell will make two identical thunks in the tuple, right? Whenever either one of them gets evaluated the other will no longer need to be evaluated, right?
21:51:57 × tabemann quits (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Ping timeout: 240 seconds)
21:52:47 lechner joins (~lechner@debian/lechner)
21:52:49 <EvanR> in literally let x = 1000 in (x,x) there's only 1 1000
21:52:57 <EvanR> in literally (1000,1000) there's 2 1000
21:53:17 <EvanR> they can be transformed into each other at compile time
21:53:24 justsomeguy joins (~justsomeg@user/justsomeguy)
21:53:34 <EvanR> it's fine since 1000 is just a value
21:53:50 <EvanR> not a command to fire missiles
21:54:00 <Henson> if Haskell were to evaluate (x,x) twice, then the two x values wouldn't be identical anymore, as they'd be two different ForeignPtrs
21:54:13 <EvanR> yeah, is that ok
21:54:15 <Henson> where x is the result of the image processing
21:54:59 <Henson> EvanR: that's fine with me. It would result it unneccessary image processing work, but the final results would be the same, just essentially copies of each other in memory.
21:54:59 <EvanR> if not you can attempt to cheat by putting hints to stop inlining
21:55:29 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:58:35 <Henson> now here's a question of taking the "naughtiness" to another level. Say I have a list of ForeignPtrs to images, and I want to call a C++ function that operates on a list of images and returns a list of images. I need to call withForeignPtr recursively to get at the Ptrs within each of the images in a list, then run the image processing operation, then wrap up the returned Ptrs as ForeignPtrs...
21:58:37 jeetelongname joins (~jeet@88-111-159-26.dynamic.dsl.as9105.com)
21:59:14 <Henson> in the documentations, it says withForeignPtr is need to prevent the ForeignPtrs from being deallocated during the call that is inside of them. If I was that all in an unsafePerformIO, do those guarantees go out of the window?
22:00:02 <Henson> also, is there a difference between unsafePerformIO and unsafeCoerce in terms of safety?
22:00:07 × FroskyArr quits (~froskyarr@203.175.13.219) (Remote host closed the connection)
22:00:15 <Henson> I mean runtime safety, and not type safety
22:00:24 <geekosaur> unsafeCoerce is unsafe in part because you can make unsafePerformIO from it
22:00:25 FroskyArr joins (~froskyarr@203.175.13.219)
22:01:14 × haskellb1 quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds)
22:01:22 <EvanR> unsafeCoerce is very unsafe
22:01:23 <Henson> would it be better to do my IO a -> a with unsafePerformIO, or with unsafeCoerce to do my image processing in pure code instead of IO?
22:01:51 <EvanR> omg don't use unsafeCoerce to do IO xD
22:01:56 <Henson> haha
22:02:33 <Henson> ok, so just stick with unsafePerformIO and be as careful as I can
22:02:47 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
22:03:18 × haskellberryfinn quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Remote host closed the connection)
22:03:29 <Henson> EvanR: what should I look for to prevent Haskell from inlining the function? I know there's the {-# INLINE foo #-} statement, is there a similar one to prevent inlining?
22:03:35 <EvanR> earlier you mentioned they use it to convert a pointer? There's a not-as-unsafe-as-unsafeCoerce other operation for that called castPtr
22:03:37 <geekosaur> NOINLINE
22:04:04 × cdsmith quits (~cdsmithma@2001:470:69fc:105::284) (Quit: Client limit exceeded: 20000)
22:04:20 × travisb_ quits (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Remote host closed the connection)
22:04:22 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
22:04:34 <EvanR> change the type of a Ptr when "you know better than the type system"
22:04:49 cdsmith joins (~cdsmithma@2001:470:69fc:105::284)
22:05:07 travisb_ joins (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
22:05:34 <Henson> EvanR: here's the OpenCV source code for the library I was looking at as a comparison: https://hackage.haskell.org/package/opencv-0.0.2.1/docs/src/OpenCV-Core-ArrayOps.html#matScalarAdd this is not the OpenCV functions I'm using, but where I got the idea for unsafeCoerce
22:07:11 <EvanR> the function unsafeCoerceMat might be a limited version of unsafeCoerce
22:07:33 <EvanR> to do with the matrix dimensions or something
22:09:03 <EvanR> unsafeCoerceMat :: Mat shapeIn channelsIn depthIn -> Mat shapeOut channelsOut depthOut
22:09:15 × zincy quits (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection)
22:09:22 <EvanR> a "trust me" for matrices only
22:10:02 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev)
22:10:29 <EvanR> there are other safer operations to change shape, I saw at a glance in the docs elsewhere
22:10:32 × jeetelongname quits (~jeet@88-111-159-26.dynamic.dsl.as9105.com) (Ping timeout: 240 seconds)
22:12:22 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
22:12:23 <Henson> EvanR: https://hackage.haskell.org/package/opencv-0.0.2.1/docs/src/OpenCV-Internal-Core-Types-Mat.html#unsafeCoerceMat is just unsafeCoerce. But there are functions in that module that talk about safer versions of unsafeCoerceMat.
22:12:46 <Henson> EvanR: and unsafeCoerce is from the Unsafe.Coerce module.
22:12:58 <EvanR> unsafeCoerceMat with a type signature way more limited than unsafeCoerce simply implemented as unsafeCoerce is way better
22:14:50 <Henson> EvanR: but the question I have is: they use unsafeCoerceMat = unsafeCoerce to do IO operations in pure code. Should I emulate what they're doing and use unsafeCoerce (or some more type-safe variant), or should I use unsafePerformIO?
22:15:02 <EvanR> note they are probably only using it when the object they are coercing actually has the type they coerce to, in spirit
22:15:42 EvanR does a double take
22:16:16 <monochrom> No, unsafeCoerceMat = unsafeCoerce does not do IO operations in pure code.
22:16:19 haskellb1 joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
22:16:21 <ski> (how're they using `unsafeCoerce' to do `unsafePerformIO' ?)
22:16:24 × michalz quits (~michalz@185.246.204.37) (Remote host closed the connection)
22:16:48 <monochrom> There is an explicit "unsafePerformIO" somewhere else in matScalarAdd.
22:17:07 <haskellb1> is Comonad widely used in Haskell programming? I find it extremely abstract
22:17:18 wombat875 joins (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
22:17:32 <EvanR> I used it on the sea cucumber advent of code last month
22:17:44 <haskellb1> spending time on defining it's class methods seems not at all related to the problem logic itself
22:18:05 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:18:08 <EvanR> that's why it's support code, just like monad >>=
22:18:36 <EvanR> or map, filter, fold for list, it's supporting code, not for any particular problem
22:18:37 × myShoggoth quits (~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds)
22:19:35 <Rembane> The Comonad is an abstraction that makes some problems easy to solve.
22:20:06 <monochrom> I haven't used comonad, but everything you said could be said of monad too.
22:20:25 <haskellb1> Can commoners come up with abstractions like this?
22:20:36 <monochrom> I could make the case that for parsing, >>= "does not relate to the parsing logic".
22:20:38 <geekosaur> not even most haskellers can
22:20:54 <haskellb1> I guess it takes years of practice to see things like that
22:20:58 <geekosaur> but once it's been come up with, almost anyone can learn to use it
22:21:07 <monochrom> Ah but "parsing logic" itself is inexpressible until you can take >>= for granted.
22:21:22 <EvanR> I found monad >>= and comonad <<= to be equally hard to write
22:21:33 <EvanR> luckily you don't have to do it too often
22:21:53 <Henson> monochrom: you're right, they're using unsafePerformIO instead of unsafeCoerce
22:21:55 <monochrom> So, yes and no. The parser monad's >>= does not express parsing logic, but parsing logic needs >>= to be writable in the first place.
22:22:18 <Henson> ski: thanks for doing that out, I was wrong about how they were using unsafeCoerce
22:22:46 <monochrom> Well, or at least <*>
22:23:29 <Henson> ski: doing that out -> pointing that out
22:23:30 <haskellb1> Can I understand that Monad represents something that can be collapsed while comonad is the other way around?
22:23:45 <ski> `(>>=)' and `(<*>)' are "plumbing", yea
22:23:58 <EvanR> comonads can replicate (duplicate)
22:24:16 <ski> haskellb1 : in a vague (or perhaps abstract) sense, yea
22:24:27 <monochrom> Yeah, "whatever that means".
22:24:34 <ski> (the devil's in the details of what you mean by those words)
22:24:49 <haskellb1> I'm trying to figure out "when" people are going to use these concepts to model their problems
22:24:54 <monochrom> The beauty of those oh-so-intuitive wording is they make you comfortable without any predictive power.
22:24:56 <EvanR> If a monad is a burrito, then a comonad is like a night club
22:25:27 <geekosaur> oboy…
22:25:37 × xff0x quits (~xff0x@2001:1a81:53ec:e00:6733:4fa5:6e13:2687) (Ping timeout: 240 seconds)
22:25:46 <EvanR> sorry
22:25:54 <haskellb1> Conventional data structures such as Heap and stack or trees are easier to see
22:26:00 <monochrom> Space Telescope (ST) that wraps and unwraps like a burrito >:)
22:26:28 <EvanR> I still don't really understand a Heap
22:26:31 <ski> stuff like monads are usually better to think of as "control structures"
22:26:35 <geekosaur> http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html
22:26:37 <haskellb1> of course not always obvious(such as particle collisions can be modeled by priority heaps)
22:26:43 myShoggoth joins (~myShoggot@97-120-67-120.ptld.qwest.net)
22:26:48 xff0x joins (~xff0x@2001:1a81:53ec:e00:f919:e263:9a7f:5670)
22:26:55 <EvanR> ah a heap is like a priority queue?
22:27:09 <ski> it's one implementation of PQs, yea
22:27:36 <geekosaur> http://blog.sigfpe.com/2006/06/monads-kleisli-arrows-comonads-and.html
22:27:40 <haskellb1> anyway i feel like Haskell is abstract in a different way
22:28:02 <monochrom> Yeah control structures.
22:28:03 × coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
22:28:20 <EvanR> stacks, trees, etc are concrete data structures
22:28:32 <justsomeguy> Refresh my memory: Do regular function definitions have a precedence of 7 or 9 by default?
22:28:38 <monochrom> Bet few programmers have thought of "a zoo of control structures" and so don't get monads just because of that.
22:28:38 <EvanR> where as Functors and Monads are abstract interfaces waiting to be implemented
22:28:46 <ski> justsomeguy : 10, if you mean function application
22:29:17 <haskellb1> stack and trees are still abstract because they can be applied to many different situations. But they are so common it takes less effort on the mind
22:29:20 <monochrom> And it doesn't help that Haskell is like even "data Foo a = ..." is often used to express control...
22:29:43 <EvanR> that's a different sense of abstract but ok
22:29:55 <monochrom> Plus, "what is control?" is equivalent to "what is effect?" :)
22:29:59 <EvanR> they certainly can be used for multiple things
22:30:11 <justsomeguy> ski: I thought that precedence only goes from 0..9? Or maybe that's only the range for fixity declarations, rather than fixity in general.
22:30:31 × craige[m] quits (~craigemcw@2001:470:69fc:105::35f1) (Quit: Client limit exceeded: 20000)
22:30:34 <geekosaur> the default fixity of a function is infixl 9
22:30:48 <EvanR> in each case we're still talking about the same concrete structure. Unlike "how to solve something with a random unknown monad", that's a whole nother story, and not even necessarily what is always done
22:30:54 craige[m] joins (~craigemcw@2001:470:69fc:105::35f1)
22:30:56 <geekosaur> function application behaves as if it has fixity 10, record updates behave as if they had fixity 11
22:31:23 ski . o O ( "Escaping Hell with Monads" by Philip Nilsson in 2017-05-08 at <https://philipnilsson.github.io/Badness10k/escaping-hell-with-monads/> ; "Flattening Callback Chains with Monad Do-Notation" by Remko Tronçon in 2015-07-02 at <https://el-tramo.be/blog/async-monad/> )
22:31:24 <justsomeguy> Thank you, that clears things up. I wish the language report made that a little more obvious.
22:32:03 <ski> justsomeguy : fixity of function application (juxtaposition syntactic operator) is `10'
22:32:19 <monochrom> Function application and record syntax cannot be formally given predence levels because there is no binary operator to attach the predence levels to.
22:32:26 <ski> er, s/fixity/precedence/
22:32:35 kjak joins (~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
22:32:44 <ski> ordinary (definable) operators have precedences from zero to nine, sure
22:32:57 <monochrom> And the Haskell Report is supposed to give formal definitions not intuitive conceptual moral fast-and-loose bedtime stories.
22:33:27 <Henson> check out https://www.haskell.org/onlinereport/decls.html section 4.4.2 for fixity declarations
22:33:28 <monochrom> So yeah it has to hide the intuitive interpretation in a formal grammar.
22:33:57 <Henson> "The integer in a fixity declaration must be in the range 0 to 9"
22:34:25 <EvanR> nothing wrong with turning it up to 11 every once in a while though
22:34:33 <monochrom> You can maybe go Dijkstra's way and demand function application to be an explicit binary operator. He uses ".", for example "sin.0"
22:34:39 <monochrom> haha
22:35:05 <monochrom> He was also happy with curry, "f.x.y".
22:35:14 <monochrom> err, currying!
22:35:21 <ski> % data Prec = P; instance Show Prec where showsPrec p P = showChar '<' . shows p . showChar '>'
22:35:22 <yahb> ski:
22:35:25 <ski> % P :+ P
22:35:26 <yahb> ski: <7> :+ <7>
22:35:28 <ski> % (P,P)
22:35:29 <yahb> ski: (<0>,<0>)
22:35:31 <ski> % Just P
22:35:32 <yahb> ski: Just <11>
22:35:42 <EvanR> what did you just do
22:36:16 <ski> (eleven, because function application is `infixl', so you add one to the precedence, when going to the right operand (the function argument expression))
22:36:17 <EvanR> print out the number passed around with showsPrec
22:36:35 <monochrom> Sneaky.
22:36:49 <Henson> "Any operator lacking a fixity declaration is assumed to be infixl 9". This means that since function application isn't defined in the list it has the strongest fixity of 9, right?
22:37:13 <Henson> I mean, I guess your function name IS the operator, and it's infixl with a fixity of 9
22:37:18 <monochrom> No. Function application is not an operator.
22:37:23 <monochrom> As said.
22:37:44 <ski> Henson : that only applies to ordinary operators
22:37:45 <EvanR> % Just P
22:37:45 <yahb> EvanR: Just <11>
22:37:59 <EvanR> oops
22:38:02 × geranim0 quits (~geranim0@d-132-204-221-88.res.umontreal.ca) (Remote host closed the connection)
22:38:12 <ski> it does not apply to `@' in patterns, e.g. (another "syntatic operator" (my term))
22:38:54 <Henson> ski: can you elaborate?
22:38:59 <monochrom> An "operator" is at least a lexeme as per Chapter 2. In "f e", there is no lexeme between "f" and "e".
22:39:47 <EvanR> until we get overloaded whitespace
22:40:22 <ski> (`~',`!' in patterns are examples of prefix (syntactic) operators. and then there's record construction (and update), which has higher precedence (binds tighter) than function application. `foo Node {rootLabel = r,subForest = ts}' is parsed as `foo (Node {rootLabel = r,subForest = ts})')
22:41:00 <monochrom> > length"xxxx" -- my favourite example
22:41:02 <lambdabot> 4
22:41:17 <monochrom> > const"abc"123 -- have one more
22:41:19 <lambdabot> "abc"
22:41:32 <monochrom> No operator.
22:41:32 <EvanR> I retract my joke
22:41:51 <EvanR> not enough space between the lexemes for this joke
22:42:09 <ski> Henson : "operator" as in the report is as you say. however, i was talking about some syntactic constructions which turn up as binary nodes in the AST, and which behave as "syntactic operators". other examples are `::' and `<-'
22:42:12 <monochrom> "space is function application" is one of those white lies like Santa Claus we tell to kids.
22:42:30 <ski> yes, better to say "juxtaposition"
22:42:48 <monochrom> When you grow up, there is no longer any tooth fairy.
22:42:56 <EvanR> f x y
22:42:58 <EvanR> f x y
22:42:59 <EvanR> fxy
22:43:09 <geekosaur> consecutive tokens
22:43:23 × segfaultfizzbuzz quits (~rustisafu@2602:306:cd3c:9350:59e3:db49:aa0a:46e5) (Remote host closed the connection)
22:43:39 <ski> (obviously, Santa Claus and the Tooth Fairy exists. just like cities, countries, bands, organizations exist ..)
22:43:45 segfaultfizzbuzz joins (~rustisafu@2602:306:cd3c:9350:59e3:db49:aa0a:46e5)
22:44:13 <monochrom> Oh haha I like that.
22:44:24 <monochrom> Haskell is a social construct. :)
22:44:39 <EvanR> "they didn't tell you? Santa clause died. 4 years ago" -- home improvement
22:45:41 <monochrom> Horn Claus takes polynomial time, Santa Claus is NP-hard >:)
22:45:59 <EvanR> minus e
22:46:22 <monochrom> Your typo was inspiring. Please don't fix it! :)
22:46:45 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
22:47:51 <dolio> Just say it was an acknowledgement that Tim Allen was in The Santa Clause.
22:48:02 <EvanR> lol
22:48:13 <monochrom> Hee hee good catch.
22:48:28 <EvanR> where he actually died... that must be where that movie came from
22:48:33 <EvanR> unfortunately
22:49:11 <monochrom> > 1
22:49:13 <lambdabot> 1
22:50:24 <EvanR> > "monochrom" > "1"
22:50:25 <lambdabot> True
22:50:43 Feuermagier joins (~Feuermagi@user/feuermagier)
22:51:21 <EvanR> > monochrom > 1
22:51:22 <lambdabot> False
22:53:35 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
22:55:03 tomsmeding joins (~tomsmedin@tomsmeding.com)
22:56:06 soxen joins (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
22:56:51 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
22:57:24 × romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
22:57:46 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
22:59:04 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
22:59:04 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
22:59:04 wroathe joins (~wroathe@user/wroathe)
22:59:20 Feuermagier joins (~Feuermagi@user/feuermagier)
23:00:51 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
23:02:30 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 250 seconds)
23:03:43 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
23:05:46 <EvanR> speaking of lexical issues
23:06:47 <EvanR> > Just (-1)
23:06:48 <lambdabot> Just (-1)
23:06:49 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
23:06:51 <EvanR> > Just -1
23:06:52 <lambdabot> error:
23:06:52 <lambdabot> • No instance for (Typeable a0)
23:06:52 <lambdabot> arising from a use of ‘show_M56646709495744885058’
23:06:58 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
23:07:12 <geekosaur> % :set -XNegativeLiterals
23:07:12 <yahb> geekosaur:
23:07:15 <EvanR> with NegativeLiterals that seems to be accepted... but seems weird because I don't know how it's parsing anymore
23:07:16 <geekosaur> % Just -1
23:07:17 <yahb> geekosaur: Just (-1)
23:07:27 <EvanR> % Just-1
23:07:27 <yahb> EvanR: ; <interactive>:77:5: error:; * No instance for (Num (a0 -> Maybe a0)) arising from a use of `-'; (maybe you haven't applied a function to enough arguments?); * In the expression: Just - 1; In an equation for `it': it = Just - 1
23:07:31 <geekosaur> the extension says how it's parsed iirc
23:07:53 <EvanR> for me, Just-1 parses in ghci for me
23:09:06 <EvanR> that error is what I get without the extension
23:09:55 <geekosaur> % :set -XLexicalNegation
23:09:55 <yahb> geekosaur:
23:09:55 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
23:10:01 <geekosaur> % Just-1
23:10:01 <yahb> geekosaur: ; <interactive>:79:5: error:; * No instance for (Num (a0 -> Maybe a0)) arising from a use of `-'; (maybe you haven't applied a function to enough arguments?); * In the expression: Just - 1; In an equation for `it': it = Just - 1
23:10:22 <geekosaur> % :set -NoNegativeLiterals
23:10:22 <yahb> geekosaur: Some flags have not been recognized: -NoNegativeLiterals
23:10:32 <geekosaur> % :set -XNoNegativeLiterals
23:10:33 <yahb> geekosaur:
23:10:36 <geekosaur> % Just-1
23:10:36 <yahb> geekosaur: ; <interactive>:82:5: error:; * No instance for (Num (a0 -> Maybe a0)) arising from a use of `-'; (maybe you haven't applied a function to enough arguments?); * In the expression: Just - 1; In an equation for `it': it = Just - 1
23:10:41 <geekosaur> hm
23:10:47 <geekosaur> what version you running?
23:11:04 <geekosaur> 9.x changed behavior wrt spaces betweek tokens
23:11:09 <geekosaur> *between
23:11:24 Major_Biscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net)
23:12:03 <EvanR> 8.10.7
23:12:20 <EvanR> I see NegativeLiterals didn't get unanimous votes on GHC2021
23:12:35 <geekosaur> @let {-# LANGUAGE NegativeLiterals #-}
23:12:36 <lambdabot> Defined.
23:12:44 <geekosaur> > Just-1
23:12:45 <lambdabot> error:
23:12:45 <lambdabot> • No instance for (Typeable a0)
23:12:45 <lambdabot> arising from a use of ‘show_M63043554762056576148’
23:12:57 × segfaultfizzbuzz quits (~rustisafu@2602:306:cd3c:9350:59e3:db49:aa0a:46e5) (Ping timeout: 240 seconds)
23:13:49 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
23:14:02 <geekosaur> @let {-# LANGUAGE LexicalNegation #-}
23:14:04 <lambdabot> Defined.
23:14:06 <geekosaur> > Just-1
23:14:08 <lambdabot> error:
23:14:08 <lambdabot> • No instance for (Typeable a0)
23:14:08 <lambdabot> arising from a use of ‘show_M45130066487191305358’
23:14:12 <geekosaur> weird
23:14:22 <geekosaur> @undef
23:14:23 <lambdabot> Undefined.
23:14:41 <EvanR> it's quite bizarre that this is accepted https://paste.tomsmeding.com/Ppvt93c8 xD
23:14:55 <EvanR> for
23:14:57 <EvanR> for me
23:16:04 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:16:17 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
23:18:12 <dsal> Is there an opinion on `forkIO`? I see it in this codebase I'm working on, though not a lot. It's a bit of a smell to me, but it's not one I recognize very well.
23:18:48 <monochrom> I don't know of any opinion against forkIO.
23:19:05 carbolymer likes `async` more
23:19:09 <EvanR> forkIO is great
23:19:15 <EvanR> also async
23:19:25 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
23:19:30 <Axman6> yeah I would probably be looking more at using async so that exceptions are handled more fully
23:19:32 × waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
23:20:12 <Axman6> but if it's a throwaway thread that it returning or handling exceptions isn't too important, then just forIO and forget
23:20:17 <Axman6> forkIO*
23:20:45 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
23:20:48 <carbolymer> you might want to setUncaughtExceptionHandler tho
23:21:43 waleee joins (~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
23:22:06 <monochrom> So, there can be a very good opinion on forkIO in a context so large that the whole context is reinventing a substantial portion of async, sure.
23:22:21 <monochrom> That is still different from an opinion on forkIO period.
23:22:53 <EvanR> it's great, period xD
23:23:46 <dsal> I don't see any async, but I see forkIO. I see some signs of async being used indirectly.
23:24:10 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 250 seconds)
23:24:29 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
23:24:33 × ultsllt quits (~ultsllt@50.231.5.242) (Remote host closed the connection)
23:24:41 × Major_Biscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 256 seconds)
23:24:44 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
23:24:44 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
23:24:44 wroathe joins (~wroathe@user/wroathe)
23:24:48 <EvanR> as a library writer it's hard to argue that "this code will always run in a program where there is 1 thread"
23:25:08 <EvanR> or an application writer who doesn't know everything about the application yet
23:25:19 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
23:25:35 <EvanR> luckily a lot of stuff still works when there are forkIO threads
23:26:42 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
23:26:44 <EvanR> it kind of feels like a default aspect of the haskell environment, like purity and laziness
23:27:08 <EvanR> which is why opengl can't be pure
23:27:11 <geekosaur> it kinda derives from those, doesn't it?
23:27:21 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
23:27:25 <geekosaur> in particular purity means independence from other threads
23:27:45 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
23:28:43 × wombat875 quits (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev)
23:29:25 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
23:30:11 × imalsogreg quits (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection)
23:30:55 × Ocelot quits (~ocelot@50-78-208-189-static.hfc.comcastbusiness.net) (Read error: Connection reset by peer)
23:31:15 CHUD joins (~CHUD@host-80-41-89-108.as13285.net)
23:32:07 × haskellb1 quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Remote host closed the connection)
23:32:09 Ocelot joins (~ocelot@50-78-208-189-static.hfc.comcastbusiness.net)
23:32:11 × Tuplanolla quits (~Tuplanoll@91-159-68-166.elisa-laajakaista.fi) (Quit: Leaving.)
23:32:37 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
23:32:56 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
23:33:22 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
23:33:22 × acidsys quits (~LSD@2.lsd.systems) (Quit: I love you.)
23:33:37 acidsys joins (~LSD@2.lsd.systems)
23:34:58 × cosimone quits (~user@93-44-185-255.ip98.fastwebnet.it) (Ping timeout: 268 seconds)
23:35:31 × _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer)
23:35:49 _xor joins (~xor@dsl-50-5-233-169.fuse.net)
23:36:17 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
23:37:03 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
23:38:30 segfaultfizzbuzz joins (~rustisafu@2602:306:cd3c:9350:59e3:db49:aa0a:46e5)
23:44:03 × romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
23:44:37 × segfaultfizzbuzz quits (~rustisafu@2602:306:cd3c:9350:59e3:db49:aa0a:46e5) (Ping timeout: 240 seconds)
23:44:53 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
23:50:02 × soxen quits (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 240 seconds)
23:53:28 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 268 seconds)
23:53:42 merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
23:55:19 × ix quits (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922) (Quit: WeeChat 3.4)
23:55:49 marquis_andras joins (~marquis_a@124.170.163.166)
23:55:59 ix joins (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922)
23:56:02 × ix quits (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922) (Remote host closed the connection)
23:56:09 ix joins (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922)
23:56:13 × ix quits (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922) (Remote host closed the connection)
23:56:28 ix joins (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922)
23:57:41 × marquis_andras quits (~marquis_a@124.170.163.166) (Client Quit)
23:58:22 yauhsien_ joins (~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
23:58:24 ProfSimm joins (~ProfSimm@87.227.196.109)
23:59:32 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)

All times are in UTC on 2022-01-26.