Home freenode/#haskell: Logs Calendar

Logs on 2021-01-07 (freenode/#haskell)

00:01:26 × __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving)
00:03:28 <pie_> ephemient: I was guessing something like this as well. Something I dont have a guess for is, if it's getting GC-d, that should mean it isnt referenced by anything on the haskell side yea? which means foreign side stuff might be referring to something - but in that case, shouldnt the "something" being missing result in a crash if its cleaned up?
00:03:52 <pie_> or is it a reasonable possibility that it's checked for null, but if its not GC-d, its not null:
00:03:58 <pie_> s/:/?
00:04:08 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 272 seconds)
00:04:08 <pie_> and then crashes ina deeper unchecked portion?
00:04:22 <pie_> what other possibilities could there be?
00:04:57 × Guest41259 quits (~textual@2603-7000-3040-0000-f8bc-1046-d481-0a5d.res6.spectrum.com) (Quit: Textual IRC Client: www.textualapp.com)
00:05:04 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
00:05:23 <ephemient> the crash might not be on the Haskell side. e.g. something like C's `strtok()` has internal state that makes it unsafe to intermingle calls with different arguments
00:05:43 <ephemient> (although that wouldn't crash, but something like that)
00:06:36 <pie_> ephemient: right, i think what im trying to say is, how would a GC _fix_ that?
00:07:30 <ephemient> imagine GC cleans up a ForeignPtr that has an associated finalizer that resets some state on the foreign side such that it can be re-used safely by the next operation
00:09:53 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:11:10 <pie_> oh hm
00:11:32 <pie_> that sounds quite reasonable under the circumstances
00:11:47 <pie_> ephemient: can I get a list of active foreignptrs or something?
00:12:35 × mouseghost quits (~draco@wikipedia/desperek) (Quit: mew wew)
00:13:22 aarvar joins (~foewfoiew@2601:602:a080:fa0:dc6:3a84:1bde:cb55)
00:13:38 × aarvar quits (~foewfoiew@2601:602:a080:fa0:dc6:3a84:1bde:cb55) (Client Quit)
00:13:48 <ephemient> not as far as I know. only GC can find them
00:13:56 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
00:14:06 × Deide quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa)
00:14:31 <pie_> ephemient: ok what if i have a good guess which foreign ptr it is?
00:15:13 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
00:15:20 <pie_> though in this case i think thats hypothetical because the one guess i do have is actually static i think (or whichever is the one that remains active forever) - so that wouldnt get gc-d
00:15:22 <ephemient> you could try GHC.ForeignPtr.finalizeForeignPtr to force the finalizer to run now
00:15:42 <pie_> thats an idea, given that the crashing is relatively consistent
00:16:19 × Jd007 quits (~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007)
00:16:25 × acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 264 seconds)
00:19:13 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
00:19:25 × manjaro-user_ quits (~manjaro-u@c-73-34-23-13.hsd1.co.comcast.net) (Ping timeout: 264 seconds)
00:19:58 dandels joins (~dandels@unaffiliated/dandels)
00:20:48 <pie_> ephemient: how hard would it be in theory to wrap these foreign types so they maintain a global list of their instances?
00:21:15 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Quit: mputz)
00:21:25 <ephemient> depends on whether it's in code you can modify or not, I guess
00:22:38 texasmynsted joins (~texasmyns@99.96.221.112)
00:22:43 × pfurla_ quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 246 seconds)
00:24:17 × Entertainment quits (~entertain@104.246.132.210) (Ping timeout: 272 seconds)
00:25:47 pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
00:26:24 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
00:26:36 × madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 240 seconds)
00:26:39 cdan` joins (~user@122-58-46-96-vdsl.sparkbb.co.nz)
00:27:40 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:ad75:1255:fdff:5733)
00:28:16 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
00:29:47 <cdan`> hi everyone
00:30:03 cdan` parts (~user@122-58-46-96-vdsl.sparkbb.co.nz) ()
00:30:51 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
00:33:09 cdan joins (~user@122-58-46-96-vdsl.sparkbb.co.nz)
00:33:14 <cdan> Hello
00:36:50 × ransom quits (~c4264035@8.47.12.52) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:38:28 <pie_> ephemient: hm though i suppose that cant be the full solution because without the extra gc commands it still crashes on the first run sometimes
00:41:01 <pie_> guess ill start cleaning up my code, maybe that will hep
00:41:41 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
00:42:24 christo joins (~chris@81.96.113.213)
00:44:50 fosterite joins (~fosterite@2600:6c46:7880:410a:3cda:cdb5:75e9:b6e9)
00:46:49 × christo quits (~chris@81.96.113.213) (Ping timeout: 256 seconds)
00:47:42 Jd007 joins (~Jd007@d154-5-83-24.bchsia.telus.net)
00:47:58 ransom joins (~c4264035@8.47.12.52)
00:49:26 justsomeguy joins (~justsomeg@216.186.218.241)
00:49:26 × justsomeguy quits (~justsomeg@216.186.218.241) (Changing host)
00:49:26 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
00:49:33 × conal quits (~conal@66.115.157.28) (Quit: Computer has gone to sleep.)
00:51:24 × perrier-jouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.0)
00:51:31 conal joins (~conal@143.244.61.236)
00:52:17 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 260 seconds)
00:57:33 jedws joins (~jedws@121.209.189.201)
00:58:41 rajivr joins (uid269651@gateway/web/irccloud.com/x-txjindmtwxpzdgyt)
01:01:05 × DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 240 seconds)
01:03:22 acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
01:04:03 × livvy quits (~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds)
01:07:07 DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
01:08:36 × Jd007 quits (~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007)
01:10:48 Jd007 joins (~Jd007@d154-5-83-24.bchsia.telus.net)
01:16:19 <Axman6> Anyone else noticed that cabal doesn't respond to ^C? :\
01:18:33 <monochrom> ctrl-c worked for me in the few times I needed it.
01:19:32 × jollygood2 quits (~bc812391@217.29.117.252) (Quit: http://www.okay.uz/)
01:20:51 Tario joins (~Tario@201.192.165.173)
01:24:34 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 272 seconds)
01:26:46 × chenshen quits (~chenshen@2620:10d:c090:400::5:af56) (Ping timeout: 244 seconds)
01:27:22 <int-e> Axman6: which platform?
01:27:33 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
01:27:49 <maerwald> Axman6: it's with parallel jobs only I think
01:28:23 <ezzieyguywuf> is there a way to tell from the info on hackage which git commit corresponds to version 0.1.1.0? https://hackage.haskell.org/package/saltine
01:29:05 slack1256 joins (~slack1256@dvc-186-186-101-190.movil.vtr.net)
01:30:37 × columbarius1 quits (~columbari@87.123.198.204) (Ping timeout: 246 seconds)
01:30:44 Tario joins (~Tario@201.192.165.173)
01:33:03 columbarius1 joins (~columbari@i5E86B3D0.versanet.de)
01:33:57 <sm[m]> I guess not ezzieyguywuf, which is an interesting point. I guess you go to the repo and look for the appropriate tag, and trust that. (You could also make a tarball at that tag and compare it with the hackage tarball, but I think pretty often those won't match exactly.)
01:34:19 × plutoniix quits (~q@node-use.pool-125-24.dynamic.totinternet.net) (Quit: Leaving)
01:35:54 <ezzieyguywuf> sm[m]: except repo doesn't include tag for 0.1.1.0
01:35:55 <ezzieyguywuf> which is odd
01:36:01 <ezzieyguywuf> :\
01:37:16 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
01:38:13 × conal quits (~conal@143.244.61.236) (Quit: Computer has gone to sleep.)
01:38:13 × heatsink quits (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Remote host closed the connection)
01:38:35 <Axman6> int-e: macOS
01:39:03 <Axman6> maerwald: it did eventually stop the build but I'd hit ^C a dozen times or so :\
01:39:15 <ezzieyguywuf> anyone here ever use saltine?
01:39:21 <ezzieyguywuf> project seems to be a bit of a mess...
01:39:32 × slack1256 quits (~slack1256@dvc-186-186-101-190.movil.vtr.net) (Remote host closed the connection)
01:39:36 <ezzieyguywuf> but hnix is a revdep, and I dunno hnix, but it seems/sounds legit/important
01:40:28 conal joins (~conal@89.187.183.187)
01:41:03 <sm[m]> ezzieyguywuf: highly suspect
01:41:58 × tmciver quits (~tmciver@cpe-172-101-40-226.maine.res.rr.com) (Read error: Connection reset by peer)
01:42:42 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:43:26 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:44:19 <ezzieyguywuf> glad it's not just me
01:46:03 <sm[m]> johnw made hnix I think
01:46:53 <sm[m]> I don't seriously mean saltine is suspicious, but it must be a bit under-maintained
01:47:25 <ezzieyguywuf> the test-suite seems extremely legit
01:47:41 <ezzieyguywuf> although the v0.1.1.0 tarball is missing a test module *facepalm*
01:48:38 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
01:48:48 × jmchael quits (~jmchael@81.174.205.210) (Ping timeout: 268 seconds)
01:49:23 × conal quits (~conal@89.187.183.187) (Quit: Computer has gone to sleep.)
01:49:25 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
01:49:43 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
01:49:53 × darjeeling_ quits (~darjeelin@122.245.218.97) (Ping timeout: 265 seconds)
01:50:25 heatsink joins (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33)
01:50:56 <ezzieyguywuf> this seems to be the commit that the "release" is bassed off of https://github.com/tel/saltine/commit/b5270645f40f17dcebba960a31819789509b5218
01:51:03 <ezzieyguywuf> but the missing test module isn't added until the next commit
01:51:08 Tario joins (~Tario@201.192.165.173)
01:51:19 <ezzieyguywuf> it seems v0.1.1.0 was never actually finished, but somehow got onto hackage (by way of stack I think....)
01:51:46 × elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
01:53:15 <int-e> Axman6: I wonder whether this trick applies to MacOS as well: I often find myself using ^Z sending a job into the background, followed by kill %1 (kill the latest job... probably shell specific; I'm using bash).
01:53:19 <ezzieyguywuf> nah, the release has to be from later, b/c tests/Main.hs in the tarball is from later
01:53:22 <ezzieyguywuf> *shrug*
01:53:37 <ezzieyguywuf> int-e: that works in linux
01:53:57 <int-e> Axman6: because somehow, ^Z tends to be immediate even when ^C isn't.
01:55:00 <MarcelineVQ> ^D is the secret sauce
01:55:05 <int-e> (probably because SIGSTOP cannot be caught or ignored)
01:55:29 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:56:29 <ezzieyguywuf> I'll just spamm ctrl-c
01:56:32 × Jd007 quits (~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007)
01:56:35 <ezzieyguywuf> usually the second or 3rd time things die
01:57:46 jedws joins (~jedws@121.209.189.201)
01:58:09 <maerwald> signal handling is embarrassing in haskell
01:58:25 <maerwald> (e.g. some of them are async exceptions, others not)
01:58:26 <ephemient> ctrl-z is SIGTSTP which can be trapped, though
01:58:48 christo joins (~chris@81.96.113.213)
01:59:51 <ephemient> BSD-likes generally also have ctrl-t = SIGINFO, which isn't super commonly used
02:04:28 × Varis quits (~Tadas@unaffiliated/varis) (Ping timeout: 272 seconds)
02:04:44 darjeeling_ joins (~darjeelin@122.245.218.97)
02:07:55 <ephemient> come to think of it, ctrl-c = SIGINT and kill = SIGTERM are also different…
02:08:21 × tinwood quits (~tinwood@general.default.akavanagh.uk0.bigv.io) (Remote host closed the connection)
02:10:53 <monochrom> unix has the highest signal-to-noise ratio >:)
02:11:28 tinwood joins (~tinwood@general.default.akavanagh.uk0.bigv.io)
02:12:18 <Axman6> thanks dad
02:12:29 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 260 seconds)
02:12:46 <MarcelineVQ> I linked special+t to kill program with largest mem use
02:12:50 <Axman6> ephemient: teah I wish more things used SIGINFO, the tools which do I find it really handy (dd is one IIRC)
02:13:05 <Axman6> MarcelineVQ: one day it's going to kill you
02:13:32 <MarcelineVQ> I don't have much memory :X
02:13:51 <MarcelineVQ> I only remember you because you're an axe and that's novel.
02:14:15 <MarcelineVQ> I can count on one hand the number of axe's I've spoken to
02:14:30 <int-e> ephemient: hmm. maybe it's just that nobody bothers to catch SIGTSTP then? Well, what do I know.
02:14:38 <MarcelineVQ> There's a joke in there about only having one hand due to an axe but I don't have the chops for it
02:14:50 <Axman6> We axes have a proud history spanning tens of thousands od years, we are hardly novel
02:14:59 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
02:15:06 <MarcelineVQ> But I've read a novel on them
02:15:23 <ephemient> yeah handling TSTP is pretty rare. a few tools like scp catch it
02:16:38 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
02:18:21 <Axman6> int-e: interesring trick, I'll keep it in mind (^Z; kill %1)
02:19:06 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:19:11 dandels joins (~dandels@unaffiliated/dandels)
02:20:02 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 260 seconds)
02:20:40 <int-e> Axman6: Hmm, reading the bash manpage... I should probably use %% instead, since %1 isn't the latest job, it's the first background job of the current shell.
02:21:32 conal joins (~conal@66.115.157.121)
02:22:07 × conal quits (~conal@66.115.157.121) (Client Quit)
02:22:48 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
02:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
02:23:56 Jd007 joins (~Jd007@d154-5-83-24.bchsia.telus.net)
02:24:11 <ephemient> or just a single %
02:26:01 × emptyflask quits (~jon@136.49.71.178) (Ping timeout: 264 seconds)
02:27:04 × m0rphism quits (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 260 seconds)
02:27:41 emptyflask joins (~jon@66.64.40.21)
02:27:43 manjaro-user_ joins (~manjaro-u@c-73-34-23-13.hsd1.co.comcast.net)
02:29:16 <maerwald> ephemient: yeah, ctrl-c in haskell is an async exception
02:29:49 × Jd007 quits (~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007)
02:30:25 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 240 seconds)
02:30:34 <maerwald> ephemient: and then ppl do this https://github.com/input-output-hk/cardano-wallet/blob/d5a5a5f9be8a560c53cad5235f0668d2f9bbebab/lib/launcher/src/Cardano/Startup/POSIX.hs#L34
02:30:38 conal joins (~conal@66.115.157.70)
02:30:48 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
02:30:48 × conal quits (~conal@66.115.157.70) (Client Quit)
02:31:43 <ephemient> I made a quick test program to see which signals the RTS installs handlers for by default; on my Linux system, seems to be HUP INT QUIT TERM
02:31:57 <ephemient> haven't found where in the RTS that happens though
02:32:41 conal joins (~conal@89.187.183.136)
02:33:50 <ephemient> actually I think I did find it, https://github.com/ghc/ghc/blob/480a38d4ad2f6fa2137e81e9f318dda445858e9c/rts/posix/Signals.c#L675
02:33:59 <ephemient> so it's also doing some fakery around SIGPIPE
02:34:40 <maerwald> I don't think it handles SIGTERM
02:34:50 × justan0theruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 264 seconds)
02:35:05 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 240 seconds)
02:36:42 <ephemient> https://paste.tomsmeding.com/CCkZFEKK
02:37:05 <ephemient> I don't know what the SIGTERM handler is, but it isn't SIG_DFL
02:39:13 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
02:41:05 × xff0x quits (~fox@2001:1a81:52e0:100:d64b:d56d:3d88:4e8b) (Ping timeout: 272 seconds)
02:41:13 aveltras joins (uid364989@gateway/web/irccloud.com/x-fhjjoqshwwdbqvei)
02:42:04 <int-e> ephemient: this is with runhaskell? if so, https://gitlab.haskell.org/ghc/ghc/-/blob/master/compiler/GHC/Utils/Panic.hs#L251 would be my guess
02:42:46 xff0x joins (~fox@2001:1a81:5319:4600:235b:ce31:3a53:2cac)
02:43:58 <ephemient> int-e: oh good point. if I compile it with ghc then I only see a SIGINT handler installed
02:43:59 <int-e> (if I compile that program, only SIGINT is caught and you already found out where)
02:46:27 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
02:46:46 Tario joins (~Tario@201.192.165.173)
02:48:03 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 272 seconds)
02:49:11 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
02:50:00 itnet7 joins (~itnet7@195.140.213.38)
02:51:11 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
02:51:38 Varis joins (~Tadas@unaffiliated/varis)
02:53:13 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
02:55:46 × manjaro-user_ quits (~manjaro-u@c-73-34-23-13.hsd1.co.comcast.net) (Ping timeout: 272 seconds)
02:56:50 drbean joins (~drbean@TC210-63-209-55.static.apol.com.tw)
02:58:16 × ke4pcx quits (~ke4pcx@024-158-093-129.res.spectrum.com) (Read error: Connection reset by peer)
02:58:34 perrier-jouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
02:58:53 ke4pcx joins (~ke4pcx@024-158-093-129.res.spectrum.com)
03:01:43 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
03:01:58 × emptyflask quits (~jon@66.64.40.21) (Ping timeout: 246 seconds)
03:02:11 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
03:03:01 × amerigo quits (uid331857@gateway/web/irccloud.com/x-yfslrwncojbqmybp) (Quit: Connection closed for inactivity)
03:03:54 emptyflask joins (~jon@136.49.71.178)
03:05:40 xirhtogal joins (~lagothrix@unaffiliated/lagothrix)
03:05:40 × lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (verne.freenode.net (Nickname regained by services)))
03:05:40 xirhtogal is now known as lagothrix
03:07:25 × urodna quits (~urodna@unaffiliated/urodna) (Quit: urodna)
03:08:00 heatsink_ joins (~heatsink@2600:1700:bef1:5e10:fc43:21f6:957b:5d9f)
03:09:03 × cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds)
03:10:07 chaskell joins (604a977a@96.74.151.122)
03:10:15 aarvar joins (~foewfoiew@2601:602:a080:fa0:9c96:3f48:55e0:3c7)
03:10:34 × conal quits (~conal@89.187.183.136) (Quit: Computer has gone to sleep.)
03:10:50 × heatsink quits (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Ping timeout: 264 seconds)
03:11:46 cantstanya joins (~chatting@gateway/tor-sasl/cantstanya)
03:12:06 aarvar parts (~foewfoiew@2601:602:a080:fa0:9c96:3f48:55e0:3c7) ()
03:14:34 × p-core quits (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Quit: p-core)
03:14:55 p-core joins (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
03:16:36 conal joins (~conal@212.102.44.134)
03:20:14 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
03:20:36 plutoniix joins (~q@184.82.203.72)
03:22:27 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
03:22:31 × chaskell quits (604a977a@96.74.151.122) (Remote host closed the connection)
03:22:48 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
03:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
03:24:21 × gedda quits (~gedda@185.195.233.164) (Ping timeout: 256 seconds)
03:25:30 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
03:26:10 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:26:52 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Quit: leaving)
03:29:24 Tario joins (~Tario@201.192.165.173)
03:31:01 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
03:31:36 Stanley00 joins (~stanley00@unaffiliated/stanley00)
03:41:01 <MrMobius> I was here yesterday trying to get stack ghci to work and it's still broken after resetting my computer: https://hastebin.com/ecaruyejaq.sql
03:52:10 × theDon quits (~td@94.134.91.66) (Ping timeout: 256 seconds)
03:53:10 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
03:54:04 theDon joins (~td@muedsl-82-207-238-201.citykom.de)
03:58:13 × fosterite quits (~fosterite@2600:6c46:7880:410a:3cda:cdb5:75e9:b6e9) (Remote host closed the connection)
03:59:56 fosterite joins (~fosterite@2600:6c46:7880:410a:3cda:cdb5:75e9:b6e9)
04:00:02 × haasn quits (~nand@mpv/developer/haasn) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
04:01:18 haasn joins (~nand@mpv/developer/haasn)
04:02:41 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
04:03:10 jpds joins (~jpds@gateway/tor-sasl/jpds)
04:04:41 × fosterite quits (~fosterite@2600:6c46:7880:410a:3cda:cdb5:75e9:b6e9) (Ping timeout: 272 seconds)
04:04:48 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 272 seconds)
04:05:50 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:08:49 SupaYoshii joins (~supayoshi@213-10-140-13.fixed.kpn.net)
04:09:09 × SupaYoshi quits (~supayoshi@213-10-140-13.fixed.kpn.net) (Ping timeout: 260 seconds)
04:13:05 × Anthaas quits (~Anthaas@unaffiliated/anthaas) (Ping timeout: 256 seconds)
04:13:43 × dftxbs3e quits (~dftxbs3e@unaffiliated/dftxbs3e) (Remote host closed the connection)
04:13:58 dftxbs3e joins (~dftxbs3e@unaffiliated/dftxbs3e)
04:15:43 Anthaas joins (~Anthaas@unaffiliated/anthaas)
04:16:01 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
04:17:34 sword865 joins (uid208942@gateway/web/irccloud.com/x-sjphxpixcxrxjevu)
04:18:15 × drbean quits (~drbean@TC210-63-209-55.static.apol.com.tw) (Ping timeout: 256 seconds)
04:18:23 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
04:20:00 SupaYoshi joins (~supayoshi@213-10-140-13.fixed.kpn.net)
04:20:43 × SupaYoshii quits (~supayoshi@213-10-140-13.fixed.kpn.net) (Ping timeout: 246 seconds)
04:21:00 jpds joins (~jpds@gateway/tor-sasl/jpds)
04:21:42 Jd007 joins (~Jd007@d154-5-83-24.bchsia.telus.net)
04:22:48 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
04:23:14 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
04:27:41 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Remote host closed the connection)
04:30:52 × texasmynsted quits (~texasmyns@99.96.221.112) (Ping timeout: 246 seconds)
04:33:11 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
04:33:18 texasmynsted joins (~texasmyns@99.96.221.112)
04:33:50 fosterite joins (~fosterite@2600:6c46:7880:410a:3cda:cdb5:75e9:b6e9)
04:39:02 × fosterite quits (~fosterite@2600:6c46:7880:410a:3cda:cdb5:75e9:b6e9) (Ping timeout: 264 seconds)
04:40:04 Katarushisu5 joins (~Katarushi@cpc149726-finc20-2-0-cust203.4-2.cable.virginm.net)
04:40:04 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
04:40:31 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
04:40:45 × Katarushisu quits (~Katarushi@cpc149726-finc20-2-0-cust203.4-2.cable.virginm.net) (Ping timeout: 240 seconds)
04:40:45 Katarushisu5 is now known as Katarushisu
04:40:53 jpds joins (~jpds@gateway/tor-sasl/jpds)
04:43:50 sorki joins (~sorki@gateway/tor-sasl/sorki)
04:43:54 hacxman joins (~hexo@gateway/tor-sasl/hexo)
04:44:03 × hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 240 seconds)
04:44:04 × srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 240 seconds)
04:44:18 hacxman is now known as hexo
04:44:57 sorki is now known as srk
04:49:22 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
04:49:57 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
04:55:05 × berberman quits (~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
04:55:26 berberman joins (~berberman@unaffiliated/berberman)
04:57:17 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
04:57:30 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
04:59:23 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
04:59:37 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
04:59:55 <sm[m]> MrMobius: maybe time to compare some other install methods - what about a GHC installed yourself from https://haskell.org/ghc ?
05:00:10 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
05:00:27 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
05:00:56 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
05:00:57 × aveltras quits (uid364989@gateway/web/irccloud.com/x-fhjjoqshwwdbqvei) (Quit: Connection closed for inactivity)
05:01:10 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
05:01:42 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
05:01:45 × jespada quits (~jespada@90.254.245.49) (Ping timeout: 240 seconds)
05:02:22 × jfe quits (~user@pool-71-184-149-134.bstnma.fios.verizon.net) (Ping timeout: 246 seconds)
05:02:27 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
05:04:23 <sm[m]> MrMobius: also, consider reporting it at https://github.com/commercialhaskell/stack/issues?q=is%3Aissue+label%3A%22component%3A+windows%22+ - I don't see it there
05:04:56 jespada joins (~jespada@90.254.245.49)
05:08:15 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
05:08:35 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:09:34 jedws joins (~jedws@121.209.189.201)
05:10:04 <ephemient> those errors look like something is wrong with your terminal
05:12:30 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Excess Flood)
05:12:52 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
05:12:53 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 265 seconds)
05:13:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
05:13:43 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
05:13:58 jfe joins (~user@pool-71-184-149-134.bstnma.fios.verizon.net)
05:15:01 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:a898:ee90:1b20:e047) (Remote host closed the connection)
05:16:57 × Wuzzy quits (~Wuzzy@p5790ed14.dip0.t-ipconnect.de) (Quit: Wuzzy)
05:18:28 × jfe quits (~user@pool-71-184-149-134.bstnma.fios.verizon.net) (Ping timeout: 256 seconds)
05:22:48 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
05:23:00 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
05:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
05:23:15 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
05:26:28 Tops21 joins (~Tobias@dyndsl-095-033-017-251.ewe-ip-backbone.de)
05:27:03 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:ad75:1255:fdff:5733) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:28:30 rayyyy joins (~nanoz@gateway/tor-sasl/nanoz)
05:29:00 × Tops2 quits (~Tobias@dyndsl-095-033-026-219.ewe-ip-backbone.de) (Ping timeout: 256 seconds)
05:29:16 DataComp_ joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
05:30:16 × DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 240 seconds)
05:31:04 Vulfe joins (~vulfe@2600:1702:31b0:34e0:a898:ee90:1b20:e047)
05:33:31 × ransom quits (~c4264035@8.47.12.52) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:33:44 × Tario quits (~Tario@201.192.165.173) (Ping timeout: 260 seconds)
05:33:48 mizlan joins (~michaella@c-67-169-7-31.hsd1.ca.comcast.net)
05:34:28 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
05:36:02 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:a898:ee90:1b20:e047) (Ping timeout: 264 seconds)
05:36:14 <MrMobius> sm[m], thanks. the chocolatey install instructions fail
05:39:34 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
05:41:37 × conal quits (~conal@212.102.44.134) (Quit: Computer has gone to sleep.)
05:42:12 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Quit: leaving)
05:42:52 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:ad75:1255:fdff:5733)
05:43:52 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
05:43:56 fosterite joins (~fosterite@2600:6c46:7880:410a:3cda:cdb5:75e9:b6e9)
05:45:40 conal joins (~conal@66.115.176.141)
05:48:15 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:48:34 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 246 seconds)
05:49:28 × fosterite quits (~fosterite@2600:6c46:7880:410a:3cda:cdb5:75e9:b6e9) (Ping timeout: 260 seconds)
05:51:42 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
05:54:01 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
05:54:12 × s00pcan quits (~chris@075-133-056-178.res.spectrum.com) (Remote host closed the connection)
05:54:38 s00pcan joins (~chris@075-133-056-178.res.spectrum.com)
05:55:32 × itnet7 quits (~itnet7@195.140.213.38) (Remote host closed the connection)
05:57:29 × conal quits (~conal@66.115.176.141) (Quit: Computer has gone to sleep.)
05:57:49 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
05:58:47 <sm[m]> MrMobius: https://www.haskell.org/ghc/download_ghc_8_10_3.html#windows64
05:59:56 <jared-w> `choco install ghc --version 8.10.3` fails?
06:02:39 × proteusguy quits (~proteusgu@cm-58-10-154-202.revip7.asianet.co.th) (Remote host closed the connection)
06:02:52 <jared-w> (and are you running it in powershell? what version of powershell are you using?)
06:04:28 proteusguy joins (~proteusgu@cm-58-10-154-202.revip7.asianet.co.th)
06:05:00 × dave_uy quits (~david@108.61.193.26) (Quit: The Lounge - https://thelounge.chat)
06:05:00 sord937 joins (~sord937@gateway/tor-sasl/sord937)
06:05:15 Vulfe joins (~vulfe@2600:1702:31b0:34e0:a898:ee90:1b20:e047)
06:07:35 new_haskeller joins (ae72a197@cpe00fc8d386d93-cm00fc8d386d90.cpe.net.cable.rogers.com)
06:08:18 dave_uy joins (~david@108.61.193.26)
06:08:20 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
06:11:42 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:ad75:1255:fdff:5733) (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:15:14 × bitmapper quits (uid464869@gateway/web/irccloud.com/x-qmmrndshdhsgokli) (Quit: Connection closed for inactivity)
06:15:38 × jrm quits (~jrm@freebsd/developer/jrm) (Read error: Connection reset by peer)
06:15:44 jrm2 joins (~jrm@freebsd/developer/jrm)
06:16:21 jrm2 is now known as jrm
06:17:23 × echoreply quits (~echoreply@unaffiliated/echoreply) (Quit: WeeChat 1.9.1)
06:17:51 echoreply joins (~echoreply@unaffiliated/echoreply)
06:17:54 × carlomagno quits (~cararell@148.87.23.11) (Remote host closed the connection)
06:18:39 × hive-mind quits (~hivemind@rrcs-67-53-148-69.west.biz.rr.com) (Ping timeout: 260 seconds)
06:19:40 × urb quits (5434a07f@tm.84.52.160.127.dc.cable.static.telemach.net) (Remote host closed the connection)
06:19:52 hive-mind joins (~hivemind@rrcs-67-53-148-69.west.biz.rr.com)
06:21:57 × zaquest quits (~notzaques@5.128.210.178) (Quit: Leaving)
06:22:16 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
06:22:49 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Read error: Connection reset by peer)
06:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
06:23:55 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 246 seconds)
06:26:30 ADG1089__ joins (~aditya@171.79.107.193)
06:27:53 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye)
06:28:11 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
06:28:37 Ariakenom joins (~Ariakenom@2001:9b1:efb:fc00:96e:b740:520f:7fea)
06:29:45 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
06:31:25 da39a3ee5e6b4b0d joins (~da39a3ee5@183.88.107.112)
06:32:01 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
06:32:22 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:33:15 × Tops21 quits (~Tobias@dyndsl-095-033-017-251.ewe-ip-backbone.de) (Read error: Connection reset by peer)
06:34:39 danvet joins (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
06:34:58 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 260 seconds)
06:34:58 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:a898:ee90:1b20:e047) (Ping timeout: 260 seconds)
06:38:40 × Jd007 quits (~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007)
06:40:24 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
06:40:46 rlaager1 joins (~rlaager@84.39.117.57)
06:46:34 zaquest joins (~notzaques@5.128.210.178)
06:48:48 berberman_ joins (~berberman@unaffiliated/berberman)
06:50:07 × berberman_ quits (~berberman@unaffiliated/berberman) (Max SendQ exceeded)
06:50:07 × berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds)
06:50:38 berberman joins (~berberman@unaffiliated/berberman)
06:50:50 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:53:39 × phasespace quits (~sar@89-162-33-21.fiber.signal.no) (Ping timeout: 260 seconds)
06:55:05 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
06:55:12 × spopejoy quits (~stuart@ool-44c5f8c9.dyn.optonline.net) (Quit: spopejoy)
06:56:01 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
07:02:01 × ericsagnes quits (~ericsagne@2405:6580:0:5100:e475:5ea1:1ccc:d1ed) (Ping timeout: 272 seconds)
07:02:27 <itai33[m]> What is the best way to search a Text for substrings that match a regexp? or at least, a case insensitvie search? Text.SplitOn almost works, but I don't think it can do case insensitivity
07:05:12 Vulfe joins (~vulfe@2600:1702:31b0:34e0:a898:ee90:1b20:e047)
07:06:19 <ephemient> all the common regex backends support Text (e.g. regex-tdfa, regex-pcre, etc.)
07:07:56 × emptyflask quits (~jon@136.49.71.178) (Ping timeout: 240 seconds)
07:08:19 plakband joins (~plakband@softbank126227038054.bbtec.net)
07:10:49 × Rudd0 quits (~Rudd0@185.189.115.103) (Ping timeout: 246 seconds)
07:14:07 ericsagnes joins (~ericsagne@2405:6580:0:5100:abd5:d2f9:a1fb:762)
07:14:21 × guest15 quits (~user@49.5.6.87) (Remote host closed the connection)
07:14:29 <ephemient> also, I haven't tried it myself, but if you're just searching for fixed strings, it looks like http://hackage.haskell.org/package/alfred-margaret supports case-insensitivity
07:14:31 guest15 joins (~user@49.5.6.87)
07:15:25 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
07:16:09 phasespace joins (~sar@80-89-47-117.inet.signal.no)
07:19:25 × ADG1089__ quits (~aditya@171.79.107.193) (Remote host closed the connection)
07:21:38 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:a898:ee90:1b20:e047) (Ping timeout: 264 seconds)
07:21:38 × pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Read error: Connection reset by peer)
07:22:12 bitmagie joins (~Thunderbi@200116b806730e0049347085952886ab.dip.versatel-1u1.de)
07:26:17 pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
07:26:28 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
07:26:36 × petersen quits (~petersen@redhat/juhp) (Ping timeout: 240 seconds)
07:26:57 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
07:28:25 × new_haskeller quits (ae72a197@cpe00fc8d386d93-cm00fc8d386d90.cpe.net.cable.rogers.com) (Ping timeout: 245 seconds)
07:30:26 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:31:52 revprez_1nzio joins (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
07:32:23 <itai33[m]> ephemient: i have to say i'm finding the regex packages to be a bit impenetrable
07:32:47 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
07:33:12 jpds joins (~jpds@gateway/tor-sasl/jpds)
07:34:26 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 272 seconds)
07:35:01 × revprez_anzio quits (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 264 seconds)
07:35:16 × Sgeo quits (~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
07:35:37 × da39a3ee5e6b4b0d quits (~da39a3ee5@183.88.107.112) (Ping timeout: 264 seconds)
07:37:03 petersen joins (~petersen@redhat/juhp)
07:37:03 × pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Read error: Connection reset by peer)
07:41:45 michalz joins (~user@185.246.204.78)
07:44:15 × bitmagie quits (~Thunderbi@200116b806730e0049347085952886ab.dip.versatel-1u1.de) (Quit: bitmagie)
07:44:37 × mizlan quits (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 264 seconds)
07:44:58 ADG1089__ joins (~aditya@171.79.107.193)
07:50:45 <plakband> Does anyone here maybe have a haskell evil mode indentation setup that they're happy with and willing to share?
07:51:02 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246)
07:53:09 × Jajik quits (xchlup2@gateway/shell/fi.muni.cz/x-zzgqerztklgehnpm) (Ping timeout: 260 seconds)
07:55:50 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246) (Ping timeout: 264 seconds)
07:56:06 Jajik joins (xchlup2@gateway/shell/fi.muni.cz/x-bsesdxyajdvfiayr)
07:58:19 bitmagie joins (~Thunderbi@200116b806730e0049347085952886ab.dip.versatel-1u1.de)
08:01:33 da39a3ee5e6b4b0d joins (~da39a3ee5@ppp-223-24-94-18.revip6.asianet.co.th)
08:02:27 dandels joins (~dandels@unaffiliated/dandels)
08:04:22 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
08:04:44 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
08:04:44 kyali joins (~kyali@APN-123-254-73-gprs.simobil.net)
08:05:15 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Quit: andreas303)
08:05:36 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 240 seconds)
08:06:11 andreas303 joins (~andreas@gateway/tor-sasl/andreas303)
08:06:52 × dansho quits (~dansho@ec2-13-231-43-236.ap-northeast-1.compute.amazonaws.com) (Remote host closed the connection)
08:07:18 dansho joins (~dansho@ec2-13-231-43-236.ap-northeast-1.compute.amazonaws.com)
08:07:27 <itai33[m]> plakband: I just use doom emacs which i'm pretty sure uses the default one and it's totally fine
08:07:44 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
08:08:17 × bitmagie quits (~Thunderbi@200116b806730e0049347085952886ab.dip.versatel-1u1.de) (Quit: bitmagie)
08:10:14 × da39a3ee5e6b4b0d quits (~da39a3ee5@ppp-223-24-94-18.revip6.asianet.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
08:11:38 idhugo joins (~idhugo@80-62-117-97-mobile.dk.customer.tdc.net)
08:11:39 × idhugo quits (~idhugo@80-62-117-97-mobile.dk.customer.tdc.net) (Remote host closed the connection)
08:12:03 idhugo joins (~idhugo@80-62-117-97-mobile.dk.customer.tdc.net)
08:12:15 × idhugo quits (~idhugo@80-62-117-97-mobile.dk.customer.tdc.net) (Remote host closed the connection)
08:12:33 × kyali quits (~kyali@APN-123-254-73-gprs.simobil.net) (Remote host closed the connection)
08:15:00 <plakband> itai33[m]: Doom's config has two tweaks to fix o and O. I've tried copying that but still ran into a number of cases where o, O, and RET have different behavior. Although, if you say you haven't had any issues, maybe there's some global config doom does that I should look into.
08:15:28 <itai33[m]> plakband: what issues do you have with the indentation?
08:16:21 Deide joins (~Deide@217.155.19.23)
08:17:18 mizlan joins (~michaella@c-67-169-7-31.hsd1.ca.comcast.net)
08:17:18 pfurla joins (~pfurla@ool-3f8fc2ff.dyn.optonline.net)
08:18:01 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
08:19:35 da39a3ee5e6b4b0d joins (~da39a3ee5@ppp-223-24-94-18.revip6.asianet.co.th)
08:20:28 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 246 seconds)
08:21:09 <plakband> Mostly just that the different ways to start a new line have different behavior. If you write a one-line function and start a new line below it using o, O, cc, and RET, do those all start on the same column?
08:22:06 cfricke joins (~cfricke@unaffiliated/cfricke)
08:22:47 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
08:22:55 bitmagie joins (~Thunderbi@200116b806730e0049347085952886ab.dip.versatel-1u1.de)
08:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
08:25:43 jedws joins (~jedws@121.209.189.201)
08:27:00 petersen_ joins (~petersen@redhat/juhp)
08:27:07 × petersen quits (~petersen@redhat/juhp) (Read error: Connection reset by peer)
08:28:08 petersen_ is now known as petersen
08:32:16 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
08:32:43 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
08:37:49 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
08:38:20 dhouthoo joins (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be)
08:38:24 × mizlan quits (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 272 seconds)
08:38:32 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
08:38:54 ur joins (5434a07f@tm.84.52.160.127.dc.cable.static.telemach.net)
08:39:41 <ur> Using Hasql.TH
08:39:57 <ur> any idea why this would give me a "parse error on input where"
08:39:58 <ur> selectUserDetails :: Statement Int32 (Maybe (Text, Text, Maybe Text))
08:40:36 <ur> the error is not tied to where, any code within maybeStatement gets that error
08:42:49 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 256 seconds)
08:43:21 zar joins (~zar@89-24-42-225.nat.epc.tmcz.cz)
08:46:44 <ur> Oh... I have to enable {-# LANGUAGE QuasiQuotes #-}
08:47:48 <ur> Is that so self-evident that it isn't mentioned in any of the examples? Honest question
08:48:29 × L29Ah quits (~L29Ah@unaffiliated/l29ah) (Ping timeout: 256 seconds)
08:48:31 pyx joins (~pyx@unaffiliated/pyx)
08:48:46 × pyx quits (~pyx@unaffiliated/pyx) (Client Quit)
08:51:19 × zar quits (~zar@89-24-42-225.nat.epc.tmcz.cz) (Remote host closed the connection)
08:51:26 zariuq joins (~zar@89-24-42-225.nat.epc.tmcz.cz)
08:51:59 × petersen quits (~petersen@redhat/juhp) (Read error: Connection reset by peer)
08:52:40 petersen joins (~petersen@redhat/juhp)
08:53:27 <idnar> ur: it's probably obvious when you're used to using TH/QQ, but I would submit a bug report to let them know it tripped you up as a newer user
08:53:36 <plakband> ur: at least some of the examples do have it, and GHC should suggest turning it on, but if it tripped you up I suppose it can't hurt to open a PR for the places you feel it's missing
08:53:40 jamm joins (~jamm@unaffiliated/jamm)
08:54:06 × heatsink_ quits (~heatsink@2600:1700:bef1:5e10:fc43:21f6:957b:5d9f) (Remote host closed the connection)
08:54:49 × zariuq quits (~zar@89-24-42-225.nat.epc.tmcz.cz) (Remote host closed the connection)
08:56:41 zar joins (~zar@89-24-42-225.nat.epc.tmcz.cz)
08:57:29 <idnar> ur: (LANGUAGE QuasiQuotes is what enables the `[blah|…|]` syntax)
08:57:43 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
08:58:08 × petersen quits (~petersen@redhat/juhp) (Read error: Connection reset by peer)
08:58:14 × jamm quits (~jamm@unaffiliated/jamm) (Ping timeout: 264 seconds)
08:58:34 petersen_ joins (~petersen@redhat/juhp)
08:59:10 petersen_ is now known as petersen
09:01:59 <ur> Well it's an issue I've had multiple times where something wouldn
09:02:08 chele joins (~chele@ip5b40237d.dynamic.kabel-deutschland.de)
09:02:15 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
09:02:18 <ur> Well it's an issue I've had multiple times where something wouldn't work because of a missing extension
09:03:48 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
09:03:56 × Varis quits (~Tadas@unaffiliated/varis) (Ping timeout: 240 seconds)
09:04:14 Varis joins (~Tadas@unaffiliated/varis)
09:05:11 × jassob quits (~jassob@korrob.vth.sgsnet.se) (Quit: WeeChat 2.5-rc1)
09:05:37 <tomsmeding> generally gcc suggests enabling language extensions in the error though
09:05:48 × dansho quits (~dansho@ec2-13-231-43-236.ap-northeast-1.compute.amazonaws.com) (Quit: Leaving)
09:06:14 <ur> But there are no imports in the github Hasql.TH example either. If I had looked up template haskell beforehand it would probably be second nature to add the QuasiQuotes extension.
09:06:30 <ur> Yeah, it didn't for whatever reason
09:09:43 Boomerang joins (~Boomerang@2a05:f6c7:2179:0:8da5:2e46:f1e1:ab48)
09:10:40 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
09:11:56 mizlan joins (~michaella@c-67-169-7-31.hsd1.ca.comcast.net)
09:12:09 jassob joins (~jassob@korrob.vth.sgsnet.se)
09:13:13 × cdan quits (~user@122-58-46-96-vdsl.sparkbb.co.nz) (Remote host closed the connection)
09:13:55 <ephemient> GHC does warn when you're using a syntax that obviously requires an extension
09:14:04 pera joins (~pera@unaffiliated/pera)
09:14:40 × tsrt^ quits (tsrt@ip98-184-89-2.mc.at.cox.net) ()
09:15:37 <ephemient> it would be nice to warn on quasiquotes too, but it's not obvious from looking at `[blah|...` whether it's a quasiquote or a list comprehension...
09:16:07 × mizlan quits (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
09:17:27 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Remote host closed the connection)
09:17:43 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
09:18:15 madjesti1 joins (~madjestic@86-88-72-244.fixed.kpn.net)
09:18:45 × hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-zznalggusqjucmjb) (Quit: Connection closed for inactivity)
09:18:57 <madjesti1> hey guys, https://stackoverflow.com/questions/65609361/n-body-with-yampa-frp-haskell
09:20:13 × eacameron quits (uid256985@gateway/web/irccloud.com/x-ycbifkwtkicpetrm) (Quit: Connection closed for inactivity)
09:22:47 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
09:23:07 madjestic joins (~Android@86-88-72-244.fixed.kpn.net)
09:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
09:25:52 kuribas joins (~user@ptr-25vy0i9xeq5rwmxnhs4.18120a2.ip6.access.telenet.be)
09:27:29 <kuribas> I found another handy combinator: whenApp :: (Applicative f, Alternative t) => Bool -> f (t a) -> f (t a)
09:27:29 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Excess Flood)
09:28:02 <tomsmeding> kuribas: what's its definition?
09:28:09 <kuribas> like do maybeResult <- whenApp someFlag $ just <$> doFetchAction
09:28:14 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 264 seconds)
09:28:34 <kuribas> whenApp True m = m; whenApp False _ = pure empty
09:28:43 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
09:29:03 <tomsmeding> oh man I was wondering why the Alternative was necessary, but didn't think what to put in the 'pure' lol
09:31:01 <kuribas> can be even implemented using whenMono: whenApp f = coerce . whenMono f . Ap . fmap Alt
09:33:47 knupfer joins (~Thunderbi@200116b82cd91d004c0e80fffea14553.dip.versatel-1u1.de)
09:33:47 × knupfer quits (~Thunderbi@200116b82cd91d004c0e80fffea14553.dip.versatel-1u1.de) (Client Quit)
09:34:02 knupfer joins (~Thunderbi@i5E86B4EC.versanet.de)
09:35:25 × knupfer quits (~Thunderbi@i5E86B4EC.versanet.de) (Client Quit)
09:35:27 knupfer1 joins (~Thunderbi@200116b82cd91d009c1734bea44afe6a.dip.versatel-1u1.de)
09:35:43 <idnar> :t guard
09:35:44 <lambdabot> Alternative f => Bool -> f ()
09:35:48 polyrain joins (~polyrain@2001:8003:e501:6901:84b4:a1b1:5c92:a848)
09:36:03 <idnar> @hoogle guarded
09:36:04 <lambdabot> Protolude guarded :: Alternative f => (a -> Bool) -> a -> f a
09:36:04 <lambdabot> Relude.Bool.Guard guarded :: Alternative f => (a -> Bool) -> a -> f a
09:36:04 <lambdabot> module Foreign.Marshal.Array.Guarded
09:36:12 <idnar> hmm
09:36:22 <kuribas> or even whenApp f = coerce @(App f (Alt t)) . whenMono f . coerce
09:36:31 w2gz is now known as w1gz
09:36:38 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
09:37:16 × bitmagie quits (~Thunderbi@200116b806730e0049347085952886ab.dip.versatel-1u1.de) (Quit: bitmagie)
09:37:18 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
09:37:50 knupfer1 is now known as knupfer
09:38:30 <kuribas> hmm, I could also make guard' :: (Applicative f, Alternative t) => Bool -> f (t ())
09:39:34 <kuribas> then guard' someFlag <* (Just <$> doFetchAction)
09:42:26 × polyrain quits (~polyrain@2001:8003:e501:6901:84b4:a1b1:5c92:a848) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:43:03 <kuribas> erm no guard' someFlag <* doFetchAction
09:43:28 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
09:43:42 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
09:44:21 <kuribas> Alternative f => Bool -> f a
09:44:28 <kuribas> @hoogle Alternative f => Bool -> f a
09:44:29 <lambdabot> Universum.Container asum :: (Container t, Alternative f, Element t ~ f a) => t -> f a
09:44:29 <lambdabot> Universum.Container.Class asum :: (Container t, Alternative f, Element t ~ f a) => t -> f a
09:44:29 <lambdabot> Data.Generator.Combinators asum :: (Generator c, Alternative f, f a ~ Elem c) => c -> f a
09:44:49 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
09:45:33 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
09:46:12 ph88^ joins (~ph88@2a02:8109:9e00:7e5c:f964:d8d4:1ec3:146c)
09:46:14 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
09:46:27 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 265 seconds)
09:47:03 hekkaidekapus_ joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
09:48:03 × hekkaidekapus quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
09:48:06 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
09:48:07 pera joins (pera@gateway/vpn/mullvad/pera)
09:48:20 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
09:49:02 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
09:50:05 × plakband quits (~plakband@softbank126227038054.bbtec.net) (Quit: WeeChat 2.9)
09:50:09 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
09:50:49 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
09:52:35 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
09:52:49 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
09:54:36 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
09:54:49 heatsink joins (~heatsink@2600:1700:bef1:5e10:ddbb:ad3c:80ea:163a)
09:54:58 × darjeeling_ quits (~darjeelin@122.245.218.97) (Ping timeout: 246 seconds)
09:55:14 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
09:56:50 <dminuoso> Is there a way to have GHC evaluate tyfams when emitting diagnostics?
09:57:02 dandart joins (~Thunderbi@home.dandart.co.uk)
09:57:03 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
09:57:07 <dminuoso> This is just not helpful https://gist.github.com/dminuoso/9ae328604fccf07740f5f4d914360bbc
09:57:18 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
09:57:29 <merijn> I mean, trivially "yes"
09:57:42 <merijn> But that's probably not the answer you're looking for :p
09:58:03 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
09:58:11 aveltras joins (uid364989@gateway/web/irccloud.com/x-cgtozfrhtbhoalmq)
09:58:11 <dminuoso> What do you mean?
09:58:53 <merijn> I mean that "you could implement it in GHC", therefore there is a way xD
09:59:03 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
09:59:26 × heatsink quits (~heatsink@2600:1700:bef1:5e10:ddbb:ad3c:80ea:163a) (Ping timeout: 264 seconds)
09:59:44 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
10:00:55 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
10:01:10 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
10:01:55 gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh)
10:02:26 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
10:02:31 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
10:02:45 <dminuoso> I can already see that approach being thrown out, on account of possibly non-terminating tyfams...
10:03:09 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
10:05:13 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
10:05:18 Rudd0 joins (~Rudd0@185.189.115.108)
10:05:41 <dminuoso> Though.. it would be sleek as a compiler flag.
10:05:48 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
10:06:00 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
10:06:02 <idnar> I have a function: foo :: forall (src :: Symbol) (dst :: Symbol). (KnownSymbol src, KnownSymbol dst) => …
10:06:02 <idnar> can I optimize this somehow when src ~ dest?
10:06:59 × da39a3ee5e6b4b0d quits (~da39a3ee5@ppp-223-24-94-18.revip6.asianet.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:07:52 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
10:08:31 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
10:08:32 <Boomerang> You could check if they are equal with https://hackage.haskell.org/package/base-4.14.1.0/docs/GHC-TypeLits.html#v:sameSymbol
10:08:58 fendor_ is now known as fendor
10:09:22 <Boomerang> case sameSymbol (Proxy @src) (Proxy @dst) of {Just Refl -> ...; Nothing -> ... }
10:09:26 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:10:07 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
10:10:52 <idnar> ooh, nice
10:10:56 × datajerk quits (~datajerk@sense.net) (Ping timeout: 240 seconds)
10:14:18 <kuribas> > let coerced f = coerce . f . coerce in coerced @(Maybe (Max Int)) (<>) (Maybe 2) Nothing
10:14:20 <lambdabot> error:
10:14:20 <lambdabot> Pattern syntax in expression context: coerced@(Maybe (Max Int))
10:14:20 <lambdabot> Did you mean to enable TypeApplications?
10:14:26 <kuribas> % let coerced f = coerce . f . coerce in coerced @(Maybe (Max Int)) (<>) (Maybe 2) Nothing
10:14:26 <yahb> kuribas: ; <interactive>:34:57: error:; Not in scope: type constructor or class `Max'; Perhaps you meant `M.Map' (imported from Data.Map)
10:14:38 datajerk joins (~datajerk@sense.net)
10:15:55 jedws joins (~jedws@121.209.189.201)
10:15:58 <idnar> kuribas: that's just coerced = coerce I believe
10:16:07 × jedws quits (~jedws@121.209.189.201) (Client Quit)
10:16:07 pfurla_ joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
10:16:11 zariuq joins (~zar@fw1.ciirc.cvut.cz)
10:16:42 <kuribas> ah indeed!
10:17:12 × pfurla quits (~pfurla@ool-3f8fc2ff.dyn.optonline.net) (Ping timeout: 272 seconds)
10:18:05 × jneira quits (5127ac9c@gateway/web/cgi-irc/kiwiirc.com/ip.81.39.172.156) (Quit: Connection closed)
10:18:14 <kuribas> idnar: but can it convert the type classes?
10:18:26 mizlan joins (~michaella@c-67-169-7-31.hsd1.ca.comcast.net)
10:18:46 × zar quits (~zar@89-24-42-225.nat.epc.tmcz.cz) (Ping timeout: 246 seconds)
10:21:21 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
10:21:38 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
10:21:53 <merijn> Whoo! I'm eligible for the FP Castle! ;) "You must have had at least one paper rejected from POPL, ICFP, PLDI or OOPSLA."
10:22:28 cfricke joins (~cfricke@unaffiliated/cfricke)
10:22:36 L29Ah joins (~L29Ah@unaffiliated/l29ah)
10:22:37 × mizlan quits (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
10:22:51 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Read error: Connection reset by peer)
10:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
10:23:25 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
10:23:38 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:1db3:d5d3:fa35:5ac1)
10:23:56 <Boomerang> % import Data.Semigroup
10:23:56 <yahb> Boomerang:
10:24:03 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
10:24:08 <Boomerang> % coerce @(Maybe (Max Int) -> Maybe (Max Int) -> Maybe (Max Int)) @(Maybe Int -> Maybe Int -> Maybe Int) (<>) (Just 2) (Just 3)
10:24:08 <yahb> Boomerang: Just 3
10:25:25 × pera quits (pera@gateway/vpn/mullvad/pera) (Ping timeout: 246 seconds)
10:27:23 pera joins (~pera@unaffiliated/pera)
10:28:19 __monty__ joins (~toonn@unaffiliated/toonn)
10:29:09 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
10:31:09 tito_04 joins (~taurux@net-188-152-137-51.cust.dsl.teletu.it)
10:32:46 × taurux quits (~taurux@net-93-144-87-101.cust.vodafonedsl.it) (Ping timeout: 246 seconds)
10:34:27 <kuribas> @hoogle (Applicative f, Alternative t) => Bool -> f (t a) -> f (t a)
10:34:28 <lambdabot> No results found
10:37:26 <Boomerang> % :t flip (bool empty)
10:37:26 <yahb> Boomerang: Alternative f => Bool -> f a -> f a
10:37:59 × madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Quit: -a- Connection Timed Out)
10:38:12 madjestic joins (~Android@86-88-72-244.fixed.kpn.net)
10:38:27 <Boomerang> % :t flip (bool $ pure empty)
10:38:27 <yahb> Boomerang: (Alternative f1, Applicative f2) => Bool -> f2 (f1 a) -> f2 (f1 a)
10:38:43 kritzefitz joins (~kritzefit@212.86.56.80)
10:45:49 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 264 seconds)
10:46:50 <tomsmeding> merijn: I like how the list of members in spirit is mostly alphabetically ordered, but not quite
10:47:08 × ADG1089__ quits (~aditya@171.79.107.193) (Read error: Connection reset by peer)
10:47:26 ADG1089__ joins (~aditya@171.79.107.193)
10:55:05 jedws joins (~jedws@121.209.189.201)
10:55:52 <itai33[m]> in regex-tdfa, how do i create a regexp to match digits? `compile defaultCompOpt defaultExecOpt "\\d"` doesn't work and just matches d
10:56:06 Franciman joins (~francesco@host-82-48-174-127.retail.telecomitalia.it)
10:58:19 pera joins (~pera@unaffiliated/pera)
11:02:51 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
11:03:19 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 260 seconds)
11:03:25 jpds joins (~jpds@gateway/tor-sasl/jpds)
11:04:59 <tomsmeding> [0-9] ?
11:05:56 <tomsmeding> itai33[m]: ^
11:07:18 <xerox_> itai33[m]: [:num:] works
11:07:30 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
11:07:30 <itai33[m]> tomsmeding yeah, it seems that posix regexp doesn't support \d type stuff. do you have any idea how to do case insensitive matching?
11:07:30 <itai33[m]> huh
11:07:38 <itai33[m]> i tried [:digit:] and it didn't good to know
11:07:52 <xerox_> [:digit:] also works for me
11:07:57 <itai33[m]> oh cool it's in CompOptions
11:08:25 <itai33[m]> xerox_: how did you do it?
11:08:40 <xerox_> itai33[m]: and by works I mean doesn't work!
11:08:43 errst joins (~errst@unaffiliated/tirej)
11:08:49 × Stanley00 quits (~stanley00@unaffiliated/stanley00) ()
11:08:52 <itai33[m]> lmao
11:09:27 <itai33[m]> wait does [:num:] not work of work?
11:09:52 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:10:00 <xerox_> I jumped the gun
11:12:21 <kuribas> itai33[m]: don't forget to wrap twice, like [[:digit:]]
11:12:30 <itai33[m]> wait what
11:12:37 <itai33[m]> why do i have to do that
11:12:38 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 260 seconds)
11:12:45 thc202 joins (~thc202@unaffiliated/thc202)
11:12:47 <xerox_> oooh..
11:13:03 <merijn> I think crucial step 1 here is "figure out which regex syntax flavour this library supports"
11:13:08 <kuribas> in a character class
11:13:14 <merijn> Step 2 being "read the documentation of that flavour"
11:13:20 <merijn> Instead of this guess work >.>
11:13:35 <itai33[m]> ohhhh it's part of the posix stuff
11:13:43 <kuribas> for example [_[:digit:]]
11:13:56 <itai33[m]> merijn: i did but it was too late and then i missed the part in the docs that says to double wrap
11:14:10 <itai33[m]> cause i just kind of assumed that all regexps are the same with minor differences
11:14:19 <itai33[m]> I didn't know posix was so different
11:15:30 <dminuoso> https://wiki.haskell.org/Regex_Posix
11:15:34 <dminuoso> This is a hilarious read. :)
11:15:54 <merijn> itai33[m]: PCRE and posix are basically entirely different syntax with very little similarities
11:16:46 <itai33[m]> oops
11:18:28 new_haskeller joins (~new_haske@2607:fea8:be1f:ddc0:2d5f:bcd9:8fec:e874)
11:18:44 <opqdonut> posix-compatible regular expressoins ;)
11:19:04 <merijn> dminuoso: You know what's a hilarious read?
11:19:47 × new_haskeller quits (~new_haske@2607:fea8:be1f:ddc0:2d5f:bcd9:8fec:e874) (Quit: new_haskeller)
11:19:53 <merijn> dminuoso: Vanessa and maerwald whenever either of them talks about "tar" :p I'm at the same time surprised and not surprised at how broken some common tech is :p
11:20:09 <dminuoso> Vanessa who?
11:20:39 <Uniaika> McHale, dminuoso
11:20:52 <merijn> dminuoso: What, you don't know our PL shitposting memelord (well, lady, I suppose)? :p
11:20:55 <merijn> dminuoso: https://twitter.com/vamchale
11:21:19 <__monty__> merijn: I'm interested in what they have to say. I submitted an issue to ghcup about making their tar invocations *more* compatible than POSIX but they didn't want it.
11:21:19 <Uniaika> more than just PL shitposting, she's an APL adept
11:21:24 mizlan joins (~michaella@c-67-169-7-31.hsd1.ca.comcast.net)
11:22:04 <merijn> Uniaika: Well, and ATS shill and really just "anything that no one would consider mainstream"-shill ;)
11:22:15 <Uniaika> ah yes ATS thanks
11:22:20 <Uniaika> I wasn't so certain between the two
11:22:32 <merijn> Uniaika: She shills J all the time, so probably APL too :p
11:22:41 <Uniaika> haha
11:22:47 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Read error: Connection reset by peer)
11:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
11:24:24 <merijn> dminuoso: https://twitter.com/vamchale/status/1337937290262417417 :)
11:25:45 afx237_ joins (~afx237@107.170.10.178)
11:26:05 × mizlan quits (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
11:27:17 jedws joins (~jedws@121.209.189.201)
11:31:07 pera joins (~pera@unaffiliated/pera)
11:31:35 new_haskeller joins (ae72a197@cpe00fc8d386d93-cm00fc8d386d90.cpe.net.cable.rogers.com)
11:31:43 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
11:35:14 Guest19 joins (ae72a197@gateway/web/cgi-irc/kiwiirc.com/ip.174.114.161.151)
11:36:18 <ur> I'm confused by Profunctors.
11:36:25 <ur> dimap :: (a -> b) -> (c -> d) -> p b c -> p a d
11:36:46 <ur> I think I understand it in the case where b and c are the same function
11:37:45 × knupfer quits (~Thunderbi@200116b82cd91d009c1734bea44afe6a.dip.versatel-1u1.de) (Remote host closed the connection)
11:37:54 knupfer joins (~Thunderbi@200116b82cd91d007c6f9483115a4f67.dip.versatel-1u1.de)
11:38:13 <ur> I mean where b and c are the same and a and d are the same type
11:39:41 <ur> so (a -> b) and (b -> a) one converts from a to b so that some function can be done to b and the other converts b back to a
11:39:46 <dminuoso> ur: Start off with a particular choice of a profunctor.
11:39:59 <dminuoso> (->) is a simple example
11:40:07 <dminuoso> If we set p ~ (->), then we obtain
11:40:19 <dminuoso> dimap :: (a -> b) -> (c -> d) -> (b -> c) -> a -> d
11:40:40 <dminuoso> This just composes two functions (the first two arguments) onto both ends of another function (the third argument)
11:42:24 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:42:26 <dminuoso> In Haskell, a profunctor is a 2-ary type constructor, and you can contramap over one argument and map over the second argument. dimap does both in one go.
11:42:43 <dminuoso> (Where contramap is the class method of Contravariant functors)
11:43:24 <dminuoso> that gives us laws like `contramap f = dimap f id` and `fmap f = dimap id f`
11:43:45 <dminuoso> (These laws are fictional because the type system is in the way)
11:43:51 <ur> dminuoso: Thanks! Hm... it's getting a bit clearer I think. I have to think about it
11:44:00 sqrt2 joins (~ben@unaffiliated/sqrt2)
11:44:23 × tomboy64 quits (~tomboy64@gateway/tor-sasl/tomboy64) (Ping timeout: 240 seconds)
11:44:43 × sqrt2_ quits (~ben@unaffiliated/sqrt2) (Ping timeout: 260 seconds)
11:44:43 × cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds)
11:45:02 × ericsagnes quits (~ericsagne@2405:6580:0:5100:abd5:d2f9:a1fb:762) (Ping timeout: 264 seconds)
11:45:13 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 264 seconds)
11:46:51 <__monty__> :t contramap
11:46:52 <lambdabot> Contravariant f => (a -> b) -> f b -> f a
11:46:58 <dminuoso> ur: To clarify on that last remark: If we have `instance Profunctor T`, then we cant have `instance Contravariant (T a)` because the type parameter order is wrong).
11:47:35 <dminuoso> So if we squint a bit, and imagine we had an `instance Contravariant FlippedT a` where `newtype FlippedT a b = FlippedT (T b a)`, and then the law would hold
11:47:51 <dminuoso> Err, an `instance Contravariant (FlippedT a)` of course.
11:48:42 <__monty__> I suppose ((->) r) isn't an instance of Contravariant? Yeah, doesn't make sense. I was thinking of it as "composition in the other direction" but that leads nowhere.
11:48:54 <dminuoso> __monty__: Right, that's what we have the Op newtype wrapper for.
11:49:11 <dminuoso> (Which is a concrete example of the FlippedT above)
11:50:15 <idnar> ur: I like to think `dimap :: Profunctor (~>) => (a -> b) -> (c -> d) -> (b ~> c) -> (a ~> d)`
11:50:45 <dminuoso> Back in the days, this used to be possible to write.. :)
11:50:56 jmchael joins (~jmchael@81.174.205.210)
11:51:06 tomboy64 joins (~tomboy64@gateway/tor-sasl/tomboy64)
11:51:12 <dminuoso> Or, alternatively, you can write type variables with ``
11:51:29 <dminuoso> dimap :: Profunctor p => (a -> b) -> (c -> d) -> (b `p` c) -> (a `p` d)
11:52:13 <ur> Hm... I think I may be getting confused because I'm assigning to much meaning to the order of arguments in the dimap type definition
11:52:34 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246)
11:52:47 <ur> too*
11:52:55 cantstanya joins (~chatting@gateway/tor-sasl/cantstanya)
11:53:33 <__monty__> ur: I think it's easier to understand if you first grok variance/contravariance for functions.
11:53:56 <dminuoso> ur: Perhaps, for this to be truly motivating, you should consider a second but similar example other than (->)
11:54:19 Alleria joins (~textual@zrcout.mskcc.org)
11:54:27 <dminuoso> % newtype Star f d c = Star { runStar :: d -> f c }
11:54:28 <yahb> dminuoso:
11:54:33 <idnar> dimap :: Profunctor (~>) => (a' -> a) -> (b -> b') -> (a ~> b) -> (a' ~> b')
11:54:43 Alleria is now known as Guest28673
11:54:46 <dminuoso> Now, we can write an `instance Functor f => Profunctor (Star f)`
11:54:51 <__monty__> % :info Op
11:54:51 <yahb> __monty__: ; <interactive>:1:1: error: Not in scope: `Op'
11:55:51 jedws joins (~jedws@121.209.189.201)
11:56:21 <dminuoso> ur: Now, it should be obvious that here, we too, can contramap over the `d` and `map` over the c` argument bits. Right?
11:56:29 heatsink joins (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7)
11:56:34 <dminuoso> (It's sort of like (->) but there's an extra functor on the right hand side)
11:56:57 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246) (Ping timeout: 260 seconds)
11:57:15 ericsagnes joins (~ericsagne@2405:6580:0:5100:e26e:cf9:1dd6:9615)
12:00:22 <ur> dminuoso: Hm... I don't know if this makes sense, but I'm not quite sure what the difference between map and contramap \means\
12:00:31 <dminuoso> ur: Ah!
12:00:39 <dminuoso> % :t contramap
12:00:40 <yahb> dminuoso: Contravariant f => (a -> b) -> f b -> f a
12:00:52 <dminuoso> ur: Stare at this for a while.
12:01:14 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7) (Ping timeout: 264 seconds)
12:01:50 <dminuoso> c.f.:
12:01:53 <dminuoso> % :t fmap
12:01:53 <yahb> dminuoso: Functor f => (a -> b) -> f a -> f b
12:02:22 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
12:03:15 <__monty__> fmap on (->) is contramap on Op, right?
12:03:39 <dminuoso> No.
12:04:03 <dminuoso> If we squint over the Op newtype wrapper, than `fmap` acts on what the function returns and `contramap` what the function accepts.
12:06:04 <ur> dminuoso: I guess what confuses me is how a function which takes (a -> b) and f b and returns f a can do anything with (a -> b) given that none of the arguments are 'a'. I think here I'm missing something fundamental
12:06:38 <opqdonut> ur: consider f b = b -> Int
12:07:23 × dandart quits (~Thunderbi@home.dandart.co.uk) (Ping timeout: 256 seconds)
12:08:29 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:1db3:d5d3:fa35:5ac1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
12:09:34 Torro joins (Torro@gateway/vpn/protonvpn/torro)
12:09:36 × kritzefitz quits (~kritzefit@212.86.56.80) (Ping timeout: 240 seconds)
12:09:38 <ur> opqdonut: so that converts some type b into Int? But I suppose b needs to be constrained to an instance of some typeclass otherwise the function is undefinable?
12:10:00 × plutoniix quits (~q@184.82.203.72) (Read error: Connection reset by peer)
12:11:01 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 264 seconds)
12:13:22 plutoniix joins (~q@184.82.203.72)
12:13:33 dandart joins (~Thunderbi@home.dandart.co.uk)
12:14:26 Lycurgus joins (~niemand@cpe-45-46-139-165.buffalo.res.rr.com)
12:15:04 <idnar> ur: fmap uses (a -> b) to turn a thing that "gives" you as into one that "gives" you bs; contramap uses (a -> b) to turn a thing that "takes" bs into one that "takes" as
12:16:56 × Guest19 quits (ae72a197@gateway/web/cgi-irc/kiwiirc.com/ip.174.114.161.151) (Quit: Connection closed)
12:18:48 kritzefitz joins (~kritzefit@212.86.56.80)
12:18:50 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
12:21:32 Entertainment joins (~entertain@104.246.132.210)
12:22:46 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
12:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
12:24:33 <opqdonut> ur: sure, there are no interesting functions of type `forall b. b -> Int`, but you can take a specific function like ord :: Char -> Int and give it to a function that expects a function of type b -> Int
12:24:55 FastestCoderOnEa joins (5ab2f14a@74.241.broadband11.iol.cz)
12:25:06 <FastestCoderOnEa> Hi, anyone here?
12:25:32 <opqdonut> ur: just like map has type (a -> b) -> [a] -> [b] but there are no useful functions of type forall a b. a -> b
12:25:50 <Rembane> FastestCoderOnEa: We are here.
12:26:38 noop_noob joins (31e4c3d3@49.228.195.211)
12:26:56 <Boomerang> % newtype Predicate a = Predicate (a -> Bool)
12:26:56 <yahb> Boomerang:
12:27:19 <ur> Right, right. I think contramap makes sense now. It's just slightly less intuitive to me than fmap
12:27:32 <Boomerang> % mapPredicate f (Predicate g) = Predicate (f . g)
12:27:32 <yahb> Boomerang:
12:27:39 <Boomerang> % :t mapPredicate
12:27:40 <yahb> Boomerang: (Bool -> Bool) -> Predicate a -> Predicate a
12:27:47 <Boomerang> Hehe ^^
12:28:01 <FastestCoderOnEa> yahb Cool, I have this question, https://pastebin.pl/view/fd07d3e6
12:28:22 <Boomerang> % mapPredicate f (Predicate g) = Predicate (g . f)
12:28:22 <yahb> Boomerang:
12:28:24 <Boomerang> % :t mapPredicate
12:28:25 <yahb> Boomerang: (a1 -> a2) -> Predicate a2 -> Predicate a1
12:28:33 <ur> Basically it's just A -> B -> C and A -> C -> B. So if you have A and B and need C you use fmap if you have A and C and need B you use contramap
12:28:57 <ur> and profunctor I suppose is just some kind of composition of these two concepts
12:29:29 <FastestCoderOnEa> yahb Do you think it's something you can help with?
12:29:49 <noop_noob> FastestCoderOnEa, why are you asking a bot
12:29:51 <merijn> FastestCoderOnEa: Eh, yahb is a bot :)
12:30:18 × __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving)
12:30:36 <noop_noob> FastestCoderOnEa, I clicked on your link and the page seems to not be loading...
12:30:44 <FastestCoderOnEa> OH, can someone help me, I have this question, https://pastebin.pl/view/fd07d3e6
12:30:48 <Boomerang> It doesn't load for me either
12:31:25 <FastestCoderOnEa> I need some help with Haskell... I have this code so far: ``` {-# LANGUAGE OverloadedStrings #-} module Main where import System.Posix.Process import System.Process import System.Environment import Data.List executeChild = do putStrLn "Child
12:31:25 <FastestCoderOnEa> executed!" main :: IO () main = do putStrLn "Your code goes here" -- Uncomment this to pass stage 1 args <- getArgs childPid <- forkProcess executeChild if childPid == -1 then putStrLn "Error forking!" else if childPid
12:31:26 <FastestCoderOnEa> then putStrLn "Child terminates!" else do (errCode, stdout', stderr') <- readProcessWithExitCode (head $ drop 3 args) (tail $ drop 3 args) "" putStrLn stdout' return () ``` And I want to end up with something similiar to this Python code: ``` import
12:31:26 <FastestCoderOnEa> sys import os def main(): print("Your code goes here!") # Uncomment this block to pass the first stage child_pid = os.fork() if child_pid == -1: print("Error forking!") elif child_pid: status = os.wait() print("Child
12:31:27 <noop_noob> FastestCoderOnEa Try https://pastebin.com/?
12:31:27 <FastestCoderOnEa> terminates!") else: # Replace current program with calling program. print(os.system(' '.join(sys.argv[3:]))) if __name__ == "__main__": main() ``` The shell command is executed correctly, the problem is creating the fork, can you help with that? Here's
12:31:27 <FastestCoderOnEa> an example, I don't know if it's helpful, https://magnus.therning.org/posts/2009-08-21-727-forkexec-in-haskell.html
12:31:44 <noop_noob> uhhhhhh pasting into IRC probably doesn't work well lol
12:32:00 <FastestCoderOnEa> Here it is, https://pastebin.com/7B2SSAH2
12:32:16 <merijn> FastestCoderOnEa: Don't use forkProcess
12:32:43 <noop_noob> TIL you can fork in haskell
12:32:52 <merijn> You can't sensibly fork Haskell processes, anyone who tells you differently is lying
12:33:05 <merijn> noop_noob: That depends on your definition of "can"
12:33:16 <FastestCoderOnEa> If someone could provide a complete code example that would be really much appreciated, I'm not very good at Haskell, thanks :)
12:33:18 <noop_noob> Why is forking a haskell process hard?
12:33:23 <merijn> noop_noob: If you meant "with anything resembling sane semantics/behaviour", then no
12:33:32 <noop_noob> FastestCoderOnEa Why are you trying to fork in haskell? Parallelism?
12:33:39 <noop_noob> Multithreading?
12:33:44 <merijn> noop_noob: Forking *any* process is nearly impossible to do safely, which is why posix deprecated fork over 20 years ago
12:34:01 <merijn> noop_noob: Haskell's runtime being multi-threaded just makes things even worse
12:34:22 <noop_noob> What? Fork is deprecated?
12:34:25 <noop_noob> THat's news to me.
12:34:27 <merijn> noop_noob: You know what you can safely do in a forked process?
12:34:36 <merijn> "exec", that's it
12:34:56 <merijn> noop_noob: The correct posix way of creating new processes is posix_spawn
12:35:02 andreas303 joins (~andreas@gateway/tor-sasl/andreas303)
12:35:05 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
12:35:06 <Uniaika> merijn: wow, TIL
12:35:16 <FastestCoderOnEa> I just want to program to work the same way as the Python program, which method is not so important.
12:35:30 <merijn> Uniaika: forking in multi-threaded processes is just insanity
12:35:37 <Uniaika> merijn: oh certainly lol
12:35:44 <ur> Hm... with regard to types everything honestly seems much clearer if I disregard all the words and just look at the type variables. Basically function operating on type variables as complex as it may seem is basically just a way to get one configuration of types into another. That sounds obvious now that I say it, but I didn't quite realize it
12:35:44 <ur> bfore
12:36:33 <FastestCoderOnEa> Is it impossible to do what I want with Haskell?
12:36:41 <merijn> FastestCoderOnEa: If you want to run another process the best way is to just use the process package
12:38:24 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Ping timeout: 260 seconds)
12:38:28 <merijn> noop_noob: The problem is the fork creates a 1-to-1 copy of the *memory* of the process
12:38:51 <merijn> noop_noob: But fork() creates only *1* thread in the new process (the thread corresponding to the one that called fork)
12:39:22 <merijn> noop_noob: So if you have, say, any mutexes (probably pretty likely in multi-threaded code!) then any mutexes that are locked when you call fork are *permanently* locked
12:39:40 <merijn> noop_noob: You know what code uses mutexes and stuff like that to be threadsafe?
12:39:48 <merijn> noop_noob: "basically all off libc"
12:40:27 <merijn> noop_noob: Which means that after calling fork() in a multi-threaded process it's unsafe to call *any* function that you are not aboslutely 100% sure does not use a mutex or your code can deadlock
12:40:50 <merijn> In practice, this means that the only *reasonable* thing that you can call is "exec"
12:41:30 <FastestCoderOnEa> I need to either create a child process (fork+exec), or replace your process with another one (exec).
12:41:36 <FastestCoderOnEa> Is that possible?
12:41:41 geekosaur joins (ac3a8b34@172.58.139.52)
12:41:49 <merijn> Since GHC's RTS uses threads internally any Haskell program is multi-threaded, meaning that stuff is radically unsafe
12:41:50 fosterite joins (~fosterite@071-082-136-216.res.spectrum.com)
12:41:56 <merijn> FastestCoderOnEa: Like I said, use the process package
12:41:59 <merijn> @hackage process
12:41:59 <lambdabot> https://hackage.haskell.org/package/process
12:42:18 <FastestCoderOnEa> Ok, I'm sorry but could you please provide a code example?
12:42:27 <FastestCoderOnEa> I'm really bad at Haskell
12:42:30 <FastestCoderOnEa> Sorry
12:43:07 <tdammers> the `process` packages provides plenty of code examples
12:43:34 <tdammers> https://hackage.haskell.org/package/process-1.6.10.0/docs/System-Process.html look here. lots and lots of examples.
12:43:50 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
12:45:33 <merijn> noop_noob: basically, the posix_spawn API combines "fork+exec" and a bunch of other things like the environment in a single call, so less room to mess up. Now, posix_spawn likely *internally* still use the fork/clone/etc. syscalls, depending on the OS. It also allows you set all sorts of other things, such as process group, masking, scheduler, etc.
12:45:55 boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
12:46:14 × noop_noob quits (31e4c3d3@49.228.195.211) (Remote host closed the connection)
12:46:18 m0rphism joins (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
12:46:42 × plutoniix quits (~q@184.82.203.72) (Quit: Leaving)
12:46:50 <ggVGc> has anyone had a real-world situation where Data.HashMap was faster than Data.Map? In my own usage, I tried changing, and HashMap was measurabily slower, but I guess I'm also doing about the same amount of inserts as lookups
12:47:14 <merijn> ggVGc: I believe I've seen a few, but I don't recall where
12:47:33 × FastestCoderOnEa quits (5ab2f14a@74.241.broadband11.iol.cz) (Remote host closed the connection)
12:47:35 <ggVGc> in my mind, it seems hard for hashmap to be faster, since something that is easily hashable should also be easily implementing Ord
12:47:39 <merijn> ggVGc: In general the (seemingly) universally accepted "fact" that hashmaps are better than tree based dictionaries is kinda bogus, tbh
12:47:42 <ggVGc> easily meaning "fast"
12:48:13 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 246 seconds)
12:48:16 <merijn> Map has pretty solid performance, tbh. I've used with tens of thousands of keys in fairly tight loops without much problems
12:48:57 <ggVGc> merijn: I feel the measurements people do and post measure the insertion and lookup with HashMap, not counting the hashing, which ends up being faster (inside the map implementation), but isn't really useful
12:49:11 <lyxia> you only need to hash once and then lookup the hash, as opposed to repeatedly compare the keys themselves. That becomes worthwhile when the keys are big.
12:49:12 × Alleria_ quits (~AllahuAkb@2603-7000-3040-0000-6148-1689-ef18-302b.res6.spectrum.com) (Ping timeout: 260 seconds)
12:49:15 <ggVGc> sinve you always have to hash anyway...
12:49:23 <merijn> ggVGc: I would always default to Map unless there's either 1) a provable reason it's too slow and a reason to believe HashMap to be faster, or 2) you can only use HashMap due to lack of Ord
12:49:51 <ggVGc> yeah, that second case I think is my only reason for using it, and I haven't had that vase yet
12:50:00 <idnar> ggVGc: what is the type of your keys?
12:50:14 <merijn> lyxia: Maybe, but I'd wanna see benchmarks first :p
12:50:22 Alleria_ joins (~AllahuAkb@2603-7000-3040-0000-2c86-5e43-4646-d432.res6.spectrum.com)
12:50:30 bitmagie joins (~Thunderbi@200116b806730e0049347085952886ab.dip.versatel-1u1.de)
12:50:31 <lyxia> fair enough!
12:50:33 <kuribas> lyxia: when the keys are big, and need to be compared completely
12:50:35 <tdammers> from a theoretical point of view, the best you can do given only Ord is O(log n), whereas hashmaps can deliver O(1). in practice, n is often small enough for the constant factors to matter, and an Ord-based map data structure may outperform a hashmap after all
12:50:37 worc3131 joins (~quassel@2a02:c7f:dcc4:6500:cf0e:3346:8766:ab20)
12:50:45 <merijn> ggVGc: I feel the "hashmaps are best" comes from the Python/JS/Ruby crowd where everyone uses hashmaps because that's what they happen to have and they have pretty optimised implementations
12:50:56 <merijn> tdammers: Eh, that's just a lie
12:50:59 <kuribas> lyxia: for example, comparing a set of different sizes is O(1)
12:51:07 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:1db3:d5d3:fa35:5ac1)
12:51:13 <tdammers> oh, and let's not forget the inherent gnarliness of hashmaps outside of the happy path
12:51:15 <merijn> tdammers: Because that's *best* case complexity, not average or worst. It also ignores the cost of hashing keys
12:51:18 <tdammers> including the famous hashdos
12:51:33 <lyxia> kuribas: good point
12:51:57 <merijn> Everyone always likes to gloss over the fact that HashMaps are more space hungry, have a terrible worst case complexity, etc.
12:52:01 <ggVGc> idnar: for this specific instance they're an ADT, but they're almost always the fist constructor, and this constructor has an a cached hash of the content (which I use for other things), so the Hashable implementation is just using this already pre-calculated hash
12:52:13 <ggVGc> and I also use this hash for the Ord implementation
12:52:17 <ggVGc> and Data.Map is faster
12:52:30 Tario joins (~Tario@201.192.165.173)
12:53:45 <idnar> ggVGc: yeah, I think things like Text are where HM shines
12:53:56 × fosterite quits (~fosterite@071-082-136-216.res.spectrum.com) (Ping timeout: 240 seconds)
12:53:57 <tdammers> I mean, in some cases hashmaps are next to impossible to beat - but those cases involve knowing more about your data than "we can serialize things into bytestrings of arbitrary but finite length"
12:54:56 <ggVGc> idnar: the cached hash I have is of a Text though...
12:55:46 <tdammers> like, on rare occasions, you can come up with a perfect hashing function that has reasonable memory overhead and can be computed fast, and when that is the case, you have a near-unbeatable hashmap. but usually you can't do that, especially not in the kind of general case that a library-provided hashmap has to cater for
12:56:24 <idnar> ggVGc: oh sure, I mean like an unadorned Text
12:56:27 <ggVGc> idnar: with some cruft removed, this is essentially it: https://gist.github.com/26722b6bc0cb65de9fd9dee8ef336328
12:56:45 × p8m quits (p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 240 seconds)
12:56:47 × Forlorn quits (~Forlorn@unaffiliated/forlorn) (Read error: Connection reset by peer)
12:56:52 <kuribas> maybe it's better if your Ord is very slow, like when you have many similar strings.
12:58:09 <merijn> uhoh...
12:58:38 <merijn> New persistent's migration helpfully corrupt the entire database, that's...a problem
12:58:52 <tdammers> oh, and there's another fun thing about hashmaps: the order in which keys are stored is, by design, unpredictable, at least in the normal case where your hashing function isn't perfect, and you have protected your hashmap against hashdos using a randomized seed. this means that sequential key access is going to have you jump around in memory, and your CPU caches will hate you for it
12:59:04 safinaskar joins (6dfc5ba3@109-252-91-163.nat.spd-mgts.ru)
12:59:04 <ggVGc> great, then the software developers have work to do merijn. Creating jobs.
12:59:26 <kuribas> yuck, I wouldn't trust any automatic migration software.
12:59:33 <kuribas> the best is writing your own migrations IMO
12:59:38 <tdammers> merijn: you know, I like hand-written migrations. It's a bit more work, but at least you can meaningfully test them.
12:59:44 <ggVGc> tdammers: this is why I was asking for a real-world scenario where someone has used Data.HashMap (specifically the library implementation provided in Haskell)
12:59:51 <ggVGc> Since it seems not very useful to me
13:00:05 <tdammers> I believe Aeson does
13:00:06 <kuribas> tdammers: to be fair, I don't think Data.Map is very cash local friendly.
13:00:13 <kuribas> cache
13:00:18 <ggVGc> I feel like every case where it would be fast, would also have a good implementation of Ord and hence Data.Map would work well
13:00:20 <merijn> tdammers: I have a...combination of manual + persistent migrations
13:01:36 <ggVGc> kuribas: if you're not friendly to your cache, you 're by extension not friendly to your cash, eventually, so you were right the first time
13:01:42 <safinaskar> how to convert parse tree (i. e. raw output from dummy parser) to AST and vice versa without error-prone boilerplate? maybe this is possible somehow using lenses? this is example of types I want to convert between: https://mail.haskell.org/pipermail/haskell-cafe/2021-January/133296.html
13:01:45 × worc3131 quits (~quassel@2a02:c7f:dcc4:6500:cf0e:3346:8766:ab20) (Ping timeout: 272 seconds)
13:02:26 worc3131 joins (~quassel@2a02:c7f:dcc4:6500:cf0e:3346:8766:ab20)
13:02:47 <kuribas> safinaskar: why not parse into the AST directly?
13:04:40 <tdammers> I don't think there is a free lunch solution for the general case
13:04:56 × ADG1089__ quits (~aditya@171.79.107.193) (Remote host closed the connection)
13:05:09 <tdammers> simply because the CST -> AST transform is likely not reversible to begin with, or at least it cannot be guaranteed to be reversible in the general case
13:05:18 × jb55 quits (~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection)
13:05:45 × centril quits (~centril@213-66-146-92-no250.tbcn.telia.com) (Ping timeout: 240 seconds)
13:05:45 <merijn> tdammers: Basically, the newest version of persistent renumbers all primary keys on migration, violating every foreign key in the database
13:05:50 <merijn> So, uh, yeah
13:05:56 <tdammers> jesus christ
13:06:01 <merijn> A bit of a problem
13:06:08 <tdammers> I would say so
13:06:11 noop_noob joins (31e4c3d3@49.228.195.211)
13:06:20 <merijn> I'm very happy I implemented in-depth foreign key validation in my SQLite database
13:06:36 <tdammers> so my gut feeling on migrations has been for about two decades now that in order to do them right, you need all the information
13:06:39 <kuribas> in that email example, it doesn't seem hard to parse directly into AExpr
13:06:45 × ur quits (5434a07f@tm.84.52.160.127.dc.cable.static.telemach.net) (Remote host closed the connection)
13:06:53 × bitmagie quits (~Thunderbi@200116b806730e0049347085952886ab.dip.versatel-1u1.de) (Quit: bitmagie)
13:06:56 <tdammers> that is, you need to know 1) what is the old schema, 2) what is the new schema, and 3) how do the two relate
13:07:09 <dminuoso> ur: By the way, there's an alternate class of things that admit Contravariant/Functor/Profunctor types, and that's things with phantom types!
13:07:11 <merijn> tdammers: I do incremental migrations yes
13:07:14 <tdammers> 1 and 2 are easy: 1 is what's currently in the DB, and 2 is what you're asking to be there, but 3 is tricky
13:07:39 <merijn> tdammers: So all I really use persistent for is creating/copying dumb stuff, not any complicated alterations
13:07:47 <safinaskar> kuribas: my task is reversible parsing. end-to-end. i. e. between stream of chars and AST. i searched existing solutions and all they did not go. here is description of my problem and why existing solutions are not for me: https://mail.haskell.org/pipermail/haskell-cafe/2021-January/133275.html
13:07:55 ADG1089__ joins (~aditya@171.79.107.193)
13:08:10 × kritzefitz quits (~kritzefit@212.86.56.80) (Ping timeout: 246 seconds)
13:08:21 fosterite joins (~fosterite@071-082-136-216.res.spectrum.com)
13:08:29 <noop_noob> I'm using the Pipe type from the "pipes" package. https://hackage.haskell.org/package/pipes-4.3.14/docs/Pipes.html#t:Pipe
13:08:39 <safinaskar> kuribas: i thing i can write translation between stream of chars and parse tree. so last remaining piece is translation between parse tree and AST
13:08:43 <noop_noob> I want to feed its output back into its input
13:08:45 <noop_noob> How can I do that?
13:08:54 <kuribas> safinaskar: I dunno, I never did that. I write a separate parser and pretty printer.
13:09:00 <tdammers> safinaskar: if I were to do this, I would start with developing a set of primitives that are known to be reversible, and try to make that set powerful enough to express the semantics of your compiler
13:09:05 <noop_noob> If they exported the constructors of the Proxy type, it would be so easy.
13:09:12 <noop_noob> But they didn't.
13:09:15 <noop_noob> Any ideas?
13:09:31 <safinaskar> kuribas: i will write parser which will produce parse tree. so i need separate algorithm which will convert between parse tree and AST
13:10:37 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
13:10:56 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
13:11:28 <kuribas> safinaskar: you could try making a new bi-directional parser library, which would be Apllicative, not Monadic I suppose.
13:11:45 <[exa]> parsing by lensy isos!
13:12:14 <safinaskar> tdammers: "simply because the CST -> AST transform is likely not reversible to begin with" - let's assume it is reversible. i plan to check reversibility. but let's at first assume it is reversible
13:12:23 <merijn> ugh
13:12:33 <merijn> Now I need to downgrade back to the previous persistent version
13:13:09 <tomsmeding> safinaskar: the grammar you showed in that email is, I think, convertible to an LL(1) grammar via some basic standard replacements
13:13:14 × fosterite quits (~fosterite@071-082-136-216.res.spectrum.com) (Ping timeout: 264 seconds)
13:13:38 <tomsmeding> I didn't reply to your email then because I had no easy way to test whether the result is really LL(1), and my memory of the algorithm is foggy :p
13:13:49 <tomsmeding> but I assume that you have other grammars that are not converted as easily
13:14:07 <kuribas> safinaskar: so data PPParser a = PPParser (ReaderT a [Token]) (ExceptT ParseError (StateT [Token]) a)
13:15:04 × knupfer quits (~Thunderbi@200116b82cd91d007c6f9483115a4f67.dip.versatel-1u1.de) (Remote host closed the connection)
13:15:08 <tomsmeding> also safinaskar: CST -> AST is normally certainly not reversible, because the point of an AST is that you throw away redundant syntactic details like presence of parentheses; if you want reversible parsing, you'll have to (or someone will have to) explicitly retain that information in the AST
13:15:18 knupfer joins (~Thunderbi@200116b82cd91d0055d50078d8be1c36.dip.versatel-1u1.de)
13:15:23 jpds joins (~jpds@gateway/tor-sasl/jpds)
13:16:31 <dminuoso> GHC I think opts for re-parsing on errors. I sometimes modify files *during* compilation, so I get errors about pre-changed code, but the displayed code is post-modification
13:16:54 <dminuoso> Got me by suprise at least two times. :)
13:17:29 <merijn> tdammers: Friends don't let friends use persistent :\
13:17:51 <safinaskar> okey, let's begin with something simple. how to convert between this two types: http://paste.debian.net/1180029/
13:18:01 <safinaskar> as you can see, they differ only in one aspect
13:18:09 <merijn> tdammers: Why didn't you stop me 6 years ago?! >.<
13:18:21 <safinaskar> i. e. they differ only in one, well, "elementary step"
13:18:30 <tdammers> merijn: can't remember, maybe I tried
13:18:44 <safinaskar> I substituted product into expr and did nothing else
13:18:56 <safinaskar> so, how to translate?
13:19:32 <merijn> tdammers: The worst thing is that, if I hadn't f-ed up my data the same way earlier and written explicitly sanity checking to guard against it, I'd never have caught this
13:19:47 × knupfer quits (~Thunderbi@200116b82cd91d0055d50078d8be1c36.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
13:19:53 <merijn> tdammers: So, uh, good luck for everyone not as paranoid as me using persistent. Hope you have backups >.>
13:20:18 <merijn> Sucks I wasted 1.5 days updating to a new version just to have to immediately downgrade
13:20:48 <dminuoso> See, I've fallen pray to "ORM" and "Automatic Migration" tools before.
13:20:54 <dminuoso> My Haskell history is clean.
13:21:10 <dminuoso> You will not see me in anonymous persistaholics.
13:21:39 <merijn> dminuoso: I'm not ever gonna be using it for anything else, but sadly this code is "pot committed" :\
13:22:17 mizlan joins (~michaella@c-67-169-7-31.hsd1.ca.comcast.net)
13:22:46 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
13:23:08 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
13:23:55 <safinaskar> tdammers: "I would start with developing a set of primitives that are known to be reversible" - i agree. but my experience with existing libraries show that this is hard. existing libraries provide such primitives, but do not guarantee reversibility (you can look that haskell-cafe thread for examples)
13:24:13 <tdammers> yes
13:24:32 <safinaskar> tdammers: so i decided to do this: separate task into 3 different problems: chars<-->tokens, tokens<--->parse tree, parse tree<--->ast
13:24:34 <tdammers> of course the issue is that guaranteeing reversibility by construction severely limits what your parser can do
13:24:39 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
13:25:01 <merijn> tdammers: Goddammit
13:25:10 <merijn> tdammers: I found out what they broke
13:25:13 <safinaskar> tdammers: i will not solve first at all, i. e. i will write separate printer and parser. on second: it is the easiest. i will simply generate parser and printer from grammar description
13:25:25 <safinaskar> tdammers: so remaining is 3rd. so i am here
13:25:41 <tdammers> and in fact, it looks to me like you aren't really interested in 100% accurate reversibility, but rather just interested in getting semantically equivalent code back out of a round-trip
13:25:48 <merijn> tdammers: Look at the changes "hey, wait...didn't I add the code they removed here?"
13:25:52 <tdammers> e.g., (a + b) + c might come back as a + b + c
13:26:00 <merijn> tdammers: 2 years ago I added code to make this shit work properly
13:26:13 <merijn> And they reverted it in some patch breaking it all over again >.<
13:26:18 <tdammers> merijn: noice.
13:26:44 × ADG1089__ quits (~aditya@171.79.107.193) (Quit: Konversation terminated!)
13:26:48 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
13:26:49 × mizlan quits (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
13:27:12 <safinaskar> kuribas: "you could try making a new bi-directional parser library" - see my recent answer to tdammers
13:27:25 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 240 seconds)
13:27:25 × madjesti1 quits (~madjestic@86-88-72-244.fixed.kpn.net) (Ping timeout: 246 seconds)
13:30:00 <safinaskar> tdammers: tomsmeding: "CST -> AST is normally certainly not reversible, because the point of an AST is that you throw away redundant syntactic details like presence of parentheses" - yes. when i see "reversibility" i don't mean true reversibility. i mean "reversibility modulo braces etc". i mean this: http://paste.debian.net/1180030/
13:30:34 <tdammers> right. but that makes "reversibility" much harder to embed into types
13:30:36 urodna joins (~urodna@unaffiliated/urodna)
13:30:43 <tomsmeding> safinaskar: that is not the standard definition of "reversible"
13:30:47 <dminuoso> Mmm, say you have a servant library with 50ish endpoints, all protected via BasicAuth. For a client, would you expect each endpoint to start with say an `User -> ...` argument to specify the BasicAuth?
13:30:53 <tomsmeding> hence some people's confusion :)
13:30:59 <tdammers> because what is and is not "semantically equivalent" now depends on the exact semantics of the desired transform
13:31:01 <dminuoso> Or would you rather prefer the HTTP header to be baked in via the ClientEnv?
13:31:10 knupfer joins (~Thunderbi@200116b82cd91d00c5cb2cb8cc07eb23.dip.versatel-1u1.de)
13:31:48 <tdammers> my gut feeling says if you want this kind of "loose reversibility", then your best bet is to buckle down and do it manually
13:32:04 <tdammers> (and then write property tests to verify that round-tripping converges or sth)
13:32:50 dminuoso smells an adjunction
13:34:04 <safinaskar> tomsmeding: "the grammar you showed in that email is, I think, convertible to an LL(1) grammar via some basic standard replacements" - this is just example grammar i want to be able to parse. if there is some automatic way to convert it to LL(1), this would be very cool
13:34:39 <tomsmeding> safinaskar: there is an automatic way to convert _this_ one to LL(1), but I'm sure you have others for which that method would not work
13:34:55 <tomsmeding> basically, all your left-recursion here is trivial looping
13:35:05 <tomsmeding> (I think)
13:36:22 ur joins (5434a07f@tm.84.52.160.127.dc.cable.static.telemach.net)
13:36:26 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:1db3:d5d3:fa35:5ac1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
13:37:02 <ur> You can't implement contravariant for data Container a = Container a
13:37:04 <ur> right?
13:37:09 <dminuoso> ur: Try it.
13:37:34 <dminuoso> ur: When done, try to explain your findings.
13:37:47 <dminuoso> That is, try and explain yourself why you can or cannot do it.
13:40:10 <safinaskar> tomsmeding: "but I assume that you have other grammars that are not converted as easily" - grammar from my mail is the hardest grammar i will deal. Look at his rule: 't0 = "!!" id "::" t0 "." t0'. this doesn't seem as trivial looping
13:41:26 <tomsmeding> but it's not left-recursion :)
13:41:31 p8m joins (p8m@gateway/vpn/protonvpn/p8m)
13:41:41 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
13:44:05 × stilgart quits (~Christoph@chezlefab.net) (Quit: leaving)
13:44:13 stilgart joins (~Christoph@chezlefab.net)
13:45:10 × danza quits (~francesco@151.53.94.29) (Quit: Leaving)
13:45:42 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
13:45:46 p8m_ joins (p8m@gateway/vpn/protonvpn/p8m)
13:46:07 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246)
13:46:19 × p8m quits (p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 246 seconds)
13:46:31 × aveltras quits (uid364989@gateway/web/irccloud.com/x-cgtozfrhtbhoalmq) (Quit: Connection closed for inactivity)
13:47:21 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
13:47:41 <safinaskar> tdammers: "because what is and is not "semantically equivalent" now depends on the exact semantics of the desired transform" - my definition of reversibility is here: http://paste.debian.net/1180030/
13:47:47 × knupfer quits (~Thunderbi@200116b82cd91d00c5cb2cb8cc07eb23.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
13:47:58 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:1db3:d5d3:fa35:5ac1)
13:50:52 <safinaskar> tdammers: "your best bet is to buckle down and do it manually" - i did so in the past. and it failed. i used grammar very similar to grammar from my email, but with difference in one nonterminal. the grammar was ambiguous and i didn't know about this. (i parsed using parsec.) and once i did know that the grammar is ambiguous! and i already had a
13:50:52 <safinaskar> lot of files in this language by that time. it was sad. so i decided to do everything reversible this time. also i already know how to do this! the last remaining piece is converting between ast and parse tree
13:51:53 <safinaskar> tomsmeding: "there is an automatic way to convert _this_ one to LL(1)" - cool, give me it, please
13:52:16 × michalz quits (~user@185.246.204.78) (Read error: Connection reset by peer)
13:52:36 michalz joins (~user@185.246.204.80)
13:52:39 <tdammers> if you can craft an AST that retains full reversibility (not the "loose reversibility" you have there), then correct-by-construction could work
13:53:08 coot joins (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl)
13:53:21 LKoen joins (~LKoen@185.61.176.203)
13:53:43 × xelxebar quits (~xelxebar@gateway/tor-sasl/xelxebar) (Ping timeout: 240 seconds)
13:54:03 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
13:54:27 ClaudiusMaximus joins (~claude@196.67.6.51.dyn.plus.net)
13:54:27 × ClaudiusMaximus quits (~claude@196.67.6.51.dyn.plus.net) (Changing host)
13:54:27 ClaudiusMaximus joins (~claude@unaffiliated/claudiusmaximus)
13:54:32 kritzefitz joins (~kritzefit@212.86.56.80)
13:54:48 <safinaskar> tomsmeding: "but it's not left-recursion" - hmm, right. i will try to use LL(1), thanks
13:56:22 <tomsmeding> safinaskar: I may have spoken a bit too soon, my scribbling on paper wasn't fully sound
13:56:37 <tomsmeding> however, I do believe that a standard left-recursion to right-recursion transformation will work here
13:57:22 <tomsmeding> safinaskar: the only problematic point in the grammar, where the next token does not fully determine which production to take, is in choosing between (t4 "::" t3) and t4
13:57:45 × michalz quits (~user@185.246.204.80) (Read error: No route to host)
13:57:49 heatsink joins (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7)
13:57:54 <tomsmeding> which is standard left-recursion, which can be eliminated by introducing an intermediate nonterminal
13:58:12 michalz joins (~user@185.246.204.75)
13:58:33 <tomsmeding> safinaskar: my work to get there: https://paste.tomsmeding.com/UaZmcvNJ
13:59:15 <tomsmeding> t4 and t0 have unambiguous arms, because their first token sets are disjoint
13:59:22 philopsos joins (~caecilius@45.133.192.92)
13:59:24 <tomsmeding> only t3 is a problem as I statead
13:59:35 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
14:02:10 <safinaskar> tomsmeding: thanks a lot. i will parse input using original non-modified left-recursive grammar using Earley. and i will try to use this suggested LL(1) conversion to prove unambiguity
14:02:26 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7) (Ping timeout: 264 seconds)
14:02:34 <tomsmeding> good luck! I'm uncertain now what I said is correct, but I think it has a chance of working
14:02:35 <safinaskar> tomsmeding: if you conversion will be able to prove unambiguity, this will be very cool. this will be magic
14:02:48 <safinaskar> tomsmeding: bison could not prove unambiguity
14:03:16 <safinaskar> tomsmeding: and even this dedicated tool was not able: https://www.brics.dk/grammar.html
14:05:19 <tomsmeding> safinaskar: yes starting from the end of my paste, you can argue that when parsing t3, if the next token is "%" take the first production, else first parse a t4. Then, if the next token is "::", take the second production, else the third.
14:05:44 <tomsmeding> the productions of t0 and t4 have disjoint first-token sets, so those work fine
14:05:56 <tomsmeding> this is a manual proof of non-ambiguity though
14:06:08 <tomsmeding> and a parsing algorithm, though I'm unsure whether it's literally LL(1)
14:06:22 × new_haskeller quits (ae72a197@cpe00fc8d386d93-cm00fc8d386d90.cpe.net.cable.rogers.com) (Remote host closed the connection)
14:06:26 <merijn> tdammers: \o/
14:06:40 <merijn> tdammers: Looks like a one line fix, so that's good
14:06:44 <tdammers> yay
14:06:51 <tomsmeding> safinaskar: this works only because "::" is not a valid token for anything else than that second t3 production
14:07:56 <tomsmeding> safinaskar: perhaps proving tools have more success if you explicitly tell them that 'id' doesn't match "::" ?
14:08:13 hyperisco joins (~hyperisco@d192-186-117-226.static.comm.cgocable.net)
14:08:32 cfricke joins (~cfricke@unaffiliated/cfricke)
14:09:34 × s00pcan quits (~chris@075-133-056-178.res.spectrum.com) (Remote host closed the connection)
14:09:52 <tomsmeding> indeed, if 'id' can match "::", then the grammar is ambiguous: t0 -> t3 -> t4 -> id id id and t0 -> t3 -> t4 "::" t3 -> t4 "::" t4 -> id "::" id would both match the token sequence "::" "::" "::"
14:09:55 ADG1089__ joins (~aditya@171.79.107.193)
14:11:04 <safinaskar> tomsmeding: "that 'id' doesn't match "::"" - of course, it doesn't match. these are two different terminals
14:11:28 × LKoen quits (~LKoen@185.61.176.203) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
14:12:17 × dandart quits (~Thunderbi@home.dandart.co.uk) (Ping timeout: 265 seconds)
14:12:56 bitmapper joins (uid464869@gateway/web/irccloud.com/x-twbakplhwmmiboua)
14:13:01 dandart joins (~Thunderbi@home.dandart.co.uk)
14:13:09 centril joins (~centril@213-66-146-92-no250.tbcn.telia.com)
14:14:58 <tomsmeding> well, 'id' looks like a nonterminal :)
14:15:09 <tomsmeding> that it isn't, is not evident (to me) from your syntax
14:15:31 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
14:15:38 <melkornms> hey guys, me again, can you help me a little here? https://gist.github.com/MelkorNemesis/8fc9dc1f3183ce0168dfaa851c662a22 I just need to visualize what's happening and cannot see what the last row would look like
14:16:03 <melkornms> what it will actually look like in the form or "\x -> \f ..."
14:17:44 mouseghost joins (~draco@wikipedia/desperek)
14:19:17 <ur> dminuoso: The best that I can come up with is that I can't implement it because there's no method of converting any b into an a so that you could feed that a to (a -> b)
14:19:19 <ur> data Container a = Container a
14:19:46 <merijn> melkornms: Well, have you tries doing it step by step?
14:20:18 <ur> But if Container a = Container (a -> b) you can define it via function composition because composition a such a function for arbitrary functions
14:20:41 <ur> composition is such a function~-
14:20:44 <ur> *
14:20:49 <melkornms> merijn: yeah, only 'on the paper', but end up with some nonsense
14:20:51 <merijn> melkornms: Like, let's begin with . first if "f . g = \x -> f (g x)" then clearly "(<>) . (Any .)" becomes "\x -> ((<>) ((Any .) x))"
14:21:11 Torro parts (Torro@gateway/vpn/protonvpn/torro) ("bye")
14:21:27 <merijn> Simplify parentheses a bit, we get "\x -> (<>) (Any . x)"
14:22:11 <merijn> Which, we can also write as "\x -> \y -> (Any . x) <> y"
14:22:29 × geekosaur quits (ac3a8b34@172.58.139.52) (Remote host closed the connection)
14:22:41 <merijn> melkornms: Where 'x :: a -> Bool' and 'y :: a -> Any'
14:22:46 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
14:23:02 <melkornms> thanks merijn, I'll have a look, sometimes I'm stuck on the little things
14:23:07 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
14:26:47 xelxebar joins (~xelxebar@gateway/tor-sasl/xelxebar)
14:30:11 <dminuoso> ur: Okay, let's look at another interesting example.
14:30:31 McAnickle joins (~McAnickle@104.129.28.98)
14:31:06 <dminuoso> ur: Initially, it seems as if "if its in function argument position, then it's contravariant". Right?
14:31:14 <ur> yes
14:31:20 <dminuoso> That is, if the type variable is in function argument position, it appears contravariant.
14:31:25 <dminuoso> Alright. Let's check this.
14:31:43 <dminuoso> % data Foo b a = Foo (a -> b)
14:31:43 <yahb> dminuoso:
14:31:52 <dminuoso> % data Foo1 b a = Foo ((a -> b) -> b)
14:31:52 <yahb> dminuoso:
14:32:04 <dminuoso> ur: Try to write a Contravariant instance for both these types.
14:32:28 <ur> ok
14:33:09 × Lycurgus quits (~niemand@cpe-45-46-139-165.buffalo.res.rr.com) (Quit: Exeunt)
14:34:01 carlomagno joins (~cararell@148.87.23.11)
14:35:05 jb55 joins (~jb55@gateway/tor-sasl/jb55)
14:35:15 × coot quits (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
14:36:24 × sword865 quits (uid208942@gateway/web/irccloud.com/x-sjphxpixcxrxjevu) (Quit: Connection closed for inactivity)
14:38:55 elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
14:39:07 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246) (Remote host closed the connection)
14:39:13 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246)
14:39:41 <kuribas> what's the best way to generate and pretty print haskell code?
14:40:05 <dminuoso> kuribas: haskell-src-exts
14:40:35 <dminuoso> There's a bunch of related libraries that complement it well.
14:40:51 <dminuoso> haskell-src-exts-simple, haskell-src-exts-qq, etc
14:41:08 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
14:41:25 <dminuoso> If you dont need full module-scope, TH could be sufficient.
14:41:38 <kuribas> can you pretty print TH?
14:41:47 <dminuoso> Yeah
14:42:12 <dminuoso> https://hackage.haskell.org/package/template-haskell-2.16.0.0/docs/Language-Haskell-TH.html#t:Ppr
14:42:20 × elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Read error: Connection reset by peer)
14:42:28 <kuribas> ok, nice :)
14:43:08 × perrier-jouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.0)
14:45:22 elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
14:48:16 × michalz quits (~user@185.246.204.75) (Read error: Connection reset by peer)
14:54:41 Sgeo joins (~Sgeo@ool-18b98aa4.dyn.optonline.net)
14:56:03 perrier-jouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
14:56:25 jollygood2 joins (~bc812391@217.29.117.252)
14:58:18 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
14:58:24 × perrier-jouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit)
14:58:59 × Neo---- quits (~neo@BSN-143-24-94.dynamic.siol.net) (Ping timeout: 260 seconds)
14:59:15 heatsink joins (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7)
15:02:11 Neo---- joins (~neo@BSN-143-25-5.dynamic.siol.net)
15:03:38 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7) (Ping timeout: 264 seconds)
15:04:40 <ur> dminuoso: Foo was quite simple but I can't figure out by what method I could possibly get from (a -> b) and (b -> t) to (a -> t) -> t
15:04:44 <ur> data Foo b a = Foo (a -> b)
15:07:20 <dminuoso> ur: https://www.schoolofhaskell.com/user/commercial/content/covariance-contravariance
15:07:27 <dminuoso> ur: Give this entire article a long and thorough read.
15:08:09 × phasespace quits (~sar@80-89-47-117.inet.signal.no) (Ping timeout: 256 seconds)
15:10:39 × dandart quits (~Thunderbi@home.dandart.co.uk) (Remote host closed the connection)
15:10:55 dandart joins (~Thunderbi@home.dandart.co.uk)
15:11:00 ulidtko joins (~ulidtko@193.111.48.79)
15:11:15 perrier-jouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
15:11:45 × ADG1089__ quits (~aditya@171.79.107.193) (Remote host closed the connection)
15:11:55 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:1db3:d5d3:fa35:5ac1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:15:49 × tomku quits (~tomku@unaffiliated/tomku) (Ping timeout: 264 seconds)
15:15:54 Jd007 joins (~Jd007@d154-5-83-24.bchsia.telus.net)
15:17:30 tomku joins (~tomku@unaffiliated/tomku)
15:18:51 × noop_noob quits (31e4c3d3@49.228.195.211) (Remote host closed the connection)
15:21:23 <ezzieyguywuf> [this](https://hackage.haskell.org/package/wai-app-static) has a a dep of optparse-applicative >=0.7, but the higher version of optparse-applicative is 0.16.1.0 . do these versions conflict?
15:22:46 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
15:23:08 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
15:23:09 fendor_ joins (~fendor@77.119.129.169.wireless.dyn.drei.com)
15:23:12 mizlan joins (~michaella@c-67-169-7-31.hsd1.ca.comcast.net)
15:24:25 darjeeling_ joins (~darjeelin@122.245.218.97)
15:26:16 × fendor quits (~fendor@178.115.129.99.wireless.dyn.drei.com) (Ping timeout: 272 seconds)
15:27:32 <dminuoso> ezzieyguywuf: Probably, yes. Maybe.
15:27:32 Saukk joins (~Saukk@83-148-239-3.dynamic.lounea.fi)
15:27:40 <dminuoso> fsvo "conflict"
15:27:45 <ezzieyguywuf> "fsvo"?
15:27:49 × mizlan quits (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 264 seconds)
15:27:50 <ezzieyguywuf> i.e. how can cabal solve the dep
15:27:51 <merijn> ezzieyguywuf: Do they conflict? No. Will that work? Also probably no
15:27:54 <dminuoso> If the library adheres to PVP, then there was quite a bunch of API breaking changes.
15:28:02 <dminuoso> If not, well. Go diff the source code..
15:28:04 <merijn> ezzieyguywuf: ">=0.7" is a stupid bound
15:28:15 <ezzieyguywuf> merijn: why is it a stupid bound?
15:28:25 <merijn> ezzieyguywuf: between 0.7 and 0.16 the API of optparse-applicative has almost certainly broken
15:28:37 <merijn> ezzieyguywuf: No upperbound == lies
15:28:38 <dminuoso> ezzieyguywuf: In Haskell many try to adhere to PVP (which is roughly semver)
15:28:49 <ezzieyguywuf> ahh I see what's happening
15:28:52 Cale joins (~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com)
15:28:56 <dminuoso> So if you have no upper bound, it means you're claiming that you're forward compatible to any API breaking changes the library might introduce.
15:28:59 <dminuoso> That's quite a bold claim
15:29:13 <ezzieyguywuf> so actually, 0.7 is less than 0.16, but y'alls point is "dude, stuff probably changed"
15:29:21 <merijn> Yeah
15:29:30 <ezzieyguywuf> gotcha.
15:29:50 <merijn> ezzieyguywuf: If the bound had been ">= 0.7 && < 0.17" then I would've believed it worked
15:29:56 christo joins (~chris@81.96.113.213)
15:29:58 × guest15 quits (~user@49.5.6.87) (Remote host closed the connection)
15:30:08 guest15 joins (~user@49.5.6.87)
15:30:17 mizlan joins (~michaella@c-67-169-7-31.hsd1.ca.comcast.net)
15:30:22 <merijn> Since an explicit upperbound implies someone has at least looked at it/tried it. No upperbound generally just means "lazy maintainer who doesn't care if things keep working in the future"
15:30:43 <ezzieyguywuf> indeed
15:30:51 <ezzieyguywuf> I'm starting to understand versioning in haskell more
15:30:54 <ezzieyguywuf> I guess I leveled up
15:31:17 <merijn> ezzieyguywuf: See also
15:31:19 <merijn> @where pvp
15:31:19 <lambdabot> https://pvp.haskell.org/
15:32:18 <merijn> Actually, wai-static-app seems fairly recently maintained, so possibly it *does* in fact work with 0.16
15:32:35 <merijn> But it also looks like a Snoyberg/FP Complete package
15:32:42 <ezzieyguywuf> but they just don't put the upperbound
15:33:25 <dminuoso> To be fair, there's multiple schools of thought.
15:33:39 <merijn> ezzieyguywuf: Snoyberg is one of the original creators of Stack (which works with fixed snapshots) he...does not believe in upperbounds, so therefore doesn't add them on his packages by default, which means they're prone to break in the future leaving others to fix it with revisions >.>
15:33:46 <dminuoso> There's the bunch of people who dont want to constantly bump version bounds, they might introduce an upper bound if something ever breaks.
15:33:49 <merijn> dminuoso: Yes, the right one and the incorrect heretics
15:34:10 <ezzieyguywuf> merijn: lol.
15:34:18 <ezzieyguywuf> also, that's good to know regarding snoyberg and stack
15:34:22 <ezzieyguywuf> I guess differet schools of thought..
15:34:43 <dminuoso> If you're responsible for a large number of packages, then constantly managing upper bounds is a real hassle
15:35:27 phasespace joins (~sar@89-162-33-21.fiber.signal.no)
15:35:31 <dminuoso> You might run into the situation where your dependencies are rarely bumped (lowering your workload), which however can break build plans over time.
15:35:34 <ezzieyguywuf> true. in which case the stack approach with snapshots makes sense
15:35:43 <dminuoso> Bumping them freely requires careful testing, so that's a lot of work too
15:36:34 <dminuoso> Arguably, lack of an upper bound is probably better than non-maintained tight bounds
15:36:48 <dminuoso> Since you can always just introduce constraints yourself
15:38:00 <dminuoso> If there's api breaking changes, chances are it wont even compile with newer versions. But then you can just introduce a constraint to get it build again, if its bounds are too tight, then you're forced to either adopt the package and become a maintainer, or fork, fix, vendor, and not maintain your fork..
15:38:29 <dminuoso> Life of a software developer I guess.
15:38:48 <dminuoso> The real rationale here might be not to rely on unmaintained packages.. :P
15:41:09 madjest76 joins (~Android@188-207-107-101.mobile.kpn.net)
15:41:21 × worc3131 quits (~quassel@2a02:c7f:dcc4:6500:cf0e:3346:8766:ab20) (Ping timeout: 272 seconds)
15:42:02 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 264 seconds)
15:44:01 × madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 264 seconds)
15:45:09 jamm joins (~jamm@unaffiliated/jamm)
15:45:31 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
15:46:25 × dandart quits (~Thunderbi@home.dandart.co.uk) (Ping timeout: 264 seconds)
15:46:55 kayvan joins (~user@52-119-115-160.PUBLIC.monkeybrains.net)
15:49:34 <kayvan> @hoogle [a] -> [a]
15:49:35 <lambdabot> Prelude tail :: [a] -> [a]
15:49:35 <lambdabot> Prelude init :: [a] -> [a]
15:49:35 <lambdabot> Prelude reverse :: [a] -> [a]
15:50:18 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) (Ping timeout: 256 seconds)
15:51:30 <kayvan> @hoogle maybeMap
15:51:31 <lambdabot> CoreMap data MaybeMap m a
15:51:31 <lambdabot> TrieMap data MaybeMap m a
15:51:31 <lambdabot> MonadUtils maybeMapM :: Monad m => (a -> m b) -> Maybe a -> m (Maybe b)
15:51:46 <boxscape> @hoogle mapMaybe
15:51:47 <lambdabot> Data.Maybe mapMaybe :: (a -> Maybe b) -> [a] -> [b]
15:51:47 <lambdabot> Data.IntMap.Internal mapMaybe :: (a -> Maybe b) -> IntMap a -> IntMap b
15:51:47 <lambdabot> Data.IntMap.Lazy mapMaybe :: (a -> Maybe b) -> IntMap a -> IntMap b
15:52:07 <kayvan> @hoogle Data.Map
15:52:08 <lambdabot> module Data.Map
15:52:08 <lambdabot> Data.Map.Internal data Map k a
15:52:08 <lambdabot> Data.Map.Lazy data Map k a
15:52:20 <kayvan> @hoogle Data.Vector
15:52:20 <lambdabot> module Data.Vector
15:52:20 <lambdabot> Data.Vector data Vector a
15:52:21 <lambdabot> Data.Vector.Generic class MVector (Mutable v) a => Vector v a
15:52:27 <Melanie> @where hoogle
15:52:27 <lambdabot> http://haskell.org/hoogle http://hoogle.haskell.org http://fpcomplete.com/hoogle – See also Hayoo, which searches more packages: http://hayoo.fh-wedel.de/
15:54:41 <sm[m]> that loose upper bound is saying "we're pretty sure the part of the lib we're using won't change", not "there will be no api changes"
15:55:31 Tario joins (~Tario@201.192.165.173)
15:56:35 <Uniaika> and also the serokell hackage search engine
15:58:15 × Saukk quits (~Saukk@83-148-239-3.dynamic.lounea.fi) (Remote host closed the connection)
15:59:43 hnOsmium0001 joins (uid453710@gateway/web/irccloud.com/x-atpmuzdscbrrptko)
16:00:08 <Rembane> Uniaika: This one? https://github.com/serokell/hackage-search
16:01:55 <Uniaika> Rembane: the one and only
16:02:29 <ski> @where serokell
16:02:29 <lambdabot> I know nothing about serokell.
16:03:07 Melanie either
16:03:41 <Rembane> Uniaika: Sweet.
16:04:49 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
16:06:20 jamm_ joins (~jamm@unaffiliated/jamm)
16:07:52 tchar parts (sid301738@gateway/web/irccloud.com/x-xddtoyyurmxjtavh) ()
16:10:08 × jamm quits (~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
16:10:09 × philopsos quits (~caecilius@45.133.192.92) (Ping timeout: 260 seconds)
16:11:48 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
16:12:05 knupfer joins (~Thunderbi@200116b82cd91d00843f14fffe52ba74.dip.versatel-1u1.de)
16:12:05 × knupfer quits (~Thunderbi@200116b82cd91d00843f14fffe52ba74.dip.versatel-1u1.de) (Client Quit)
16:12:18 knupfer joins (~Thunderbi@200116b82cd91d00118d0874356b5bdf.dip.versatel-1u1.de)
16:13:43 philopsos joins (~caecilius@45.133.192.92)
16:16:11 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
16:16:12 × madjest76 quits (~Android@188-207-107-101.mobile.kpn.net) (Read error: Connection reset by peer)
16:16:21 madjestic joins (~Android@86-88-72-244.fixed.kpn.net)
16:16:39 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
16:18:48 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
16:19:02 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
16:19:46 <kuribas> So when using the FFI, when a thread is blocked on a FFI call, it will automatically create a new thread to run another FFI call in parallel?
16:21:38 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 264 seconds)
16:22:33 madjesti1 joins (~madjestic@86-88-72-244.fixed.kpn.net)
16:22:55 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
16:23:30 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
16:24:59 shutendoji[m] joins (shutendoji@gateway/shell/matrix.org/x-rahorqhngflcgpid)
16:26:30 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
16:28:14 Saukk joins (~Saukk@83-148-239-3.dynamic.lounea.fi)
16:28:18 aarvar joins (~foewfoiew@2601:602:a080:fa0:9c96:3f48:55e0:3c7)
16:28:19 × aarvar quits (~foewfoiew@2601:602:a080:fa0:9c96:3f48:55e0:3c7) (Client Quit)
16:29:25 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
16:30:53 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
16:31:28 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
16:32:02 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
16:35:21 <merijn> ENOTENOUGHINFO
16:35:43 <merijn> Which runtime? Safe or unsafe foreign import? What is "it"?
16:35:54 <Uniaika> it :: IO ()
16:36:15 <int-e> it :: Num p => p
16:36:23 <int-e> Uniaika: let's fight?
16:36:52 × Saukk quits (~Saukk@83-148-239-3.dynamic.lounea.fi) (Remote host closed the connection)
16:38:18 <Taneb> No instance for (Num (IO ())) arising from a use of ‘it’
16:38:34 <int-e> kuribas: bound thread or unbound thread?
16:39:07 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
16:39:09 <kuribas> int-e: I don't know?
16:39:22 <int-e> kuribas: Just adding to the list of unknowns that merijn started.
16:40:11 <kuribas> I mean, an unbound thread executing a FFI call will cause the bound thread to block right?
16:40:50 <kuribas> then when another unbound thread wants to do FFI call, it will create a new OS thread to run the FFI call.
16:41:13 <kuribas> safe or unsafe, those are confusing...
16:41:19 <kuribas> one of the two :)
16:41:28 <int-e> As I understand it, in ghc's threaded runtime, a safe call in an unbound thread will release the current capability which can then be picked up by another worker thread (which may or may not already exist). For a bound thread, it'll often wake up the associated OS thread to make the FFI call. For unsafe calls, none of this happens.
16:41:33 <int-e> It's complicated.
16:42:27 <kuribas> why would you want unsafe calls then?
16:42:28 <int-e> The lawyer's standard answer number 1 applies: "It depends."
16:42:54 <int-e> kuribas: Because they're faster and are not subject to GC happen concurrently.
16:43:02 <int-e> *happening
16:43:07 christo joins (~chris@81.96.113.213)
16:43:25 × madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 246 seconds)
16:43:52 <kuribas> I wouldn't want my SQL query to block all other SQL queries until it got a response from the DB.
16:44:10 mirrorbird joins (~psutcliff@2a00:801:42b:8314:3772:eb7f:91f1:698c)
16:44:33 × Neo---- quits (~neo@BSN-143-25-5.dynamic.siol.net) (Remote host closed the connection)
16:44:38 madjestic joins (~Android@188-207-107-97.mobile.kpn.net)
16:45:14 McAnickle parts (~McAnickle@104.129.28.98) ("WeeChat 2.3")
16:46:28 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Remote host closed the connection)
16:46:47 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
16:46:51 <int-e> Use a safe call then.
16:46:52 michalz joins (~user@185.246.204.79)
16:47:08 ThoaiOnline joins (~ThoaiOnli@nv.tho.ai)
16:47:38 ADG1089__ joins (~aditya@171.79.107.193)
16:47:58 <kuribas> I am not going to rewrite DB libraries for concurrency...
16:48:51 <int-e> Concurrency is kind of an orthogonal issue here anyway.
16:49:13 <int-e> Every Haskell worker can make their own unsafe foreign call at the same time.
16:49:44 Saukk joins (~Saukk@83-148-239-3.dynamic.lounea.fi)
16:49:57 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
16:50:38 <int-e> But while those are happening, GC cannot take place, so there's the risk of interrupting all progress while an unsafe foreign call is taking place.
16:50:40 <kuribas> int-e: I think you mean use an unsafe call?
16:50:47 <kuribas> because safe call block...
16:50:48 <int-e> kuribas: No I did not.
16:51:00 <int-e> ?
16:51:50 <int-e> The function you're calling may block.
16:52:06 <int-e> And you don't want that to prevent the Haskell runtime from making progress, which may involve doing a GC.
16:53:11 <ThoaiOnline> would it be possible to "derive" MonadMask?
16:53:12 × madjestic quits (~Android@188-207-107-97.mobile.kpn.net) (Read error: Connection reset by peer)
16:53:33 madjestic joins (~Android@86-88-72-244.fixed.kpn.net)
16:53:51 <ThoaiOnline> i have a function that needs to be run in MonadMask m
16:54:05 <ThoaiOnline> and an App type that looks like this
16:54:05 <ThoaiOnline> newtype App a =  App    { unApp :: ReaderT State IO a    }  deriving (Applicative, Functor, Monad, MonadReader State, MonadFail, MonadIO)
16:55:07 geekosaur joins (42d52137@66.213.33.55)
16:55:07 <ThoaiOnline> MonadMask doesn't seem to be easily derivable
16:56:15 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
16:56:48 <kuribas> int-e: so the idea is that an unsafe call cannot call into haskell, and in this way could be optimized by the compiler?
16:56:52 <int-e> ThoaiOnline: so what does it say when you try
16:57:00 <kuribas> int-e: but that optimization also kills concurrency?
16:57:30 <kuribas> int-e: to me that looks like, never use unsafe calls...
16:59:35 <kuribas> I suppose unsafe calls kill concurrency using green (unbound) threads, but not using OS (bound) threads.
16:59:59 <int-e> kuribas: unsafe calls operate pretty much exactly like out of line primitive operations. and they have their use... for example they're the right choice if you want to use erf() from the C library (this one is fast, does not block, and the overhead of suspending the haskell execution dwarfs the duration of the vall).
17:00:05 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:00:18 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:00:18 <int-e> vall -> call
17:00:22 <ThoaiOnline> int-e: oh it force me to add MonadThrow, MonadCatch first, that kinda makes sense
17:00:23 heatsink joins (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7)
17:00:31 × `slikts quits (~nelabs@wikipedia/reinis) (Ping timeout: 272 seconds)
17:00:34 <merijn> Anyone remember what the "right" way to mark a package version as unbuildable on Hackage?
17:00:43 <kuribas> int-e: ah indeed. If you do something that takes just a few processor instructions, the overhead of the safe call would dominate.
17:00:54 <merijn> Do I use do "base > 4 && < 4" or something?
17:01:20 <int-e> merijn: isn't it enough to tweak the preferred versions in the maintainer's corner?
17:02:03 <merijn> int-e: No, that just makes it *less* likely to be picked
17:02:14 <merijn> int-e: It doesn't make it "unselectable"
17:02:16 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:02:34 <merijn> A version that permanently corrupts user data should never be used >.>
17:02:54 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:03:09 <kuribas> int-e: safe and unsafe or confusingly named. Better would be fast for unsafe calls.
17:03:23 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7) (Remote host closed the connection)
17:03:25 <int-e> kuribas: yes the naming isn't great
17:03:32 heatsink joins (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7)
17:03:34 `slikts joins (~nelabs@wikipedia/reinis)
17:04:33 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:04:47 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:06:08 <merijn> kuribas: eh, fast would be a *terrible* name
17:06:18 × Saukk quits (~Saukk@83-148-239-3.dynamic.lounea.fi) (Remote host closed the connection)
17:06:19 <monochrom> fast, good, cheap --- pick two. short name, accurate name, meaningful name --- pick two.
17:06:20 <dolio> Why would I use the slow foreign import?
17:06:28 <merijn> People are *already* opening PRs to add "unsafe" to my foreign imports because "it's faster"
17:06:36 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:06:41 <kuribas> ah right :)
17:07:11 <merijn> Anyone know if/how I can open a PR to something other than master on github?
17:07:13 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:07:36 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
17:08:03 × hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 240 seconds)
17:08:25 hexo joins (~hexo@gateway/tor-sasl/hexo)
17:08:26 sorki joins (~sorki@gateway/tor-sasl/sorki)
17:08:53 <lyxia> yes you can pick another branch when you make the pr
17:09:03 × srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 240 seconds)
17:09:33 <kuribas> safe isn't "safe" either, because you cannot pass objects to it.
17:10:32 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:10:42 conal joins (~conal@64.71.133.70)
17:10:45 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:11:02 <kuribas> well, "unpinned" objects
17:11:22 <kuribas> so basically unsafe1 and unsafe2 :)
17:11:22 <merijn> lyxia: bleh, I just noticed it didn't work because I selected a tag, rather than a branch
17:11:24 sorki is now known as srk
17:11:37 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
17:11:42 ulidtko|k joins (~ulidtko@194.54.80.38)
17:11:45 <merijn> kuribas: unsafe is unsafe subtle ways, "passing unpinnned stuff" is unsafe in obvious ways :p
17:12:13 <dolio> I don't really see the problem if the way in which it's "safe" is explained.
17:12:16 × conal quits (~conal@64.71.133.70) (Client Quit)
17:12:25 <merijn> dolio: Sure
17:12:32 × michalz quits (~user@185.246.204.79) (Remote host closed the connection)
17:12:35 <int-e> merijn: but passing unpinned stuff to unsafe calls is safe (if you don't keep the references)... so two wrongs make a right?
17:12:35 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:12:37 <dolio> You don't need to be "safe" with respect to every idea of what "safe" means that anyone could come up with to qualify as safe.
17:13:03 <kuribas> dolio: sure in the end you just read the docs. But it's hard to remember which one is which...
17:13:12 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:14:05 × ulidtko quits (~ulidtko@193.111.48.79) (Ping timeout: 240 seconds)
17:14:35 <int-e> kuribas: most of the time "safe" is a good choice and "unsafe" is an optimization for the narrow niche case where a foreign call is extremely cheap and the overhead of a safe call is hurting your performance.
17:14:45 <kuribas> ah indeed
17:14:50 conal joins (~conal@209.58.135.97)
17:15:09 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
17:15:11 <int-e> so as a rule of thumb, that's what I'd do
17:15:41 <kuribas> I'll try to remember it as that
17:15:43 v_m_v joins (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5)
17:15:45 × sakirious quits (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Quit: The Lounge - https://thelounge.chat)
17:16:20 <dolio> Is there actually a guarantee that passing pointers to unpinned things will work with `unsafe`?
17:16:30 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:16:38 <merijn> dolio: Yes
17:16:43 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:16:51 <merijn> dolio: Because GC can't start while a thread is in an unsafe foreign call
17:16:57 <int-e> Also "safe" interacts well with thread local storage if you also use bound threads (forkOS or the main thread), while "unsafe" calls may come from what looks like arbitrary OS threads to the C world.
17:17:08 sakirious joins (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
17:17:09 <merijn> Which is why unsafe foreign calls are so risky, you risk blocking every single Haskell thread on a GC barrier
17:17:29 <int-e> So generally "unsafe" calls give you a lot more things to worry about.
17:17:32 spopejoy joins (~stuart@ool-44c5f8c9.dyn.optonline.net)
17:18:33 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:18:40 <merijn> dolio: Or rather, GC can't start until all capabilities synchronise, but since unsafe foreign calls don't release their capability their capability can't synchronise until they're done
17:18:43 <kuribas> int-e: so does unsafe set a mutex which blocks the GC thread from running?
17:18:55 <int-e> no
17:18:55 <merijn> kuribas: No, see above
17:18:59 <int-e> not directly anyway
17:19:10 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:19:18 <kuribas> ah right
17:19:28 × boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Ping timeout: 246 seconds)
17:19:42 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246) (Remote host closed the connection)
17:19:47 <merijn> Safe calls explicitly release their capability, leaving the runtime free to start GC
17:19:48 <kuribas> could many unsafe call prevent GC from happening at all?
17:19:52 <merijn> kuribas: Yes
17:20:00 <merijn> kuribas: So can long running unsafe calls
17:20:01 theNeuron joins (~theNeuron@177.8.129.7)
17:20:04 × Jesin quits (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving)
17:20:21 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:20:23 <merijn> kuribas: Worse, if threads are waiting for GC then those threads will be blocked until GC can happen
17:20:31 <int-e> Well, I guess there is a mutex associated with what ghc calls a 'capability' (of which there is one per potential haskell worker thread). It's already taken when the unsafe call takes place.
17:20:37 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:22:09 × Ariakenom quits (~Ariakenom@2001:9b1:efb:fc00:96e:b740:520f:7fea) (Quit: Leaving)
17:22:18 Ariakenom joins (~Ariakenom@2001:9b1:efb:fc00:acbc:1011:e13d:7bc8)
17:22:22 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:22:35 safinaskar parts (6dfc5ba3@109-252-91-163.nat.spd-mgts.ru) ()
17:23:02 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:23:21 theNeuron parts (~theNeuron@177.8.129.7) ()
17:23:47 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:24:02 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:25:03 plutoniix joins (~q@node-ujf.pool-125-24.dynamic.totinternet.net)
17:25:21 safinaskar joins (6dfc5ba3@109-252-91-163.nat.spd-mgts.ru)
17:25:47 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:26:28 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:26:28 <safinaskar> tomsmeding: you have very cool pastebin! thanks a lot
17:26:33 Jesin joins (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
17:26:45 fosterite joins (~fosterite@2600:6c46:7800:fecf:391b:8118:5f04:a726)
17:27:14 <safinaskar> tomsmeding: this is pastebin i always searched for. it combines ability to paste multiple files, button "clone and edit this paste" and ability to download paste as an archive!
17:27:31 livvy joins (~livvy@gateway/tor-sasl/livvy)
17:27:53 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:28:07 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:29:56 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:30:31 <kuribas> int-e: so, in the bound thread, if there are not FFI calls, other unbound threads could use the bound thread?
17:30:36 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:32:09 kaboom joins (~manjaro-u@2601:285:c000:a6c0::4f77)
17:32:36 <int-e> kuribas: In principle, yes; I don't know what the RTS does in practice... it could reserve the OS thread for running the corresponding Haskell thread an nothing else.
17:33:23 <int-e> (To avoid having to wait for it when a (safe) foreign call takes place.)
17:33:27 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7) (Remote host closed the connection)
17:33:38 heatsink joins (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7)
17:33:57 <kaboom> OK, so I have an xmonad config, and it's not seeing that I have xmobar installed. I have them both installed via nix with ghcWithPackages. When I run xmobar from a console it works wine, but when I attempt to do so via a startup hook in xmonad, well, it doesn't work.
17:34:05 <kuribas> ghc is a nice piece of engineering...
17:34:24 <kaboom> I haven't modified that part of my config since I created it, and the other programs (not installed via nix) do work
17:35:25 <kaboom> does anyone know how to make xmonad (or any application using monads really) properly parse your PATH variable? I recently switched to fish shell, but tried switching back to see if that was the issue, turns out it persists without it...
17:36:27 <Clint> kaboom: what do you mean, "properly"?
17:36:37 <kaboom> heck, see my programs
17:36:52 dfeuer joins (~dfeuer@pool-173-79-253-62.washdc.fios.verizon.net)
17:37:11 <geekosaur> at a guess, the real problem is X11 doesn't read .profile on that platform
17:37:32 <kaboom> .profile? Huh, ok, 1s...
17:37:53 × Boomerang quits (~Boomerang@2a05:f6c7:2179:0:8da5:2e46:f1e1:ab48) (Ping timeout: 272 seconds)
17:38:08 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Remote host closed the connection)
17:39:04 justsomeguy joins (~justsomeg@072-186-136-238.biz.spectrum.com)
17:39:04 × justsomeguy quits (~justsomeg@072-186-136-238.biz.spectrum.com) (Changing host)
17:39:04 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
17:39:45 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:39:59 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:41:04 dandels joins (~dandels@unaffiliated/dandels)
17:41:31 <kaboom> Perhaps it could be related to how nix inserts itself (via a script)
17:41:48 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:41:59 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:42:19 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
17:42:25 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:42:30 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246)
17:42:52 <kaboom> but about my .profile, I had the nix path modifier inside there a while ago, and removed it while testing something. I just re-added it, and opening another xmonad session via startx on another tty didn't help.
17:44:33 Forlorn joins (~Forlorn@unaffiliated/forlorn)
17:45:05 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:45:18 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:45:56 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
17:46:18 × jamm_ quits (~jamm@unaffiliated/jamm) (Remote host closed the connection)
17:46:31 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
17:47:26 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246) (Ping timeout: 264 seconds)
17:48:03 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
17:48:36 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246)
17:49:12 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Remote host closed the connection)
17:49:33 jamm joins (~jamm@unaffiliated/jamm)
17:51:45 Vq_ is now known as Vq
17:51:48 <kaboom> ok, so upon reading error messages it turns out it's using /bin/sh for these calls, which I suppose isn't configured with my path, time to do that.
17:52:47 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246) (Remote host closed the connection)
17:52:53 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246)
17:53:00 × knupfer quits (~Thunderbi@200116b82cd91d00118d0874356b5bdf.dip.versatel-1u1.de) (Quit: knupfer)
17:53:01 × philopsos quits (~caecilius@45.133.192.92) (Ping timeout: 264 seconds)
17:53:12 knupfer joins (~Thunderbi@200116b82cd91d00a040f802c5c7b27d.dip.versatel-1u1.de)
17:53:51 × knupfer quits (~Thunderbi@200116b82cd91d00a040f802c5c7b27d.dip.versatel-1u1.de) (Client Quit)
17:53:58 × jamm quits (~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
17:54:08 knupfer joins (~Thunderbi@200116b82cd91d00683ccaa8cd8c6c91.dip.versatel-1u1.de)
17:54:53 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
17:55:22 × notzmv quits (~user@unaffiliated/zmv) (Ping timeout: 256 seconds)
17:55:33 × unlink2 quits (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) (Remote host closed the connection)
17:57:08 s00pcan joins (~chris@075-133-056-178.res.spectrum.com)
17:57:17 unlink2 joins (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de)
17:58:01 Guest_46 joins (4f6ae69a@79.106.230.154)
17:58:31 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:59:32 philopsos joins (~caecilius@45.133.192.140)
18:00:04 × Guest_46 quits (4f6ae69a@79.106.230.154) (Remote host closed the connection)
18:00:12 Sheilong joins (uid293653@gateway/web/irccloud.com/x-xrvpventptxcogxg)
18:01:47 × pavonia quits (~user@unaffiliated/siracusa) (Quit: Bye!)
18:02:23 nuvolo joins (nuvolo@host-95-232-55-134.retail.telecomitalia.it)
18:02:54 nuvolo parts (nuvolo@host-95-232-55-134.retail.telecomitalia.it) ()
18:03:18 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 260 seconds)
18:03:41 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
18:03:49 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 264 seconds)
18:04:38 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
18:07:15 × ADG1089__ quits (~aditya@171.79.107.193) (Quit: Konversation terminated!)
18:07:36 × chele quits (~chele@ip5b40237d.dynamic.kabel-deutschland.de) (Remote host closed the connection)
18:08:45 × atraii quits (~atraii@c-98-32-64-84.hsd1.ut.comcast.net) (Quit: ZNC 1.7.5 - https://znc.in)
18:08:48 × madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Quit: -a- Connection Timed Out)
18:09:02 madjestic joins (~Android@86-88-72-244.fixed.kpn.net)
18:09:03 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7) (Remote host closed the connection)
18:09:33 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
18:10:10 × mizlan quits (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Quit: leaving)
18:10:48 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
18:10:48 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
18:11:14 jamm joins (~jamm@unaffiliated/jamm)
18:12:12 Tario joins (~Tario@201.192.165.173)
18:15:32 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
18:15:38 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 264 seconds)
18:17:26 × jespada quits (~jespada@90.254.245.49) (Ping timeout: 264 seconds)
18:18:17 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Read error: Connection reset by peer)
18:18:37 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
18:19:19 <kaboom> well, I did a lot of things, and ended up removing /bin/sh then replacing it with a symlink to /bin/dash (it was bash before, of course)
18:19:33 jespada joins (~jespada@90.254.245.49)
18:19:45 × mouseghost quits (~draco@wikipedia/desperek) (Ping timeout: 256 seconds)
18:19:45 <kaboom> and now the programs appear inside my program list, but now they're not launching and no error is arising. UGH!
18:19:49 × mirrorbird quits (~psutcliff@2a00:801:42b:8314:3772:eb7f:91f1:698c) (Quit: Leaving)
18:19:53 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
18:20:30 nineonine joins (~nineonine@50.216.62.2)
18:20:44 ezrakilt_ joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
18:22:14 × xff0x quits (~fox@2001:1a81:5319:4600:235b:ce31:3a53:2cac) (Ping timeout: 264 seconds)
18:22:15 × ezrakilt_ quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Read error: No route to host)
18:22:46 × zebrag quits (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
18:22:58 xff0x joins (~fox@2001:1a81:5319:4600:de4d:e10d:2b58:a372)
18:23:01 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 264 seconds)
18:23:08 zebrag joins (~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
18:24:49 <merijn> kaboom: Eh...that sounds like a rather *terrible* idea
18:24:59 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
18:25:13 Tario joins (~Tario@200.119.186.55)
18:26:26 × shutdown_-h_now quits (~arjan@2001:1c06:2d0b:2312:1c6c:f94b:408f:edd0) (Ping timeout: 264 seconds)
18:26:27 × Tario quits (~Tario@200.119.186.55) (Read error: Connection reset by peer)
18:26:39 Tario joins (~Tario@201.192.165.173)
18:26:51 × jamm quits (~jamm@unaffiliated/jamm) (Remote host closed the connection)
18:26:55 <kaboom> I've heard good things about dash, idk
18:26:57 × kaboom quits (~manjaro-u@2601:285:c000:a6c0::4f77) (Remote host closed the connection)
18:27:59 <merijn> "good shell for interactive use" and "good shell for scripts" are orthogonal concerns
18:29:23 × centril quits (~centril@213-66-146-92-no250.tbcn.telia.com) (Ping timeout: 256 seconds)
18:30:55 kobaam joins (~manjaro-u@2601:285:c000:a6c0::4f77)
18:31:04 kobaam is now known as kaboom
18:31:24 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) ()
18:31:31 <int-e> changing /bin/sh in a running system on a whim is... adventerous
18:31:55 <merijn> "may you live in interesting times" ;)
18:31:56 <int-e> Personally I thought was bad enough for new installations back when Debian changed its default
18:32:11 <glguy> int-e: configuring your computer can be a fun hobby
18:32:27 <int-e> glguy: Sure. I have used Gentoo :-P
18:32:33 <glguy> ditto ^_^
18:32:37 centril joins (~centril@213-66-146-92-no250.tbcn.telia.com)
18:32:47 <kaboom> yeah, I reversed it because a package I tried to install failing, and xmonad still isn't seeing my stuff
18:32:55 <kaboom> failed*
18:33:01 <kaboom> pardon my horrendous grammar
18:33:17 <int-e> kaboom: before you `startx` again, do you log out and relogin?
18:33:18 shutdown_-h_now joins (~arjan@2001:1c06:2d0b:2312:8c45:faa1:a31d:b462)
18:33:29 <kaboom> no, should I?
18:33:31 <int-e> or at least source .profile?
18:33:55 heatsink joins (~heatsink@2600:1700:bef1:5e10:e0a4:3836:b19:3d7)
18:33:59 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
18:34:03 <int-e> startx will take the environment from the shell, the shell will get its environment on login because that's when .profile is read
18:34:04 <kaboom> I source .profile in my login shell
18:34:29 aldum_ joins (~vishera@catv-176-63-107-31.catv.broadband.hu)
18:34:44 × aldum quits (~vishera@aldum.pw) (Quit: leaving)
18:34:52 <kaboom> well, technically it's .bashrc, but for these purposes, they're the same (and actually they are identical atm)
18:35:04 × philopsos quits (~caecilius@45.133.192.140) (Ping timeout: 246 seconds)
18:35:18 kw joins (88388c02@136.56.140.2)
18:35:29 <kaboom> I also just rebooted, because firefox didn't like what I tried with picom
18:35:54 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
18:36:38 <int-e> kaboom: anyway, yes, I think you should, because that's the best way to get the shell's environment into a reproducible state (with whatever changes you've made to .profile, .bashrc, and the like)
18:36:41 × rajivr quits (uid269651@gateway/web/irccloud.com/x-txjindmtwxpzdgyt) (Quit: Connection closed for inactivity)
18:36:58 <int-e> a reboot will do the trick as well, of course
18:37:17 <kw> Are there any problems with defining Maybe's Alternative.sum as `fmap repeat`?
18:37:27 <kw> ^ Alternative.some
18:37:52 christo joins (~chris@81.96.113.213)
18:38:23 aldum_ is now known as aldum|arbiter
18:38:25 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
18:38:26 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
18:38:40 christo joins (~chris@81.96.113.213)
18:38:50 × geekosaur quits (42d52137@66.213.33.55) (Ping timeout: 245 seconds)
18:40:21 aldum joins (~vishera@aldum.pw)
18:40:37 × aldum|arbiter quits (~vishera@catv-176-63-107-31.catv.broadband.hu) (Quit: leaving)
18:41:30 <kaboom> Ah, that fixed it! A reboot, yelling at /bin/sh to change from bash to dash and vice versa and who knows what else, weird...
18:41:38 <ph88^> is there a difference between the assert function and doing myself if condition then error else normal ?
18:42:18 <kaboom> I think haskell is one of the most beautiful languages, a pain to get into, but I'm starting to really think it's cool.
18:42:46 <int-e> kw: Given that the current implementation bottoms out... *probably* not. But is it the right choice? Or should it be a singleton list?
18:43:03 <int-e> . o O ( fmap (replicate 42) )
18:43:09 <kaboom> Anyway, have a nice day you all, *hopefully* next time I'm here it'll be for philisophocal and technical reasons, not tech support. :)
18:43:13 philopsos joins (~caecilius@45.133.192.204)
18:43:44 nomeata joins (~jojo@dslb-084-056-082-238.084.056.pools.vodafone-ip.de)
18:43:44 <int-e> > many Nothing :: Maybe [()] -- hmm
18:43:47 <lambdabot> Just []
18:44:11 <merijn> ph88^: assert include the file and line of code
18:44:24 <ph88^> oh that's good to know
18:44:32 <ph88^> i saw they are also controllable with GHC flags
18:44:39 <xsperry> kaboom, see you!
18:44:41 <merijn> The even more correct answer is: both are bad :p
18:44:52 <ph88^> is there a way i can custom format a message with assert ??
18:45:17 <merijn> ph88^: Let's rewind: What kinda error are you producing?
18:45:39 <merijn> Because if you want formatting, the answer is almost certainly "you shouldn't be using error or assert"
18:45:40 <ph88^> assert (and $ map (x ==) xs)
18:45:49 <ph88^> just prints the default error that an assert gives me
18:45:51 × reactormonk quits (~reactormo@mehl.schokokeks.org) (Quit: WeeChat 2.7.1)
18:46:14 ubert joins (~Thunderbi@p200300ecdf1ee0efe6b318fffe838f33.dip0.t-ipconnect.de)
18:46:33 <merijn> error is for something that should never be possible, because there's almost no way to reliably detect/handle error (or assert) and no way to format them
18:46:34 reactormonk joins (~reactormo@mehl.schokokeks.org)
18:46:56 <kw> `liftA2 ( : ) (Right x) (Right xs)` is Right (x : xs), so by the default definition the list should be infinite. The difference is that `fmap repeat` starts producing elements immediately, while the default definition can't.
18:47:02 <merijn> You want either Either or "proper" exceptions
18:47:21 <xsperry> ph88^, no clue. and . map f is all btw.
18:47:25 <merijn> kw: Let's rewind to: Why are you asking? :)
18:47:35 <xsperry> @src all
18:47:36 <lambdabot> all p = and . map p
18:47:46 mirrorbird joins (~psutcliff@2a00:801:42b:8314:3772:eb7f:91f1:698c)
18:48:05 <ph88^> oki
18:48:33 × safinaskar quits (6dfc5ba3@109-252-91-163.nat.spd-mgts.ru) (Remote host closed the connection)
18:51:03 <kw> merjin: First of all, I'm curious why a method of a common data type and class in base is essentially undefined. Secondly, I'm wondering whether it would be possible to have non-bottom definitions of `some` and `many` so that they can be used without knowing the exact type they'll be instantiated for.
18:51:20 <kuribas> ski: is there a limit to the amount of OS threads for unbound threads?
18:51:54 <kuribas> ski: or does it grow unboundedly to manage the FFI parallelism?
18:52:26 <xsperry> ph88^, perhaps assertMessage does what you want
18:52:27 <merijn> kw: It's not undefined, it's just that some/many aren't really useful for Maybe
18:53:08 mort is now known as debian
18:53:14 debian is now known as mort
18:53:42 <kw> merjin: Sorry, I didn't mean `undefined`, I meant that an explicit definition is not given and therefore it's bottom for any Just value.
18:54:03 <ph88^> xsperry, from which package ?
18:54:30 <xsperry> ah, it isn't in base.
18:54:33 <xsperry> https://hackage.haskell.org/package/assert-0.0.1.2/docs/Control-Exception-Assert.html
18:55:08 geekosaur joins (42d52137@66.213.33.55)
18:55:21 <xsperry> hasn't been updated in years, so I'm not sure if it is still usable
18:55:22 <merijn> kw: I can't think of a single case where code is written for any Alternative where this is actually a problem, though?
18:55:44 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
18:56:16 <merijn> "It's not usable with Maybe", ok, sure. But why is that a problem if the meaning of many just isn't sensible for Maybe and it's thus never used to begin with?
18:56:52 Lord_of_Life_ joins (~Lord@unaffiliated/lord-of-life/x-0885362)
18:57:08 <kw> But why isn't 'Nothing or an infinite list of x' and 'Just [] or an infinite list of x' sensible?
18:57:37 <kw> I mean, you could write a parsing library where 'some' and 'many' are both defined as 'let x = x in x' and then ask the same question.
18:58:35 <merijn> kw: The semantics of many/some are given at the top of the Alternative class
18:58:59 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection)
18:59:01 × Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 264 seconds)
18:59:01 Lord_of_Life_ is now known as Lord_of_Life
18:59:06 <merijn> some should be equivalent to "some v = (:) <$> v <*> many v", and many to "many v = some v <|> pure []"
18:59:21 <kw> Fair enough. What does it mean by 'least solutions'?
18:59:30 <merijn> kw: "let x = x in x" for a parser library is not equivalent to that
18:59:35 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
19:00:21 <kw> It's equivalent to it except it doesn't return the same result until it finishes evaluating.
19:00:39 <kw> Which it never does.
19:00:58 <kw> That's a performance characteristic.
19:01:03 christo joins (~chris@81.96.113.213)
19:01:05 <kw> :)
19:01:07 <merijn> Disagree :p
19:01:40 <dolio> That's wrong.
19:01:47 <merijn> Laws are generally state as if for a total language, and people expect them to be "at least as defined"
19:02:20 <dolio> For a lot of parsers, if you unfold enough copies of the specifications, it will actually work.
19:02:31 <kw> Fair enough. I was being dumb about the nonterminating parser comment.
19:02:39 <dolio> So undefined is verifiably not a fixed point.
19:02:42 poljar1 joins (~poljar@93-139-24-194.adsl.net.t-com.hr)
19:03:11 <kw> OK. So the methods, if defined, should be 'at least as defined as the default implementations'.
19:03:13 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
19:03:28 berberman_ joins (~berberman@unaffiliated/berberman)
19:03:44 jpds joins (~jpds@gateway/tor-sasl/jpds)
19:03:58 × berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds)
19:04:08 <kw> `fmap repeat (Just x)` is 'at least as defined as' `liftA2 (
19:04:13 × poljar quits (~poljar@78-3-3-62.adsl.net.t-com.hr) (Ping timeout: 265 seconds)
19:05:01 <kw> sorry, the default definition with liftA2.
19:05:38 × christo quits (~chris@81.96.113.213) (Ping timeout: 256 seconds)
19:05:47 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
19:07:13 × conal quits (~conal@209.58.135.97) (Quit: Computer has gone to sleep.)
19:07:47 notzmv joins (~user@unaffiliated/zmv)
19:08:12 <kw> It seems like were using the equivalent of 'reverse . foldl (\z x -> f x z)' when we could use 'foldr f'.
19:10:09 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
19:10:57 <kw> And saying that 'those methods are not used for Maybe' seems to circularly rely on the current definitions being useless.
19:11:27 <merijn> I don't think that "fmap repeat" is particularly useful either :p
19:12:31 <kw> There are a lot of functions that seem useless at first glance, but it's a lot easier to find uses for terminating functions.
19:12:36 × rembo10 quits (~rembo10@wally.codeshy.com) (Ping timeout: 256 seconds)
19:13:13 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 246 seconds)
19:13:22 christo joins (~chris@81.96.113.213)
19:13:36 <kw> (That's not to denigrate useful nonterminating functions.)
19:16:14 × mirrorbird quits (~psutcliff@2a00:801:42b:8314:3772:eb7f:91f1:698c) (Quit: Leaving)
19:16:36 jpds_ joins (~jpds@gateway/tor-sasl/jpds)
19:16:41 × xff0x quits (~fox@2001:1a81:5319:4600:de4d:e10d:2b58:a372) (Ping timeout: 272 seconds)
19:16:43 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
19:18:10 xff0x joins (~fox@141.98.255.147)
19:19:09 conal joins (~conal@198.8.81.89)
19:21:37 <monochrom> "many" and "some" are not meaningful for Maybe and []. But don't overgeneralize this observation to other instances.
19:25:33 <kw> I won't; 'some' and 'many' are clearly useful in parsing. But why must they be meaningless for Maybe? Is 'fmap repeat' not a least solution for Maybe?
19:25:52 × gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
19:27:45 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 256 seconds)
19:29:18 eacameron joins (uid256985@gateway/web/irccloud.com/x-ruzyobnhrnktduyo)
19:29:43 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
19:31:00 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
19:31:14 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 264 seconds)
19:32:10 × DavidEichmann quits (~david@98.27.93.209.dyn.plus.net) (Remote host closed the connection)
19:32:33 bor0 joins (~boro@unaffiliated/boro/x-000000001)
19:33:24 × xff0x quits (~fox@141.98.255.147) (Ping timeout: 256 seconds)
19:35:21 xff0x joins (~fox@2001:1a81:5319:4600:de4d:e10d:2b58:a372)
19:38:56 × ur quits (5434a07f@tm.84.52.160.127.dc.cable.static.telemach.net) (Remote host closed the connection)
19:39:55 × nomeata quits (~jojo@dslb-084-056-082-238.084.056.pools.vodafone-ip.de) (Quit: Client exiting)
19:41:22 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
19:42:23 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
19:43:34 ania123 joins (5bb86b87@91.184.107.135)
19:43:36 <ania123> hi, is there a channel where ML topics are welcome?
19:46:36 coot joins (~coot@37.30.55.132.nat.umts.dynamic.t-mobile.pl)
19:46:38 <hpc> https://en.wikipedia.org/wiki/Machine_learning or https://en.wikipedia.org/wiki/ML_(programming_language)? :P
19:48:39 <ania123> machine learning
19:49:13 <hpc> ah, no clue
19:49:22 <hpc> here if it's in haskell, -offtopic if it's not?
19:50:01 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
19:50:22 <ania123> haskell is a language for AI
19:50:31 <ania123> so, closely related to ML
19:51:56 <hpc> huh?
19:51:59 <hpc> they're the same thing
19:52:14 <hpc> and haskell is a general-purpose language
19:53:18 <monochrom> "haskell is a language for AI" is delusional.
19:54:33 <ania123> functional programming in General was created to handle existing problems in AI
19:55:18 <monochrom> That is also delusional.
19:55:20 <hpc> if you mean lisp
19:55:38 <hpc> and if you mean that ai people chose lisp because it could manipulate symbols better than fortran
19:55:48 × knupfer quits (~Thunderbi@200116b82cd91d00683ccaa8cd8c6c91.dip.versatel-1u1.de) (Remote host closed the connection)
19:55:57 knupfer joins (~Thunderbi@200116b82cd91d00740f98776c0c342e.dip.versatel-1u1.de)
19:56:02 × Franciman quits (~francesco@host-82-48-174-127.retail.telecomitalia.it) (Quit: Leaving)
19:56:03 <hpc> and if by existing problems in ai, you mean solving linear systems
19:56:25 <monochrom> Read John Backus's lecture to learn that Backus was merely dissatisfied with imperative programming.
19:57:19 <hpc> and if you ignore that lisp was never inteded to be run, and that functional programming is rooted in the math that lisp was created as a notational tool for
19:58:14 × kaboom quits (~manjaro-u@2601:285:c000:a6c0::4f77) (Remote host closed the connection)
19:58:48 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
19:59:19 <ania123> anyway, we agree that last century one of the main motivtion of FP was AI related applications...
19:59:26 <hpc> no?
19:59:42 × v_m_v quits (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Remote host closed the connection)
19:59:45 <monochrom> Delusional as hell.
20:00:01 v_m_v joins (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5)
20:00:34 <monochrom> If you s/FP/Prolog/, you may have a slightly better chance, but I wouldn't count on it either.
20:02:09 × conal quits (~conal@198.8.81.89) (Quit: Computer has gone to sleep.)
20:02:40 × p-core quits (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Quit: p-core)
20:02:41 conal joins (~conal@198.8.81.89)
20:02:49 × conal quits (~conal@198.8.81.89) (Client Quit)
20:03:03 p-core joins (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
20:03:26 <monochrom> If you s/FP/Lisp/, I wouldn't argue, on the mere ground that the Lisp people back then and the AI people back then had such overlap that maybe there was something, but I would point out that Lisp doesn't do FP justice, today I don't consider Lisp FP at all.
20:03:33 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
20:06:16 fendor_ is now known as fendor
20:06:31 vs^ joins (~hph@ip98-184-89-2.mc.at.cox.net)
20:11:08 × coot quits (~coot@37.30.55.132.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
20:11:58 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
20:12:05 dandart joins (~Thunderbi@home.dandart.co.uk)
20:12:35 × geekosaur quits (42d52137@66.213.33.55) (Ping timeout: 245 seconds)
20:14:15 × kw quits (88388c02@136.56.140.2) (Ping timeout: 245 seconds)
20:18:03 × rayyyy quits (~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 240 seconds)
20:19:15 conal joins (~conal@107.181.166.202)
20:20:06 ransom joins (~c4264035@8.48.134.54)
20:20:26 × p-core quits (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Remote host closed the connection)
20:21:28 × aenesidemus_ quits (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) (Read error: Connection reset by peer)
20:23:06 geekosaur joins (42d52137@66.213.33.55)
20:23:06 kupi joins (uid212005@gateway/web/irccloud.com/x-zsinuyuwufxnleoc)
20:23:58 × madjesti1 quits (~madjestic@86-88-72-244.fixed.kpn.net) (Ping timeout: 265 seconds)
20:24:05 × bor0 quits (~boro@unaffiliated/boro/x-000000001) (Quit: This computer has gone to sleep)
20:24:10 <sshine> Haskell = ML = Machine Learning. QED.
20:25:08 <sshine> monochrom, Lisp is truly multi-paradigm. it's as functional as you want it. :-D
20:25:32 × dfeuer quits (~dfeuer@pool-173-79-253-62.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
20:26:56 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
20:28:06 × ransom quits (~c4264035@8.48.134.54) (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:29:01 madjesti1 joins (~madjestic@86-88-72-244.fixed.kpn.net)
20:30:03 <monochrom> Following Shriram Krishnamurthi, I no longer believe in paradigms. But leaving that aside, Lisp is at most two paradigms.
20:30:39 <monochrom> This is like the fuzz about "multi-media PC" 20 years ago, and then you realized it meant only two media: CDROM and sound card.
20:32:24 <Rembane> And MMX instructions
20:32:25 Rembane nods
20:32:57 peterstorm[m] joins (peterstorm@gateway/shell/matrix.org/x-hslfrrbtahiybhio)
20:34:54 <dolio> I thought it was, like, text, audio and video/images.
20:35:29 <dolio> That's 3 media.
20:36:00 <monochrom> That strengthens my point. Lisp doesn't even have 3 paradigms.
20:36:07 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 260 seconds)
20:36:10 <dolio> Hahaha.
20:36:10 × ania123 quits (5bb86b87@91.184.107.135) (Remote host closed the connection)
20:36:19 <koz_> 'Lisp' doesn't even mean anything.
20:36:26 <koz_> Unless you take the position that 'Lisp = Common Lisp'.
20:36:31 <koz_> In which case I can't take you seriously.
20:36:45 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
20:37:55 EncodePanda joins (b9eeefcd@185.238.239.205)
20:38:12 carbolymer_ is now known as carbolymer
20:38:52 × jollygood2 quits (~bc812391@217.29.117.252) (Quit: http://www.okay.uz/ (Session timeout))
20:38:54 pedrorubster[m] joins (pedrorubst@gateway/shell/matrix.org/x-vlkedizifqmvzfxx)
20:39:01 <kuribas> well, a large part of AI used to be expert systems, which where usually in LISP
20:39:39 <kuribas> but nowadays AI is mostly neural networks
20:39:49 p-core joins (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
20:39:59 <kuribas> which are not in lisp or haskell.
20:40:16 <kuribas> I'd say in C, but accessed from Python.
20:41:36 × kuribas quits (~user@ptr-25vy0i9xeq5rwmxnhs4.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
20:43:47 <ph88^> how can i get all the elements that nub removes ?
20:44:07 × koala_man quits (~vidar@unaffiliated/koala-man/x-2491903) (Remote host closed the connection)
20:44:22 <monochrom> You probably have to write your own function.
20:44:29 koala_man joins (~vidar@157.146.251.23.bc.googleusercontent.com)
20:44:29 × koala_man quits (~vidar@157.146.251.23.bc.googleusercontent.com) (Changing host)
20:44:29 koala_man joins (~vidar@unaffiliated/koala-man/x-2491903)
20:45:47 <ephemient> if your list contains Ord elements, then `group . sort` is easy
20:46:02 <Rembane> ph88^: f xs = xs \\ nub xs -- I haven't thought this through properly, but it could work...
20:46:30 <Rembane> ph88^: NEvermind, it doesn't work :D
20:46:34 <ph88^> oh \\ is intersect or something ?
20:46:42 <koz_> ph88^: Difference I think.
20:46:43 <ephemient> difference
20:46:52 <Rembane> ph88^: It's difference, it has some other set operation friends in Data.List
20:47:08 <Rembane> ph88^: https://hackage.haskell.org/package/base-4.12.0.0/docs/Data-List.html#g:20
20:48:03 × hekkaidekapus_ quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
20:48:14 hekkaidekapus_ joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
20:48:58 × knupfer quits (~Thunderbi@200116b82cd91d00740f98776c0c342e.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
20:49:35 <ephemient> Rembane: what's wrong with `xs \\ nub xs`? seems like it should work as long as `xs` is finite
20:51:53 <hpc> should be fine even if it's infinite
20:52:09 <hpc> nub assumes the lists are similarly ordered iirc
20:52:14 usr25 joins (~usr25@unaffiliated/usr25)
20:52:18 <Rembane> ephemient: Consider the list [1,1,1]. The function will not evaluate to [1,1] which are the elements which nub removes.
20:52:40 <Rembane> ephemient: Or wait... it will. I'm way too tired to think right now. :D
20:52:46 <ephemient> > let f xs = xs \\ nub xs in f [1, 1, 1]
20:52:49 <lambdabot> [1,1]
20:52:54 × koala_man quits (~vidar@unaffiliated/koala-man/x-2491903) (Quit: I'm gonna win SETI@home.)
20:53:05 koala_man joins (~vidar@157.146.251.23.bc.googleusercontent.com)
20:53:05 × koala_man quits (~vidar@157.146.251.23.bc.googleusercontent.com) (Changing host)
20:53:05 koala_man joins (~vidar@unaffiliated/koala-man/x-2491903)
20:53:30 <ephemient> > let f xs = xs \\ nub xs in f [x | x <- [1..], _ <- [(), ()]]
20:53:37 <lambdabot> mueval-core: Time limit exceeded
20:53:57 <xerox_> > M.keys . M.filter (>1) . M.fromListWith (+) . flip zip (repeat 1) $ "asavavbcabcacbacabcbvdg"
20:53:58 <Melanie> ph88^: nub is, unfortunately, quadratic wrt length, so if you'll always have an Ord instance you should use nubOrd
20:53:59 <lambdabot> "abcv"
20:54:30 <ephemient> > let f = unnub [] where unnub _ [] = []; unnub nubbed (x:xs) | x `elem` nubbed = x:unnub nubbed xs | otherwise = unnub (x:nubbed) xs in unnub [x | x <- [1..], _ <- [(), ()]]
20:54:33 <lambdabot> error:
20:54:34 <lambdabot> Variable not in scope: unnub :: [a0] -> t
20:55:25 <ephemient> > let f = unnub [] where { unnub _ [] = []; unnub nubbed (x:xs) | x `elem` nubbed = x:unnub nubbed xs | otherwise = unnub (x:nubbed) xs } in unnub [x | x <- [1..], _ <- [(), ()]]
20:55:28 <lambdabot> error:
20:55:28 <lambdabot> Variable not in scope: unnub :: [a0] -> t
20:55:45 <ephemient> d'oh
20:55:51 <ephemient> > let f = unnub [] where { unnub _ [] = []; unnub nubbed (x:xs) | x `elem` nubbed = x:unnub nubbed xs | otherwise = unnub (x:nubbed) xs } in f [x | x <- [1..], _ <- [(), ()]]
20:55:54 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,...
20:55:59 <ephemient> yeah, that does work on an infinite list
20:56:24 <ephemient> but is quadratic and anything with Ord can do better
20:56:46 <ph88^> thanks !
20:56:57 <jle`> ph88^: you can also just build a frequency map
20:57:00 <ph88^> why is not-quadratic nub not in Data.List actually ?
20:57:05 <jle`> and filter for the ones greater than 1
20:57:27 <jle`> @let freqMap = M.fromListWith (+) . map (,1)
20:57:28 <lambdabot> Defined.
20:57:32 × fryguybob quits (~fryguybob@cpe-74-65-31-113.rochester.res.rr.com) (Quit: leaving)
20:57:43 <jle`> > freqMap [1,5,6,2,3,4,2,3,3,4,2,5,2,3,1,1,3,2,3,8,5]
20:57:45 <lambdabot> fromList [(1,3),(2,5),(3,6),(4,2),(5,3),(6,1),(8,1)]
20:58:10 <jle`> so you can see it removed two 1's, four 2's, five 3's, one 4, and two 5's
20:58:17 <ph88^> thanks :)
20:58:49 <jle`> > M.mapMaybe (\i -> (i-1) <$ guard (i>1)) . freqMap $ [1,5,6,2,3,4,2,3,3,4,2,5,2,3,1,1,3,2,3,8,5]
20:58:51 <lambdabot> fromList [(1,2),(2,4),(3,5),(4,1),(5,2)]
20:59:05 <jle`> ^ just the number of removed items
20:59:06 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
20:59:31 <jle`> ph88^: i think it's not in Data.List because it could be kind of ugly to write one without a nice backing data structure like Data.Set
20:59:38 <jle`> which is what nubOrd from containers uses
20:59:51 × Jd007 quits (~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007)
21:00:48 <ph88^> oh i see
21:00:53 <monochrom> It is seldom productive to ask "why is foo not in library bar". The closer library bar is to being a standard library, the more by-committee-not-by-technical it is.
21:00:56 × conal quits (~conal@107.181.166.202) (Quit: Computer has gone to sleep.)
21:01:21 <ephemient> > let f xs = map fst . filter (uncurry Set.member) . zip xs $ scanl' (flip Set.insert) Set.empty xs in f [x | x <- [1..], _ <- [(), ()]]
21:01:24 <lambdabot> error:
21:01:24 <lambdabot> Not in scope: ‘Set.member’
21:01:24 <lambdabot> Perhaps you meant one of these:
21:01:34 <ephemient> hmm how do I get Data.Set with lambdabot
21:01:40 <Melanie> @load Data.Set
21:01:40 <lambdabot> Unknown command, try @list
21:01:43 <monochrom> Oh, and the further it is, that means the closer it is to a one-person-pet-peeve, so no luck either.
21:01:47 <Melanie> @let import Data.Set
21:01:48 <lambdabot> .L.hs:172:32: error:
21:01:48 <lambdabot> Ambiguous occurrence ‘map’
21:01:48 <lambdabot> It could refer to
21:01:55 <geekosaur> :t S.member
21:01:56 <lambdabot> Ord a => a -> S.Set a -> Bool
21:01:58 <ephemient> > let f xs = map fst . filter (uncurry S.member) . zip xs $ scanl' (flip S.insert) S.empty xs in f [x | x <- [1..], _ <- [(), ()]]
21:02:01 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,...
21:02:06 conal joins (~conal@107.181.166.202)
21:02:20 × conal quits (~conal@107.181.166.202) (Client Quit)
21:02:31 <ephemient> there we go, something that uses Ord to get n log n and still works on infinite lists
21:02:42 Jd007 joins (~Jd007@d154-5-83-24.bchsia.telus.net)
21:03:30 <jle`> ephemient: that's how nubOrd works i think
21:03:52 × v_m_v quits (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Remote host closed the connection)
21:04:07 <ephemient> well, it's kind of the opposite of nubOrd - that would use not . member
21:04:16 conal joins (~conal@107.181.166.202)
21:04:23 × conal quits (~conal@107.181.166.202) (Client Quit)
21:04:54 conal joins (~conal@107.181.166.202)
21:05:07 × conal quits (~conal@107.181.166.202) (Client Quit)
21:05:09 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246) (Remote host closed the connection)
21:05:23 <jle`> @import Data.Containers.ListUtils
21:05:23 <lambdabot> Unknown command, try @list
21:05:28 <jle`> @let import Data.Containers.ListUtils
21:05:30 <lambdabot> Defined.
21:05:39 <ephemient> > Data.Containers.ListUtils.nubOrd [x | x <- [1..], _ <- [(), (), ()]]
21:05:41 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,...
21:05:45 <ephemient> > let f xs = map fst . filter (uncurry S.member) . zip xs $ scanl' (flip S.insert) S.empty xs in f [x | x <- [1..], _ <- [(), (), ()]]
21:05:48 <lambdabot> [1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,...
21:05:57 <jle`> ooh, you mean the version that ph88^ was looking for
21:06:02 <ephemient> right
21:06:04 <jle`> nice
21:12:27 × Feuermagier quits (~Feuermagi@213.178.26.41) (Remote host closed the connection)
21:13:21 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c5ef:3e8a:389d:3246)
21:15:09 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
21:19:07 stalactite[m] parts (stalactite@gateway/shell/matrix.org/x-hmsdktjbvicqrdgd) ("User left")
21:20:04 × fosterite quits (~fosterite@2600:6c46:7800:fecf:391b:8118:5f04:a726) (Remote host closed the connection)
21:20:41 fosterite joins (~fosterite@2600:6c46:7800:fecf:391b:8118:5f04:a726)
21:22:39 × vs^ quits (~hph@ip98-184-89-2.mc.at.cox.net) ()
21:23:01 fosterit_ joins (~fosterite@2600:6c46:7800:fecf:8d97:96be:d9ba:bbf8)
21:23:11 son0p joins (~son0p@181.136.122.143)
21:25:08 × fosterite quits (~fosterite@2600:6c46:7800:fecf:391b:8118:5f04:a726) (Ping timeout: 260 seconds)
21:26:24 conal joins (~conal@66.115.157.52)
21:26:35 knupfer joins (~Thunderbi@200116b82cd91d0000b84afffea44c4a.dip.versatel-1u1.de)
21:27:02 × conal quits (~conal@66.115.157.52) (Client Quit)
21:28:14 × fosterit_ quits (~fosterite@2600:6c46:7800:fecf:8d97:96be:d9ba:bbf8) (Ping timeout: 264 seconds)
21:28:42 × usr25 quits (~usr25@unaffiliated/usr25) (Quit: Leaving)
21:28:59 × knupfer quits (~Thunderbi@200116b82cd91d0000b84afffea44c4a.dip.versatel-1u1.de) (Remote host closed the connection)
21:29:10 usr25 joins (~usr25@unaffiliated/usr25)
21:29:13 knupfer joins (~Thunderbi@200116b82cd91d004d86847a3f67d3a4.dip.versatel-1u1.de)
21:29:54 usr25 is now known as usr25_tm
21:32:06 ransom joins (~c4264035@8.48.134.54)
21:36:56 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 256 seconds)
21:37:45 × madjesti1 quits (~madjestic@86-88-72-244.fixed.kpn.net) (Quit: Lost terminal)
21:38:40 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
21:42:32 × geekosaur quits (42d52137@66.213.33.55) (Remote host closed the connection)
21:43:01 ransom_ joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
21:43:12 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
21:45:38 × ransom quits (~c4264035@8.48.134.54) (Ping timeout: 272 seconds)
21:47:43 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
21:48:09 <pie_> is it bad to want automatic `coerce`?
21:48:52 <pie_> well, Ive got newtypes, but I guess it would be pointless if coers can cross both directions of the newtype bijection
21:51:18 × Deide quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa)
21:53:16 <dibblego> @type _Wrapped
21:53:18 <lambdabot> (Rewrapped s t, Rewrapped t s, Profunctor p, Functor f) => p (Unwrapped s) (f (Unwrapped t)) -> p s (f t)
21:53:22 <dibblego> use that ^^
21:53:44 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:01:10 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
22:01:59 × ransom_ quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:02:39 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
22:03:13 × Guest28673 quits (~textual@zrcout.mskcc.org) (Ping timeout: 264 seconds)
22:05:14 <monochrom> It is bad to want automatic anything, IMO. Well, for most things, there are obvious exceptions.
22:05:34 <pie_> how do I go from a Maybe to a "return a value if Just, run some code if Nothing"
22:05:41 <monochrom> I guess bad punctuation there. s/things, there/things; there/
22:05:52 <monochrom> @type maybe
22:05:55 <lambdabot> b -> (a -> b) -> Maybe a -> b
22:06:00 <monochrom> That can help.
22:06:10 <monochrom> But more often, just write pattern matching.
22:06:33 <ski> @type fromMaybe
22:06:34 <monochrom> "maybe" is handy in very simple cases.
22:06:35 <lambdabot> a -> Maybe a -> a
22:06:44 <pie_> i just know im not thinking about this right
22:06:46 × dhouthoo quits (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
22:07:05 tsrt^ joins (~hph@ip98-184-89-2.mc.at.cox.net)
22:07:08 <monochrom> But if your a->b function is like 10 lines long, may as well forget it, write pattern matching.
22:07:54 Tops2 joins (~Tobias@dyndsl-095-033-017-251.ewe-ip-backbone.de)
22:07:57 <pie_> ok maybe part of what confused me was that I actually wanted to call exit, but i can just replace that with somethig that returns the same type as the other branh
22:08:05 <monochrom> because "maybe foo (\x -> 10-line of code here)" is unreadable, "case xxx of Nothing -> foo \n Just x -> 10 lines of code here" is at least formattable.
22:09:00 <ski> @type System.Exit.exitSuccess
22:09:03 <lambdabot> IO a
22:10:34 × daenth quits (~daenth@136.36.157.210) (Quit: ZNC 1.7.5 - https://znc.in)
22:12:58 Alleria joins (~textual@2603-7000-3040-0000-4912-c872-cb3c-e0ab.res6.spectrum.com)
22:13:22 Alleria is now known as Guest95725
22:14:36 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:14:57 pavonia joins (~user@unaffiliated/siracusa)
22:15:20 <pie_> dibblego: can i read about that somewhere
22:15:35 <koz_> OK, I get the feeling I can write this better with a (monadic) fold, but I am not too sure how to convert it: https://gist.github.com/kozross/fd5a1ec16403de70190dc61b5655e635
22:16:07 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:16:46 × dandart quits (~Thunderbi@home.dandart.co.uk) (Quit: dandart)
22:21:18 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
22:21:35 mirrorbird joins (~psutcliff@2a00:801:42b:8314:3772:eb7f:91f1:698c)
22:22:25 × mirrorbird quits (~psutcliff@2a00:801:42b:8314:3772:eb7f:91f1:698c) (Remote host closed the connection)
22:22:30 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
22:23:02 christo joins (~chris@81.96.113.213)
22:24:29 <monochrom> koz_: I've posted there.
22:24:48 <monochrom> Um, why does it not recognize my post as code.
22:24:49 edrx joins (~Eduardo@2804:56c:d2ef:cf00:67de:bc02:9559:c5c1)
22:25:05 <koz_> ```haskell My code here ```
22:25:28 <monochrom> OK fixed
22:25:55 <pie_> can I make this less ugly? https://bpa.st/46YQ
22:25:56 <koz_> Fixed your fix to be pretty and colourful. :D
22:26:22 <monochrom> But I'm monochrom...
22:26:30 <koz_> polychrom now.
22:26:38 <Melanie> pie_: use maybe
22:26:40 <Melanie> :t maybe
22:26:42 <lambdabot> b -> (a -> b) -> Maybe a -> b
22:26:58 × ubert quits (~Thunderbi@p200300ecdf1ee0efe6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
22:27:20 <Melanie> pie_: maybe (exitWith X) pure
22:27:29 <koz_> monochrom: That's an interesting solution - I thought this'd need foldM rather than foldr.
22:27:49 × christo quits (~chris@81.96.113.213) (Ping timeout: 264 seconds)
22:28:00 <koz_> That's what was throwing me I think.
22:29:01 <ezzieyguywuf> this confuses me - how do I run the tests? https://github.com/faylang/fay/wiki/Contributing-to-Fay#tests
22:29:43 <monochrom> foldM is also a foldr
22:30:05 <monochrom> But if you went foldM you would be losing the Functor flexibility.
22:30:12 <koz_> Yeah, you'd need Monad.
22:30:33 <koz_> foldM = foldlM
22:30:39 <koz_> Apparently it's a foldl.
22:30:48 EncodePanda parts (b9eeefcd@185.238.239.205) ()
22:30:54 <koz_> But in reality it's secretly a foldr anyway...
22:30:59 <koz_> https://hackage.haskell.org/package/base-4.14.1.0/docs/src/Data.Foldable.html#foldlM
22:31:12 <pie_> Melanie: ok
22:31:47 <monochrom> No, the beauty is that foldlM is a foldr, and foldrM is an odd ball.
22:32:54 <ephemient> either way, foldM sequences left-to-right
22:33:59 dandart joins (~Thunderbi@home.dandart.co.uk)
22:34:22 × Ariakenom quits (~Ariakenom@2001:9b1:efb:fc00:acbc:1011:e13d:7bc8) (Quit: Leaving)
22:34:59 <Melanie> pie_: https://bpa.st/RSZA
22:35:06 fosterite joins (~fosterite@2600:6c46:7800:fecf:8d97:96be:d9ba:bbf8)
22:35:46 <Melanie> pie_: if that doesn't work, drop the pure and use fromMaybe instead
22:35:52 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
22:36:25 <pie_> Im more bothered by the underscores than the case statements though
22:36:31 × dandart quits (~Thunderbi@home.dandart.co.uk) (Client Quit)
22:36:34 pie_ looks at paste
22:37:50 christo joins (~chris@81.96.113.213)
22:38:40 <pie_> well im not sure thats more readable due to the pointfreeness, but eh.
22:38:46 <pie_> thanks
22:39:02 <monochrom> This is why you can just write pattern matching.
22:39:17 <Melanie> pie_: i can't help you decide what you think would be meaninfgul variable names
22:39:29 <Melanie> s/fg/gf
22:39:40 × Guest95725 quits (~textual@2603-7000-3040-0000-4912-c872-cb3c-e0ab.res6.spectrum.com) (Quit: Textual IRC Client: www.textualapp.com)
22:39:46 <pie_> tfw no gf
22:39:53 <Melanie> ;-;
22:40:02 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
22:41:07 <pie_> the mildly annoying thing is that i have to pull the double underscore variables out of the case conditions
22:42:31 × hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 246 seconds)
22:43:55 <Melanie> the nice thing about pointfree in this case is that you don't have to name so many variables
22:44:27 × fosterite quits (~fosterite@2600:6c46:7800:fecf:8d97:96be:d9ba:bbf8) (Ping timeout: 260 seconds)
22:44:40 <Melanie> maybe is just streamlined case analysis
22:45:03 <ephemient> https://bpa.st/SEAA uses just as few names
22:45:10 <ephemient> indentation kinda goes off to the right though
22:45:22 <pie_> yeah after spending the last minute thinking i _just_ about re-derived "maybe" xD
22:46:32 <pie_> ephemient: i kind of write my notes like this....mind blown
22:46:34 dandels joins (~dandels@unaffiliated/dandels)
22:46:57 <pie_> ive been using monads the whole time! :p
22:47:00 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:49:01 <edrx> hi people, I have some background on type systems related to the lambda-cube and I am now trying to understand Haskell... what are your favorite presentations of the translation of the Hindley-Milner type system to systems in which the type variables are explicit? I think that I know how to do the translation "by common sense", and I have tested my ideas on a few definitions in the prelude... but I am not totally su
22:49:01 <edrx> re if it works on classes - I started to translate, or to "fully type", Functor and fmap explicitly, but my typing diagrams got quite big, and I guess that I would make better use of my time by reading what is the standard way to do that...
22:49:29 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
22:50:43 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
22:51:21 dandart joins (~Thunderbi@home.dandart.co.uk)
22:53:09 DavidEichmann joins (~david@98.27.93.209.dyn.plus.net)
22:56:10 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:56:20 × usr25_tm quits (~usr25@unaffiliated/usr25) (Quit: Leaving)
22:56:35 Alleria__ joins (~textual@2603-7000-3040-0000-dc9b-805c-a211-54dd.res6.spectrum.com)
22:58:43 × dandart quits (~Thunderbi@home.dandart.co.uk) (Remote host closed the connection)
22:58:59 × xff0x quits (~fox@2001:1a81:5319:4600:de4d:e10d:2b58:a372) (Ping timeout: 272 seconds)
22:59:16 xff0x joins (~fox@2001:1a81:5319:4600:de4d:e10d:2b58:a372)
23:01:45 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 240 seconds)
23:02:08 dandart joins (~Thunderbi@home.dandart.co.uk)
23:02:09 × danvet quits (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
23:02:22 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
23:02:36 <koz_> @unmtl ReaderT r (StateT s (Except e)) a
23:02:37 <lambdabot> r -> s -> Except e (a, s)
23:02:52 <koz_> @unmtl ReaderT r (ExceptT e (State s)) a
23:02:52 <lambdabot> r -> s -> (Either e a, s)
23:03:14 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:03:47 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
23:04:08 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
23:05:34 × dandart quits (~Thunderbi@home.dandart.co.uk) (Client Quit)
23:08:01 <pie_> Melanie: sidenote your snippets seem to need a join tacked on the front, the exitcode stuff returns an IO a , so combined with <$> it ends up IO IO
23:08:42 × livvy quits (~livvy@gateway/tor-sasl/livvy) (Remote host closed the connection)
23:08:50 × Alleria__ quits (~textual@2603-7000-3040-0000-dc9b-805c-a211-54dd.res6.spectrum.com) (Quit: Textual IRC Client: www.textualapp.com)
23:09:59 <Melanie> pie_: then use fromMaybe (exitWith X), I didn't use a linter because I'm not sure what the other funcitons are
23:10:01 <koz_> Actual wat: https://paste.debian.net/1180108/
23:10:05 <Melanie> or which modules to import
23:10:15 <pie_> Melanie: yeah sure
23:10:16 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
23:10:30 <pie_> oh.
23:10:37 <pie_> I was about to ask why that helps
23:10:40 × kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection)
23:11:10 <monochrom> koz_: So, my foldr version broke GHC? :)
23:11:17 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 260 seconds)
23:11:26 <koz_> monochrom: It wasn't that.
23:11:33 danso joins (~dan@23-233-104-25.cpe.pppoe.ca)
23:15:13 <koz_> Let me try a MRE.
23:15:19 usr25 joins (~usr25@unaffiliated/usr25)
23:15:20 fosterite joins (~fosterite@2600:6c46:7800:fecf:8d97:96be:d9ba:bbf8)
23:15:24 <koz_> (minimal reproducing example, not meal ready-to-eat)
23:15:28 <koz_> (never try those)
23:15:37 usr25 parts (~usr25@unaffiliated/usr25) ()
23:15:45 <pie_> Melanie: thats still screwy though because `fromMaybe :: a -> Maybe a -> a` ends up as `fromMaybe :: IO a -> Maybe (IO a) -> IO a`
23:15:54 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
23:15:59 <pie_> and its a IO (Maybe a)
23:16:13 <pie_> well I winged the variables but something like that
23:16:37 christo joins (~chris@81.96.113.213)
23:16:51 <pie_> not sure if i was supposed to get rid of the fmap too
23:18:22 <pie_> if i keep the fmap the problem is in the other direction; where I'm trying to use the default that has IO in it, while in a pure context
23:18:44 <pie_> s/other direction/
23:18:57 <Melanie> pie_: can you share the imports of your file?
23:19:14 <Melanie> just the pertinent ones
23:19:40 conal joins (~conal@143.244.61.230)
23:19:44 <monochrom> "fromMaybe :: IO a -> Maybe (IO a) -> IO a" is the right level.
23:20:11 <pie_> Melanie: https://bpa.st/6CFA
23:20:12 <monochrom> or "maybe :: IO a -> (x -> IO a) -> IO a" in the case of "maybe".
23:20:19 Benzi-Junior joins (~BenziJuni@88-149-65-135.du.xdsl.is)
23:20:29 <pie_> Melanie: said pertinent ones too late :p
23:21:06 <monochrom> err, "maybe :: IO a -> (x -> IO a) -> Maybe x -> IO a"
23:21:58 <pie_> maybe i read it wrong
23:22:09 <pie_> • Couldn't match expected type ‘Maybe (IO Matcher)’
23:22:09 <pie_> with actual type ‘IO (Maybe Matcher)’
23:22:32 pie_ checks his code
23:22:51 × dwts quits (pid@gateway/shell/blinkenshell.org/x-irepyeqrcbcxhiib) (Ping timeout: 256 seconds)
23:23:08 <pie_> I mean yeah, toMatcher returns an IO (Maybe Matcher)
23:23:12 dwts joins (pid@gateway/shell/blinkenshell.org/x-yvyypwvhqlmptmog)
23:23:16 × son0p quits (~son0p@181.136.122.143) (Quit: leaving)
23:23:28 <Melanie> pie_, i'm pretty sure a bind will fix it, give me a sec
23:23:29 <pie_> doh, I can just >>= or something
23:23:36 <pie_> Melanie: too fast :P
23:23:45 <monochrom> Yes, why would anyone avoid >>=
23:24:14 <monochrom> Avoiding >>= is the #1 cause of XY problems.
23:24:26 <pie_> I wasnt avoiding it
23:24:29 <pie_> I just...didnt think of it
23:24:41 <monochrom> With the #1 XY problem being "so I threw in fmap but it is insufficient"
23:24:41 <pie_> i probably should have been using it from the start
23:25:14 × fosterite quits (~fosterite@2600:6c46:7800:fecf:8d97:96be:d9ba:bbf8) (Ping timeout: 264 seconds)
23:25:16 <pie_> though now i have weird parens everywhere :PP
23:25:25 × christo quits (~chris@81.96.113.213) (Ping timeout: 264 seconds)
23:25:29 <pie_> well, not really weird
23:25:31 <pie_> anyway.
23:26:43 <koz_> OK, that's interesting. The crash only happens on 8.8.*
23:26:54 <koz_> On 8.10.* it instead gives a sensible error.
23:27:29 acidjnk_new joins (~acidjnk@p200300d0c704e71938399a79d0a041ac.dip0.t-ipconnect.de)
23:27:59 × Jd007 quits (~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007)
23:30:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
23:33:24 <pie_> bind would work if i wasnt doing io in the frommaybe :P
23:33:44 <pie_> or something
23:34:05 <Melanie> then go back to maybe (exitWith X) pure =<< ...
23:34:06 × elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
23:35:12 <Melanie> . o O (var <- maybe (ioAction ()) (\a -> ioAction2 a) =<< ioMaybe ma)
23:35:26 <Melanie> i don't know irc very well :p
23:35:31 <pie_> huh that actually worked
23:35:40 <Melanie> :)
23:36:04 <pie_> huh =<< is around by default
23:36:08 <pie_> I used >>=
23:36:10 <pie_> :P
23:36:32 <Melanie> :t (=<<)
23:36:33 <lambdabot> Monad m => (a -> m b) -> m a -> m b
23:36:51 <Melanie> i like it, it's closer to (<$>)
23:36:56 <Melanie> :t (<$>)
23:36:58 <lambdabot> Functor f => (a -> b) -> f a -> f b
23:37:40 <pie_> makes sense i guess
23:37:55 <pie_> brains are weird
23:38:31 mpereira joins (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654)
23:38:46 fosterite joins (~fosterite@2600:6c46:7800:fecf:18b:441f:651b:fcc8)
23:39:14 <pie_> for >>= im moving the data in the function box, with fmap im moving a function in the data box, and it doesnt want to merge the concepts :p
23:39:28 <ephemient> (=<<) = flip (>>=), and it is exported by Prelude so it's always available (unless you explicitly stop it from being imported)
23:39:57 <pie_> is there something in ghci that will give you docstrings?
23:40:06 <pie_> (do we even have docstrings per se?Ö
23:40:32 Melanie is now known as bi_functor
23:40:37 <pie_> wow. :doc. whod have thought
23:42:38 <ephemient> https://gitlab.haskell.org/ghc/ghc/-/commit/85309a3cda367425cca727dfa45e5e6c63b47391 since 8.6
23:43:23 <ephemient> I usually open the haddock for modules in a browser anyway though, nicer overview than :b
23:43:30 redkite joins (~redkite@s91904423.blix.com)
23:43:50 × fosterite quits (~fosterite@2600:6c46:7800:fecf:18b:441f:651b:fcc8) (Ping timeout: 264 seconds)
23:43:57 × mpereira quits (~mpereira@2a02:810d:f40:d96:a13a:4248:e827:5654) (Ping timeout: 272 seconds)
23:45:22 <pie_> yeah I really should improve my setup
23:46:25 × fendor quits (~fendor@77.119.129.169.wireless.dyn.drei.com) (Remote host closed the connection)
23:46:38 <bi_functor> pie_, what's your setup now?
23:47:37 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
23:49:56 × ulidtko|k quits (~ulidtko@194.54.80.38) (Ping timeout: 240 seconds)
23:50:26 spatchkaa joins (~spatchkaa@S010600fc8da47b63.gv.shawcable.net)
23:50:57 × knupfer quits (~Thunderbi@200116b82cd91d004d86847a3f67d3a4.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
23:51:31 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
23:51:53 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
23:54:00 <ski> /me looks at bi_functor
23:54:06 ski looks at bi_functor
23:54:13 × acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 264 seconds)
23:57:13 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 264 seconds)
23:59:17 × thc202 quits (~thc202@unaffiliated/thc202) (Quit: thc202)

All times are in UTC on 2021-01-07.