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.