2020/11/25

2020-11-25 00:01:05 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection)
2020-11-25 00:01:27 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-25 00:01:39 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 00:02:23 +0100gioyik(~gioyik@186.118.238.251)
2020-11-25 00:03:39 +0100MindlessDrone(~MindlessD@unaffiliated/mindlessdrone) (Ping timeout: 256 seconds)
2020-11-25 00:03:49 +0100hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 264 seconds)
2020-11-25 00:05:56 +0100zebrag(~inkbottle@aaubervilliers-654-1-104-55.w86-212.abo.wanadoo.fr) (Ping timeout: 240 seconds)
2020-11-25 00:06:01 +0100inkbottle(~inkbottle@alagny-551-1-20-27.w83-200.abo.wanadoo.fr)
2020-11-25 00:07:21 +0100conal(~conal@64.71.133.70)
2020-11-25 00:08:21 +0100shf(~sheaf@2a01:cb19:80cc:7e00:8861:b8e2:442:3aec)
2020-11-25 00:09:19 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb) (Remote host closed the connection)
2020-11-25 00:11:47 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection)
2020-11-25 00:12:09 +0100oisdk(~oisdk@2001:bb6:3329:d100:199a:baf3:2d99:2a0a) (Quit: oisdk)
2020-11-25 00:13:28 +0100inkbottlezebrag
2020-11-25 00:15:34 +0100Lycurgus(~niemand@98.4.114.74) (Quit: Exeunt)
2020-11-25 00:15:59 +0100christo(~chris@81.96.113.213)
2020-11-25 00:18:30 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
2020-11-25 00:18:48 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-11-25 00:21:17 +0100oisdk(~oisdk@2001:bb6:3329:d100:199a:baf3:2d99:2a0a)
2020-11-25 00:25:04 +0100hekkaidekapus_hekkaidekapus
2020-11-25 00:25:16 +0100fryguybob(~fryguybob@cpe-74-65-31-113.rochester.res.rr.com) (Read error: Connection reset by peer)
2020-11-25 00:26:17 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 272 seconds)
2020-11-25 00:28:17 +0100wonko7(~wonko7@2a01:e35:2ffb:7040:55f1:c3a3:cdbe:bf52) (Ping timeout: 260 seconds)
2020-11-25 00:30:25 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 240 seconds)
2020-11-25 00:31:02 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-11-25 00:35:12 +0100earthy(~arthurvl@deban2.xs4all.space) (Ping timeout: 265 seconds)
2020-11-25 00:35:34 +0100Nahra(~Nahra@unaffiliated/nahra)
2020-11-25 00:36:52 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-25 00:43:18 +0100hekkaidekapus_(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-25 00:45:03 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2020-11-25 00:50:54 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 00:51:40 +0100Nahra(~Nahra@unaffiliated/nahra) (Ping timeout: 246 seconds)
2020-11-25 00:52:32 +0100elliott__(~elliott@pool-108-51-141-12.washdc.fios.verizon.net)
2020-11-25 00:52:58 +0100Tattletale(~Tattletal@unaffiliated/sundancertp)
2020-11-25 00:53:51 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 00:57:15 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net) (Remote host closed the connection)
2020-11-25 00:58:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-11-25 00:58:57 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 00:59:01 +0100jedws(~jedws@101.184.150.93)
2020-11-25 00:59:33 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-25 01:00:58 +0100hpc(~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 260 seconds)
2020-11-25 01:01:27 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-25 01:03:38 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 264 seconds)
2020-11-25 01:04:21 +0100hpc(~juzz@ip98-169-35-13.dc.dc.cox.net)
2020-11-25 01:05:37 +0100texasmynsted(~texasmyns@212.102.45.123) (Ping timeout: 264 seconds)
2020-11-25 01:05:42 +0100Nahra(~Nahra@unaffiliated/nahra)
2020-11-25 01:06:21 +0100christo(~chris@81.96.113.213)
2020-11-25 01:07:12 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 01:07:38 +0100conal(~conal@64.71.133.70)
2020-11-25 01:08:05 +0100Sarma(~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds)
2020-11-25 01:08:19 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 01:08:59 +0100conal(~conal@64.71.133.70)
2020-11-25 01:09:06 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 01:09:41 +0100conal(~conal@64.71.133.70)
2020-11-25 01:09:41 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 01:10:09 +0100conal(~conal@64.71.133.70)
2020-11-25 01:10:25 +0100argent0(~argent0@168.227.98.84) (Ping timeout: 264 seconds)
2020-11-25 01:11:05 +0100christo(~chris@81.96.113.213) (Ping timeout: 256 seconds)
2020-11-25 01:13:57 +0100oisdk(~oisdk@2001:bb6:3329:d100:199a:baf3:2d99:2a0a) (Quit: oisdk)
2020-11-25 01:15:17 +0100texasmynsted(~texasmyns@212.102.45.121)
2020-11-25 01:15:25 +0100bergey`(~user@107.181.19.30) (Ping timeout: 240 seconds)
2020-11-25 01:15:38 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
2020-11-25 01:16:39 +0100argent0(~argent0@168.227.98.84)
2020-11-25 01:17:35 +0100christo(~chris@81.96.113.213)
2020-11-25 01:27:38 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 01:27:47 +0100borne(~fritjof@200116b864eb5c00394a967dc8ef4e61.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-25 01:34:36 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) (Ping timeout: 240 seconds)
2020-11-25 01:37:09 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
2020-11-25 01:37:18 +0100evanjs(~evanjs@075-129-098-007.res.spectrum.com) (Quit: ZNC 1.8.2 - https://znc.in)
2020-11-25 01:37:56 +0100Nahra(~Nahra@unaffiliated/nahra) (Ping timeout: 240 seconds)
2020-11-25 01:38:10 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
2020-11-25 01:38:19 +0100Nahra(~Nahra@unaffiliated/nahra)
2020-11-25 01:38:29 +0100evanjs(~evanjs@075-129-098-007.res.spectrum.com)
2020-11-25 01:38:37 +0100ystael(~ystael@209.6.50.55) (Ping timeout: 264 seconds)
2020-11-25 01:39:18 +0100ystael(~ystael@209.6.50.55)
2020-11-25 01:39:30 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.187)
2020-11-25 01:40:40 +0100heatsink_(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 01:41:21 +0100Francois(~francois@2a02:a03f:5ad8:f100:707f:a6cc:c4f1:c0ac) (Read error: Connection reset by peer)
2020-11-25 01:41:24 +0100argent0(~argent0@168.227.98.84) (Ping timeout: 260 seconds)
2020-11-25 01:41:56 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2020-11-25 01:44:21 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-wbgzurqeqqwdxxpf) (Quit: Connection closed for inactivity)
2020-11-25 01:48:25 +0100sfvm(~sfvm@37.228.215.148)
2020-11-25 01:50:05 +0100frdg(~nick@pool-71-184-143-249.bstnma.fios.verizon.net) (Ping timeout: 240 seconds)
2020-11-25 01:51:01 +0100hackageservant-exceptions 0.2.0 - Extensible exceptions for servant APIs https://hackage.haskell.org/package/servant-exceptions-0.2.0 (ch1bo)
2020-11-25 01:52:01 +0100hackageservant-exceptions-server 0.2.0 - Extensible exceptions for servant API servers https://hackage.haskell.org/package/servant-exceptions-server-0.2.0 (ch1bo)
2020-11-25 01:52:35 +0100cosimone(~cosimone@5.170.240.3)
2020-11-25 02:02:12 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2020-11-25 02:02:47 +0100thc202(~thc202@unaffiliated/thc202) (Ping timeout: 260 seconds)
2020-11-25 02:05:25 +0100cjh`(chris@segfault.net.nz) (Read error: Connection reset by peer)
2020-11-25 02:05:27 +0100Tattletale(~Tattletal@unaffiliated/sundancertp) (Quit: rcirc on GNU Emacs 27.1)
2020-11-25 02:05:37 +0100aredirect(~aredirect@197.52.231.124) (Ping timeout: 264 seconds)
2020-11-25 02:06:40 +0100frdg(~nick@pool-71-184-143-249.bstnma.fios.verizon.net)
2020-11-25 02:07:26 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2020-11-25 02:10:05 +0100 <ezzieyguywuf> how do I use the haskell language server that ghcup asked me of I wanted to install?
2020-11-25 02:10:49 +0100MarcelineVQ(~anja@198.254.202.72)
2020-11-25 02:11:05 +0100Nahra(~Nahra@unaffiliated/nahra) (Quit: leaving)
2020-11-25 02:12:00 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:7ef3:e1ff:d578:a4d8:f807)
2020-11-25 02:12:34 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 02:13:04 +0100 <koz_> ezzieyguywuf: Do you have an editor with support for it?
2020-11-25 02:13:25 +0100 <ezzieyguywuf> koz_: i think so - vim.
2020-11-25 02:13:35 +0100 <ezzieyguywuf> (with ALE plugin)
2020-11-25 02:13:49 +0100 <koz_> ezzieyguywuf: So the answer is 'no unless you wanna run a garbage Node.js slurry', because ALE's support was broken last I checked.
2020-11-25 02:13:52 +0100 <ezzieyguywuf> do I need to initialize the server myself?
2020-11-25 02:13:55 +0100 <koz_> (incomplete LSP implementation)
2020-11-25 02:14:06 +0100 <ezzieyguywuf> oh dang
2020-11-25 02:14:52 +0100evanjs(~evanjs@075-129-098-007.res.spectrum.com) (Quit: ZNC 1.8.2 - https://znc.in)
2020-11-25 02:15:13 +0100evanjs(~evanjs@075-129-098-007.res.spectrum.com)
2020-11-25 02:15:16 +0100cjh`(chris@segfault.net.nz)
2020-11-25 02:16:25 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
2020-11-25 02:16:40 +0100argent0(~argent0@168.227.98.84)
2020-11-25 02:16:50 +0100Jonkimi727406120(~Jonkimi@113.87.161.66)
2020-11-25 02:18:12 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 02:18:14 +0100 <sm[m]> ezzieyguywuf: the easy way is install vs codes Haskell extension
2020-11-25 02:18:37 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 02:18:41 +0100 <koz_> sm[m]: Which naturally involves using VS Code.
2020-11-25 02:18:58 +0100 <sm[m]> right!
2020-11-25 02:19:55 +0100 <sm[m]> If only to get a bunch of binaries installed, see how it works, decide if you need it etc.
2020-11-25 02:20:26 +0100 <ezzieyguywuf> vs codes?
2020-11-25 02:20:36 +0100 <koz_> ezzieyguywuf: It's an IDE.
2020-11-25 02:20:39 +0100 <koz_> People seem to like it.
2020-11-25 02:20:43 +0100 <koz_> I don't understand those people.
2020-11-25 02:20:44 +0100 <sm[m]> VS Code's
2020-11-25 02:20:58 +0100 <ezzieyguywuf> oh, I don't think I have that
2020-11-25 02:21:25 +0100 <sm[m]> I'm an emacs guy but vs code plus hls is extremely good
2020-11-25 02:21:50 +0100 <sm[m]> If you want to try out hls , it is the easy way
2020-11-25 02:22:06 +0100 <koz_> sm[m]: Former Emacs, current (Neo)vim, and VS Code left me inordinately and utterly unimpressed.
2020-11-25 02:22:11 +0100cjh`(chris@segfault.net.nz) (Quit: leaving)
2020-11-25 02:22:26 +0100 <koz_> It's a giant slurry which barely functions, makes no sense, and eats resources like it's some kind of factory.
2020-11-25 02:22:39 +0100 <sm[m]> ymmv
2020-11-25 02:22:49 +0100 <koz_> Precisely, which is why I insist on mentioning it. :P
2020-11-25 02:22:53 +0100 <Axman6> I'm a big fan of VS Code these days, heaps of extensions, is actively maintainerd and its performance is improving all the time
2020-11-25 02:22:56 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
2020-11-25 02:23:02 +0100 <sm[m]> I find it pretty light. Hls is the one eating ram
2020-11-25 02:23:05 +0100 <koz_> Axman6: Can it run as fast as my Neovim?
2020-11-25 02:23:11 +0100 <koz_> Because last I checked, it wasn't even close.
2020-11-25 02:23:20 +0100 <Axman6> it runs fast enought that I haven't noticed any performance issues
2020-11-25 02:23:33 +0100 <Axman6> HLS on the other hand...
2020-11-25 02:23:34 +0100cjh`(chris@segfault.net.nz)
2020-11-25 02:23:34 +0100 <koz_> Axman6: I guess my mileage truly does vary, because I found it intolerably slow.
2020-11-25 02:24:01 +0100 <sm[m]> it's not the speed king for typing. Nobody installs it for that
2020-11-25 02:24:29 +0100 <ezzieyguywuf> i was never into the big IDE thing
2020-11-25 02:24:35 +0100 <sm[m]> Hls ui is noisy and jittery sometimes. Even so - extremely useful
2020-11-25 02:24:39 +0100 <koz_> sm[m]: What do you mean by 'not the speed king for typing'? I don't understand?
2020-11-25 02:24:46 +0100 <ezzieyguywuf> I tried IDE whenever I was messing around in android, but even then I ended up reverting back to vim
2020-11-25 02:24:52 +0100 <Axman6> my only problem with HLS is how much RAM it uses
2020-11-25 02:25:04 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net)
2020-11-25 02:25:12 +0100 <ezzieyguywuf> i think I'll stop toying with languag server thingy for now, lol
2020-11-25 02:25:13 +0100 <Axman6> our dev laptops are 64GB for a reason (it's not just HLS, but that definitely doesn't help)
2020-11-25 02:25:40 +0100 <Axman6> we do also have an enormous codebase though (and technically this is DAML Studio, not HLS, but they share a lot)
2020-11-25 02:25:49 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 246 seconds)
2020-11-25 02:25:56 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2020-11-25 02:26:05 +0100 <Digit> yesterday, watching a talk on "the last programming language" got me itching to move from my text editor being extensible in lisp, to one extensible in haskell. n_n ... will be a while before i get feature parity to emacs in yi.
2020-11-25 02:26:17 +0100cjh`chrisosaurus
2020-11-25 02:27:59 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2020-11-25 02:28:25 +0100 <sm[m]> koz_: you keep saying vs code is slower than X, I assume you mean for typing and ui response, I agree and also am saying it's somewhat beside the point
2020-11-25 02:28:38 +0100 <koz_> sm[m]: Not to me it isn't.
2020-11-25 02:28:49 +0100 <koz_> Again, YMMV is a perfectly valid response to my criticism.
2020-11-25 02:28:56 +0100Ariakenom(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Ping timeout: 240 seconds)
2020-11-25 02:29:07 +0100 <sm[m]> I understand. We don't need to keep arguing here :)
2020-11-25 02:29:11 +0100 <koz_> :D
2020-11-25 02:29:12 +0100 <int-e> the more times change, the more they stay the same... another round of editor wars...
2020-11-25 02:29:18 +0100 <ezzieyguywuf> so with optparse-applicative, if you have 50 arguments/flags, then you have some `data MyArgs = Opt1 | Opt2 |....Opt50`?
2020-11-25 02:29:32 +0100 <koz_> ezzieyguywuf: I mean... you _can_, but I don't think you have to.
2020-11-25 02:29:33 +0100 <int-e> This should be the first rule of programming: don't talk about editors.
2020-11-25 02:30:04 +0100 <sm[m]> vs code is extremely good at some things and in some aspects. End of my point.
2020-11-25 02:30:11 +0100 <monochrom> May I talk about email and usenet news clients? >:)
2020-11-25 02:30:17 +0100 <koz_> monochrom: :P
2020-11-25 02:30:23 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 02:30:26 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 02:30:27 +0100monochromplans to talk about using emacs for email and usenet news.
2020-11-25 02:30:38 +0100 <ezzieyguywuf> koz_: what's another way to do it?
2020-11-25 02:30:38 +0100 <Digit> int-e: n_n this is much more peaceful and ammicable an editor/ide discussion than the wars of old. n_n
2020-11-25 02:30:52 +0100 <int-e> monochrom: or browsers... lynx, links, elinks, or w3m :P
2020-11-25 02:31:06 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 02:31:10 +0100 <koz_> ezzieyguywuf: What do your 50 flags mean? Can they co-occur? What do they describe? How do you represent this data? Etc etc
2020-11-25 02:31:13 +0100 <monochrom> I almost used emacs for web browser too.
2020-11-25 02:31:16 +0100 <Digit> is there a web browser written in haskell? that'd be cool. :)
2020-11-25 02:31:18 +0100 <koz_> There is no One True Answer to these questions.
2020-11-25 02:31:32 +0100 <MarcelineVQ> Sure there is, it's the one I say
2020-11-25 02:31:32 +0100conal(~conal@64.71.133.70)
2020-11-25 02:31:32 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 02:31:36 +0100 <int-e> Digit: It is. But it's still not going anywhere :P
2020-11-25 02:31:58 +0100conal(~conal@64.71.133.70)
2020-11-25 02:32:17 +0100 <monochrom> What saved me from this depravity 20 years ago was that emacs did not have real concurrency.
2020-11-25 02:32:20 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 02:32:41 +0100 <ezzieyguywuf> koz_: I was using 50 as an example. I currently only have 1 flag, for a filename. I guess my main question is - is the `data MyOpts = FileName String` approach the only way to use an optparse-applicative parser to parse the arguments
2020-11-25 02:33:08 +0100 <koz_> ezzieyguywuf: No, in the same way as the 'data MyOpts = FileName String' approach would not be the only way to use a megaparsec parser.
2020-11-25 02:33:10 +0100conal(~conal@64.71.133.70)
2020-11-25 02:33:23 +0100 <monochrom> Whenever its web browser was waiting for responses, the editor window become unresponsive. That disillusioned me to realize that emacs was not an OS afterall.
2020-11-25 02:33:31 +0100 <koz_> Like... it's _your_ data, structure it however you want. Your internal representation doesn't have to precisely match the data you get fed.
2020-11-25 02:33:46 +0100sand_dull(~theuser@c-73-149-95-105.hsd1.ct.comcast.net)
2020-11-25 02:34:44 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net) (Ping timeout: 256 seconds)
2020-11-25 02:35:21 +0100 <ezzieyguywuf> ok let me ask the question differently. Let's say I wanted to add my own "--help" option (just for the sake of argument, I know optparse-applicative has this built-in sorta). I don't really need `data MyData = FileName String | Help`, because if someone passes "--help" I want to display the help info then immediately exit, i.e. do nothing else
2020-11-25 02:35:29 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 272 seconds)
2020-11-25 02:35:39 +0100 <ezzieyguywuf> so how would I accomlish that using optparse-applicative?
2020-11-25 02:35:56 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-11-25 02:36:14 +0100 <sm[m]> ezzieyguywuf: do the docs not cover it ?
2020-11-25 02:36:47 +0100 <sm[m]> I'm not being snarky, I want to know if o-a's docs are good enough yet
2020-11-25 02:37:04 +0100sqrt2(~ben@unaffiliated/sqrt2) (Read error: Connection reset by peer)
2020-11-25 02:37:07 +0100sqrt2_(~ben@unaffiliated/sqrt2)
2020-11-25 02:37:08 +0100Lord_of_Life_(~Lord@46.217.220.129)
2020-11-25 02:37:27 +0100 <ezzieyguywuf> sm[m]: the docs are really good, but from what I can tell they don't cover this.
2020-11-25 02:37:38 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 256 seconds)
2020-11-25 02:37:42 +0100 <sm[m]> I found it hard to use but haven't given it a serious try recently
2020-11-25 02:37:51 +0100 <ezzieyguywuf> sm[m]: or else, it's just not the intended use-case. or else (and this can definetely be the case) I just don't understand the docs enough to see how to do it.
2020-11-25 02:38:03 +0100 <sm[m]> hard to learn, I meant to say
2020-11-25 02:38:18 +0100 <koz_> ezzieyguywuf: Write a parser which only parses '--help'. Exec that. If it succeeds, great; if not, try a different one which gets your filename?
2020-11-25 02:38:27 +0100 <ezzieyguywuf> koz_: ah hah.
2020-11-25 02:38:32 +0100 <ezzieyguywuf> simple. elegant.
2020-11-25 02:38:39 +0100Fractalis(~Fractalis@2601:987:280:8d40:eda9:f9e1:2072:cea7)
2020-11-25 02:38:59 +0100 <koz_> This may be of use: http://hackage.haskell.org/package/optparse-applicative-0.16.1.0/docs/Options-Applicative.html#v:e…
2020-11-25 02:39:17 +0100 <ezzieyguywuf> hrm...or maybe using a <|> somewhere, I remember the documentation talking about that.
2020-11-25 02:39:21 +0100 <koz_> (and some of the functions underneath that)
2020-11-25 02:39:27 +0100 <ezzieyguywuf> koz_: I was just perusing that!
2020-11-25 02:39:28 +0100 <ezzieyguywuf> lol
2020-11-25 02:39:29 +0100 <sm[m]> I will say that you can always do your own preprocessing of args, I do it for exactly that case (short circuit to usage message with --help)
2020-11-25 02:39:29 +0100 <koz_> You could use <|> I guess.
2020-11-25 02:40:05 +0100 <koz_> Basically, a good habit to get into is 'break your problem into the smallest possible pieces, and only glue them together if you have to'.
2020-11-25 02:40:14 +0100 <ezzieyguywuf> I think that (a) optparse-applicative is likely powerful enough to do whatever I want, and (b) I should just start with my one dinky flag and try more as the need arises
2020-11-25 02:40:23 +0100 <koz_> A lot of the time I find folks instead think 'I need to build an all-singing, all-dancing monolith' and then find it very hard.
2020-11-25 02:40:27 +0100 <koz_> (myself included)
2020-11-25 02:40:28 +0100 <ezzieyguywuf> koz_: I think that's a good idea.
2020-11-25 02:41:42 +0100 <koz_> And yes, start with one flag and work upwards.
2020-11-25 02:41:50 +0100 <koz_> At least with one flag, you've got the functionality you need right now.
2020-11-25 02:42:47 +0100 <ezzieyguywuf> precisely
2020-11-25 02:43:05 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 02:46:50 +0100 <koz_> How exactly does the Alternative instances of the optparse-applicative Parser work? Is it backtracking?
2020-11-25 02:47:09 +0100 <ezzieyguywuf> hope you're not asking me, lol
2020-11-25 02:47:38 +0100 <koz_> ezzieyguywuf: Nope - this is a general question to Knowledgeable Folks.
2020-11-25 02:48:20 +0100 <ezzieyguywuf> nice.
2020-11-25 02:48:59 +0100 <int-e> . o O ( https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it )
2020-11-25 02:49:33 +0100 <koz_> int-e: You never know when you need Alternative! :P
2020-11-25 02:50:16 +0100 <int-e> koz_: refactoring is easy(-ish) with strong types
2020-11-25 02:50:32 +0100 <koz_> Yup!
2020-11-25 02:50:41 +0100 <int-e> anyway, it's a good principle, but hard to follow :)
2020-11-25 02:50:52 +0100 <MarcelineVQ> *impossible
2020-11-25 02:51:07 +0100 <koz_> sm[m]: You said earlier you wanted feedback on the way optparse-applicative is docced: it'd be nice if the Alternative behaviour for Parser was explained somewhere, because I can't seem to find it.
2020-11-25 02:51:08 +0100 <int-e> (and hard to apply when you write code for others rather than yourself)
2020-11-25 02:51:54 +0100 <sm[m]> thx, noted
2020-11-25 02:52:04 +0100 <koz_> sm[m]: Would you be able to tell me?
2020-11-25 02:52:12 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 02:52:15 +0100 <koz_> I'm genuinely curious but the digging through implementation would take too long.
2020-11-25 02:52:22 +0100 <sm[m]> sorry, I don't know either
2020-11-25 02:55:53 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-25 02:56:58 +0100vicfred(~vicfred@unaffiliated/vicfred) (Max SendQ exceeded)
2020-11-25 02:56:59 +0100conal(~conal@64.71.133.70)
2020-11-25 02:57:01 +0100 <ezzieyguywuf> hrm, this section has me a bit confused: https://github.com/pcapriotti/optparse-applicative#running-parsers
2020-11-25 02:57:28 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-25 02:57:43 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 02:57:59 +0100 <ezzieyguywuf> if `opts :: ParserInfo Sample`, and `info :: Parser a -> InfoMod a -> ParserInfo a`, then how does the code snippet type-check?
2020-11-25 02:58:27 +0100vicfred(~vicfred@unaffiliated/vicfred) (Max SendQ exceeded)
2020-11-25 02:58:42 +0100 <ezzieyguywuf> it seems to me that `fullDesc <> progDesc "Print a greeting for TARGET"` would be `InfoMod String`
2020-11-25 02:58:55 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-25 02:59:13 +0100 <koz_> ezzieyguywuf: The whole thing in brackets is one argument.
2020-11-25 02:59:22 +0100 <koz_> That whole thing is an InfoMod.
2020-11-25 03:00:41 +0100 <ezzieyguywuf> koz_: but it seems to me that the typo of the whole bracketed area is "InfoMod String"
2020-11-25 03:00:53 +0100 <ezzieyguywuf> ahh wait nvm
2020-11-25 03:00:54 +0100 <koz_> Why would it be?
2020-11-25 03:00:56 +0100 <ezzieyguywuf> I was being dumb
2020-11-25 03:00:59 +0100 <koz_> What component of that suggests this?
2020-11-25 03:01:06 +0100 <koz_> I'm pretty sure the 'a' type param is phantom there.
2020-11-25 03:02:37 +0100forell(~forell@unaffiliated/forell) (Ping timeout: 260 seconds)
2020-11-25 03:02:42 +0100 <ezzieyguywuf> I missed that `progDesc` takes a String as an argument
2020-11-25 03:03:11 +0100guest1125(~user@49.5.6.87)
2020-11-25 03:04:03 +0100hexfive(~hexfive@50-47-142-195.evrt.wa.frontiernet.net) (Quit: i must go. my people need me.)
2020-11-25 03:04:27 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-25 03:04:47 +0100MindlessDrone(~MindlessD@unaffiliated/mindlessdrone)
2020-11-25 03:05:44 +0100 <ezzieyguywuf> lol, the movie I'm watching has a character named Haskell
2020-11-25 03:08:08 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Quit: hyiltiz)
2020-11-25 03:08:31 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2020-11-25 03:09:13 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 03:11:04 +0100darjeeling_(~darjeelin@122.245.219.209) (Ping timeout: 272 seconds)
2020-11-25 03:11:09 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Client Quit)
2020-11-25 03:11:31 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2020-11-25 03:12:13 +0100alp(~alp@2a01:e0a:58b:4920:ed97:230b:9822:a509)
2020-11-25 03:12:14 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Client Quit)
2020-11-25 03:12:31 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2020-11-25 03:14:25 +0100 <guest1125> how to get epoch time in haskell?
2020-11-25 03:14:26 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Client Quit)
2020-11-25 03:14:44 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2020-11-25 03:15:05 +0100 <Axman6> https://hackage.haskell.org/package/time-1.11.1/docs/Data-Time-Clock-POSIX.html?
2020-11-25 03:16:59 +0100 <guest1125> getCurrentTime :: IO UTCTime
2020-11-25 03:17:17 +0100 <Axman6> getPOSIXTime :: IO POSIXTime?
2020-11-25 03:17:51 +0100 <guest1125> every call on those functions will get different values, wow
2020-11-25 03:17:59 +0100 <guest1125> actions
2020-11-25 03:18:25 +0100 <guest1125> get time through IO
2020-11-25 03:18:38 +0100 <Axman6> yes...
2020-11-25 03:18:57 +0100 <Axman6> by definition it pretty much has to run in IO
2020-11-25 03:18:58 +0100 <guest1125> but could make it out of IO?
2020-11-25 03:19:01 +0100christo(~chris@81.96.113.213)
2020-11-25 03:19:09 +0100benjamingr__(uid23465@gateway/web/irccloud.com/x-ymoheyyesupwsnta) (Quit: Connection closed for inactivity)
2020-11-25 03:19:12 +0100 <Axman6> have you used IO before?
2020-11-25 03:19:22 +0100forell(~forell@unaffiliated/forell)
2020-11-25 03:19:34 +0100 <guest1125> yes
2020-11-25 03:19:45 +0100 <Axman6> do { now <- getPOSIXTime; let result = f now; print result }
2020-11-25 03:20:27 +0100 <guest1125> I mean IO POSIXTime -> POSIXTime
2020-11-25 03:20:30 +0100 <ezzieyguywuf> is there anything in base that can turn "~/Some/Path/" into "/home/me/Some/Path"?
2020-11-25 03:20:58 +0100 <Axman6> guest1125: that's not something you can do, but in the code I wrote above, now :: POSIXTime
2020-11-25 03:20:58 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2020-11-25 03:20:59 +0100Rudd0(~Rudd0@185.189.115.98) (Ping timeout: 265 seconds)
2020-11-25 03:21:38 +0100toorevitimirp(~tooreviti@117.182.183.18)
2020-11-25 03:22:00 +0100 <guest1125> Axman6: I'd like name some files with the time when they're created, so I have to do it all in IO?
2020-11-25 03:22:02 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-25 03:22:52 +0100 <Axman6> of course, there is nothing pure about the current time
2020-11-25 03:23:10 +0100 <guest1125> ok
2020-11-25 03:23:57 +0100earthy(~arthurvl@deban2.xs4all.space)
2020-11-25 03:24:13 +0100 <Axman6> do { now <- getPOSIXTime; let fileName = "foo-" ++ show now ++ ".txt"; writeFile fileName content }
2020-11-25 03:24:22 +0100 <Axman6> if you're writing files you're already working in IO
2020-11-25 03:24:28 +0100Entertainment(~entertain@104.246.132.210) (Ping timeout: 260 seconds)
2020-11-25 03:25:44 +0100 <guest1125> what about using time as seed to generate random number? is a good idea?
2020-11-25 03:25:55 +0100 <Axman6> it's an idea :)
2020-11-25 03:26:15 +0100 <Axman6> there's lots of "it depends" responses to that question
2020-11-25 03:27:20 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 260 seconds)
2020-11-25 03:28:26 +0100 <frdg> it helped me to shift my thinking from the idea that I have to do something _in_ IO to realizing that what I am doing _is_ IO.
2020-11-25 03:29:26 +0100 <guest1125> is anyone familiar with the term "double-barrelled CPS"?
2020-11-25 03:29:33 +0100 <guest1125> what is it?
2020-11-25 03:30:04 +0100 <Axman6> never heard the term, where did you find it?
2020-11-25 03:30:14 +0100 <guest1125> twitter...
2020-11-25 03:30:25 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-11-25 03:33:07 +0100xff0x(~fox@2001:1a81:526f:8600:55b6:62c6:bb3b:dc43) (Ping timeout: 272 seconds)
2020-11-25 03:34:44 +0100xff0x(~fox@2001:1a81:52a6:7b00:9da5:3842:e762:e94b)
2020-11-25 03:35:01 +0100 <guest1125> "As I've told you youngsters before, that type system can be done with double-barrelled CPS, and the folks at Microsoft have already tried it out at http://sml.net. I'll have a paper to show you when I get to that point!"
2020-11-25 03:35:02 +0100 <Axman6> twitter is a lot of context to have to process
2020-11-25 03:35:24 +0100 <Axman6> ask for the paper
2020-11-25 03:35:43 +0100 <guest1125> there's not one yet
2020-11-25 03:36:32 +0100 <guest1125> he is a scheme player, good at compiler stuff
2020-11-25 03:37:29 +0100falafel_(~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4)
2020-11-25 03:38:14 +0100 <Digit> i dont think https://www.urbandictionary.com/define.php?term=CPS was helpful. nsfw.
2020-11-25 03:38:27 +0100heatsink_(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-25 03:39:51 +0100jamm_(~jamm@unaffiliated/jamm)
2020-11-25 03:41:24 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2020-11-25 03:42:00 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 03:42:01 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 03:42:25 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 03:44:00 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2020-11-25 03:44:26 +0100jamm_(~jamm@unaffiliated/jamm) (Ping timeout: 264 seconds)
2020-11-25 03:44:53 +0100conal(~conal@64.71.133.70)
2020-11-25 03:45:03 +0100frdg(~nick@pool-71-184-143-249.bstnma.fios.verizon.net) ()
2020-11-25 03:45:51 +0100 <koz_> Digit: It's a real pro move to look for compsci terms on UD.
2020-11-25 03:47:16 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 256 seconds)
2020-11-25 03:50:03 +0100 <monochrom> Wait, what is double-barrelled CPS? I ought to teach it to my students and confuse them!
2020-11-25 03:50:13 +0100 <keltono> seems to come from this paper
2020-11-25 03:50:14 +0100 <keltono> https://www.cs.bham.ac.uk/~hxt/research/HOSC-double-barrel.pdf
2020-11-25 03:50:43 +0100 <Digit> koz_: sometimes you get lucky. n_n
2020-11-25 03:51:41 +0100 <keltono> the key excerpt being
2020-11-25 03:51:42 +0100 <keltono> > This transform is double-barrelled in the sense that it always passes two continuations.
2020-11-25 03:51:44 +0100 <lambdabot> <hint>:1:36: error: <hint>:1:36: error: parse error on input ‘in’
2020-11-25 03:51:49 +0100Sonolin(~Sonolin@184.103.179.49)
2020-11-25 03:52:03 +0100 <keltono> whoops
2020-11-25 03:54:16 +0100 <monochrom> Ah, thanks.
2020-11-25 03:55:30 +0100puffnfresh(~puffnfres@119-17-138-164.77118a.mel.static.aussiebb.net)
2020-11-25 03:55:50 +0100Jonkimi727406120(~Jonkimi@113.87.161.66) (Ping timeout: 256 seconds)
2020-11-25 03:56:40 +0100Jonkimi727406120(~Jonkimi@113.87.161.66)
2020-11-25 03:56:42 +0100 <guest1125> would it be useful for something?
2020-11-25 03:56:50 +0100 <Sonolin> hmm so I'm playing with FRP and I'm probably not getting things but this doesn't seem too helpful for things that aren't very interactive (like turn based games/roguelikes)?
2020-11-25 03:57:43 +0100brisbin(~patrick@pool-173-49-158-4.phlapa.fios.verizon.net) (Ping timeout: 260 seconds)
2020-11-25 03:58:17 +0100 <guest1125> Sonolin: what FRP is short for?
2020-11-25 03:58:24 +0100 <Sonolin> functional reactive programming
2020-11-25 03:59:00 +0100 <guest1125> Frech Representitive?
2020-11-25 03:59:44 +0100 <guest1125> representative
2020-11-25 03:59:57 +0100 <Axman6> I was thinking recently what it would look like to implement election vote counting systems in FRP to get live data from results (We use the HAre-Clarke system here, so the processing is actually quite interesting)
2020-11-25 04:01:02 +0100 <guest1125> Axman6: could it avoid election fraud?
2020-11-25 04:02:31 +0100Suntop1(~Suntop@193.56.252.12) (Remote host closed the connection)
2020-11-25 04:03:17 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-11-25 04:07:02 +0100Sheilong(uid293653@gateway/web/irccloud.com/x-yowroavlostcpsuo) (Quit: Connection closed for inactivity)
2020-11-25 04:07:51 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2020-11-25 04:08:22 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
2020-11-25 04:08:49 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 04:10:14 +0100falafel_(~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) (Ping timeout: 264 seconds)
2020-11-25 04:12:34 +0100 <koz_> Sonolin: Basically FRP is intended for highly interactive or async systems.
2020-11-25 04:12:52 +0100 <koz_> If your case _isn't_ one of those two, it's probably not worth it.
2020-11-25 04:13:09 +0100 <koz_> (like, nothing is stopping you from using FRP for something like that, but it's likely more trouble than it's worth)
2020-11-25 04:13:16 +0100 <Sonolin> yea I can see how that can be useful, probably not the best for my case
2020-11-25 04:13:36 +0100 <Sonolin> something to look at if I add multi threading and/or realtime capabilities in the future, though
2020-11-25 04:14:29 +0100 <koz_> Sonolin: Multi-threading is an implementation detail. Asynchrony not so much.
2020-11-25 04:14:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 04:14:38 +0100iphy(sid67735@gateway/web/irccloud.com/x-yrvorexjtguqopbo) (Read error: Connection reset by peer)
2020-11-25 04:14:48 +0100iphy(sid67735@gateway/web/irccloud.com/x-mauksswncovsmglx)
2020-11-25 04:18:16 +0100gentauro(~gentauro@unaffiliated/gentauro) (Ping timeout: 240 seconds)
2020-11-25 04:19:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-11-25 04:20:30 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-25 04:24:49 +0100sand_dull(~theuser@c-73-149-95-105.hsd1.ct.comcast.net) (Ping timeout: 246 seconds)
2020-11-25 04:25:17 +0100gentauro(~gentauro@unaffiliated/gentauro)
2020-11-25 04:31:21 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 04:31:32 +0100rdivacky(~rdivacky@212.96.173.4) (Ping timeout: 256 seconds)
2020-11-25 04:33:23 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds)
2020-11-25 04:36:12 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 260 seconds)
2020-11-25 04:37:01 +0100st8less(~st8less@2603:a060:11fd:0:b8c0:f26a:7cc8:b52d) (Quit: WeeChat 2.9)
2020-11-25 04:40:37 +0100lagothrix(~lagothrix@unaffiliated/lagothrix) (Killed (beckett.freenode.net (Nickname regained by services)))
2020-11-25 04:40:43 +0100lagothrix(~lagothrix@unaffiliated/lagothrix)
2020-11-25 04:41:38 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 272 seconds)
2020-11-25 04:41:45 +0100rdivacky(~rdivacky@212.96.173.4)
2020-11-25 04:42:28 +0100argent0(~argent0@168.227.98.84) (Ping timeout: 260 seconds)
2020-11-25 04:45:16 +0100theDon(~td@muedsl-82-207-238-223.citykom.de) (Ping timeout: 240 seconds)
2020-11-25 04:47:01 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-11-25 04:47:26 +0100theDon(~td@94.134.91.236)
2020-11-25 04:47:28 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 04:48:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-25 04:48:51 +0100plutoniix(~q@ppp-27-55-83-62.revip3.asianet.co.th)
2020-11-25 04:50:30 +0100conal(~conal@64.71.133.70)
2020-11-25 04:51:42 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 04:52:49 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
2020-11-25 04:53:08 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 04:53:26 +0100darjeeling_(~darjeelin@112.16.171.8)
2020-11-25 04:57:47 +0100sand_dull(~theuser@c-73-149-95-105.hsd1.ct.comcast.net)
2020-11-25 05:00:36 +0100darjeeling_(~darjeelin@112.16.171.8) (Ping timeout: 240 seconds)
2020-11-25 05:00:37 +0100Rudd0(~Rudd0@185.189.115.98)
2020-11-25 05:00:42 +0100vg(~vg@139.59.59.230)
2020-11-25 05:00:56 +0100vgTooDifficult
2020-11-25 05:01:28 +0100Sonolin(~Sonolin@184.103.179.49) (Quit: WeeChat 2.4)
2020-11-25 05:08:01 +0100 <Axman6> guest1125: I doubt it, but it would make for a fun way to visualise things
2020-11-25 05:09:10 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-25 05:13:15 +0100adm_(~adm@43.229.88.197)
2020-11-25 05:13:34 +0100 <Axman6> guest1125: did you sort out youyr time/file naming issues?
2020-11-25 05:13:37 +0100 <Axman6> your*
2020-11-25 05:13:42 +0100Kaeipi(~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
2020-11-25 05:13:56 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 05:14:22 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 05:15:01 +0100hackagelanguage-dickinson 1.4.1.0 - A language for generative literature https://hackage.haskell.org/package/language-dickinson-1.4.1.0 (vmchale)
2020-11-25 05:16:05 +0100Kaiepi(~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Ping timeout: 240 seconds)
2020-11-25 05:19:17 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 256 seconds)
2020-11-25 05:24:43 +0100Jonkimi727406120(~Jonkimi@113.87.161.66) (Ping timeout: 265 seconds)
2020-11-25 05:27:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2020-11-25 05:32:27 +0100cosimone(~cosimone@5.170.240.3) (Quit: cosimone)
2020-11-25 05:39:23 +0100TooDifficult(~vg@139.59.59.230) (Quit: TooDifficult)
2020-11-25 05:39:40 +0100TooDifficult(~vg@139.59.59.230)
2020-11-25 05:39:52 +0100TooDifficult(~vg@139.59.59.230) (Remote host closed the connection)
2020-11-25 05:40:09 +0100TooDifficult(~vg@139.59.59.230)
2020-11-25 05:40:18 +0100TooDifficult(~vg@139.59.59.230) (Remote host closed the connection)
2020-11-25 05:40:31 +0100TooDifficult(~vg@139.59.59.230)
2020-11-25 05:40:43 +0100borne(~fritjof@200116b864eb5c00394a967dc8ef4e61.dip.versatel-1u1.de)
2020-11-25 05:40:43 +0100TooDifficult(~vg@139.59.59.230) (Remote host closed the connection)
2020-11-25 05:40:58 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 260 seconds)
2020-11-25 05:41:00 +0100TooDifficult(~vg@139.59.59.230)
2020-11-25 05:41:43 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-25 05:48:36 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 240 seconds)
2020-11-25 05:49:49 +0100 <triteraflops> Clean uses uniqueness types to do all of its IO. It seems to work fine and is about a billion times easier to understand than monads, no offence.
2020-11-25 05:50:12 +0100 <triteraflops> Also, it allows destructive updates! There has got to be some kind of catch. What's the catch?
2020-11-25 05:50:49 +0100 <koz_> triteraflops: Who says monads are about IO?
2020-11-25 05:50:53 +0100 <Axman6> what makes you think we don't have destructive updates?
2020-11-25 05:50:57 +0100 <koz_> Also this.
2020-11-25 05:51:13 +0100 <triteraflops> koz_: haskell implements IO with monads. Therefore monads are about IO.
2020-11-25 05:51:21 +0100 <triteraflops> They aren't just about IO, but they are about IO.
2020-11-25 05:51:44 +0100 <dsal> Monads are about IO?
2020-11-25 05:52:21 +0100 <triteraflops> Have you actually done any IO in haskell? Yes, IO and monads are obviously related.
2020-11-25 05:52:26 +0100 <dsal> IO is one of the monads I use in my code, but most of the monads I use aren't IO.
2020-11-25 05:52:44 +0100 <dsal> My mom and I are related, but I'm not my mom.
2020-11-25 05:52:44 +0100 <koz_> What dsal says, pretty much.
2020-11-25 05:52:49 +0100 <Digit> would it be fair to say, IO is implemented with monads, but not all monads have anything to do with IO?
2020-11-25 05:53:46 +0100 <triteraflops> In my first question I didn't even say IO was the only thing monads do.
2020-11-25 05:54:04 +0100darjeeling_(~darjeelin@112.16.171.8)
2020-11-25 05:54:21 +0100 <triteraflops> You understand the question and you know it. If you can answer it, answer it. Save me your mindless pedantry.
2020-11-25 05:54:28 +0100 <triteraflops> This is why people don't like haskell.
2020-11-25 05:54:56 +0100 <dsal> Asserting people understanding you doesn't make it so. You can do IO without monads in Haskell.
2020-11-25 05:55:11 +0100 <koz_> Applicative can easily be enough to do all the IO you need.
2020-11-25 05:55:15 +0100 <triteraflops> dsal: how in the hell would you do that? Safely?
2020-11-25 05:55:18 +0100 <koz_> (I've seen a few cases like this)
2020-11-25 05:55:19 +0100 <dsal> Or even a functor.
2020-11-25 05:55:39 +0100 <koz_> It's a question of how much power the interface requires.
2020-11-25 05:55:49 +0100 <triteraflops> Only a subset of IO problems could be solved like that.
2020-11-25 05:55:52 +0100 <koz_> Sometimes you truly need the full power of monad to describe the IO you wanna do.
2020-11-25 05:55:55 +0100 <koz_> Sometimes, you don't.
2020-11-25 05:56:02 +0100 <Axman6> triteraflops: we had IO in Haskell before monadic IO
2020-11-25 05:56:24 +0100 <triteraflops> Axman6: and it was referentially transparent?
2020-11-25 05:56:43 +0100 <Axman6> I believe so, I can't remember what it looked like
2020-11-25 05:56:45 +0100 <triteraflops> It doesn't even matter. Modern haskell IO uses monads generally.
2020-11-25 05:57:06 +0100 <triteraflops> Clean does not, and is still referentially transparent. It uses uniqueness types.
2020-11-25 05:57:12 +0100 <triteraflops> Is there some kind of catch?
2020-11-25 05:57:34 +0100 <koz_> Given that this isn't #clean? I'm not sure anyone really knows here.
2020-11-25 05:57:36 +0100 <Axman6> I also disagree that monads are difficult to understand, particularly when it comes to IO - it is just an imperative language like any other bog standard language
2020-11-25 05:58:14 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-25 05:58:15 +0100texasmynsted(~texasmyns@212.102.45.121) (Remote host closed the connection)
2020-11-25 05:58:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 05:58:36 +0100 <koz_> Also, a word of diplomatic advice? Accusing us of 'mindless pedantry', and opening your so-called question with a very strong subjective claim, which _by your own admission isn't even the point_?
2020-11-25 05:58:41 +0100 <koz_> Not the best way to get responses.
2020-11-25 05:58:45 +0100ocamler(3263cbdb@50.99.203.219)
2020-11-25 05:58:53 +0100texasmynsted(~texasmyns@212.102.45.121)
2020-11-25 05:59:15 +0100 <ocamler> hey, simple question, how can i declare type ```Maybe Bifunctor [a] [a]```
2020-11-25 05:59:16 +0100 <Axman6> generally the phrase "of offence" is used when someone intends to cause offence
2020-11-25 05:59:24 +0100 <ocamler> this is giving me a compile error that I don't fully understand
2020-11-25 05:59:38 +0100 <Digit> Axman6: monads are difficult to understand, for many, given the explanations. would be nice if disagreeing with those who find monads a slippery concept was enough to help them find it easy to understand though.
2020-11-25 05:59:38 +0100 <Axman6> ocamler: I have no idea what that's supposed to represent, it's certainly not valid though
2020-11-25 05:59:41 +0100Jonkimi727406120(~Jonkimi@113.87.161.66)
2020-11-25 05:59:48 +0100 <koz_> ocamler: You've got a slight mixup here. 'Bifunctor' is a type class.
2020-11-25 05:59:55 +0100 <ocamler> ohhh
2020-11-25 06:00:00 +0100 <koz_> I too am not very sure what you're after here.
2020-11-25 06:00:03 +0100 <ocamler> I see
2020-11-25 06:00:14 +0100 <koz_> Digit: I feel it's a problem of people focusing too much on 'what is a monad' and less on 'why we care'.
2020-11-25 06:00:16 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 240 seconds)
2020-11-25 06:00:26 +0100 <Axman6> ocamler: what's the intent you're after?
2020-11-25 06:00:26 +0100 <ocamler> well I want some sort of wrapping type similar to a tuple, where I can fmap on either the first or second of the tuple
2020-11-25 06:00:39 +0100 <koz_> The answer to the question of 'what is a monad' is both uninteresting (unless you're a cat theorist) and doesn't really get you anywherre in terms of how to use them and what they enable.
2020-11-25 06:00:51 +0100 <koz_> ocamler: (a,b) is already a Bifunctor.
2020-11-25 06:00:54 +0100 <Axman6> sounds like Bifunctor to me
2020-11-25 06:00:55 +0100 <triteraflops> Let's try this again. Haskell uses monads to do IO. (You know what I mean. Save it.) Clean uses uniqueness types, and gets away with it. Is there some kind of catch?
2020-11-25 06:00:58 +0100 <koz_> You don't need to do anything to make that a thing.
2020-11-25 06:01:04 +0100 <triteraflops> A downside of using uniqueness types instead?
2020-11-25 06:01:31 +0100 <Axman6> ocamler: what's the Maybe in there supposed to be for?
2020-11-25 06:01:32 +0100 <dsal> haskell has the same problem git used to have back in the day. People focus on the weirdest things because they're the most interesting and then everyone thinks they have to understand it weirdest-first.
2020-11-25 06:01:41 +0100 <koz_> ocamler: Are you trying to write a data type, or a function that's meant to operate across multiple kinds of data?
2020-11-25 06:01:49 +0100 <Digit> s/uses/can use/ ... might help rubbing "pedants" the wrong way.
2020-11-25 06:02:17 +0100 <dsal> triteraflops: "you know what I mean" is not a very constructive way to explain yourself.
2020-11-25 06:02:18 +0100 <Axman6> triteraflops: I don't know enough about uniqueness types to be able to comment, I wonder if the work on linear types in Haskell might give us somethig similar though? (I would be surprised if it would replace our use of monadic IO or monads for requencing)
2020-11-25 06:02:26 +0100 <dsal> There are multiple effect systems in haskell.
2020-11-25 06:02:40 +0100 <koz_> Axman6: AFAIK, uniqueness types and linear types aren't the same thing, though they are similar.
2020-11-25 06:02:42 +0100 <triteraflops> Axman6: yes, it would, actually.
2020-11-25 06:02:44 +0100plutoniix(~q@ppp-27-55-83-62.revip3.asianet.co.th) (Ping timeout: 260 seconds)
2020-11-25 06:02:47 +0100 <dsal> There's also that thing lexi-lambda is working on.
2020-11-25 06:02:50 +0100 <koz_> However, I would be the first to admit that I dunno enough.
2020-11-25 06:02:54 +0100 <Axman6> eff?
2020-11-25 06:03:08 +0100 <dsal> Yeah, I forgot what the underlying theory was behind that.
2020-11-25 06:03:09 +0100 <Axman6> koz_: yeah I figured as much
2020-11-25 06:03:09 +0100 <ocamler> koz_ i just replaced that code with some functions that I wrote on my own, like `mapFirst :: (a -> b) -> (a, c) -> (b, c)`
2020-11-25 06:03:10 +0100texasmynsted(~texasmyns@212.102.45.121) (Ping timeout: 246 seconds)
2020-11-25 06:03:11 +0100 <dolio> Uniqueness types don't really make sense for IO.
2020-11-25 06:03:13 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-11-25 06:03:30 +0100 <dsal> :t first
2020-11-25 06:03:32 +0100 <lambdabot> Arrow a => a b c -> a (b, d) (c, d)
2020-11-25 06:03:42 +0100 <dsal> @hoogle first
2020-11-25 06:03:42 +0100 <lambdabot> Control.Arrow first :: Arrow a => a b c -> a (b, d) (c, d)
2020-11-25 06:03:42 +0100 <lambdabot> Data.Bifunctor first :: Bifunctor p => (a -> b) -> p a c -> p b c
2020-11-25 06:03:42 +0100 <lambdabot> Text.PrettyPrint.Annotated.HughesPJ first :: Doc a -> Doc a -> Doc a
2020-11-25 06:03:43 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-25 06:03:44 +0100 <Axman6> @hoogle Bifunctor f => (a -> b) -> f a x -> f b x
2020-11-25 06:03:45 +0100 <lambdabot> Data.Bifunctor first :: Bifunctor p => (a -> b) -> p a c -> p b c
2020-11-25 06:03:45 +0100 <lambdabot> Data.Bifunctor.Apply first :: Bifunctor p => (a -> b) -> p a c -> p b c
2020-11-25 06:03:45 +0100 <lambdabot> Protolude first :: Bifunctor p => (a -> b) -> p a c -> p b c
2020-11-25 06:03:53 +0100 <dolio> At least, not for one of the purposes of IO in Haskell.
2020-11-25 06:04:13 +0100 <triteraflops> dolio: that's what I thought, but like I said, Clean gets away with it. I'm still wrapping my head around it. I'm reading this: https://www.mbsd.cs.ru.nl/publications/papers/cleanbook/CleanBookI.pdf
2020-11-25 06:04:18 +0100 <koz_> dsal: Delimited continuations IIRC?
2020-11-25 06:04:24 +0100 <dsal> Yeah, that's the thing.
2020-11-25 06:04:39 +0100conal(~conal@64.71.133.70)
2020-11-25 06:04:45 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 240 seconds)
2020-11-25 06:04:57 +0100 <dolio> triteraflops: Yeah. It's making the world-passing hack safer. But it makes the semantics worse.
2020-11-25 06:05:01 +0100 <koz_> It's actually quite an old idea - that you can use delconts for effects.
2020-11-25 06:05:12 +0100 <koz_> dolio: Wait... is that basically it?
2020-11-25 06:05:16 +0100 <koz_> It's just RealWorld but safer?
2020-11-25 06:05:22 +0100 <dolio> Yeah.
2020-11-25 06:05:27 +0100 <koz_> Huh, TIL.
2020-11-25 06:05:41 +0100 <Axman6> well that doesn't sound like an improvement at all
2020-11-25 06:05:47 +0100 <triteraflops> dolio: makes the semantics worse?
2020-11-25 06:05:48 +0100 <koz_> Is it some kind of linearity in the RealWorld value or something?
2020-11-25 06:05:57 +0100 <dsal> koz_: Well, I meant new for haskell. She said it required a new primitive.
2020-11-25 06:06:04 +0100 <koz_> dsal: For efficiency.
2020-11-25 06:06:05 +0100 <triteraflops> dolio: like a usability and code cleanliness thing?
2020-11-25 06:06:14 +0100TooDifficult(~vg@139.59.59.230) (Quit: TooDifficult)
2020-11-25 06:06:24 +0100spatchkaa(~spatchkaa@S010600fc8da47b63.gv.shawcable.net)
2020-11-25 06:06:24 +0100 <koz_> Because for many effects you don't need full continuation capture, but with the situation as it currently stands, you have to do it every time.
2020-11-25 06:06:28 +0100 <koz_> Which makes effect systems slow.
2020-11-25 06:06:32 +0100TooDifficult(~vg@139.59.59.230)
2020-11-25 06:06:46 +0100TooDifficult(~vg@139.59.59.230) (Remote host closed the connection)
2020-11-25 06:07:02 +0100TooDifficult(~vg@139.59.59.230)
2020-11-25 06:07:10 +0100 <koz_> triteraflops: Are you familiar with the RealWorld trick?
2020-11-25 06:07:17 +0100TooDifficult(~vg@139.59.59.230) (Remote host closed the connection)
2020-11-25 06:07:17 +0100 <koz_> (aka how IO actually works under the covers?)
2020-11-25 06:07:31 +0100TooDifficult(~vg@139.59.59.230)
2020-11-25 06:07:38 +0100TooDifficult(~vg@139.59.59.230) (Remote host closed the connection)
2020-11-25 06:07:53 +0100TooDifficult(~vg@139.59.59.230)
2020-11-25 06:08:02 +0100 <dolio> triteraflops: If you really think about it, it doesn't make sense to explain effects by passing around a 'world', because that can't explain the difference between an infinite loop that prints things and one that doesn't. They both have the same result value (bottom). So you actually need to add I/O to the semantics of all functions, even though only the ones that pass around a 'world' actually have effects.
2020-11-25 06:08:07 +0100 <triteraflops> koz_: I had just assumed IO was inherently unsafe and implementation-dependent under the covers, and did not dig deeper.
2020-11-25 06:08:53 +0100 <dolio> So it is a failure for partitioning things into a pure semantics and a separate IO semantics.
2020-11-25 06:09:50 +0100 <koz_> triteraflops: Basically, I would suggest reading Lazy Functional State Threads (the paper). You'll likely see parallels _very_ quickly, and it's eminently readable.
2020-11-25 06:10:04 +0100SanchayanMaity(~Sanchayan@171.76.82.54)
2020-11-25 06:10:22 +0100 <dolio> If you're just implementing what IO does in a compiler, though, that doesn't matter.
2020-11-25 06:10:35 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2020-11-25 06:10:58 +0100 <koz_> dolio: That's actually one of Edward's critiques from that thing he wrote where he came up with the Churched free monad.
2020-11-25 06:11:00 +0100 <triteraflops> Ah yes, I'm pretty sure clean will let me make a function with no return value that internally prints a thing, yeah.
2020-11-25 06:11:08 +0100 <triteraflops> That's a major sownside.
2020-11-25 06:11:11 +0100 <triteraflops> *downside
2020-11-25 06:12:02 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 06:12:50 +0100 <triteraflops> If the file handle only exists inside that function, it can be unique and still have unmanaged side effects.
2020-11-25 06:13:03 +0100conal(~conal@64.71.133.70)
2020-11-25 06:13:09 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 06:13:14 +0100TooDifficult(~vg@139.59.59.230) (Quit: TooDifficult)
2020-11-25 06:13:18 +0100 <triteraflops> unless somehow, a world object has to be passed into every file handle creation...
2020-11-25 06:13:47 +0100 <dolio> Arrays are a better use case, because they don't have this problem.
2020-11-25 06:14:00 +0100TooDifficult(~vg@139.59.59.230)
2020-11-25 06:14:09 +0100 <triteraflops> I had hoped somebody just knew the answer. There was a decent chance.
2020-11-25 06:14:11 +0100 <dolio> If you make an infinite loop that does stuff with an array, it doesn't really matter that it's modifying memory forever.
2020-11-25 06:14:15 +0100 <triteraflops> I'll just keep reading
2020-11-25 06:15:30 +0100hackageadvent-of-code-ocr 0.1.0.0 - Parse Advent of Code ASCII art letters https://hackage.haskell.org/package/advent-of-code-ocr-0.1.0.0 (jle)
2020-11-25 06:15:46 +0100Jonkimi727406120(~Jonkimi@113.87.161.66) (Ping timeout: 246 seconds)
2020-11-25 06:16:02 +0100 <ocamler> how do you guys/girls deal with function arguments being in the wrong order, for example I want to map over a list [k] with this function: `findWithDefault :: Ord k => a -> k -> Map k a -> a` however the last argument wrong, is there a better way than writing a helper function for each one of these?
2020-11-25 06:16:14 +0100 <dibblego> @type flip
2020-11-25 06:16:15 +0100 <lambdabot> (a -> b -> c) -> b -> a -> c
2020-11-25 06:16:30 +0100plutoniix(~q@175.176.222.7)
2020-11-25 06:16:31 +0100 <dsal> Or a section
2020-11-25 06:16:34 +0100 <dibblego> > flip (-) 7 9
2020-11-25 06:16:36 +0100 <lambdabot> 2
2020-11-25 06:17:24 +0100 <ocamler> but in this case wouldn't i need a type of `(a -> b -> c -> d) -> (a -> b -> d -> c)`
2020-11-25 06:18:54 +0100 <triteraflops> flip (findWithDefault some_a) some_map k should work
2020-11-25 06:19:00 +0100 <glguy> ocamler, either with a locally defined function or a lambda expression
2020-11-25 06:19:05 +0100shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-11-25 06:19:06 +0100 <triteraflops> if you curry the a argument first
2020-11-25 06:19:43 +0100 <glguy> [findWithDefault a k m | k <- ks] -- or even a list comprehension can work nicely
2020-11-25 06:19:44 +0100 <ocamler> ohhh that makes sense, thanks
2020-11-25 06:19:46 +0100shatriff(~vitaliish@176.52.219.10)
2020-11-25 06:20:54 +0100 <jle`> ocamler: i'd often use a lambda too
2020-11-25 06:21:09 +0100 <jle`> map (\k -> findWithDefault a k m) ks
2020-11-25 06:23:36 +0100pavonia(~user@unaffiliated/siracusa) (Quit: Bye!)
2020-11-25 06:24:06 +0100 <triteraflops> Ah, my guess was right. You /do/ have to pass a world into the file handle open function.
2020-11-25 06:24:15 +0100 <triteraflops> and world is unique.
2020-11-25 06:24:19 +0100 <Axman6> almost always a lambda is more obvious than combinations of composition and flips
2020-11-25 06:24:42 +0100 <triteraflops> You can't do any further IO unless you extract the world from the io-performing function after it returns.
2020-11-25 06:25:01 +0100 <triteraflops> In this way, you can tell apart functions that do IO and functions that do not.
2020-11-25 06:25:14 +0100Sarma(~Amras@unaffiliated/amras0000)
2020-11-25 06:25:17 +0100 <triteraflops> world or a file handle must be passed into a function that does IO!
2020-11-25 06:25:19 +0100 <Axman6> or at least, functions which may do IO?
2020-11-25 06:25:21 +0100 <triteraflops> very interesting
2020-11-25 06:25:27 +0100 <triteraflops> well, yes
2020-11-25 06:25:42 +0100 <triteraflops> you could pass world in and output world again, and not actually use it
2020-11-25 06:25:49 +0100 <triteraflops> though the same is true of the monad approach
2020-11-25 06:26:01 +0100hackageskylighting-core 0.10.1 - syntax highlighting library https://hackage.haskell.org/package/skylighting-core-0.10.1 (JohnMacFarlane)
2020-11-25 06:26:01 +0100 <Axman6> I'm just being a pedant :)
2020-11-25 06:26:05 +0100 <triteraflops> lol
2020-11-25 06:26:22 +0100 <koz_> triteraflops: That's why I suggested the Lazy Functional State Threads paper.
2020-11-25 06:26:33 +0100 <koz_> The idea sounds _very_ similar to what it does, but safer.
2020-11-25 06:27:01 +0100hackageskylighting 0.10.1 - syntax highlighting library https://hackage.haskell.org/package/skylighting-0.10.1 (JohnMacFarlane)
2020-11-25 06:27:05 +0100 <triteraflops> You know I still don't see a downside to the Clean approach.
2020-11-25 06:27:17 +0100 <triteraflops> Still waiting for the other shoe to drop lol
2020-11-25 06:29:18 +0100subttle(~anonymous@unaffiliated/subttle)
2020-11-25 06:29:44 +0100 <Axman6> "No one uses clean, therefore it can't be very good" <- usually said about Haskell
2020-11-25 06:30:27 +0100 <ocamler> uh this is a weird compile error, `Couldn't match expected type ‘[Char] -> [String]’ with actual type ‘[[Char]]’`
2020-11-25 06:30:33 +0100 <ocamler> oh nvm
2020-11-25 06:30:34 +0100 <ocamler> sorry
2020-11-25 06:30:43 +0100 <Axman6> you got this, I believe in you
2020-11-25 06:31:11 +0100 <ocamler> lol thank you :)
2020-11-25 06:32:07 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 06:32:54 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.187) (Quit: Leaving)
2020-11-25 06:33:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 06:34:45 +0100 <triteraflops> Axman6: well, yeah, exactly, right?
2020-11-25 06:36:47 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 272 seconds)
2020-11-25 06:40:37 +0100spatchkaa(~spatchkaa@S010600fc8da47b63.gv.shawcable.net) (Ping timeout: 246 seconds)
2020-11-25 06:41:02 +0100borne(~fritjof@200116b864eb5c00394a967dc8ef4e61.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-25 06:42:54 +0100borne(~fritjof@200116b864509c00394a967dc8ef4e61.dip.versatel-1u1.de)
2020-11-25 06:43:29 +0100TooDifficult(~vg@139.59.59.230) (Quit: TooDifficult)
2020-11-25 06:54:22 +0100mwalter(473b8f3e@c-71-59-143-62.hsd1.or.comcast.net)
2020-11-25 06:58:08 +0100adm_(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 06:59:54 +0100lemmih_(~lemmih@2406:3003:2072:44:e4e6:2edc:c18b:f5e1) (Remote host closed the connection)
2020-11-25 07:00:00 +0100adm_(~adm@43.229.88.197)
2020-11-25 07:00:16 +0100lemmih_(~lemmih@2406:3003:2072:44:741a:bd6a:3c25:3ad0)
2020-11-25 07:05:22 +0100spatchkaa(~spatchkaa@S010600fc8da47b63.gv.shawcable.net)
2020-11-25 07:07:11 +0100elliott__(~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
2020-11-25 07:07:13 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2020-11-25 07:08:08 +0100elliott__(~elliott@pool-108-51-141-12.washdc.fios.verizon.net)
2020-11-25 07:11:44 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2020-11-25 07:12:05 +0100Jonkimi727406120(~Jonkimi@113.87.161.66)
2020-11-25 07:12:17 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2020-11-25 07:15:00 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 07:15:05 +0100 <ocamler> hey quick question, I feel like this is simple idk why it doesn't work
2020-11-25 07:15:11 +0100 <ocamler> ```next :: Int -> [Int]
2020-11-25 07:15:26 +0100 <ocamler> next :: Int -> [Int]next = undefinedminimum :: Int -> Int -> Intminimum k x | k < 0 = inf | k == 0 = 0 | k > 0 = min $ next x
2020-11-25 07:15:28 +0100 <ocamler> oops
2020-11-25 07:15:36 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb)
2020-11-25 07:15:38 +0100 <ocamler> next :: Int -> [Int]next = undefinedminimum :: Int -> Int -> Intminimum k x | k < 0 = inf | k == 0 = 0 | k > 0 = min $ next x
2020-11-25 07:15:41 +0100 <ocamler> sorry
2020-11-25 07:15:47 +0100 <ocamler> `next :: Int -> [Int]next = undefinedminimum :: Int -> Int -> Intminimum k x | k < 0 = inf | k == 0 = 0 | k > 0 = min $ next x`
2020-11-25 07:16:16 +0100 <ocamler> https://pastebin.com/BdHKv9y9
2020-11-25 07:16:25 +0100 <ocamler> I'm wondering why this isn't compiling
2020-11-25 07:17:46 +0100 <ocamler> this is the error message https://pastebin.com/wP3YGaLN
2020-11-25 07:19:15 +0100 <ocamler> nvm I solved it, sorry about the noise lol
2020-11-25 07:19:18 +0100 <xerox_> :t (min,minimum)
2020-11-25 07:19:20 +0100 <lambdabot> (Foldable t, Ord a1, Ord a2) => (a1 -> a1 -> a1, t a2 -> a2)
2020-11-25 07:19:46 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 256 seconds)
2020-11-25 07:20:36 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb) (Ping timeout: 272 seconds)
2020-11-25 07:22:59 +0100spatchkaa(~spatchkaa@S010600fc8da47b63.gv.shawcable.net) (Quit: Leaving)
2020-11-25 07:23:25 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 240 seconds)
2020-11-25 07:24:55 +0100alp(~alp@2a01:e0a:58b:4920:ed97:230b:9822:a509) (Ping timeout: 272 seconds)
2020-11-25 07:25:14 +0100borne(~fritjof@200116b864509c00394a967dc8ef4e61.dip.versatel-1u1.de) (Ping timeout: 264 seconds)
2020-11-25 07:28:06 +0100adm_(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 07:28:06 +0100Ariakenom(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se)
2020-11-25 07:32:16 +0100sand_dull(~theuser@c-73-149-95-105.hsd1.ct.comcast.net) (Ping timeout: 240 seconds)
2020-11-25 07:32:29 +0100 <ocamler> Is there an easy way of memoizing an Int -> Int -> Int -> Int function
2020-11-25 07:33:04 +0100adm_(~adm@43.229.88.197)
2020-11-25 07:35:39 +0100argent0(~argent0@168.227.98.84)
2020-11-25 07:36:14 +0100argent0(~argent0@168.227.98.84) (Remote host closed the connection)
2020-11-25 07:36:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 07:36:37 +0100alp(~alp@2a01:e0a:58b:4920:5c8d:e2ed:21ef:b40c)
2020-11-25 07:37:37 +0100jedws(~jedws@101.184.150.93) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-25 07:38:36 +0100supercoven(~Supercove@dsl-hkibng31-54fabf-192.dhcp.inet.fi)
2020-11-25 07:40:05 +0100ocamler(3263cbdb@50.99.203.219) (Remote host closed the connection)
2020-11-25 07:40:25 +0100darjeeling_(~darjeelin@112.16.171.8) (Ping timeout: 264 seconds)
2020-11-25 07:41:16 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-11-25 07:43:37 +0100Sarma(~Amras@unaffiliated/amras0000) (Changing host)
2020-11-25 07:43:37 +0100Sarma(~Amras@unaffiliated/amras)
2020-11-25 07:43:50 +0100ericsagnes(~ericsagne@2405:6580:0:5100:4889:2fb8:f3c5:4ca) (Ping timeout: 264 seconds)
2020-11-25 07:46:50 +0100gioyik(~gioyik@186.118.238.251) (Quit: WeeChat 3.0)
2020-11-25 07:47:02 +0100lukelau(~lukelau@46.101.13.214) (Quit: Bye)
2020-11-25 07:47:18 +0100lukelau(~lukelau@2a03:b0c0:1:d0::1bc:b001)
2020-11-25 07:51:12 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-25 07:51:18 +0100jedws(~jedws@101.184.150.93)
2020-11-25 07:54:58 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-11-25 07:55:42 +0100ericsagnes(~ericsagne@2405:6580:0:5100:a607:ad37:544:fcd4)
2020-11-25 07:59:52 +0100elliott__(~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
2020-11-25 08:05:23 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Quit: WeeChat 2.9)
2020-11-25 08:05:45 +0100Feuermagier(~Feuermagi@213.178.26.41) (Read error: Connection reset by peer)
2020-11-25 08:05:57 +0100Feuermagier(~Feuermagi@213.178.26.41)
2020-11-25 08:06:24 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-25 08:07:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 08:08:19 +0100chaosmasttter(~chaosmast@p200300c4a7107e01f51a90bd3c8201d7.dip0.t-ipconnect.de)
2020-11-25 08:10:26 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 08:10:41 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:7ef3:e1ff:d578:a4d8:f807) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-25 08:10:46 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 256 seconds)
2020-11-25 08:10:55 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-11-25 08:20:34 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-25 08:21:39 +0100thc202(~thc202@unaffiliated/thc202)
2020-11-25 08:22:20 +0100Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
2020-11-25 08:22:48 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:7ef3:e1ff:d578:a4d8:f807)
2020-11-25 08:23:45 +0100jrqc(~rofl@96.78.87.197) (Ping timeout: 240 seconds)
2020-11-25 08:24:55 +0100jrqc(~rofl@96.78.87.197)
2020-11-25 08:28:01 +0100hackageconduit 1.3.4 - Streaming data processing library. https://hackage.haskell.org/package/conduit-1.3.4 (MichaelSnoyman)
2020-11-25 08:28:24 +0100sfvm(~sfvm@37.228.215.148) (Remote host closed the connection)
2020-11-25 08:28:52 +0100howdoi(uid224@gateway/web/irccloud.com/x-prctgemuwlhbjxof) (Quit: Connection closed for inactivity)
2020-11-25 08:33:33 +0100guest112`(~user@49.5.6.87)
2020-11-25 08:34:35 +0100xff0x(~fox@2001:1a81:52a6:7b00:9da5:3842:e762:e94b) (Ping timeout: 272 seconds)
2020-11-25 08:35:01 +0100xff0x(~fox@port-92-193-220-65.dynamic.as20676.net)
2020-11-25 08:35:12 +0100 <guest112`> Axman6: yes, I think I can solve the time naming file issue
2020-11-25 08:36:02 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 264 seconds)
2020-11-25 08:36:51 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2020-11-25 08:38:01 +0100guest1125(~user@49.5.6.87) (Ping timeout: 264 seconds)
2020-11-25 08:40:26 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:7ef3:e1ff:d578:a4d8:f807) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-25 08:41:24 +0100czwartyeon(~czwartyeo@77-45-55-99.sta.asta-net.com.pl)
2020-11-25 08:41:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2020-11-25 08:41:50 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2020-11-25 08:43:50 +0100Fractalis(~Fractalis@2601:987:280:8d40:eda9:f9e1:2072:cea7) (Ping timeout: 264 seconds)
2020-11-25 08:48:36 +0100jedws(~jedws@101.184.150.93) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-25 08:50:48 +0100kritzefitz(~kritzefit@fw-front.credativ.com)
2020-11-25 08:51:56 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-25 08:54:51 +0100alp(~alp@2a01:e0a:58b:4920:5c8d:e2ed:21ef:b40c) (Ping timeout: 272 seconds)
2020-11-25 08:56:39 +0100da39a3ee5e6b4b0d(~da39a3ee5@67.23.55.162)
2020-11-25 08:58:58 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 08:59:13 +0100hiroaki(~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de)
2020-11-25 09:00:31 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-25 09:00:59 +0100dhouthoo(~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be)
2020-11-25 09:01:32 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 09:03:15 +0100jamm_(~jamm@unaffiliated/jamm)
2020-11-25 09:03:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 09:04:15 +0100cyphase(~cyphase@unaffiliated/cyphase) (Ping timeout: 256 seconds)
2020-11-25 09:05:24 +0100jedws(~jedws@101.184.150.93)
2020-11-25 09:06:01 +0100jedws(~jedws@101.184.150.93) (Client Quit)
2020-11-25 09:06:46 +0100cfricke(~cfricke@unaffiliated/cfricke)
2020-11-25 09:08:07 +0100wonko7(~wonko7@2a01:e35:2ffb:7040:55f1:c3a3:cdbe:bf52)
2020-11-25 09:11:27 +0100cyphase(~cyphase@unaffiliated/cyphase)
2020-11-25 09:11:53 +0100adm_(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 09:12:37 +0100adm_(~adm@43.229.88.197)
2020-11-25 09:12:54 +0100adm_(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 09:14:15 +0100adm_(~adm@43.229.88.197)
2020-11-25 09:15:21 +0100Yumasi(~guillaume@pop.92-184-106-211.mobile.abo.orange.fr)
2020-11-25 09:15:41 +0100adm_(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 09:16:20 +0100adm_(~adm@43.229.88.197)
2020-11-25 09:19:18 +0100adm_(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 09:19:40 +0100adm_(~adm@43.229.88.197)
2020-11-25 09:22:04 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
2020-11-25 09:23:12 +0100Sarma(~Amras@unaffiliated/amras) (Remote host closed the connection)
2020-11-25 09:23:31 +0100raichoo(~raichoo@dslb-178-001-144-016.178.001.pools.vodafone-ip.de)
2020-11-25 09:24:34 +0100gproto23(~gproto23@unaffiliated/gproto23)
2020-11-25 09:25:25 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 240 seconds)
2020-11-25 09:25:34 +0100gproto23(~gproto23@unaffiliated/gproto23) (Client Quit)
2020-11-25 09:25:55 +0100gproto23(~gproto23@unaffiliated/gproto23)
2020-11-25 09:27:31 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it)
2020-11-25 09:27:36 +0100gproto23(~gproto23@unaffiliated/gproto23) (Remote host closed the connection)
2020-11-25 09:28:04 +0100gproto23(~gproto23@unaffiliated/gproto23)
2020-11-25 09:28:29 +0100jamm_(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-11-25 09:28:50 +0100jedws(~jedws@101.184.150.93)
2020-11-25 09:29:49 +0100n0042(d055ed89@208.85.237.137)
2020-11-25 09:29:53 +0100jedws(~jedws@101.184.150.93) (Client Quit)
2020-11-25 09:30:14 +0100Yumasi(~guillaume@pop.92-184-106-211.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-25 09:30:19 +0100sqrt2_(~ben@unaffiliated/sqrt2) (Ping timeout: 272 seconds)
2020-11-25 09:31:03 +0100sqrt2(~ben@unaffiliated/sqrt2)
2020-11-25 09:31:25 +0100Amras(~Amras@unaffiliated/amras)
2020-11-25 09:32:35 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-11-25 09:34:18 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-25 09:35:42 +0100Yumasi(~guillaume@pop.92-184-106-211.mobile.abo.orange.fr)
2020-11-25 09:36:39 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 272 seconds)
2020-11-25 09:37:10 +0100kuribas(~user@ptr-25vy0iacghmhtu8v1sd.18120a2.ip6.access.telenet.be)
2020-11-25 09:37:57 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de)
2020-11-25 09:38:28 +0100aoei(~aoei@li2174-104.members.linode.com) (Quit: ZNC 1.7.5 - https://znc.in)
2020-11-25 09:38:32 +0100hidedagger(~nate@unaffiliated/hidedagger) (Client Quit)
2020-11-25 09:39:08 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-25 09:39:11 +0100borne(~fritjof@200116b864509c00394a967dc8ef4e61.dip.versatel-1u1.de)
2020-11-25 09:40:05 +0100aoei(~aoei@li2174-104.members.linode.com)
2020-11-25 09:40:34 +0100cyphase(~cyphase@unaffiliated/cyphase) (Ping timeout: 272 seconds)
2020-11-25 09:40:36 +0100gproto23(~gproto23@unaffiliated/gproto23) (Ping timeout: 240 seconds)
2020-11-25 09:45:05 +0100cyphase(~cyphase@unaffiliated/cyphase)
2020-11-25 09:46:11 +0100gproto023gproto23
2020-11-25 09:46:53 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-25 09:49:33 +0100jedws(~jedws@101.184.150.93)
2020-11-25 09:50:46 +0100jedws(~jedws@101.184.150.93) (Client Quit)
2020-11-25 09:51:38 +0100Yumasi(~guillaume@pop.92-184-106-211.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-25 09:51:40 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye)
2020-11-25 09:56:56 +0100aredirect(~aredirect@197.52.231.124)
2020-11-25 09:57:04 +0100Yumasi(~guillaume@pop.92-184-106-211.mobile.abo.orange.fr)
2020-11-25 09:57:34 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk)
2020-11-25 09:58:17 +0100SanchayanMaity(~Sanchayan@171.76.82.54) (Quit: SanchayanMaity)
2020-11-25 09:58:44 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk) (Remote host closed the connection)
2020-11-25 09:59:04 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk)
2020-11-25 09:59:29 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-25 09:59:50 +0100SanchayanMaity(~Sanchayan@171.76.82.54)
2020-11-25 10:00:06 +0100betrion[m](betrionmat@gateway/shell/matrix.org/x-lhecpqwtjkkiglwb) (Quit: Idle for 30+ days)
2020-11-25 10:00:26 +0100 <tdammers> does anyone know how I can convince postgresql-simple to consume postgres values of type 'interval'?
2020-11-25 10:00:35 +0100f-a(~f-a@151.36.219.202)
2020-11-25 10:02:44 +0100cyphase(~cyphase@unaffiliated/cyphase) (Ping timeout: 272 seconds)
2020-11-25 10:05:27 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 10:07:52 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Read error: Connection reset by peer)
2020-11-25 10:09:01 +0100benjamingr__(uid23465@gateway/web/irccloud.com/x-lrpyjjkwyhqzgysi)
2020-11-25 10:09:29 +0100star_cloud(~star_clou@106.206.23.122)
2020-11-25 10:09:47 +0100star_cloud(~star_clou@106.206.23.122) (Read error: Connection reset by peer)
2020-11-25 10:09:52 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 260 seconds)
2020-11-25 10:11:54 +0100adm_(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 10:13:00 +0100Yumasi(~guillaume@pop.92-184-106-211.mobile.abo.orange.fr) (Read error: Connection reset by peer)
2020-11-25 10:13:03 +0100adm_(~adm@43.229.88.197)
2020-11-25 10:13:12 +0100Er45(5fa448e7@95.164.72.231)
2020-11-25 10:13:19 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 10:13:35 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 10:18:23 +0100Yumasi(~guillaume@pop.92-184-106-211.mobile.abo.orange.fr)
2020-11-25 10:19:16 +0100adm_(~adm@43.229.88.197) (Ping timeout: 240 seconds)
2020-11-25 10:19:28 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 256 seconds)
2020-11-25 10:20:25 +0100michalz(~user@185.246.204.47)
2020-11-25 10:23:21 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Excess Flood)
2020-11-25 10:23:50 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-ysnvsqftovuddatt) (Quit: Connection closed for inactivity)
2020-11-25 10:24:25 +0100Yumasi(~guillaume@pop.92-184-106-211.mobile.abo.orange.fr) (Ping timeout: 240 seconds)
2020-11-25 10:24:38 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 10:24:50 +0100Yumasi(~guillaume@40.72.95.92.rev.sfr.net)
2020-11-25 10:26:22 +0100 <dminuoso> define "consume"
2020-11-25 10:26:45 +0100 <tdammers> map to Haskell values
2020-11-25 10:27:05 +0100 <tdammers> I have a table with 'interval' values in it, and I want to read those with postgresql-simple
2020-11-25 10:27:18 +0100Chousuke(oranenj@coffee.modeemi.fi) (Remote host closed the connection)
2020-11-25 10:27:35 +0100Chousuke(oranenj@coffee.modeemi.fi)
2020-11-25 10:28:05 +0100adm(~adm@43.229.88.197)
2020-11-25 10:28:09 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com)
2020-11-25 10:28:23 +0100 <dminuoso> tdammers: I didn't map interval yet, but roughly https://hackage.haskell.org/package/postgresql-simple-0.6.3/docs/src/Database.PostgreSQL.Simple.Fr… shows how
2020-11-25 10:28:54 +0100 <dminuoso> in particular, look at `attoFieldParser`, `doFromField` and `okXXX` primitives like `okBinary`
2020-11-25 10:29:09 +0100 <tdammers> right. upon further thought, it turns out that interval is actually the wrong data type, so that means I won't have to write my own parser for it
2020-11-25 10:29:23 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net)
2020-11-25 10:29:24 +0100 <dminuoso> To figure out the underlying oids, use something like
2020-11-25 10:29:26 +0100 <dminuoso> elect 'interval'::regtype::oid;
2020-11-25 10:29:50 +0100gproto23(~gproto23@unaffiliated/gproto23) (Ping timeout: 256 seconds)
2020-11-25 10:31:25 +0100darjeeling_(~darjeelin@122.245.219.209)
2020-11-25 10:34:59 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 10:35:38 +0100trcc(~trcc@users-1190.st.net.au.dk)
2020-11-25 10:37:20 +0100 <trcc> I am aware that this is not the right channel to ask the question, but I do not know where to ask :) Anyone familiar with a channel related to model checking?
2020-11-25 10:37:35 +0100 <trcc> Usually there is a lot of knowledge contained in here
2020-11-25 10:39:59 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 272 seconds)
2020-11-25 10:44:11 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 10:46:03 +0100datajerk(~datajerk@sense.net) (Ping timeout: 260 seconds)
2020-11-25 10:46:43 +0100adm_(~adm@43.229.88.197)
2020-11-25 10:49:59 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-25 10:52:36 +0100datajerk(~datajerk@sense.net)
2020-11-25 10:53:57 +0100Er45(5fa448e7@95.164.72.231) (Remote host closed the connection)
2020-11-25 10:55:03 +0100pokid(~pokid@unaffiliated/pokid)
2020-11-25 10:55:06 +0100christo(~chris@81.96.113.213)
2020-11-25 10:55:16 +0100 <[exa]> trcc: that sounds a bit too specialized even for #haskell, esp. in the morning :]
2020-11-25 10:55:26 +0100 <trcc> hehe
2020-11-25 10:55:42 +0100 <[exa]> do you seek papers, software, advice, or anything specific?
2020-11-25 10:56:31 +0100hackageukrainian-phonetics-basic 0.3.0.0 - A library to work with the basic Ukrainian phonetics and syllable segmentation. https://hackage.haskell.org/package/ukrainian-phonetics-basic-0.3.0.0 (OleksandrZhabenko)
2020-11-25 10:59:16 +0100christo(~chris@81.96.113.213) (Ping timeout: 246 seconds)
2020-11-25 10:59:37 +0100ubert(~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
2020-11-25 11:00:26 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 11:00:35 +0100TommyC7(~TommyC@unaffiliated/sepulchralbloom)
2020-11-25 11:00:48 +0100TommyC(~TommyC@unaffiliated/sepulchralbloom) (Disconnected by services)
2020-11-25 11:01:11 +0100TommyC7TommyC
2020-11-25 11:01:47 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-25 11:04:08 +0100aredirect(~aredirect@197.52.231.124) (Ping timeout: 260 seconds)
2020-11-25 11:04:57 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-11-25 11:05:24 +0100ER(5fa448e7@95.164.72.231)
2020-11-25 11:05:43 +0100 <ER> @hoogle displayShow
2020-11-25 11:05:44 +0100 <lambdabot> RIO displayShow :: Show a => a -> Utf8Builder
2020-11-25 11:05:44 +0100 <lambdabot> Stack.Prelude displayShow :: Show a => a -> Utf8Builder
2020-11-25 11:05:44 +0100 <lambdabot> Tonalude displayShow :: Show a => a -> Utf8Builder
2020-11-25 11:05:56 +0100 <ER> @hoogle Utf8Builder
2020-11-25 11:05:57 +0100 <lambdabot> RIO newtype Utf8Builder
2020-11-25 11:05:57 +0100 <lambdabot> RIO Utf8Builder :: Builder -> Utf8Builder
2020-11-25 11:05:57 +0100 <lambdabot> Text.Printer newtype Utf8Builder
2020-11-25 11:06:23 +0100f-a(~f-a@151.36.219.202) ()
2020-11-25 11:06:56 +0100rprije(~rprije@123-243-139-165.tpgi.com.au) (Quit: Leaving)
2020-11-25 11:08:09 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 11:08:35 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 11:09:50 +0100n0042(d055ed89@208.85.237.137) (Remote host closed the connection)
2020-11-25 11:11:05 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Quit: WeeChat 2.9)
2020-11-25 11:12:25 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-25 11:15:39 +0100guest112`(~user@49.5.6.87) (Quit: ERC (IRC client for Emacs 27.1))
2020-11-25 11:15:45 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 11:16:05 +0100shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-11-25 11:16:18 +0100shatriff(~vitaliish@176.52.219.10)
2020-11-25 11:18:25 +0100czwartyeon(~czwartyeo@77-45-55-99.sta.asta-net.com.pl) (Ping timeout: 240 seconds)
2020-11-25 11:20:26 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 264 seconds)
2020-11-25 11:21:10 +0100adm_(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 11:25:10 +0100czwartyeon(~czwartyeo@77-45-55-99.sta.asta-net.com.pl)
2020-11-25 11:25:13 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Remote host closed the connection)
2020-11-25 11:25:36 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-25 11:25:54 +0100Fractalis(~Fractalis@2601:987:280:8d40:eda9:f9e1:2072:cea7)
2020-11-25 11:27:07 +0100robotadam1(~robotadam@s91904426.blix.com)
2020-11-25 11:29:55 +0100adm(~adm@43.229.88.197)
2020-11-25 11:31:22 +0100alp(~alp@2a01:e0a:58b:4920:c9e7:a101:608d:5391)
2020-11-25 11:39:53 +0100 <trcc> [exa]: I have a program (c-like, but with objects) Y that uses an object X. X has a certain api. I want to verify that the given program Y does not violate the API of X. And I was hoping to code-generate the program to a model checker and have the model checker verify this.
2020-11-25 11:41:31 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-11-25 11:41:58 +0100andos(~dan@69-165-210-185.cable.teksavvy.com) (Ping timeout: 246 seconds)
2020-11-25 11:42:12 +0100 <johnnyboy[m]> sounds interesting!
2020-11-25 11:42:48 +0100 <johnnyboy[m]> I wrote an LTL theory generator for my model checking project in Haskell and it was fun!
2020-11-25 11:42:59 +0100mwalter(473b8f3e@c-71-59-143-62.hsd1.or.comcast.net) (Remote host closed the connection)
2020-11-25 11:44:08 +0100 <johnnyboy[m]> haskell seems to be a great tool for parsing and generating code
2020-11-25 11:44:59 +0100CMCDragonkai1(~Thunderbi@124.19.3.250)
2020-11-25 11:49:00 +0100Jonkimi727406120(~Jonkimi@113.87.161.66) (Ping timeout: 256 seconds)
2020-11-25 11:49:39 +0100pjb(~t@2a01cb04063ec500710c4d3951adc2aa.ipv6.abo.wanadoo.fr)
2020-11-25 11:54:41 +0100CMCDragonkai1(~Thunderbi@124.19.3.250) (Remote host closed the connection)
2020-11-25 11:55:14 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 11:57:10 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-25 11:57:53 +0100adm(~adm@43.229.88.197)
2020-11-25 11:58:26 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 11:58:34 +0100Digittable flips attempting to install Euterpea (cabal v1-install --allow-newer Euterpea # didnt work either) ... goes afk to calm down, and to dispell angry defeatist thoughts he'll never get coding his music in functional programming.
2020-11-25 11:59:42 +0100adm(~adm@43.229.88.197)
2020-11-25 12:00:09 +0100 <tomsmeding> Digit: with what ghc version did you try that?
2020-11-25 12:00:35 +0100 <tomsmeding> I found this issue, which you probably also found (https://github.com/Euterpea/Euterpea2/issues/35), that suggests using ghc 8.6.5
2020-11-25 12:01:03 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2020-11-25 12:01:09 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 12:02:14 +0100 <Uniaika> hi tomsmeding :)
2020-11-25 12:02:46 +0100tomsmedingwonders if you know me from somewhere outside #haskell
2020-11-25 12:02:59 +0100 <[exa]> trcc: I'm usually going the other direction, write a DSL where breaking the model is non-representable and then generate the C program from that...
2020-11-25 12:03:30 +0100 <Uniaika> tomsmeding: nope, not at all! :D
2020-11-25 12:03:41 +0100 <tomsmeding> also hi, then :)
2020-11-25 12:04:13 +0100adm(~adm@43.229.88.197) (Ping timeout: 260 seconds)
2020-11-25 12:05:53 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2020-11-25 12:09:37 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 246 seconds)
2020-11-25 12:11:58 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net)
2020-11-25 12:19:03 +0100 <ski> triteraflops : Clean also has some monadic operations, because they're useful at times (avoiding tedious boilerplate code), even with uniqueness
2020-11-25 12:19:45 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 12:20:25 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 12:20:47 +0100carlomagno1(~cararell@148.87.23.6)
2020-11-25 12:20:56 +0100 <ski> the Clean approach to I/O requires tracking uniqueness statically. (Mercury also uses the same approach, although it doesn't put the uniqueness in the types, but in separate mode declarations of functions and predicates). since Haskell doesn't have uniqueness, it has to use a different approach
2020-11-25 12:22:45 +0100carlomagno(~cararell@148.87.23.7) (Ping timeout: 240 seconds)
2020-11-25 12:22:51 +0100Jonkimi727406120(~Jonkimi@113.87.161.66)
2020-11-25 12:23:50 +0100 <ski> in the past (before monadic I/O), Haskell has used two other approaches to (side-effect free) I/O, modelling I/O declaratively. first, you can model a program as a function from program inputs (standard input) to program outputs (standard output), both being `String's. the standard Haskell function `interact :: (String -> String) -> IO ()' can be used to convert from that input-string-to-output-string model
2020-11-25 12:23:56 +0100 <ski> to the current monadic I/O model, so that you can write programs in this style
2020-11-25 12:24:46 +0100whald(~trem@2a02:810a:8100:11a6:7427:ad4:8a1e:146d)
2020-11-25 12:25:01 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 246 seconds)
2020-11-25 12:25:38 +0100 <ski> however, this doesn't scale to doing other operations that transforming a single standard input character stream to a single standard output character stream. e.g. you might also want to emit some output on the standard error stream. or you might want to open named files, to read from them, or write to them. or do other effectful operations, like communicating over a network
2020-11-25 12:26:08 +0100ER(5fa448e7@95.164.72.231) (Remote host closed the connection)
2020-11-25 12:27:29 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 12:27:46 +0100Jonkimi727406120(~Jonkimi@113.87.161.66) (Ping timeout: 272 seconds)
2020-11-25 12:27:48 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Client Quit)
2020-11-25 12:31:04 +0100 <ski> so, instead of mapping lists/streams of input characters to lists/streams of output characters, we could generalize to mapping lists of OS responses to lists of OS requests (yes, in that order, not in the opposite order). you can imagine `data Request = HPutChar Handle Char | HGetChar Handle | OpenFile FilePath IOMode | HClose Handle ...' and `data Response = HCharPut | HCharGot Char | FileOpened Handle |
2020-11-25 12:31:10 +0100 <ski> Closed | Error IOError | ...'
2020-11-25 12:31:35 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-25 12:32:26 +0100 <ski> and then a program doing I/O would be modelled as a function of type `[Response] -> [Request]'. the idea is that the function starts by producing a `Request' in the output stream, and only after that does it look at the corresponding `Response' in the input stream, which will contain the reply from the OS to the given request
2020-11-25 12:33:02 +0100 <ski> you could define a function for outputting a `String' as follows
2020-11-25 12:33:21 +0100 <ski> hPutStr :: String -> [Response] -> [Request]
2020-11-25 12:33:52 +0100Jonkimi727406120(~Jonkimi@113.87.161.66)
2020-11-25 12:34:41 +0100 <ski> hPutStr [ ] resps0 = []
2020-11-25 12:35:11 +0100 <ski> hPutStr (c:s) resps0 = HPutChar h c
2020-11-25 12:35:21 +0100 <Digit> thanks tomsmeding. that was helpful. i have a 8.8.4 which i've been getting "further" with than my 8.6.5 which chokes straight away, offering "cabal: failed to parse output of 'ghc-pkg dump'". with my 8.8.4 i at least get to the https://dpaste.com/78CNMNNAU (& attempting to get alsa's -dev where i have the 8.6.5 errors out too). ~ am currently working through the errors i got, getting the parts, on a fresh start with another 8.6.5 (i
2020-11-25 12:35:21 +0100 <Digit> hope).
2020-11-25 12:35:31 +0100 <ski> : case resps0 of
2020-11-25 12:35:48 +0100 <dminuoso> I do wonder how error prone pre-monadic IO really was. Forget to pop a response, pop twice..
2020-11-25 12:35:55 +0100 <trcc> [exa]: yes, I have thought of that. Unfortunately it is not really a possibility here...
2020-11-25 12:36:08 +0100 <ski> HCharPut:resps -> hPutStr h c resps
2020-11-25 12:36:11 +0100 <dminuoso> The interface seems incredibly awkward
2020-11-25 12:36:33 +0100 <ski> (oh, there should of course also be a `Handle' argument to `hPutStr')
2020-11-25 12:37:20 +0100 <ski> it's awkward yes to have to do local `case' in order to only check the corresponding response after the request has been given. one can use an irrefutable/lazy pattern, in order to make this a little nicer
2020-11-25 12:37:43 +0100 <ski> hPutStr (c:s) ~(HCharPut:resps) = HPutChar h c : hPutStr h c resps
2020-11-25 12:37:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-25 12:38:00 +0100 <dminuoso> Did that mechanism support things like forkIO?
2020-11-25 12:38:23 +0100 <dminuoso> Though..
2020-11-25 12:38:43 +0100 <dminuoso> I guess that'd just be `forkIO :: ([Request] -> [Response]) -> [Request] -> [Response]`
2020-11-25 12:38:52 +0100 <dminuoso> The rest is just an implementation
2020-11-25 12:38:53 +0100 <ski> also, `hPutStr', as written above, is not composable. if one wants to output one `String' after another (and not by first concatenating them), one can't do it directly with `hPutStr'. we need to generalize it to take an additional parameter, a continuation, for what to do after the output of the given `String' :
2020-11-25 12:39:03 +0100chaosmasttter(~chaosmast@p200300c4a7107e01f51a90bd3c8201d7.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2020-11-25 12:39:10 +0100 <ski> hPutStr :: Handle -> String -> ([Response] -> [Request]) -> [Response] -> [Request]
2020-11-25 12:39:13 +0100 <ski> or, using
2020-11-25 12:39:21 +0100 <ski> type Answer = [Response] -> [Request]
2020-11-25 12:39:24 +0100 <ski> it becomes
2020-11-25 12:39:33 +0100 <ski> hPutStr :: Handle -> String -> Answer -> Answer
2020-11-25 12:39:39 +0100 <ski> and then one'd also do
2020-11-25 12:39:53 +0100 <ski> hGetLine :: Handle -> (String -> Answer) -> Answer
2020-11-25 12:40:12 +0100 <ski> (another name for `Answer' that's been used is `Dialogue', for "dialogue-based I/O")
2020-11-25 12:40:35 +0100 <ski> this is actually writing the program in continuation-passing style, and so one could express these using `Cont' :
2020-11-25 12:40:46 +0100 <ski> hPutStr :: Handle -> String -> Cont Answer ()
2020-11-25 12:40:47 +0100solonarv(~solonarv@astrasbourg-653-1-191-240.w90-13.abo.wanadoo.fr)
2020-11-25 12:40:57 +0100 <ski> hGetLine :: Handle -> Cont Answer String
2020-11-25 12:41:49 +0100 <ski> and then we could define `IO' as `Cont Answer', and define monadic combinators on `IO' (like `returnIO',`bindIO'), or the overloaded ones that we have today, that applies to any monad
2020-11-25 12:42:16 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2020-11-25 12:43:00 +0100 <dminuoso> ski: But this is also more error prone in a subtle way. Response is not parametrized over the type of result it yields.
2020-11-25 12:43:10 +0100 <ski> (it's also possible to have `Answer' as an abstract data type, and base I/O directly on it, instead of defining `Answer' in terms of the dialogue-based I/O. Andrew Appel's "Modern Compiler Implementation in SML/C/Java" does that, in a chapter about a purely functional language)
2020-11-25 12:43:27 +0100 <ski> dminuoso : it isn't intended to
2020-11-25 12:43:45 +0100 <dminuoso> So you could pass the `Response` to something not compatible with what it produces
2020-11-25 12:44:02 +0100 <ski> you can use the CPS `(a -> Answer) -> Answer' to express a computed answer `a', and the ability to continue with further I/O dialogue after that
2020-11-25 12:45:50 +0100 <ski> "Did that mechanism support things like forkIO?" -- not really. the dialogue models a synchronized, fully linear, interleaving of requests and responses. the more or less arbitrary interleaving of multiple such dialogues couldn't really be expressed nicely here, that i can see
2020-11-25 12:45:53 +0100subttle(~anonymous@unaffiliated/subttle) (Quit: leaving)
2020-11-25 12:46:16 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 240 seconds)
2020-11-25 12:46:40 +0100 <ski> also, it's awkward to have to change `Request' and `Response', to add new primitive types of operations. it's better to have `Answer', or `IO', be an abstract type, and have ways of importing foreign operations dealing with them
2020-11-25 12:46:43 +0100 <dminuoso> ski: well, I just thought that you could just dupliate another dialog machine on forkIO
2020-11-25 12:47:09 +0100chaosmasttter(~chaosmast@p200300c4a7107e01f51a90bd3c8201d7.dip0.t-ipconnect.de)
2020-11-25 12:47:15 +0100 <dminuoso> in the sense of forking the entire process
2020-11-25 12:47:37 +0100 <ski> i guess something like `([Response] -> [Request]) -> ([Response] -> [Request]) -> ([Response] -> [Request])' could perhaps work, hmm
2020-11-25 12:48:08 +0100 <ski> (btw, note that you got the `Response' vs. `Request' ordering wrong for `forkIO'. the `Requests' are the outputs, and the `Response' are the inputs)
2020-11-25 12:48:26 +0100 <ski> hmm
2020-11-25 12:49:34 +0100 <ski> well, i suppose you could have a request `ForkIO ([Response] -> [Request])', and defer to the OS how the interleaving of I/O operations should happen
2020-11-25 12:49:57 +0100 <ski> (i was thinking about possibly describing, in-language, the interleaving)
2020-11-25 12:52:35 +0100 <ski> triteraflops : in any case, uniqueness and monads are not directly comparable. they are at "different levels". it's more fair to compare uniqueness to `IO' and `ST'. the latter two can be thought of as abstract datatypes which conceptually makes use of uniqueness internally (even though the language doesn't allow expressing uniqueness). them being abstract protects the use of the "state-passing" to ensure
2020-11-25 12:52:41 +0100 <ski> uniqueness inside, so that "update-in-place" can be used. however, as noticed by someone else, for some notions of I/O, the "world-passing" isn't really a good fit
2020-11-25 12:54:23 +0100 <tomsmeding> Digit: are you switching ghc's using ghcup? Not sure if I've seen that ghc-pkg error before, perhaps a version mismatch?
2020-11-25 12:54:46 +0100hekkaidekapus_hekkaidekapus
2020-11-25 12:55:25 +0100Codaraxis(~Codaraxis@91.193.4.10) (Ping timeout: 240 seconds)
2020-11-25 12:55:44 +0100 <ski> triteraflops : anyway, there are operations `return :: a -> St s a',`(`bind`) :: (St s a) -> (a -> St s b) -> St s b',`seqList :: [St s a] -> St s [a]' in Clean, `St s a' being defined as `s -> (a,s)'. these can be applied to passing unique values (the `World', or `File's or arrays) around, threading them through a computation. `seqList' corresponds in Haskell to `sequence', for the `State s' monad
2020-11-25 12:56:12 +0100Codaraxis(~Codaraxis@91.193.4.10)
2020-11-25 12:57:56 +0100 <ski> triteraflops : one advantage of the uniqueness approach is that not all I/O operations, or array operations, need to be explicitly sequenced, wrt each other. if you open two `File's, or operate on two arrays, then these would be two different "unique state threads", can be evaluated independently of each other. this improves laziness, as compared to Haskell's monadic `IO' and `ST', which insists on
2020-11-25 12:58:02 +0100 <ski> sequentializing all the I/O or state operations, wrt each other
2020-11-25 12:58:23 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55)
2020-11-25 12:59:12 +0100Tario(~Tario@201.192.165.173)
2020-11-25 12:59:19 +0100Yumasi(~guillaume@40.72.95.92.rev.sfr.net) (Ping timeout: 246 seconds)
2020-11-25 12:59:47 +0100 <ski> (unless you're using `forkIO' to spawn a new thread doing I/O, or using `unsafeInterleaveST' to spawn a new "state thread" (not actually using preemptive or cooperative threads in the conventional sense), which is intended to operate on state that's disjoint from the rest of the state (hence the `unsafe' in the name))
2020-11-25 13:00:40 +0100plutoniix(~q@175.176.222.7) (Quit: Leaving)
2020-11-25 13:01:15 +0100 <hekkaidekapus> tomsmeding, Digit: Building with v. ≥8.8 requires patching usages of `Control.Monad.fail` (see <https://gitlab.haskell.org/ghc/ghc/-/wikis/migration/8.8#base-41300>). v. ≤8.6.5 will be fine modulo some tweaks in the cabal file.
2020-11-25 13:01:15 +0100chkno(~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer)
2020-11-25 13:01:58 +0100chkno(~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net)
2020-11-25 13:02:36 +0100zaquest(~notzaques@5.128.210.178) (Quit: Leaving)
2020-11-25 13:03:00 +0100Codaraxis(~Codaraxis@91.193.4.10) (Remote host closed the connection)
2020-11-25 13:03:20 +0100Codaraxis(~Codaraxis@91.193.4.10)
2020-11-25 13:06:16 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 13:06:55 +0100Codaraxis(~Codaraxis@91.193.4.10) (Remote host closed the connection)
2020-11-25 13:08:29 +0100da39a3ee5e6b4b0d(~da39a3ee5@67.23.55.162) (Ping timeout: 256 seconds)
2020-11-25 13:09:14 +0100Codaraxis(~Codaraxis@91.193.4.10)
2020-11-25 13:10:23 +0100Entertainment(~entertain@104.246.132.210)
2020-11-25 13:10:33 +0100Codaraxis(~Codaraxis@91.193.4.10) (Remote host closed the connection)
2020-11-25 13:16:40 +0100gproto23(~gproto23@unaffiliated/gproto23)
2020-11-25 13:20:31 +0100hackagephonetic-languages-simplified-common 0.3.0.0 - A simplified version of the phonetic-languages-functionality https://hackage.haskell.org/package/phonetic-languages-simplified-common-0.3.0.0 (OleksandrZhabenko)
2020-11-25 13:21:32 +0100watt877(~watt877@124.123.105.4)
2020-11-25 13:22:30 +0100Stanley00(~stanley00@unaffiliated/stanley00) (Remote host closed the connection)
2020-11-25 13:23:57 +0100ClaudiusMaximus(~claude@unaffiliated/claudiusmaximus) (Read error: Connection reset by peer)
2020-11-25 13:26:01 +0100watt877(~watt877@124.123.105.4) (Ping timeout: 264 seconds)
2020-11-25 13:28:15 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2020-11-25 13:31:44 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it) (Quit: Leaving)
2020-11-25 13:38:01 +0100hackageservant-exceptions 0.2.1 - Extensible exceptions for servant APIs https://hackage.haskell.org/package/servant-exceptions-0.2.1 (ch1bo)
2020-11-25 13:39:01 +0100hackageservant-exceptions-server 0.2.1 - Extensible exceptions for servant API servers https://hackage.haskell.org/package/servant-exceptions-server-0.2.1 (ch1bo)
2020-11-25 13:39:15 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
2020-11-25 13:40:31 +0100hackagephonetic-languages-simplified-properties-lists 0.1.0.0 - A generalization of the uniqueness-periods-vector-properties package. https://hackage.haskell.org/package/phonetic-languages-simplified-properties-lists-0.1.0.0 (OleksandrZhabenko)
2020-11-25 13:41:31 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-25 13:45:23 +0100Nahra(~Nahra@unaffiliated/nahra)
2020-11-25 13:48:17 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55)
2020-11-25 13:48:50 +0100cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
2020-11-25 13:49:46 +0100psamim(samimpmatr@gateway/shell/matrix.org/x-tqcirtqddpnlomkh)
2020-11-25 13:50:21 +0100n0042(d055ed89@208.85.237.137)
2020-11-25 13:51:59 +0100 <n0042> Hello folks. I have been experimenting with Data.Vector and I have noticed that it uses a lot of the same function names as the list class, which leads to complaints from ghc. How do you guys typically handle that? Should I call each function explicitly like `Data.Vector.length` or is there a one-liner to overwrite the normal commands in a program
2020-11-25 13:52:00 +0100 <n0042> that will be using Vectors for everything?
2020-11-25 13:52:23 +0100 <dminuoso> n0042: The common style is to use qualified imports
2020-11-25 13:52:30 +0100 <dminuoso> import qualified Data.Vector as V
2020-11-25 13:52:38 +0100 <dminuoso> Alternatively you can also hide imports from Prelude
2020-11-25 13:52:50 +0100 <n0042> Excellent. Thank you very mcuh dminuoso
2020-11-25 13:53:03 +0100 <n0042> *much
2020-11-25 13:53:07 +0100 <[exa]> like, it is pretty common that if anyone writes V.length you just assume that's the vector length
2020-11-25 13:53:23 +0100 <[exa]> same for other containers, M as Data.Map, S as Data.Set, etc
2020-11-25 13:53:25 +0100dminuosousually imports Data.ByteString as V and Data.Vector as BS.
2020-11-25 13:53:33 +0100dminuosothen invites [exa] to fix his code
2020-11-25 13:53:38 +0100 <[exa]> please no why
2020-11-25 13:53:44 +0100 <n0042> ll
2020-11-25 13:53:47 +0100 <n0042> *lol
2020-11-25 13:54:00 +0100 <dminuoso> [exa]: Recall the tree parsing problem btw?
2020-11-25 13:54:04 +0100 <n0042> Thank you both. I'll use those approaches.
2020-11-25 13:54:09 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 265 seconds)
2020-11-25 13:54:21 +0100 <[exa]> dminuoso: yeah, how did that end up?
2020-11-25 13:54:25 +0100 <dminuoso> [exa]: Strangely I had another similar problem shortly after, and now I have the *real* solution. Rather than a whacky stupid stateful parser...
2020-11-25 13:54:27 +0100 <dminuoso> you know...
2020-11-25 13:54:29 +0100 <dminuoso> build a trie.
2020-11-25 13:54:34 +0100 <dminuoso> done :>
2020-11-25 13:54:54 +0100 <[exa]> hell yeah tries
2020-11-25 13:55:10 +0100 <[exa]> cool
2020-11-25 13:55:43 +0100 <[exa]> btw I saw some Trie packages like 2 days ago, great there are good data structures for that now
2020-11-25 13:55:59 +0100 <[exa]> s/data structures/container implementations/ ..so
2020-11-25 13:56:32 +0100 <dminuoso> Well, Im just finding out that general trie implementations dont make much sense
2020-11-25 13:56:42 +0100 <dminuoso> Something like `list-tries` for example is just containers with a trie implementation behind
2020-11-25 13:57:10 +0100 <n0042> Got me looking up what a `trie` is on Wikipedia. Neat stuff. Thanks guys
2020-11-25 14:00:12 +0100da39a3ee5e6b4b0d(~da39a3ee5@171.5.161.165)
2020-11-25 14:00:49 +0100 <[exa]> dminuoso: it's good that there's the concept of tries. Cf. C++ STL doesn't have tries and people end up making stuff like map<list_of_path_elems, whatever>
2020-11-25 14:01:16 +0100 <merijn> [exa]: Metric trees are even cooler!
2020-11-25 14:02:02 +0100 <dminuoso> [exa]: to be fair, the map *could* be trie backed
2020-11-25 14:02:05 +0100 <dminuoso> That's sort of what we have in haskell
2020-11-25 14:02:36 +0100 <dminuoso> (well containers uses balanced binary tries)
2020-11-25 14:02:51 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 14:02:53 +0100texasmynsted(~texasmyns@212.102.45.112)
2020-11-25 14:03:00 +0100 <merijn> dminuoso: C++'s std::map is a balanced binary tree
2020-11-25 14:03:33 +0100 <merijn> dminuoso: There's no such thing as a "binary trie" (well, I suppose if you have like, lists of boolean as input? >.>)
2020-11-25 14:03:38 +0100gentauro(~gentauro@unaffiliated/gentauro) (Quit: leaving)
2020-11-25 14:03:56 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 240 seconds)
2020-11-25 14:04:05 +0100 <dminuoso> oh that was a typo sorry
2020-11-25 14:04:17 +0100 <merijn> Anyhoo, speaking of trees
2020-11-25 14:05:14 +0100texasmynsted(~texasmyns@212.102.45.112) (Read error: Connection reset by peer)
2020-11-25 14:05:26 +0100texasmynsted(~texasmyns@212.102.45.112)
2020-11-25 14:05:50 +0100 <merijn> Suppose I have one a represenation of a tree that's efficient, but inconvenient to program against and wanna expose it as a regular ADT (which is easy to program with), anyone every do something like that? I feel like pattern synonyms should work, but not entirely sure how >.>
2020-11-25 14:07:18 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-11-25 14:07:55 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-25 14:08:44 +0100Guest_10(1f028586@31.2.133.134)
2020-11-25 14:09:37 +0100 <Guest_10> hi
2020-11-25 14:10:04 +0100Guest_10(1f028586@31.2.133.134) (Remote host closed the connection)
2020-11-25 14:10:50 +0100AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl)
2020-11-25 14:11:06 +0100 <dminuoso> merijn: write the iso by hand?
2020-11-25 14:11:11 +0100 <dminuoso> two functions, done
2020-11-25 14:11:26 +0100 <dminuoso> (you'd want one for testing anyway)
2020-11-25 14:11:28 +0100 <merijn> dminuoso: I don't wanna reify the ADT
2020-11-25 14:12:05 +0100 <ski> (you want some kind of slices ?)
2020-11-25 14:12:10 +0100 <merijn> I just wanna program against the ADT representation like I've directly snorted a Ryan Newton talk :p
2020-11-25 14:12:44 +0100knupfer(~Thunderbi@200116b82ca96500a0407cfffebb5266.dip.versatel-1u1.de)
2020-11-25 14:13:23 +0100knupfer(~Thunderbi@200116b82ca96500a0407cfffebb5266.dip.versatel-1u1.de) (Remote host closed the connection)
2020-11-25 14:13:36 +0100knupfer(~Thunderbi@200116b82ca965000d9a6def15a910ad.dip.versatel-1u1.de)
2020-11-25 14:14:20 +0100 <tomsmeding> first write projection functions (for use in view patterns) and smart constructors, incrementally rewrite your program using them, developing the correct vocabulary along the way, and finally distill the result in some pattern synonyms?
2020-11-25 14:14:31 +0100 <merijn> See 1 hour and 7 minutes into this talk: https://www.youtube.com/watch?v=lC5UWG5N8oY
2020-11-25 14:14:55 +0100ski. o O ( <https://downloads.haskell.org/~ghc/latest/docs/html/libraries/ghc-compact-0.1.0.0/GHC-Compact.html> )
2020-11-25 14:15:32 +0100 <merijn> ski: That's somewhat related, yes and in fact part of the talk I linked ;)
2020-11-25 14:17:04 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 14:18:11 +0100sh9(~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8)
2020-11-25 14:18:36 +0100Jonkimi727406120(~Jonkimi@113.87.161.66) (Ping timeout: 272 seconds)
2020-11-25 14:18:41 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 14:19:01 +0100kindaro(5cf52cdd@h92-245-44-221.dyn.bashtel.ru)
2020-11-25 14:19:08 +0100son0p(~son0p@181.136.122.143)
2020-11-25 14:20:12 +0100 <kindaro> When I run `cabal build` and then `cabal install --installdir=./deployment --install-method=copy --overwrite-policy=always`, it appears that the same build work is performed twice. How can I only build once and copy the executable to the designated place?
2020-11-25 14:20:24 +0100FreeBirdLjj(~freebirdl@101.228.42.108)
2020-11-25 14:21:05 +0100Bergle_2(~Bergle_4@101.165.90.119) (Remote host closed the connection)
2020-11-25 14:21:25 +0100 <kindaro> Currently, `cabal install …` is taking the amount of time very near to that of `cabal build`, and also looking at `ps -o command` shows that `ghc` is being invoked.
2020-11-25 14:21:25 +0100Bergle_2(~Bergle_4@101.165.90.119)
2020-11-25 14:21:28 +0100Er(5fa448e7@95.164.72.231)
2020-11-25 14:22:07 +0100gentauro(~gentauro@unaffiliated/gentauro)
2020-11-25 14:23:31 +0100 <merijn> Currently the way you can only build once and copy is to, well, skip running cabal build first? :p
2020-11-25 14:23:43 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it)
2020-11-25 14:24:09 +0100 <kindaro> It is not acceptable because I need to acquire the exit status of `cabal build` and `cabal test` before I deploy.
2020-11-25 14:24:24 +0100 <merijn> There are a bunch of obscure reasons why install rebuilds everything from a clean slate. Some practical, and some due to lack of engineering effort to reduce this
2020-11-25 14:25:08 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it) (Client Quit)
2020-11-25 14:25:16 +0100 <kindaro> Unfortunate! Can I find out where `cabal build` stores the executable so I may copy it by hand?
2020-11-25 14:25:54 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Remote host closed the connection)
2020-11-25 14:26:08 +0100 <merijn> Latest alpha release of cabal-install has list-bins, if you use an older version there's
2020-11-25 14:26:12 +0100 <merijn> @hackage cabal-plan
2020-11-25 14:26:12 +0100 <lambdabot> https://hackage.haskell.org/package/cabal-plan
2020-11-25 14:26:14 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 14:26:15 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-25 14:26:36 +0100 <merijn> kindaro: Note that copying by hand can get you in trouble if you use, e.g., data-files
2020-11-25 14:26:43 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it)
2020-11-25 14:27:07 +0100Tario(~Tario@201.192.165.173)
2020-11-25 14:27:09 +0100Er(5fa448e7@95.164.72.231) (Ping timeout: 245 seconds)
2020-11-25 14:28:15 +0100kindaro(5cf52cdd@h92-245-44-221.dyn.bashtel.ru) (Remote host closed the connection)
2020-11-25 14:28:33 +0100Boomerang_(~Boomerang@xd520f68c.cust.hiper.dk)
2020-11-25 14:30:23 +0100 <dminuoso> merijn: What's the protocol for that?
2020-11-25 14:30:48 +0100 <dminuoso> Is there some release command planned, that would give me a tarball with build artifacts in the correct directory structure?
2020-11-25 14:31:00 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk) (Ping timeout: 256 seconds)
2020-11-25 14:31:12 +0100 <dminuoso> Or.. can you override getDataFileName?
2020-11-25 14:31:35 +0100 <dminuoso> Guess I could just write my own Paths_foo module
2020-11-25 14:32:07 +0100 <merijn> dminuoso: When you run install you can control where they get put via flags, which will set getDataFileName, etc. as needed
2020-11-25 14:32:18 +0100kindaro(5cf52cdd@h92-245-44-221.dyn.bashtel.ru)
2020-11-25 14:32:23 +0100adm(~adm@43.229.88.197)
2020-11-25 14:32:25 +0100 <dminuoso> mmm j
2020-11-25 14:32:27 +0100 <merijn> dminuoso: I wanna work on proper prefix-independence
2020-11-25 14:32:36 +0100supercoven(~Supercove@dsl-hkibng31-54fabf-192.dhcp.inet.fi) (Ping timeout: 240 seconds)
2020-11-25 14:32:41 +0100 <merijn> at some unspecified moment where I have time, energy, and motivation
2020-11-25 14:32:48 +0100 <merijn> So...probably somewhere in the next 3 years :p
2020-11-25 14:33:03 +0100 <kindaro> merijn, thank you for explanations. Is there a ticket somewhere tracking those obscure reasons?
2020-11-25 14:33:03 +0100hseg(~gesh@IGLD-84-228-238-117.inter.net.il)
2020-11-25 14:33:11 +0100 <hseg> where did mtimes vanish to?
2020-11-25 14:33:40 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 14:34:04 +0100 <dminuoso> % :t stimes
2020-11-25 14:34:04 +0100 <yahb> dminuoso: forall {a} {b}. (Semigroup a, Integral b) => b -> a -> a
2020-11-25 14:34:06 +0100 <dminuoso> This?
2020-11-25 14:34:10 +0100 <hseg> or has it been deprecated in favour of stimes?
2020-11-25 14:34:13 +0100 <hseg> :t mtimes
2020-11-25 14:34:15 +0100 <lambdabot> error: Variable not in scope: mtimes
2020-11-25 14:34:24 +0100 <Uniaika> there's Data.Semigroup mtimesDefault :: (Integral b, Monoid a) => b -> a -> a
2020-11-25 14:34:30 +0100 <hseg> mtimes :: (Monoid a, Integral b) => b -> a -> a
2020-11-25 14:35:31 +0100 <merijn> kindaro: basically, I think install *always* builds from "first do sdist, then build from there" to ensure the package description is sane, I couldn't quickly find a ticket
2020-11-25 14:35:35 +0100 <hseg> right. and stimesMonoid :: (Integral b, Monoid a) => b -> a -> a is even better, using exponent halving
2020-11-25 14:35:47 +0100 <dminuoso> hseg: I dont see a way mtimes and stimes could differ, it would lead to incoherence.
2020-11-25 14:35:54 +0100brisbin(~patrick@pool-173-49-158-4.phlapa.fios.verizon.net)
2020-11-25 14:36:02 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Excess Flood)
2020-11-25 14:36:04 +0100 <dminuoso> The mtimes bit is odd, did it ever exist?
2020-11-25 14:36:09 +0100adm(~adm@43.229.88.197)
2020-11-25 14:36:45 +0100 <dminuoso> https://www.google.com/search?client=firefox-b-d&q=haskell+ghc+mtimes&nfpr=1&sa=X&ved=2ahUKEwiKrtW… this suggests it only ever occured in proposals
2020-11-25 14:36:46 +0100 <hseg> only difference in whether 0 input should error
2020-11-25 14:36:55 +0100 <hseg> https://gitlab.haskell.org/ghc/ghc/-/wikis/proposal/semigroup-monoid
2020-11-25 14:37:01 +0100 <ezzieyguywuf> hrm, "[a] -> [b] -> Map a b", seems like a common enough need, i.e. "zip to Map", but I don't see anything like this in hoogle.
2020-11-25 14:37:06 +0100 <dminuoso> And I cant find it in the git history of GHC
2020-11-25 14:37:07 +0100 <ezzieyguywuf> is there a good reason why it doesn't exist?
2020-11-25 14:37:13 +0100 <hseg> ah. have been reading too many propsals then
2020-11-25 14:37:17 +0100 <dminuoso> % :t zip
2020-11-25 14:37:17 +0100 <yahb> dminuoso: ; <interactive>:1:1: error:; Ambiguous occurrence `zip'; It could refer to; either `Data.List.NonEmpty.zip', imported from `Data.List.NonEmpty'; or `Prelude.zip', imported from `Prelude' (and originally defined in `GHC.List')
2020-11-25 14:37:20 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 14:37:22 +0100 <tomsmeding> ezzieyguywuf: (Map.fromList .) . zip
2020-11-25 14:37:25 +0100 <dminuoso> % :t Prelude.zip
2020-11-25 14:37:26 +0100 <yahb> dminuoso: forall {a} {b}. [a] -> [b] -> [(a, b)]
2020-11-25 14:37:27 +0100 <hseg> ^
2020-11-25 14:37:30 +0100 <ezzieyguywuf> tomsmeding: nice.
2020-11-25 14:38:14 +0100zaquest(~notzaques@5.128.210.178)
2020-11-25 14:39:00 +0100 <dminuoso> Anyway. Is there an alternative to haskell-src-exts for generating entire haskell modules? In particular I want quasiquoters and ideally support for comments and a pretty printer..
2020-11-25 14:39:10 +0100 <ezzieyguywuf> tomsmeding: why are the parentheses needed in that expresion?
2020-11-25 14:39:19 +0100 <ezzieyguywuf> how is it different from Map.fromList . zip?
2020-11-25 14:39:27 +0100 <hseg> :t Map.fromList . zip
2020-11-25 14:39:27 +0100 <dminuoso> ezzieyguywuf: take a look at the number of arugments to zip
2020-11-25 14:39:28 +0100 <lambdabot> error:
2020-11-25 14:39:28 +0100 <lambdabot> Not in scope: ‘Map.fromList’
2020-11-25 14:39:28 +0100 <lambdabot> Perhaps you meant one of these:
2020-11-25 14:39:32 +0100 <hseg> :t Data.Map.fromList . zip
2020-11-25 14:39:34 +0100 <lambdabot> error:
2020-11-25 14:39:34 +0100 <lambdabot> • Couldn't match type ‘[b0] -> [(a, b0)]’ with ‘[(k, a1)]’
2020-11-25 14:39:34 +0100 <lambdabot> Expected type: [a] -> [(k, a1)]
2020-11-25 14:39:34 +0100 <kindaro> merijn: so, why does `cabal build` skip `sdist` then?
2020-11-25 14:39:36 +0100sh9(~sh9@softbank060116136158.bbtec.net)
2020-11-25 14:40:02 +0100 <dminuoso> ezzieyguywuf: `(f .) . g` is just very dense for composing `f` after the second argument of `g`
2020-11-25 14:40:46 +0100 <ezzieyguywuf> dminuoso: what would be a non-dense way of writing it? i see that zip takes two arguments but I guess I didn't realize that `(.)` was limited to one-operator stuff
2020-11-25 14:40:55 +0100 <dminuoso> % :t let (.:) = (.) . (.) in Data.Map.Strict.fromList .: Prelude.zip
2020-11-25 14:40:56 +0100 <yahb> dminuoso: forall {k} {a}. Ord k => [k] -> [a] -> M.Map k a
2020-11-25 14:40:58 +0100 <dminuoso> This is a slightly more readable way
2020-11-25 14:41:15 +0100 <dminuoso> Or you just use lambdas, parens
2020-11-25 14:41:18 +0100 <dminuoso> extra binding
2020-11-25 14:42:41 +0100 <maerwald> is there a way in hspec to mark a test as flaky and still have it run, but when it fails just print a warning and not error?
2020-11-25 14:43:37 +0100fendor_(~fendor@178.165.131.166.wireless.dyn.drei.com)
2020-11-25 14:44:37 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 264 seconds)
2020-11-25 14:46:28 +0100fendor(~fendor@178.165.130.67.wireless.dyn.drei.com) (Ping timeout: 272 seconds)
2020-11-25 14:46:40 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 14:46:50 +0100 <ezzieyguywuf> maerwald: I've used pending before, but haven't tried having a potentially failing test run but keep going.
2020-11-25 14:47:01 +0100 <ezzieyguywuf> maerwald: I guess you could add a check to the end of your test, and flip to True if needed?
2020-11-25 14:47:38 +0100 <maerwald> Well, that doesn't give me a warning
2020-11-25 14:48:37 +0100 <maerwald> https://github.com/hspec/hspec/issues/372
2020-11-25 14:49:26 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 14:49:52 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 14:50:47 +0100FreeBirdLjj(~freebirdl@101.228.42.108) (Remote host closed the connection)
2020-11-25 14:50:55 +0100 <tomsmeding> ezzieyguywuf: (.) :: (b -> c) -> (a -> b) -> (a -> c); it's composition of single-argument functions
2020-11-25 14:52:10 +0100FreeBirdLjj(~freebirdl@101.228.42.108)
2020-11-25 14:52:18 +0100 <tomsmeding> ((f .) . g) a b = (\x -> (f .) (g x)) a b = ((f .) (g a)) b = (f . g a) b = (\x -> f (g a x)) b = f (g a b)
2020-11-25 14:52:30 +0100hackagehspec-hashable 0.1.0.1 - Initial project template from stack https://hackage.haskell.org/package/hspec-hashable-0.1.0.1 (mchaver)
2020-11-25 14:52:32 +0100 <tomsmeding> you can work it out by hand :)
2020-11-25 14:52:51 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-25 14:53:32 +0100robotadam1(~robotadam@s91904426.blix.com) (Remote host closed the connection)
2020-11-25 14:53:58 +0100f-a(~f-a@151.68.213.48)
2020-11-25 14:54:44 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
2020-11-25 14:55:28 +0100urodna(~urodna@unaffiliated/urodna)
2020-11-25 14:56:51 +0100 <tomsmeding> ezzieyguywuf: another way to see the same thing: for (.) we have the property that (f . g) x = f (g x), so that means that ((f .) . g) a b = (((f .) . g) a) b = ... you can work it out :)
2020-11-25 14:56:56 +0100kindaro(5cf52cdd@h92-245-44-221.dyn.bashtel.ru) (Remote host closed the connection)
2020-11-25 14:58:16 +0100 <ezzieyguywuf> tomsmeding: lol, thank you.
2020-11-25 14:58:17 +0100 <dminuoso> To me, it's just an idiom that I know what it does without knowing why
2020-11-25 14:58:25 +0100 <dminuoso> I know I can do what tomsmeding did by hand too, just never bothered to
2020-11-25 14:58:39 +0100 <tomsmeding> at this point it's also an idiom I know :p
2020-11-25 14:58:52 +0100 <tomsmeding> I worked it out the first time I saw it though, because I was seriously confused back then
2020-11-25 14:58:58 +0100 <dminuoso> Heh. I prefer f .: g over (f .) . g though
2020-11-25 14:58:59 +0100 <ezzieyguywuf> if `test = [["abc", "def"], ["123", "456"]]` why does `[ header : body ] = test` result in a non-exhaustive pattern error?
2020-11-25 14:59:13 +0100 <tomsmeding> (header : body) = test
2020-11-25 14:59:38 +0100 <hseg> wait, Monad can no longer be defined in terms of join?
2020-11-25 14:59:48 +0100 <dminuoso> correct
2020-11-25 14:59:57 +0100 <hseg> :(
2020-11-25 15:00:02 +0100 <dminuoso> it caused segfaults left and right because of GeneralizedNewtypeDeriving
2020-11-25 15:00:08 +0100f-a(~f-a@151.68.213.48) ()
2020-11-25 15:00:13 +0100 <dminuoso> well okay only on the left side of things
2020-11-25 15:00:16 +0100 <ezzieyguywuf> hrm,I think this is a function in Data.List actually...
2020-11-25 15:00:37 +0100 <dminuoso> hseg: https://ryanglscott.github.io/2018/03/04/how-quantifiedconstraints-can-let-us-put-join-back-in-mon…
2020-11-25 15:01:02 +0100 <dminuoso> It's a pretty wild story, at first it seemed so unlikely how join in Monad could cause segfaults with GeneralizedNewtypeDeriving
2020-11-25 15:01:23 +0100honigkuchen(~honigkuch@ip5b42981b.dynamic.kabel-deutschland.de)
2020-11-25 15:01:36 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-25 15:01:38 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz)
2020-11-25 15:01:43 +0100 <hseg> ok, thanks
2020-11-25 15:01:57 +0100 <honigkuchen> are there particular broader tasks in that functional programming languages or paradigms are better?
2020-11-25 15:02:23 +0100 <honigkuchen> instead of answering a link can also help
2020-11-25 15:02:57 +0100 <tdammers> bit of a vague question - to begin with, there isn't really a narrow definition of "functional programming" that enjoys a wide consensus
2020-11-25 15:03:29 +0100 <honigkuchen> tdammers, is that an answer to me?
2020-11-25 15:03:32 +0100 <tdammers> yes
2020-11-25 15:03:53 +0100 <honigkuchen> tdammers, I do not care about an exact definination what functional programming is
2020-11-25 15:04:23 +0100 <tdammers> OK, but if you look at languages that are sometimes labelled as "functional", there is quite some difference in where they shine
2020-11-25 15:04:25 +0100 <Digit> tomsmeding: no ghcup. am using different bedrocklinux strata for different ghc versions.
2020-11-25 15:04:31 +0100hackageukrainian-phonetics-basic 0.3.1.0 - A library to work with the basic Ukrainian phonetics and syllable segmentation. https://hackage.haskell.org/package/ukrainian-phonetics-basic-0.3.1.0 (OleksandrZhabenko)
2020-11-25 15:05:28 +0100 <tdammers> for example, scheme makes for a great scripting language, but lacks the type discipline you want in situations where you need a high degree of certainty about the code's properties, which in turn is something Haskell is good at
2020-11-25 15:06:01 +0100 <honigkuchen> tdammers, lets forget all these others and only take haskell
2020-11-25 15:06:30 +0100coot_(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl)
2020-11-25 15:06:38 +0100 <maerwald> no :p
2020-11-25 15:06:45 +0100 <Digit> honigkuchen: wouldnt that be nice. :) lisps linger long though. n_n
2020-11-25 15:07:00 +0100hackagevulkan-utils 0.3 - Utils for the vulkan package https://hackage.haskell.org/package/vulkan-utils-0.3 (jophish)
2020-11-25 15:07:03 +0100 <honigkuchen> may it be that certain tasks are better for imperative languages and others are better for haskell
2020-11-25 15:07:25 +0100Kaivo(~Kaivo@ec2-15-222-231-32.ca-central-1.compute.amazonaws.com) (Ping timeout: 240 seconds)
2020-11-25 15:07:41 +0100 <tdammers> haskell *is* an imperative language /me runs away
2020-11-25 15:07:41 +0100hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net)
2020-11-25 15:07:43 +0100 <maerwald> at this point, I barely care about language paradigms anymore. The problem is that ADTs are still not a standard for all languages
2020-11-25 15:07:54 +0100lassulus(~lassulus@NixOS/user/lassulus) (Ping timeout: 256 seconds)
2020-11-25 15:08:00 +0100 <tdammers> anyway, if you want to know what haskell is good at, look at where it's used
2020-11-25 15:08:01 +0100hackagevulkan 3.7, VulkanMemoryAllocator 0.3.10 (jophish): https://qbin.io/feof-nathan-jj0i
2020-11-25 15:08:09 +0100elliott__(~elliott@pool-108-51-141-12.washdc.fios.verizon.net)
2020-11-25 15:08:16 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 240 seconds)
2020-11-25 15:08:16 +0100coot_coot
2020-11-25 15:08:21 +0100 <maerwald> I'd pick any language that has a reasonable ecosystem and ADTs
2020-11-25 15:08:25 +0100 <maerwald> the rest is details
2020-11-25 15:09:15 +0100 <honigkuchen> abstract data type?
2020-11-25 15:09:19 +0100 <maerwald> algebraic
2020-11-25 15:09:22 +0100 <honigkuchen> ah
2020-11-25 15:09:35 +0100 <tdammers> fintech, insurance, military, intelligence, economics, spam filtering, compiler research... generally, problem domains with a high degree of intrinsic complexity and a strong desire for static reasoning
2020-11-25 15:10:11 +0100 <maerwald> fintech is more like high-speed anarchy, where haskell shines, because it's harder to constantly break your codebase
2020-11-25 15:10:12 +0100Kaivo(~Kaivo@104-200-86-99.mc.derytele.com)
2020-11-25 15:10:37 +0100 <tdammers> I think HFT is a domain where C++ still rules
2020-11-25 15:10:42 +0100 <honigkuchen> what is intrinsic complexity
2020-11-25 15:10:45 +0100 <n0042> Haskell has been kind of a learning curve coming from a mostly C background, but it's quickly become one of my favorite languages to use.
2020-11-25 15:10:48 +0100 <maerwald> if there's something worse than agile, it's fintech :p
2020-11-25 15:11:08 +0100 <tdammers> intrinsic complexity is complexity that is inherent to the problem itself, rather than being introduced by the mechanics of the tools you use to solve it
2020-11-25 15:11:22 +0100 <maerwald> as opposed to accidential complexity
2020-11-25 15:11:26 +0100 <tdammers> yes
2020-11-25 15:11:32 +0100 <maerwald> there's papers and blog posts about this distinction
2020-11-25 15:11:49 +0100 <honigkuchen> agile is a way of leading your team and fintech is a industry branch? how to compare those?
2020-11-25 15:12:35 +0100 <ski> @quote is.the.world's.best
2020-11-25 15:12:35 +0100 <lambdabot> SPJ says: Haskell is the world's best imperative language.
2020-11-25 15:12:39 +0100 <honigkuchen> so a calculator has intrinsic complexity
2020-11-25 15:12:41 +0100 <maerwald> honigkuchen: I'm just talking about my PTSD
2020-11-25 15:12:57 +0100lassulus(~lassulus@NixOS/user/lassulus)
2020-11-25 15:13:05 +0100 <honigkuchen> but an editor maybe not
2020-11-25 15:13:05 +0100 <ski> maerwald : "The problem is that ADTs are still not a standard for all languages" -- it seems some other more mainstream languages are slowly gaining them
2020-11-25 15:13:41 +0100 <honigkuchen> https://en.wikipedia.org/wiki/PTSD_(disambiguation)
2020-11-25 15:13:45 +0100 <yushyin> e.g. java
2020-11-25 15:13:47 +0100 <tdammers> like, suppose you're writing a scheduling application for a logistics company. the routing and scheduling algorithms are fairly complex; no matter which language or tools you use, the problem will remain a complex one. that's the intrinsic complexity of the problem domain. now you build a frontend for that application, but the framework you pick doesn't quite get you the design you want, so you add all sorts
2020-11-25 15:13:50 +0100 <tdammers> of quirks and workarounds to make it look like you want, and then more kludges to cover the edge cases that arise from that. that's accidental complexity.
2020-11-25 15:14:12 +0100 <honigkuchen> ADTs seem to be cool and interesting, but what practical about them
2020-11-25 15:14:26 +0100 <tdammers> in fact, centering things on a screen in HTML/CSS is a textbook example of accidental complexity
2020-11-25 15:14:41 +0100 <n0042> Yay geometry
2020-11-25 15:15:08 +0100 <tdammers> top = (screen.h - element.h) / 2
2020-11-25 15:15:13 +0100 <tdammers> that's all the complexity there is
2020-11-25 15:15:37 +0100 <tdammers> but if you want to do it with CSS, it becomes A LOT more complex. that's all accidental complexity
2020-11-25 15:15:38 +0100pjb(~t@2a01cb04063ec500710c4d3951adc2aa.ipv6.abo.wanadoo.fr) (Ping timeout: 264 seconds)
2020-11-25 15:15:40 +0100 <maerwald> Depending on the problem, the Haskell itself can also be accidential complexity.
2020-11-25 15:15:49 +0100 <tdammers> oh yes, very much
2020-11-25 15:16:26 +0100 <tdammers> for example, when you need deterministic memory allocations - Haskell makes that really difficult, even though the problem itself is not intrinsically complex (call malloc() to get a chunk of memory, and free() to release it)
2020-11-25 15:16:50 +0100 <maerwald> StrictData and pray the leaks go away
2020-11-25 15:17:40 +0100 <tdammers> StrictData doesn't guarantee deterministic deallocation
2020-11-25 15:17:59 +0100 <maerwald> yeah
2020-11-25 15:18:01 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Remote host closed the connection)
2020-11-25 15:18:07 +0100 <maerwald> so you pray
2020-11-25 15:18:09 +0100 <maerwald> :D
2020-11-25 15:18:16 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 15:18:54 +0100 <n0042> I have been having a heck of a time coming around to the way Haskell does I/O, but the rest of the language is so nice that it's made it worth the effort. It's complex but I get why it's complex.
2020-11-25 15:18:58 +0100hseg(~gesh@IGLD-84-228-238-117.inter.net.il) (Ping timeout: 246 seconds)
2020-11-25 15:19:10 +0100 <honigkuchen> is there one great example of a very special particular task, in that haskell code is hugely much faster written, than an imperative code
2020-11-25 15:20:00 +0100adm(~adm@43.229.88.197)
2020-11-25 15:20:10 +0100 <maerwald> honigkuchen: yeah, quicksort, except it doesn't have the same properties :P
2020-11-25 15:20:22 +0100 <honigkuchen> great
2020-11-25 15:20:31 +0100 <n0042> Most of the benefits are about safety rather than speed, right?
2020-11-25 15:20:43 +0100 <merijn> honigkuchen: My summary is: Getting started writing a simple project in Haskell is probably about 1.5-2x harder the same in Python. Writing a complex project in Haskell is about 10-100x easier than in Python :)
2020-11-25 15:20:56 +0100 <maerwald> that's about right
2020-11-25 15:21:12 +0100 <merijn> n0042: tbh, "just putting IO everywhere" is still nicer than many other languages :p
2020-11-25 15:21:20 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 15:21:24 +0100 <maerwald> if you don't intend to maintain your code much, picking haskell is a weird choice
2020-11-25 15:21:40 +0100 <maerwald> that's where it becomes useful
2020-11-25 15:21:48 +0100 <merijn> n0042: Haskell is also much faster than Python/Ruby/PHP, tbh
2020-11-25 15:22:14 +0100 <merijn> n0042: JS might be comparable, but only because google has thrown tens of thousands of man-years at V8 :p
2020-11-25 15:22:26 +0100 <merijn> And even then only if you write careful JS
2020-11-25 15:22:28 +0100 <honigkuchen> has haskell also an interpreter
2020-11-25 15:22:32 +0100 <honigkuchen> or only an compiler
2020-11-25 15:22:40 +0100 <maerwald> but these days ppl have different approaches with dealing with complexity... they see the language is too dumb to handle large codebases, so they think: let's split the code and do microservices
2020-11-25 15:22:44 +0100 <n0042> It has an interpreter
2020-11-25 15:22:52 +0100 <n0042> GHCi
2020-11-25 15:22:53 +0100 <maerwald> I haven't really seen microservices in haskell, because what's the point
2020-11-25 15:22:58 +0100 <honigkuchen> so it is both?
2020-11-25 15:23:09 +0100 <merijn> honigkuchen: GHC comes with ghci which is a interpreter. It's not really great for writing code in, but you can quickly load and play with small code examples
2020-11-25 15:23:36 +0100 <merijn> n0042: What difficulties have you been having with IO, btw?
2020-11-25 15:23:49 +0100da39a3ee5e6b4b0d(~da39a3ee5@171.5.161.165) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-25 15:23:56 +0100 <honigkuchen> there are not much programs that its languages comes with both, interpreter and compiler, right?
2020-11-25 15:24:17 +0100 <merijn> Well, someone wrote a C and C++ interpreter too, so... :p
2020-11-25 15:24:45 +0100 <n0042> honigkuchen: Many languages are not so black and white. Python is an interpreted language but it keeps compiled versions of what you write so that ti can be run faster next time (.pyc files)
2020-11-25 15:25:13 +0100 <maerwald> writing fast python code is definitely possible, but requires crazy knowledge of the internals
2020-11-25 15:25:30 +0100 <maerwald> And the code afterwards isn't really intuitive stuff
2020-11-25 15:25:38 +0100 <n0042> Similarly, GHCi seems to pre-compile files that you load with `:l` even though it interprets what you write into the REPL
2020-11-25 15:26:05 +0100hseg(~gesh@IGLD-84-228-238-117.inter.net.il)
2020-11-25 15:26:10 +0100 <merijn> n0042: It compiles to bytecode, not full compilation
2020-11-25 15:26:21 +0100 <merijn> n0042: (which it also does for what you write in the REPL)
2020-11-25 15:26:26 +0100 <n0042> That makes sense
2020-11-25 15:26:28 +0100c0c0(~coco@212-51-146-87.fiber7.init7.net)
2020-11-25 15:26:37 +0100 <honigkuchen> you all always compare haskell always with python, but I never told that I use python most, and I do
2020-11-25 15:27:05 +0100 <merijn> honigkuchen: It's one of the most common languages (together with JS), but I don't know JS :p
2020-11-25 15:27:06 +0100 <maerwald> https://github.com/pkgcore/pkgcore is an example of a non-trivial optimised python application
2020-11-25 15:27:25 +0100 <maerwald> so yes, you can do large projects in python too
2020-11-25 15:27:56 +0100 <maerwald> but requires much more discipline
2020-11-25 15:28:01 +0100 <tdammers> something being possible at all in a language is hardly an interesting metric, because pretty much anything can be done in any general-purpose language if you're thick-headed enough
2020-11-25 15:28:05 +0100f-a(~f-a@151.68.209.164)
2020-11-25 15:28:05 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Excess Flood)
2020-11-25 15:28:15 +0100 <maerwald> tdammers: aren't we? =)
2020-11-25 15:28:28 +0100 <honigkuchen> is there a reason that specifically fits to quicksort, why haskell is here "better" or whatsoever
2020-11-25 15:28:42 +0100 <tdammers> haskell isn't better at implementing quicksort
2020-11-25 15:28:50 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 15:28:51 +0100 <maerwald> honigkuchen: https://augustss.blogspot.com/2007/08/quicksort-in-haskell-quicksort-is.html
2020-11-25 15:29:07 +0100 <tdammers> the famous "quicksort but not quite actually" example is used to demonstrate the elegance of the language
2020-11-25 15:29:16 +0100elliott__(~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2020-11-25 15:29:22 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 15:30:05 +0100supercoven(~Supercove@196.244.192.58)
2020-11-25 15:30:06 +0100supercoven(~Supercove@196.244.192.58) (Max SendQ exceeded)
2020-11-25 15:30:20 +0100 <n0042> merijn: The I/O difficulties I've been having are mostly just getting the hang of the syntax. I've been doing some assignments in Haskell that require using arrays, and the difference in syntax between ones that have to be treated like Monad-like objects and ones that don't is kind of a learning curve.
2020-11-25 15:30:20 +0100supercoven(~Supercove@196.244.192.58)
2020-11-25 15:30:21 +0100supercoven(~Supercove@196.244.192.58) (Max SendQ exceeded)
2020-11-25 15:30:35 +0100supercoven(~Supercove@196.244.192.58)
2020-11-25 15:30:36 +0100supercoven(~Supercove@196.244.192.58) (Max SendQ exceeded)
2020-11-25 15:30:50 +0100supercoven(~Supercove@196.244.192.58)
2020-11-25 15:30:51 +0100supercoven(~Supercove@196.244.192.58) (Max SendQ exceeded)
2020-11-25 15:30:52 +0100 <n0042> I've been messing with immutable arrays, mutable arrays, and vectors to make my stuff meet the speed requirements (which are contrived and strict)
2020-11-25 15:31:05 +0100supercoven(~Supercove@196.244.192.58)
2020-11-25 15:31:06 +0100supercoven(~Supercove@196.244.192.58) (Max SendQ exceeded)
2020-11-25 15:31:08 +0100 <merijn> n0042: ah, yeah, that can be a bit tricky
2020-11-25 15:31:11 +0100 <n0042> And it has been pretty fun. Haskell is a really fun language. Glad I took the plunge
2020-11-25 15:31:52 +0100 <honigkuchen> can it make sense to combine python and haskell in one program ?
2020-11-25 15:32:03 +0100f-a(~f-a@151.68.209.164) ()
2020-11-25 15:32:32 +0100 <maerwald> python is used in GHC for the tests :p
2020-11-25 15:32:35 +0100 <maerwald> does that count?
2020-11-25 15:32:36 +0100 <n0042> Python is a great "glue" language (I use it for stuff instead of Bash all the time). So I could see myself writing a program in Haskell and then calling it from within a Python script.
2020-11-25 15:32:52 +0100 <merijn> n0042: tbh, I now consider Haskell a much better glue language :p
2020-11-25 15:33:05 +0100 <LKoen> honigkuchen: https://github.com/jacquev6/Polyglot
2020-11-25 15:33:09 +0100 <merijn> n0042: It's incredibly easy to call C code from Haskell
2020-11-25 15:33:35 +0100 <tdammers> merijn: until that C code isn't reentrant, or takes callbacks, or involves variadic arguments
2020-11-25 15:33:45 +0100 <LKoen> I once run into someone's code who used a makefile written in R, with code in C, C++, R and python
2020-11-25 15:33:46 +0100 <merijn> tdammers: Yeah, but that's difficult in C too :p
2020-11-25 15:33:48 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-25 15:33:58 +0100 <merijn> tdammers: tbh, even the callback one is easy
2020-11-25 15:34:06 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-tripsbcbodayyxwv) (Quit: Connection closed for inactivity)
2020-11-25 15:34:25 +0100 <merijn> Lack of reentrancy is hard, but also problematic in C and variadic arguments can't be used portably anyway, even within C :)
2020-11-25 15:34:59 +0100 <merijn> tdammers: So at worst it's "no harder than using C from C" :p
2020-11-25 15:35:09 +0100 <merijn> (which can, admittedly, be pretty hard)
2020-11-25 15:35:45 +0100gproto23(~gproto23@unaffiliated/gproto23) (Ping timeout: 240 seconds)
2020-11-25 15:35:47 +0100 <n0042> I love the way `readFile` works in Haskell. That's got to be the easiest way to do that ever.
2020-11-25 15:35:48 +0100 <honigkuchen> lol
2020-11-25 15:35:52 +0100 <merijn> tdammers: Anyway, I was mostly comparing to, say, the insanity of the FFI of python, Java, etc. which are much more convoluted and painful to use
2020-11-25 15:36:01 +0100 <tdammers> no argument there :D
2020-11-25 15:36:09 +0100 <merijn> n0042: Using the one from Prelude that returns String?
2020-11-25 15:36:15 +0100 <n0042> Yeah
2020-11-25 15:36:38 +0100ski. o O ( "Modelling Large Datasets Using Algebraic Datatypes: A Case Study of the CONFMAN Database" by Markus Mottl in 2002-05-15 at <http://www.ofai.at/cgi-bin/get-tr?paper=oefai-tr-2002-27.pdf> )
2020-11-25 15:37:01 +0100 <merijn> n0042: Might wanna use Text for reading textual data: https://hackage.haskell.org/package/text-1.2.4.0/docs/Data-Text-IO.html#v:readFile
2020-11-25 15:37:04 +0100 <gentauro> geekosaur: do you have a multiscreen setup with XMonad?
2020-11-25 15:37:12 +0100 <merijn> (since you said performance matters)
2020-11-25 15:37:19 +0100 <gentauro> more specifically, daisy chaining?
2020-11-25 15:37:49 +0100ski. o O ( "Using Algebraic Datatypes as Uniform Representation for Structured Data" by Markus Mottl in 2003-03-07 at <http://www.ofai.at/cgi-bin/get-tr?paper=oefai-tr-2003-07.pdf>,<http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.5712> )
2020-11-25 15:37:50 +0100 <n0042> merijn: Thank you very much
2020-11-25 15:38:10 +0100 <tdammers> also, there's the caveat that readFile does lazy I/O, and that means the actual reading may happen at surprising times
2020-11-25 15:39:07 +0100 <tdammers> e.g.: do { str <- readFile "foo"; unlink "foo"; putStrLn str } -- this may crash due to trying to read from a deleted file
2020-11-25 15:39:09 +0100Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net)
2020-11-25 15:39:13 +0100darjeeling_(~darjeelin@122.245.219.209) (Ping timeout: 256 seconds)
2020-11-25 15:39:21 +0100 <Boomerang_> I hear Data.Text.IO is not good if you care about locales
2020-11-25 15:39:26 +0100 <Boomerang_> https://www.snoyman.com/series/haskell-bad-parts
2020-11-25 15:42:27 +0100 <gentauro> tdammers: where do you delete the file? `unlink`?
2020-11-25 15:42:32 +0100 <tdammers> yeah
2020-11-25 15:42:53 +0100 <tdammers> although I believe on a typical (Linux) filesystem, you have to actually truncate it for that to crash
2020-11-25 15:43:46 +0100chrpape(~user@2a01:4f9:c010:632d::1) (Quit: ERC (IRC client for Emacs 25.2.2))
2020-11-25 15:43:56 +0100Nahra(~Nahra@unaffiliated/nahra) (Ping timeout: 240 seconds)
2020-11-25 15:44:09 +0100 <n0042> Thanks Boomerang. Lots of information in that article.
2020-11-25 15:44:32 +0100 <n0042> I wasn't aware of some of the pitfalls of `readFile`
2020-11-25 15:44:59 +0100 <gentauro> tdammers: I recall me doing this -> `readFileStrict f = LBS.readFile f >>= \bs -> LBS.length bs `seq` pure bs` :'(
2020-11-25 15:45:20 +0100 <gentauro> a strict version cos Linux complained about having to many files open
2020-11-25 15:46:03 +0100 <merijn> tdammers: Text one doesn't do lazy IO
2020-11-25 15:46:05 +0100 <gentauro> tdammers: how do you write `seq` in do-nation?
2020-11-25 15:46:09 +0100 <tdammers> gentauro: why not just LBS.fromStrict <$> BS.readFile f
2020-11-25 15:46:21 +0100 <tdammers> tdammers: lazy text one does I think
2020-11-25 15:46:44 +0100 <merijn> Boomerang_: eh, that's wrong
2020-11-25 15:46:51 +0100chrpape(~user@2a01:4f9:c010:632d::1)
2020-11-25 15:46:55 +0100 <merijn> Boomerang_: readFile works fine if your locale isn't broken
2020-11-25 15:47:23 +0100 <merijn> Boomerang_: readFileUtf8, etc. are dumb hacks that are broken on machines that are setup correctly
2020-11-25 15:47:31 +0100 <tdammers> readFile does the correct thing: decode raw bytes into Unicode as per the current locale
2020-11-25 15:47:42 +0100 <gentauro> tdammers: I don't think I have a `strict` ByteString
2020-11-25 15:47:46 +0100 <gentauro> LBS is `lazy`
2020-11-25 15:47:50 +0100 <merijn> Boomerang_: They're basically "ignore the local specified encoding and always use utf8", which is bad and anyone doing that should feel bad >.>
2020-11-25 15:48:00 +0100 <tdammers> gentauro: yes, but you can read a strict bytestring and convert it to lazy
2020-11-25 15:48:02 +0100Fractalis(~Fractalis@2601:987:280:8d40:eda9:f9e1:2072:cea7) (Ping timeout: 264 seconds)
2020-11-25 15:48:04 +0100 <gentauro> «fromStrict :: ByteString -> ByteStringO(1) Convert a strict ByteString into a lazy ByteString.»
2020-11-25 15:48:09 +0100 <merijn> n0042: ^^ see above :)
2020-11-25 15:48:21 +0100 <gentauro> tdammers: oh, got it
2020-11-25 15:48:32 +0100 <merijn> gentauro: lazy bytestring is, effectively, just [Strict.ByteString] :p
2020-11-25 15:49:01 +0100 <merijn> (i.e. a lazy list of strict chunks)
2020-11-25 15:49:06 +0100 <tdammers> it's slightly more clever than [ByteString], but yeah, essentially that
2020-11-25 15:49:13 +0100 <gentauro> merijn: yeah, I got that
2020-11-25 15:49:23 +0100 <n0042> Luckily I'm only using it to read predictable input right now, so it works pretty well.
2020-11-25 15:49:50 +0100 <tdammers> anyway, the problem with readFile and locales is when people assume that any file they might possibly want to read from is encoded according to the current locale
2020-11-25 15:50:05 +0100 <tdammers> which is of course often wrong, but just assuming UTF8 isn't any better
2020-11-25 15:50:11 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-25 15:50:30 +0100hackagehaskell-xmpp 2.0.0 - Haskell XMPP (eXtensible Message Passing Protocol, a.k.a. Jabber) library https://hackage.haskell.org/package/haskell-xmpp-2.0.0 (Jappie)
2020-11-25 15:50:33 +0100 <gentauro> tdammers: the only way to be 100% is to read the hole file
2020-11-25 15:50:35 +0100 <merijn> tdammers: Also, people who have badly configured machines with broken locales complaining that they're broken and "fixing" it by breaking it for everyone who *does* have a properly configured locale >.>
2020-11-25 15:51:01 +0100 <Boomerang_> merijn: I guess it depends on the use case but I think more often I would rather it reported an error if it's not UTF-8 than do something weird instead
2020-11-25 15:51:18 +0100 <merijn> Boomerang_: It doesn't do anything weird, though
2020-11-25 15:51:36 +0100 <merijn> Boomerang_: It literallys asks the environment "what is the environment encoding?" and then uses that
2020-11-25 15:52:03 +0100 <merijn> Boomerang_: If you want explicit control over decoding you can either 1) override the encoding for a handle or 2) read a ByteString and explicitly decode it
2020-11-25 15:52:19 +0100darjeeling_(~darjeelin@122.245.217.23)
2020-11-25 15:52:20 +0100 <tdammers> indeed
2020-11-25 15:53:24 +0100 <tdammers> readFileUtf8 is the correct thing to use when you know that the input is UTF8 even when the locale is not
2020-11-25 15:53:36 +0100 <tdammers> but otherwise, readFile does exactly the right thing
2020-11-25 15:55:24 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-25 15:55:53 +0100 <hseg> trying to work through the unifications behind (.) (.) (.)'s type. iirc there was an interactive tool that showed unifications
2020-11-25 15:55:59 +0100 <hseg> can't find it though
2020-11-25 15:56:24 +0100elliott__(~elliott@pool-108-51-141-12.washdc.fios.verizon.net)
2020-11-25 15:56:34 +0100 <merijn> isn't that tool just called Cale and/or ski ;)
2020-11-25 15:56:41 +0100 <hseg> :)
2020-11-25 15:56:56 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 240 seconds)
2020-11-25 15:57:26 +0100skigrins
2020-11-25 15:58:11 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 16:00:13 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-25 16:01:20 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz)
2020-11-25 16:03:30 +0100pjb(~t@2a01cb04063ec50095ae1a5ec1ef6a7a.ipv6.abo.wanadoo.fr)
2020-11-25 16:04:22 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 16:05:17 +0100 <hseg> nm -- this case is most easily understood as fmap.fmap
2020-11-25 16:07:39 +0100 <ski> it's easy to derive the `(.) . (.)' formulation
2020-11-25 16:07:55 +0100 <merijn> hmm, suppose I have mapping from Foo to Bar that requires "Foo -> IO Bar" to lookup, is there some convenient way to memoize that into a Map so repeated lookups only run the IO once?
2020-11-25 16:08:57 +0100 <ski> hm, something like `Ord k => (k -> IO v) -> IO (k -> IO v)' ?
2020-11-25 16:09:26 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
2020-11-25 16:11:16 +0100 <merijn> ski: Something along those lines
2020-11-25 16:13:57 +0100 <ski> @wiki Top level mutable state#Proposal 4: Shared on-demand IO actions .28oneShots.29
2020-11-25 16:13:57 +0100 <lambdabot> https://wiki.haskell.org/Top_level_mutable_state#Proposal_4:_Shared_on-demand_IO_actions_.28oneSho…
2020-11-25 16:14:00 +0100 <ski> @wiki Global keys
2020-11-25 16:14:00 +0100 <lambdabot> https://wiki.haskell.org/Global_keys
2020-11-25 16:14:02 +0100knupfer(~Thunderbi@200116b82ca965000d9a6def15a910ad.dip.versatel-1u1.de) (Remote host closed the connection)
2020-11-25 16:14:18 +0100knupfer(~Thunderbi@200116b82ca9650045472097ac301af6.dip.versatel-1u1.de)
2020-11-25 16:15:36 +0100 <merijn> Those are more ideas than implementation, afaict?
2020-11-25 16:16:16 +0100trcc(~trcc@users-1190.st.net.au.dk) (Ping timeout: 240 seconds)
2020-11-25 16:16:16 +0100 <ski> yes
2020-11-25 16:16:24 +0100 <xe4> I don't see a difference in these toJSON instances: https://gist.github.com/xe-4/27c685e6d22e05251c1a653fec791926 will someone talk to when you might one over the other?
2020-11-25 16:16:44 +0100 <xe4> I meant to say "when you might want one over the other"
2020-11-25 16:18:10 +0100 <siraben> How can I check if something is a substring of a lazy bytestring?
2020-11-25 16:18:19 +0100 <siraben> There's no `isInfixOf` for Data.ByteString.Lazy
2020-11-25 16:19:15 +0100 <kuribas> merijn: put the Map in an IORef?
2020-11-25 16:19:28 +0100 <merijn> kuribas: But I don't have a Map
2020-11-25 16:19:39 +0100 <kuribas> merijn: put an empty Map in the IORef?
2020-11-25 16:19:42 +0100hidedagger(~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9)
2020-11-25 16:20:17 +0100 <merijn> I can wrap an IORef with a Map, but I was hoping someone would've already done the work for me of writing that logic :p
2020-11-25 16:20:48 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-25 16:20:49 +0100 <kuribas> or better, use lazy IO and implement: Ord k => (k -> IO v) -> IO (k -> v)
2020-11-25 16:21:14 +0100 <kuribas> as long as you know the v is determined by k
2020-11-25 16:22:43 +0100st8less(~st8less@2603:a060:11fd:0:e465:6770:e76d:da2a)
2020-11-25 16:22:56 +0100 <kuribas> merijn: I don't know if it exists, but at least it doesn't sound hard to implement.
2020-11-25 16:23:07 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-zpyuyhhkgrlryaog)
2020-11-25 16:23:19 +0100 <siraben> isInfixOf is even commented out in the lazy bytestring source code
2020-11-25 16:23:20 +0100 <siraben> hmm
2020-11-25 16:23:32 +0100 <siraben> Is there no way to do it except convert it to strict then run isInfixOf?
2020-11-25 16:24:14 +0100 <geekosaur> not easily. consider what happens when it crosses chunks. then what happens when it crosses multiple chunks
2020-11-25 16:24:47 +0100 <geekosaur> you basically end up making it strict anyway just to avoid all the corner cases
2020-11-25 16:25:35 +0100 <siraben> Ah, right.
2020-11-25 16:26:15 +0100 <honigkuchen> one of my ex professors was always very enthustiastic about haskell but in a further lecture he proposes that there is a new star at the functional programming languages heaven
2020-11-25 16:26:23 +0100 <honigkuchen> what might he had proposed
2020-11-25 16:26:44 +0100 <honigkuchen> it is already around 6 years past
2020-11-25 16:27:12 +0100PacoV(~pcoves@16.194.31.93.rev.sfr.net)
2020-11-25 16:27:17 +0100 <PacoV> o/
2020-11-25 16:29:01 +0100derek_gorczyn(~derek_gor@96-81-221-14-static.hfc.comcastbusiness.net)
2020-11-25 16:29:27 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz)
2020-11-25 16:29:49 +0100 <honigkuchen> something similar neat complex like haskell to can be entusiastic about
2020-11-25 16:29:55 +0100czwartyeon(~czwartyeo@77-45-55-99.sta.asta-net.com.pl) (Quit: WeeChat 3.0)
2020-11-25 16:30:06 +0100 <honigkuchen> I can not remember
2020-11-25 16:30:08 +0100 <Ferdirand> honigkuchen: Idris maybe ?
2020-11-25 16:30:31 +0100 <honigkuchen> that could it be
2020-11-25 16:30:47 +0100 <honigkuchen> very difficult for me to remember
2020-11-25 16:30:56 +0100 <honigkuchen> he only named it
2020-11-25 16:31:03 +0100 <Ferdirand> or Agda ?
2020-11-25 16:31:09 +0100 <geekosaur> there are a number of languages that can be considered inspired by haskell, each going its own direction with some concept or group of concepts
2020-11-25 16:31:39 +0100kuribas(~user@ptr-25vy0iacghmhtu8v1sd.18120a2.ip6.access.telenet.be) (Read error: Connection reset by peer)
2020-11-25 16:31:51 +0100 <PacoV> Hey, I've a coupe of questions if you have the time. I've this package https://gitlab.com/pcoves/hakyll-contrib-i18n that build just fine with stack but fail miserably with cabal telling it can't find dependencies suchs as pandoc-types. What's up with that? Also, how does one push documentation to hackage?
2020-11-25 16:32:30 +0100hackagehaskell-xmpp 2.0.1 - Haskell XMPP (eXtensible Message Passing Protocol, a.k.a. Jabber) library https://hackage.haskell.org/package/haskell-xmpp-2.0.1 (Jappie)
2020-11-25 16:32:35 +0100 <merijn> PacoV: Can you pastebin the exact error?
2020-11-25 16:33:27 +0100 <honigkuchen> what is cool or better or interesting about Agda or Idris
2020-11-25 16:33:39 +0100 <honigkuchen> and when is haskell better
2020-11-25 16:33:53 +0100 <hekkaidekapus> @hackage stack2cabal -- PacoV
2020-11-25 16:33:53 +0100 <lambdabot> https://hackage.haskell.org/package/stack2cabal -- PacoV
2020-11-25 16:34:08 +0100adm(~adm@43.229.88.197)
2020-11-25 16:35:10 +0100 <geekosaur> honigkuchen, they're both dependently typed. which means they can handle more things than haskell, but you have to carry more proofs around in your programs
2020-11-25 16:35:23 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 16:35:40 +0100 <honigkuchen> what is dependently typing
2020-11-25 16:36:19 +0100 <PacoV> merijn: http://ix.io/2Frk
2020-11-25 16:36:43 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-25 16:36:43 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Client Quit)
2020-11-25 16:36:50 +0100adm(~adm@43.229.88.197)
2020-11-25 16:36:58 +0100 <merijn> PacoV: What version of cabal-install?
2020-11-25 16:37:26 +0100__monty__(~toonn@unaffiliated/toonn)
2020-11-25 16:37:37 +0100 <PacoV> merijn: 3.2.0.0-108
2020-11-25 16:37:53 +0100toorevitimirp(~tooreviti@117.182.183.18) (Remote host closed the connection)
2020-11-25 16:38:03 +0100 <PacoV> hekkaidekapus: I'll have a look, thanks!
2020-11-25 16:38:05 +0100 <merijn> hmm, weird
2020-11-25 16:38:16 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb)
2020-11-25 16:39:04 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
2020-11-25 16:39:07 +0100 <merijn> PacoV: Basically, for some reason it seems to think it *has* to use pandoc-types version (1.22), but another dependency (pandoc-include-code) doesn't support that version
2020-11-25 16:39:08 +0100 <geekosaur> honigkuchen, where a type depends on a value. but now you have to carry around a proof that a value conforms to the type it's being used at
2020-11-25 16:39:29 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2020-11-25 16:39:41 +0100 <maerwald> honigkuchen: F* wasn't around back then I think
2020-11-25 16:39:41 +0100 <geekosaur> (consider a subset type, for example integers less than 20, for a simple example)
2020-11-25 16:39:56 +0100 <maerwald> that's the only one I can think of with enough focus and purpose to take off
2020-11-25 16:40:04 +0100 <maerwald> in... 10 yeahs
2020-11-25 16:40:14 +0100 <honigkuchen> does anyone know a good page that explains that broader? or I just google for it
2020-11-25 16:40:25 +0100 <hekkaidekapus> PacoV: `cd yourProjectTopDir; cabal install stack2cabal; stack2cabal; cabal build`
2020-11-25 16:40:37 +0100 <PacoV> merijn: if pandoc-include-code depends on pandoc-types
2020-11-25 16:40:49 +0100 <PacoV> I can remove the later as an explicit dependency.
2020-11-25 16:41:37 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 16:41:43 +0100 <merijn> PacoV: Yes, but pandoc-include-code depends on pandoc-types>=1.20 && <=1.20)
2020-11-25 16:41:46 +0100 <merijn> (see the error)
2020-11-25 16:41:59 +0100adm(~adm@43.229.88.197)
2020-11-25 16:42:04 +0100 <merijn> And for some reason it forces the use of the installed pandoc-types which is 1.22
2020-11-25 16:42:05 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 16:42:38 +0100adm(~adm@43.229.88.197)
2020-11-25 16:42:57 +0100 <PacoV> Well, I can't even `cabal install` anything.
2020-11-25 16:43:07 +0100 <PacoV> But it works with `stack install`.
2020-11-25 16:43:19 +0100 <PacoV> Guess I f*cked up somehow.
2020-11-25 16:44:19 +0100 <merijn> PacoV: oh...
2020-11-25 16:44:28 +0100 <merijn> did you run "cabal install pandoc-types"?
2020-11-25 16:44:29 +0100 <hekkaidekapus> maerwald: Without me looking far, would know what is this about? `user error (expected ResolverRef instead of tag:yaml.org,2002:map tagged mapping)`
2020-11-25 16:44:38 +0100 <PacoV> Nop.
2020-11-25 16:44:42 +0100 <PacoV> Will do.
2020-11-25 16:44:48 +0100 <merijn> PacoV: No, don't :p
2020-11-25 16:45:12 +0100 <merijn> That's what I was gonna try and fix, but if you didn't then I dunno where it's getting pandoc-types from
2020-11-25 16:45:56 +0100 <maerwald> hekkaidekapus: what fails, stack2cabal?
2020-11-25 16:46:22 +0100 <PacoV> stack2cabal: user error (expected ResolverRef instead of tag:yaml.org,2002:map tagged mapping)
2020-11-25 16:46:25 +0100 <maerwald> where's the stack,yaml?
2020-11-25 16:46:25 +0100 <PacoV> Hum.
2020-11-25 16:46:49 +0100n0042(d055ed89@208.85.237.137) (Remote host closed the connection)
2020-11-25 16:46:51 +0100 <maerwald> the pantry syntax is excessive, so it's hard to cover everything
2020-11-25 16:46:55 +0100 <PacoV> https://gitlab.com/pcoves/hakyll-contrib-i18n/-/blob/master/stack.yaml
2020-11-25 16:47:02 +0100 <hekkaidekapus> Yeah, see above the chain of commands I suggested to PacoV. The project is at <https://gitlab.com/pcoves/hakyll-contrib-i18n>
2020-11-25 16:47:13 +0100 <PacoV> hekkaidekapus: I've the same error.
2020-11-25 16:47:36 +0100 <hekkaidekapus> I know, I was using your project. ;)
2020-11-25 16:47:52 +0100 <hekkaidekapus> And maerwald is the maintainer of stack2cabal.
2020-11-25 16:47:56 +0100 <maerwald> yep, I can reproduce
2020-11-25 16:47:59 +0100 <hyperisco> if I have two prisms, how can I turn those into a traversal?
2020-11-25 16:48:14 +0100 <PacoV> Ho, ok, sorry.
2020-11-25 16:48:20 +0100 <maerwald> resolver: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/20.yaml
2020-11-25 16:48:21 +0100 <glguy> hyperisco: with .
2020-11-25 16:48:22 +0100 <maerwald> this fixed it
2020-11-25 16:48:33 +0100 <maerwald> but there's another error
2020-11-25 16:48:40 +0100 <siraben> Is there a variant of `simpleHttp` that automatically retries? I'm sending web requests concurrently but don't want the whole thing to stop because a single thread failed
2020-11-25 16:48:53 +0100 <hyperisco> glguy, I don't want one prism after the other, I want both in parallel
2020-11-25 16:49:33 +0100 <hyperisco> if I have a prism for the 1st value and 2nd value, I want a traversal over the 1st and 2nd values
2020-11-25 16:49:43 +0100 <hyperisco> I don't want a prism from the 1st value into the 2nd value of the 1st value
2020-11-25 16:49:56 +0100 <maerwald> hekkaidekapus: https://github.com/hasufell/stack2cabal/issues/26
2020-11-25 16:50:07 +0100 <maerwald> I think it needs some adjustments to support that snapshot file
2020-11-25 16:50:12 +0100 <hyperisco> or I want something other than a traversal that does this sort of thing
2020-11-25 16:50:34 +0100 <maerwald> hekkaidekapus: the parser is here https://github.com/hasufell/stack2cabal/blob/master/lib/StackageToHackage/Stackage/YAML.hs
2020-11-25 16:50:47 +0100 <glguy> hyperisco: you just want to traverse the structure twice then?
2020-11-25 16:50:55 +0100 <hyperisco> no
2020-11-25 16:51:03 +0100 <hyperisco> I have two prisms
2020-11-25 16:51:10 +0100 <hyperisco> both are from X to Y
2020-11-25 16:51:43 +0100 <hyperisco> okay lets put it this way… I have some lens to get deep into the structure
2020-11-25 16:51:47 +0100 <maerwald> hekkaidekapus: shouldn't be hard
2020-11-25 16:51:48 +0100 <PacoV> I made a clean install (deleted the ~/.cabal dir also) of cabal-install.
2020-11-25 16:51:55 +0100 <hyperisco> now I have two prisms, there are two ways to go, I want to traverse over both ways
2020-11-25 16:52:00 +0100 <hyperisco> I don't want to get deep into the structure twice
2020-11-25 16:52:11 +0100 <PacoV> I can `cabal update` but can't `cabal install stack2cabal` either.
2020-11-25 16:52:16 +0100 <glguy> Prisms degrade to traversals, so we can just forget that they are prisms
2020-11-25 16:52:41 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb) (Remote host closed the connection)
2020-11-25 16:52:44 +0100 <glguy> You can combine them in any way other than to run one after the other
2020-11-25 16:52:51 +0100 <hyperisco> that isn't what I want oO
2020-11-25 16:52:55 +0100 <glguy> Can't*
2020-11-25 16:53:27 +0100 <merijn> PacoV: Which os/distro?
2020-11-25 16:53:37 +0100 <glguy> If 'failing' does what you want you can use it
2020-11-25 16:53:40 +0100 <merijn> PacoV: What does "ghc-pkg list" show?
2020-11-25 16:53:41 +0100 <PacoV> Arch.
2020-11-25 16:53:45 +0100 <merijn> oof
2020-11-25 16:53:54 +0100 <PacoV> It gives me a shit tonne of warnings!
2020-11-25 16:53:56 +0100Maxdamantus(~Maxdamant@unaffiliated/maxdamantus) (Ping timeout: 240 seconds)
2020-11-25 16:54:03 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb)
2020-11-25 16:54:06 +0100 <merijn> PacoV: Did you, by any chance install any packages via Arch's package manager?
2020-11-25 16:54:07 +0100 <hyperisco> I think we're talking past each other because I am using profunctor lenses
2020-11-25 16:54:13 +0100 <PacoV> Yep.
2020-11-25 16:54:17 +0100 <merijn> PacoV: RIP
2020-11-25 16:54:35 +0100 <PacoV> Ho, no big deal, I'll remove them.
2020-11-25 16:54:42 +0100 <glguy> hyperisco: the issues would be the same except they don't degrade automatically
2020-11-25 16:54:45 +0100 <merijn> PacoV: The Arch wiki should have a page on how to "unfuck" things :)
2020-11-25 16:54:46 +0100 <PacoV> Mainly pandoc.
2020-11-25 16:55:01 +0100 <PacoV> Haha, we all need this because of reasons.
2020-11-25 16:55:08 +0100 <hyperisco> if you compose two prisms you absolutely do not get what I am describing
2020-11-25 16:55:08 +0100Maxdamantus(~Maxdamant@unaffiliated/maxdamantus)
2020-11-25 16:55:10 +0100 <hyperisco> I point back to my example
2020-11-25 16:55:13 +0100 <PacoV> I'll give i a try.
2020-11-25 16:55:21 +0100 <merijn> PacoV: Arch's Haskell packages have a...tendency to render your Haskell install unusable (if you ever get it working to begin with)
2020-11-25 16:55:22 +0100 <glguy> hyperisco: yeah I know,
2020-11-25 16:55:30 +0100 <hekkaidekapus> maerwald: Noted, thanks.
2020-11-25 16:55:40 +0100conal(~conal@64.71.133.70)
2020-11-25 16:55:44 +0100 <merijn> PacoV: I believe there's several Arch wiki pages on the topic
2020-11-25 16:56:10 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 16:56:14 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-25 16:56:15 +0100 <maerwald> hekkaidekapus: https://github.com/hasufell/stack2cabal/blob/e6fae40d913ed67363671fb7238e74afedd78ffc/lib/Stackage… needs another alternative for the syntax from the 20.yaml
2020-11-25 16:56:16 +0100 <glguy> Hyper for the parallel behavior look at whatever failing got turned into in this other library
2020-11-25 16:56:18 +0100 <merijn> PacoV: So, I believe the problem you have is the following: Arch's package manager is installing pandoc-types-1.22 into a global database forcing cabal-install to use it
2020-11-25 16:56:37 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 16:56:44 +0100 <maerwald> hekkaidekapus: it's quite unfortunate how conflated packages and deps in stack.yaml is
2020-11-25 16:56:48 +0100 <merijn> PacoV: But your other dependencies don't support pandoc-types-1.22 yet, so cabal-install is going "well, I can't find compatible versions of your dependencies!" (hence the error)
2020-11-25 16:56:48 +0100 <glguy> Failing assumes the two are disjoint
2020-11-25 16:57:18 +0100 <hyperisco> oh now this is feeling like I asked this 1-2 years ago
2020-11-25 16:57:34 +0100 <merijn> PacoV: If the systemwide pandoc-types install is gone cabal-install should simply pick an older (supported) pandoc-types
2020-11-25 16:57:44 +0100 <PacoV> I removed every bit of (easy to find) haskell packages and removed both ~/.cabal and ~/.stack.
2020-11-25 16:57:53 +0100 <hyperisco> and I think then I just decided it was too complicated to bother and went back to explicit recursion lol
2020-11-25 16:58:23 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection)
2020-11-25 16:58:39 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-25 16:58:45 +0100conal(~conal@64.71.133.70)
2020-11-25 16:59:01 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb) (Ping timeout: 264 seconds)
2020-11-25 16:59:02 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer)
2020-11-25 16:59:56 +0100 <PacoV> http://ix.io/2Frq
2020-11-25 16:59:59 +0100 <PacoV> Fail.
2020-11-25 17:00:13 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2020-11-25 17:00:13 +0100 <PacoV> On `cabal install stack2cabal`.
2020-11-25 17:01:03 +0100 <geekosaur> now that looks like arch doing its thing
2020-11-25 17:01:30 +0100 <maerwald> PacoV: there sre static binaries: https://github.com/hasufell/stack2cabal/releases/tag/v1.0.12
2020-11-25 17:01:33 +0100 <geekosaur> tbh you should just jettison all haskell related pakages including ghc, then use ghcup to install a working ghc
2020-11-25 17:01:41 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-25 17:02:01 +0100hackagereflex-monad-auth 0.1.0.0 - Utilities to split reflex app to authorized and not authorized contexts https://hackage.haskell.org/package/reflex-monad-auth-0.1.0.0 (NCrashed)
2020-11-25 17:02:44 +0100 <maerwald> PacoV: I'm not a fan of distributing binaries via hackage, but the original mainainer put it up there. The repo itself uses a freeze file.
2020-11-25 17:02:48 +0100aenesidemus(~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net)
2020-11-25 17:03:01 +0100hackagereflex-monad-auth 0.1.0.1 - Utilities to split reflex app to authorized and not authorized contexts https://hackage.haskell.org/package/reflex-monad-auth-0.1.0.1 (NCrashed)
2020-11-25 17:04:16 +0100elliott__(~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2020-11-25 17:04:26 +0100 <honigkuchen> are the "new" c++ concepts that enhance templating or whatsoever a form of dependently typing?
2020-11-25 17:05:14 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 17:05:22 +0100 <siraben> http://ix.io/2Frs If any of the requests fail then `mapConcurrently` will fail, what should I do instead?
2020-11-25 17:05:25 +0100 <siraben> I'm using `simpleHttp` to get the contents
2020-11-25 17:05:55 +0100 <merijn> siraben: Well what do you wanna do on failure?
2020-11-25 17:06:06 +0100 <siraben> merijn: Retry
2020-11-25 17:06:15 +0100 <siraben> So I'd have to catch an IO exception?
2020-11-25 17:06:35 +0100 <merijn> siraben: https://hackage.haskell.org/package/broadcast-chan-0.2.1.1/docs/BroadcastChan.html#v:parMapM_ :p
2020-11-25 17:06:56 +0100adm(~adm@43.229.88.197) (Ping timeout: 240 seconds)
2020-11-25 17:08:22 +0100 <PacoV> Looks like I need a better packages purge.
2020-11-25 17:08:26 +0100 <PacoV> BRB
2020-11-25 17:09:25 +0100 <geekosaur> either that or install ghc-static so at least the base package and relatives aren't broken but better is t just get a working ghc and core libraries from somewhere other than the arch repo
2020-11-25 17:09:40 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-11-25 17:09:56 +0100 <siraben> merijn: should I not use simpleHttp then, since it returns IO ByteString.Lazy?
2020-11-25 17:10:18 +0100 <merijn> siraben: That's easily solved with toStrict + evaluate ;)
2020-11-25 17:11:02 +0100 <merijn> siraben: There's a conduit wrapper to stream request into too, btw
2020-11-25 17:11:10 +0100 <honigkuchen> how is it that a dependently typed language can handle more than a not dependently typed one
2020-11-25 17:13:06 +0100 <PacoV> WTF Could not find module ‘Prelude’ ?
2020-11-25 17:13:30 +0100adm(~adm@43.229.88.197)
2020-11-25 17:13:40 +0100 <merijn> PacoV: That's usual if your GHC is installed via Arch packages
2020-11-25 17:13:49 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds)
2020-11-25 17:14:03 +0100fg(5fa448e7@95.164.72.231)
2020-11-25 17:14:26 +0100 <merijn> Because the Arch package installs a GHC with a broken default config...on purpose...yay
2020-11-25 17:14:27 +0100fgGuest22285
2020-11-25 17:14:54 +0100 <PacoV> I listed every single package installed on my system (haskell ones are prefixed with `haskell-` on arch), filtered them and remove all the `haskell-*` then installed `cabal-install`.
2020-11-25 17:15:11 +0100 <maerwald> merijn: arch is starting to be more annoying than the macOS PATH issues :p
2020-11-25 17:15:14 +0100 <PacoV> Ho, ok, you're telling me not to install cabal-install using pacman.
2020-11-25 17:15:39 +0100 <PacoV> I'll give ghcup a try.
2020-11-25 17:15:54 +0100 <merijn> maerwald: I mean, the macOS PATH issue is at least defensible, since those are indeed not standard PATH locations
2020-11-25 17:16:33 +0100 <merijn> If Arch insists on shipping a dynamic GHC, could they not at least set it to link dynamic by default? >.>
2020-11-25 17:17:18 +0100aenesidemus(~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) (Quit: Leaving)
2020-11-25 17:18:48 +0100hseg(~gesh@IGLD-84-228-238-117.inter.net.il) (Ping timeout: 256 seconds)
2020-11-25 17:23:27 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2020-11-25 17:23:35 +0100 <PacoV> Looks like ghcup is doing the trick.
2020-11-25 17:23:41 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb)
2020-11-25 17:24:08 +0100jollygood2(~bc8165ab@217.29.117.252)
2020-11-25 17:24:19 +0100 <ski> @type let memoIO :: Ord k => (k -> IO v) -> IO (k -> IO v); memoIO f = do ref <- Data.IORef.newIORef M.empty; return (\k -> do map <- Data.IORef.readIORef ref; case M.lookup k map of Just v -> return v; Nothing -> do v <- f k; Data.IORef.writeIORef ref (M.insert k v map); return v) in memoIO
2020-11-25 17:24:21 +0100 <lambdabot> Ord k => (k -> IO v) -> IO (k -> IO v)
2020-11-25 17:24:30 +0100ClaudiusMaximus(~claude@198.123.199.146.dyn.plus.net)
2020-11-25 17:24:34 +0100 <ski> @type let memoIO :: Ord k => (k -> IO v) -> IO (k -> IO v); memoIO f = do ref <- Data.IORef.newIORef M.empty; return (\k -> mfix (\v -> maybe (f k) return =<< Data.IORef.atomicModifyIORef ref (\map -> case M.lookup k map of Just v -> (map,Just v); Nothing -> (M.insert k v map,Nothing)))) in memoIO
2020-11-25 17:24:36 +0100 <lambdabot> Ord k => (k -> IO v) -> IO (k -> IO v)
2020-11-25 17:24:38 +0100ClaudiusMaximus(~claude@198.123.199.146.dyn.plus.net) (Changing host)
2020-11-25 17:24:38 +0100ClaudiusMaximus(~claude@unaffiliated/claudiusmaximus)
2020-11-25 17:24:46 +0100 <ski> @type let memoIO :: Ord k => (k -> IO v) -> IO (k -> IO v); memoIO f = do ref <- Data.IORef.newIORef M.empty; return (\k -> mfix (\v -> maybe (f k) return =<< Data.IORef.atomicModifyIORef ref (swap . M.insertLookupWithKey (\_ _ v -> v) k v))) in memoIO
2020-11-25 17:24:48 +0100 <lambdabot> Ord k => (k -> IO v) -> IO (k -> IO v)
2020-11-25 17:24:54 +0100 <ski> @type let memoIO :: Ord k => (k -> IO v) -> IO (k -> IO v); memoIO f = do ref <- Data.IORef.newIORef M.empty; return (\k -> do v <- System.IO.Unsafe.unsafeInterleaveIO (f k); Data.IORef.atomicModifyIORef ref (\map -> case M.lookup k map of Just v -> (map,v); Nothing -> (M.insert k v map,v))) in memoIO
2020-11-25 17:24:56 +0100 <lambdabot> Ord k => (k -> IO v) -> IO (k -> IO v)
2020-11-25 17:25:00 +0100gproto23(~gproto23@unaffiliated/gproto23)
2020-11-25 17:25:04 +0100 <ski> @type let memoIO :: Ord k => (k -> IO v) -> IO (k -> IO v); memoIO f = do ref <- Data.IORef.newIORef M.empty; return (\k -> do v <- System.IO.Unsafe.unsafeInterleaveIO (f k); fromMaybe v <$> Data.IORef.atomicModifyIORef ref (swap . M.insertLookupWithKey (\_ _ v -> v) k v)) in memoIO
2020-11-25 17:25:05 +0100 <lambdabot> Ord k => (k -> IO v) -> IO (k -> IO v)
2020-11-25 17:25:10 +0100 <jollygood2> hi. I asked the other day, but I didn't keep logs. I need to make a simple personal website, and I want to explore FRP. what library do you recommend?
2020-11-25 17:25:27 +0100 <PacoV> jollygood2: Hakyll?
2020-11-25 17:26:12 +0100 <ski> merijn,kuribas : i don't really see how to do `Ord k => (k -> IO v) -> IO (k -> v)' (e.g. with `unsafeInterleaveIO'), without also passing a collection of valid `k's
2020-11-25 17:27:18 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 17:27:26 +0100 <PacoV> ghcup actually allowed me to install stack2cabal.
2020-11-25 17:27:39 +0100 <jollygood2> PacoV thanks, I'll take a look
2020-11-25 17:27:45 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb) (Ping timeout: 240 seconds)
2020-11-25 17:27:46 +0100Stanley00(~stanley00@unaffiliated/stanley00) (Ping timeout: 246 seconds)
2020-11-25 17:27:55 +0100 <PacoV> But the later failed to process my package as we expected.
2020-11-25 17:28:09 +0100 <maerwald> PacoV: yes, I posted above what needs to be adjusted
2020-11-25 17:28:13 +0100thc202(~thc202@unaffiliated/thc202) (Quit: thc202)
2020-11-25 17:28:55 +0100 <PacoV> jollygood2: And if you plan on writting on multiple languages, I published https://hackage.haskell.org/package/hakyll-contrib-i18n yesterday :-)
2020-11-25 17:29:03 +0100 <maerwald> PacoV: https://github.com/hasufell/stack2cabal/blob/master/lib/StackageToHackage/Stackage/YAML.hs both the packages and the resolver parser need another alternative
2020-11-25 17:29:26 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55)
2020-11-25 17:30:12 +0100 <PacoV> maerwald: I guess I'm too new to understand the meaning of this :-/
2020-11-25 17:30:22 +0100 <maerwald> it's just a yaml parser
2020-11-25 17:30:30 +0100 <PacoV> But cabal actually builds my package right now.
2020-11-25 17:30:39 +0100 <PacoV> So I might not need anything else.
2020-11-25 17:30:44 +0100alp(~alp@2a01:e0a:58b:4920:c9e7:a101:608d:5391) (Ping timeout: 240 seconds)
2020-11-25 17:30:51 +0100 <maerwald> stack.yaml follows some weird "pantry" thing, which has so many ways to express the same thing that I can't keep up
2020-11-25 17:31:00 +0100thc202(~thc202@unaffiliated/thc202)
2020-11-25 17:31:18 +0100 <PacoV> It's okay. I mean, I'd gladly get rid of the stack part if possible.
2020-11-25 17:31:25 +0100 <maerwald> the line between package and dependency is also completely blurred
2020-11-25 17:31:43 +0100 <ski> @hoogle (a -> IO b) -> IO (a -> b)
2020-11-25 17:31:44 +0100 <lambdabot> No results found
2020-11-25 17:32:18 +0100 <PacoV> Well, it'll take time. I'll walk the dog in the mean time.
2020-11-25 17:32:25 +0100sdx23(~sdx23@unaffiliated/sdx23) (Ping timeout: 240 seconds)
2020-11-25 17:33:59 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
2020-11-25 17:35:10 +0100Boomerang_(~Boomerang@xd520f68c.cust.hiper.dk) (Ping timeout: 256 seconds)
2020-11-25 17:35:12 +0100 <ski> @type let unsafeInterleaveIOResult :: (a -> IO b) -> IO (a -> b); unsafeInterleaveIOResult f = return (System.IO.Unsafe.unsafePerformIO . f) in unsafeInterleaveIOResult -- perhaps something like this could be used, assuming `NOINLINE',&c. precautions
2020-11-25 17:35:14 +0100 <lambdabot> (a -> IO b) -> IO (a -> b)
2020-11-25 17:35:32 +0100Lycurgus(~niemand@98.4.114.74)
2020-11-25 17:35:44 +0100son0p(~son0p@181.136.122.143) (Ping timeout: 256 seconds)
2020-11-25 17:37:13 +0100adm(~adm@43.229.88.197) (Remote host closed the connection)
2020-11-25 17:37:14 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2020-11-25 17:38:19 +0100Boomerang_(~Boomerang@xd520f68c.cust.hiper.dk)
2020-11-25 17:38:39 +0100andos(~dan@69-165-210-185.cable.teksavvy.com)
2020-11-25 17:40:17 +0100 <maerwald> what's a safe way to convert Integer to Word64
2020-11-25 17:40:59 +0100derek_gorczyn(~derek_gor@96-81-221-14-static.hfc.comcastbusiness.net) (Quit: Leaving)
2020-11-25 17:41:10 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb)
2020-11-25 17:41:19 +0100Guest22285(5fa448e7@95.164.72.231) (Ping timeout: 245 seconds)
2020-11-25 17:41:42 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-25 17:41:54 +0100jamm_(~jamm@unaffiliated/jamm)
2020-11-25 17:42:09 +0100Sheilong(uid293653@gateway/web/irccloud.com/x-bojsghgzllzoprwv)
2020-11-25 17:42:12 +0100kritzefitz(~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
2020-11-25 17:43:25 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 264 seconds)
2020-11-25 17:43:51 +0100knupfer(~Thunderbi@200116b82ca9650045472097ac301af6.dip.versatel-1u1.de) (Remote host closed the connection)
2020-11-25 17:43:59 +0100knupfer1(~Thunderbi@200116b82ca96500dc7bf53810219cf9.dip.versatel-1u1.de)
2020-11-25 17:44:41 +0100jonatanb_(jonatanb@gateway/vpn/protonvpn/jonatanb)
2020-11-25 17:45:11 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-11-25 17:45:54 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-25 17:46:16 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb) (Ping timeout: 240 seconds)
2020-11-25 17:46:22 +0100knupfer1knupfer
2020-11-25 17:46:37 +0100jamm_(~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
2020-11-25 17:46:41 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 17:47:07 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 17:47:23 +0100jamm_(~jamm@unaffiliated/jamm)
2020-11-25 17:51:49 +0100Boomerang_(~Boomerang@xd520f68c.cust.hiper.dk) (Ping timeout: 264 seconds)
2020-11-25 17:51:56 +0100jonatanb_(jonatanb@gateway/vpn/protonvpn/jonatanb) (Ping timeout: 240 seconds)
2020-11-25 17:52:06 +0100 <ProofTechnique> @maerwald `fromIntegral`?
2020-11-25 17:52:06 +0100 <lambdabot> Unknown command, try @list
2020-11-25 17:52:43 +0100 <tdammers> define "safe"
2020-11-25 17:53:14 +0100 <maerwald> 1. memory safe 2. doesn't truncate randomly or do other crap when the Integer is out of range
2020-11-25 17:53:23 +0100 <maerwald> so a Maybe is ok too
2020-11-25 17:54:00 +0100tsrt^(tsrt@ip98-184-89-2.mc.at.cox.net) ()
2020-11-25 17:54:53 +0100Lycurgus(~niemand@98.4.114.74) (Quit: Exeunt)
2020-11-25 17:58:46 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Remote host closed the connection)
2020-11-25 17:59:04 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 18:00:21 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr)
2020-11-25 18:00:25 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 18:02:20 +0100conal(~conal@64.71.133.70)
2020-11-25 18:02:31 +0100 <PacoV> \o/ Yeah, cabal build succeeded.
2020-11-25 18:04:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-11-25 18:04:49 +0100sand_dull(~theuser@c-73-149-95-105.hsd1.ct.comcast.net)
2020-11-25 18:06:49 +0100irc_user(uid423822@gateway/web/irccloud.com/x-gwxffkrhmbtyeyhx)
2020-11-25 18:07:58 +0100 <xsperry> maerwald toIntegralSized
2020-11-25 18:08:47 +0100[exa]smashes bookmark button
2020-11-25 18:09:02 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Excess Flood)
2020-11-25 18:10:18 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 18:11:37 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2020-11-25 18:12:03 +0100kish`(~oracle@unaffiliated/oracle)
2020-11-25 18:12:06 +0100 <[exa]> xsperry: hmmm.. isn't the check in the toIntegralSized docs example wrong? here https://hackage.haskell.org/package/base-4.14.0.0/docs/Data-Bits.html#v:toIntegralSized
2020-11-25 18:12:16 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 18:13:00 +0100ubert(~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
2020-11-25 18:13:38 +0100 <[exa]> (the comparison there does basically `toInteger x == toInteger x` does that make sense? I would understand if there would be `x == fromInteger y` instead)
2020-11-25 18:14:02 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 18:15:41 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 18:16:36 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-sigyjgyywexrisfj)
2020-11-25 18:17:37 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 264 seconds)
2020-11-25 18:18:28 +0100 <ProofTechnique> I expect the second `toInteger` to be at a different specialized type. The real implementation is _a read_, though
2020-11-25 18:18:45 +0100 <ProofTechnique> Otherwise yeah, maybe just a typo
2020-11-25 18:19:32 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-25 18:20:02 +0100 <ProofTechnique> Oh, yeah, the actual implementation says `y = fromIntegral x`, so maybe that's a typo in the docs
2020-11-25 18:22:35 +0100conal(~conal@64.71.133.70)
2020-11-25 18:24:02 +0100pmikkelsen(~pmikkelse@vps1.pmikkelsen.com) (Read error: Connection reset by peer)
2020-11-25 18:25:29 +0100mpereira(~mpereira@2a02:810d:f40:d96:f587:a442:5e3:1e55) (Ping timeout: 272 seconds)
2020-11-25 18:26:45 +0100f-a(~f-a@151.34.188.246)
2020-11-25 18:27:07 +0100SanchayanMaity(~Sanchayan@171.76.82.54) (Quit: SanchayanMaity)
2020-11-25 18:27:28 +0100 <[exa]> oh my, I'd report it but ghc gitlab is giving me http500 on auth
2020-11-25 18:28:30 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com) (Quit: Leaving)
2020-11-25 18:28:59 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 18:30:11 +0100cyphase(~cyphase@unaffiliated/cyphase)
2020-11-25 18:31:44 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 18:31:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-25 18:32:28 +0100matta(~user@24-113-169-116.wavecable.com)
2020-11-25 18:33:03 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2020-11-25 18:34:10 +0100erisco(~erisco@d24-57-249-233.home.cgocable.net)
2020-11-25 18:36:24 +0100 <erisco> is there anything to be said for Profunctor & Category because I think liftA2 (.) is how I want to compose optics
2020-11-25 18:36:55 +0100 <ezzieyguywuf> what do y'all use for regular expressions in haskell?
2020-11-25 18:37:15 +0100 <[exa]> erisco: you saw prolens package right?
2020-11-25 18:37:24 +0100 <erisco> maybe
2020-11-25 18:37:37 +0100 <geekosaur> parsing instead of regular expressions, generally
2020-11-25 18:38:35 +0100 <[exa]> erisco: not sure about liftA2 (.) but I guess it will give easier than Control.Lens
2020-11-25 18:39:04 +0100 <erisco> I am using profunctor lenses
2020-11-25 18:39:09 +0100 <[exa]> ah ok
2020-11-25 18:39:16 +0100f-a(~f-a@151.34.188.246) ()
2020-11-25 18:39:27 +0100 <ezzieyguywuf> geekosaur: I knew someone would say that.
2020-11-25 18:39:49 +0100 <erisco> But I keep wanting to do things it seems Profunctor and friends cannot
2020-11-25 18:40:38 +0100 <[exa]> anyway what would be the semantics of the lifted (.) ?
2020-11-25 18:41:04 +0100 <erisco> basically, once you're at a point in a structure, you want to split and do two things, then bring the results back together
2020-11-25 18:41:46 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta)
2020-11-25 18:41:46 +0100 <erisco> (.) isn't precisely that but it suffices
2020-11-25 18:42:52 +0100 <matta> Newbie question! I am setting up Haskell on macOS. haskell.org/platform recommends I use ghcup to install ghc and cabal, then use haskellstack.org to install stack. But it looks like stack then installs yet another ghc (but not another cabal, which it largely duplicates?). I don't relish this apparent duplication of fucnctionality, especially the possible screwups I could get myself into with two compiler installations. As a newbie who
2020-11-25 18:42:52 +0100 <matta> wants to keep things as simple for myself as possible, should I just wipe everything and only install stack?
2020-11-25 18:43:07 +0100 <[exa]> erisco: so, say "process all items from a list but take `lens1` from the first and `lens2` from the second" ?
2020-11-25 18:43:13 +0100 <[exa]> s/second/tail
2020-11-25 18:43:47 +0100alp(~alp@2a01:e0a:58b:4920:1ce3:597b:e8f0:d72c)
2020-11-25 18:43:50 +0100 <erisco> say I have a prism for element 1 and other for element 2
2020-11-25 18:43:56 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 18:44:01 +0100hackagehakyll-contrib-i18n 0.1.1.0 - A Hakyll library for internationalization. https://hackage.haskell.org/package/hakyll-contrib-i18n-0.1.1.0 (pcoves)
2020-11-25 18:44:02 +0100 <[exa]> matta: I'd advise for going without stack first, it's a brutal tool
2020-11-25 18:44:30 +0100 <[exa]> matta: unless you need it to support an IDE that requires stack ofc
2020-11-25 18:44:39 +0100 <erisco> I mean lens for 1 and 2... then I should be able to have both 1 and 2
2020-11-25 18:44:40 +0100 <sm[m]> oh come on
2020-11-25 18:45:04 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 18:46:04 +0100 <erisco> So I'm suggesting liftA2 (.) which does 1 then 2 in sequence
2020-11-25 18:47:05 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-11-25 18:47:25 +0100 <matta> [exa]: great, so long as vanilla ghc/cabal won't be teaching me things that are widely deprecated I'm happy to start with them.
2020-11-25 18:47:49 +0100 <erisco> but I don't know if there is a better formulation... is Profunctor & Category really a thing?
2020-11-25 18:48:16 +0100 <koz_> Category implies Profunctor.
2020-11-25 18:48:29 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 256 seconds)
2020-11-25 18:48:30 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-11-25 18:48:31 +0100 <koz_> (you can implement dimap using Category's first and second)
2020-11-25 18:48:48 +0100Er(5fa448e7@95.164.72.231)
2020-11-25 18:48:59 +0100 <erisco> Category doesn't have first and second
2020-11-25 18:49:36 +0100 <koz_> Sorry, I was confusing Arrow.
2020-11-25 18:49:41 +0100 <[exa]> matta: certainly not, stack is not "more advanced", it's just for more complicated&problematic setups. I'm using just normal ghc+cabal
2020-11-25 18:49:47 +0100 <koz_> Basically, Profunctor + Category = Arrow, more or less.
2020-11-25 18:49:50 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-25 18:49:52 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 18:50:00 +0100 <erisco> if the conclusion is "that's just Arrow" then I dunno
2020-11-25 18:50:03 +0100 <koz_> (I should not reply so soon after waking lol)
2020-11-25 18:50:22 +0100 <koz_> Well, Arrow is _a_ solution sure.
2020-11-25 18:50:29 +0100 <merijn> matta: https://gist.github.com/merijn/8152d561fb8b011f9313c48d876ceb07
2020-11-25 18:50:52 +0100 <erisco> I am not any expert on the aesthetics/objectives of optics
2020-11-25 18:50:56 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 272 seconds)
2020-11-25 18:51:15 +0100 <[exa]> matta: also, for simple beginner-level programs it's usually sufficient to have ghci working, then load a file with :l, reload with :r, and test stuff by hand
2020-11-25 18:51:26 +0100whald(~trem@2a02:810a:8100:11a6:7427:ad4:8a1e:146d) (Remote host closed the connection)
2020-11-25 18:51:29 +0100 <erisco> so I don't know if I am just throwing a wrench in
2020-11-25 18:51:41 +0100gxt(~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection)
2020-11-25 18:52:09 +0100 <[exa]> erisco: can you show an example of how would you like to use that? I'm still thinking it's just some kind of (reverse) traversal
2020-11-25 18:52:29 +0100gxt(~gxt@gateway/tor-sasl/gxt)
2020-11-25 18:52:48 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-11-25 18:53:58 +0100devalot(~ident@mail.pmade.com) ("ERC (IRC client for Emacs 27.1)")
2020-11-25 18:54:12 +0100 <erisco> say I want to increment the first two numbers in a list, then if I can prism the first and prism the second ther ought to be an optic that does them both
2020-11-25 18:54:23 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 240 seconds)
2020-11-25 18:54:40 +0100Tario(~Tario@200.119.185.161)
2020-11-25 18:54:49 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2020-11-25 18:56:03 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer)
2020-11-25 18:56:46 +0100 <matta> merijn: great gist, thanks.
2020-11-25 18:57:35 +0100erisco_(~erisco@208.98.222.65)
2020-11-25 18:57:50 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Quit: Ping timeout (120 seconds))
2020-11-25 18:58:36 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 18:59:01 +0100 <monochrom> Heh stack goes way beyond the batteries-included principle.
2020-11-25 18:59:17 +0100matta(~user@24-113-169-116.wavecable.com) (Remote host closed the connection)
2020-11-25 18:59:24 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 19:00:07 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 19:00:36 +0100erisco(~erisco@d24-57-249-233.home.cgocable.net) (Ping timeout: 240 seconds)
2020-11-25 19:00:39 +0100 <koz_> monochrom: Yeah, because it's 'undocumented nuclear batteries included, with mind-changing reserved for us'.
2020-11-25 19:01:11 +0100matta(~user@24-113-169-116.wavecable.com)
2020-11-25 19:01:33 +0100geekosaurwould have put it as "power plant included and rebuilt according to our whim on the fly"
2020-11-25 19:02:36 +0100 <monochrom> Well, I was going for a "walled garden" wording.
2020-11-25 19:04:30 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2020-11-25 19:04:49 +0100 <matta> I guess since I'm just typing oneliners into ghci at the moment, stack is overkill. ;-)
2020-11-25 19:05:57 +0100 <monochrom> I think people have accepted "real devs have 64-core 1TB-RAM 1Gbps-internet", they won't notice or mind frequent rebuilds and redownloads.
2020-11-25 19:06:42 +0100 <monochrom> But devs are still divided on walled garden vs liberal wilderness.
2020-11-25 19:07:24 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 272 seconds)
2020-11-25 19:07:39 +0100 <dolio> The stuff that comes with GHC is probably sufficient for lots of learning. You don't need any package management.
2020-11-25 19:07:51 +0100 <dolio> At least, it was when I was learning. Package managers didn't exist.
2020-11-25 19:08:25 +0100 <monochrom> Yeah, I was there when cabal didn't exist, too.
2020-11-25 19:08:25 +0100Tario(~Tario@200.119.185.161) (Read error: Connection reset by peer)
2020-11-25 19:08:38 +0100 <monochrom> Even after cabal existed, for a while I ran Setup.hs by hand.
2020-11-25 19:08:44 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net) (Quit: leaving)
2020-11-25 19:08:57 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net)
2020-11-25 19:09:02 +0100 <maerwald> monochrom: if I clone my work project and try to build it with stack, I have to wait 30 minutes just for the git repos to be fetched :)m
2020-11-25 19:09:05 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net) (Client Quit)
2020-11-25 19:09:22 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net)
2020-11-25 19:09:38 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb)
2020-11-25 19:09:50 +0100 <maerwald> https://github.com/commercialhaskell/stack/issues/5411
2020-11-25 19:10:08 +0100 <maerwald> so yes, devs don't consider ram or my old cable under the house
2020-11-25 19:10:18 +0100 <monochrom> I think people simply take advantage of https://xkcd.com/303/
2020-11-25 19:11:04 +0100 <maerwald> either that or I'm waiting between 1-2 hours for CI to fail
2020-11-25 19:11:07 +0100 <monochrom> oh haha, that one is a bit extreme though, "clone as many times as there are subdirs"
2020-11-25 19:11:12 +0100 <maerwald> yep
2020-11-25 19:11:21 +0100 <maerwald> nix does the same
2020-11-25 19:11:26 +0100 <maerwald> only cabal doesn't
2020-11-25 19:12:20 +0100 <monochrom> This is why devs should be confined to 10-inch netbooks, and unplugged. (Still remember "netbooks"?)
2020-11-25 19:12:20 +0100erisco_(~erisco@208.98.222.65) (Read error: Connection reset by peer)
2020-11-25 19:12:35 +0100geekosauris using one, tyvm
2020-11-25 19:12:38 +0100cyphase(~cyphase@unaffiliated/cyphase) (Ping timeout: 256 seconds)
2020-11-25 19:12:52 +0100 <geekosaur> (and waiting for it to run out of swap space…)
2020-11-25 19:12:53 +0100Tario(~Tario@200.119.185.161)
2020-11-25 19:12:54 +0100 <monochrom> (and on 802.11b wifi)
2020-11-25 19:13:18 +0100 <hyperisco> [exa], did that make any sense?
2020-11-25 19:13:28 +0100 <maerwald> or we could establish programmer licenses... I mean, doctors also have those and they also can lose them
2020-11-25 19:13:30 +0100 <maerwald> right?
2020-11-25 19:13:32 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.157)
2020-11-25 19:13:45 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb) (Ping timeout: 240 seconds)
2020-11-25 19:13:49 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr)
2020-11-25 19:14:02 +0100cyphase(~cyphase@unaffiliated/cyphase)
2020-11-25 19:14:03 +0100erisco(~erisco@d192-186-117-226.static.comm.cgocable.net)
2020-11-25 19:14:43 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 19:15:01 +0100 <monochrom> Confine devs to the one-laptop-per-child laptop, and its intended usage environment: slow or non-existent internet access, and electricity comes from a solar panel. This will teach devs to respect accessibility and the value of all those "analyze the running time of these algorithms" courses.
2020-11-25 19:15:03 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl)
2020-11-25 19:15:10 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2020-11-25 19:15:37 +0100n0042(d055ed89@208.85.237.137)
2020-11-25 19:16:51 +0100avdb(~avdb@ip-81-11-215-86.dsl.scarlet.be)
2020-11-25 19:16:55 +0100christo(~chris@81.96.113.213)
2020-11-25 19:17:03 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 19:17:25 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 19:17:26 +0100 <maerwald> I think bugs aren't embarrassing these days anymore, because everything is rolling release and agile. If you messed up multiple releaes in a row in the earlier tarball-ftp days, ppl would raise an eyebrow.
2020-11-25 19:17:45 +0100 <monochrom> like I said last week: perpetual beta
2020-11-25 19:19:22 +0100 <PacoV> Thanks all!
2020-11-25 19:19:24 +0100PacoV(~pcoves@16.194.31.93.rev.sfr.net) (Quit: leaving)
2020-11-25 19:19:34 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-25 19:20:47 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 256 seconds)
2020-11-25 19:20:54 +0100 <[exa]> hyperisco: yeah I had to afk... So basically we want something that combines 2 prisms into a traversal? (or another prism-traversal?)
2020-11-25 19:21:00 +0100 <hyperisco> > let (^>) = liftA2 (.) in (_1 ^> _2 .~ 3) ("hello","sailor!")
2020-11-25 19:21:02 +0100 <lambdabot> error:
2020-11-25 19:21:03 +0100 <lambdabot> • Couldn't match type ‘[Char]’ with ‘([Char], b)’
2020-11-25 19:21:03 +0100 <lambdabot> arising from a functional dependency between:
2020-11-25 19:21:30 +0100 <hyperisco> well I don't know how things work with this sort of optics
2020-11-25 19:21:51 +0100alp(~alp@2a01:e0a:58b:4920:1ce3:597b:e8f0:d72c) (Ping timeout: 272 seconds)
2020-11-25 19:22:28 +0100 <hyperisco> I question whether it makes sense as a traversal, I don't see how
2020-11-25 19:22:34 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta) (Quit: WeeChat 2.8)
2020-11-25 19:22:59 +0100 <hyperisco> but anyways, the result of that was (3, 3)
2020-11-25 19:23:25 +0100 <monochrom> Do you have to use lenses and prisms?
2020-11-25 19:23:57 +0100 <hyperisco> why wouldn't I
2020-11-25 19:24:08 +0100 <monochrom> just checking
2020-11-25 19:24:26 +0100 <hyperisco> I could choose not to use optics at all but I am trying to get some benefit from them
2020-11-25 19:24:45 +0100 <dolio> I didn't read super closely, but it seemed to me that the problem with your example is that it relied on very specific knowledge of what your optics do that does not apply to all optics of the same type.
2020-11-25 19:24:47 +0100 <solonarv> > ("hello", "sailor") & (_1 <> _2) .~ 3
2020-11-25 19:24:49 +0100 <lambdabot> error:
2020-11-25 19:24:49 +0100 <lambdabot> • No instance for (Num [Char]) arising from the literal ‘3’
2020-11-25 19:24:49 +0100 <lambdabot> • In the second argument of ‘(.~)’, namely ‘3’
2020-11-25 19:25:06 +0100 <solonarv> huh, that got closer then I expected
2020-11-25 19:25:14 +0100 <solonarv> > ("hello", "sailor") & (_1 <> _2) .~ "huh"
2020-11-25 19:25:17 +0100 <lambdabot> ("huhhello","sailorhuh")
2020-11-25 19:25:37 +0100 <solonarv> well that's definitely not right.
2020-11-25 19:25:53 +0100 <dolio> So, like, just because the example would make sense doesn't mean that there must be a function to combine two optics in this way in general.
2020-11-25 19:26:39 +0100 <hyperisco> not sure what you mean by "must"… I mean "ought" in that it seems obvious from a pragmatic point of view
2020-11-25 19:26:47 +0100NeuromancerBugzOOO
2020-11-25 19:28:03 +0100 <dolio> The examples that don't make sense might prevent there from being such a function, unless you can narrow the types involved down to only the ones that do make sense.
2020-11-25 19:28:41 +0100 <hyperisco> I haven't checked against the laws
2020-11-25 19:29:06 +0100 <hyperisco> they seem rather immaterial to me
2020-11-25 19:29:38 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 19:30:10 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 19:30:45 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2020-11-25 19:30:59 +0100 <solonarv> it's definitely going to be unsound because it'll produce nonsense when you give it overlapping optics
2020-11-25 19:31:16 +0100 <solonarv> but that doesn't mean such a function can't exist, of course
2020-11-25 19:32:09 +0100Er(5fa448e7@95.164.72.231) (Ping timeout: 245 seconds)
2020-11-25 19:33:07 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it) (Read error: Connection reset by peer)
2020-11-25 19:33:25 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it)
2020-11-25 19:33:56 +0100 <hyperisco> I would guess it probably is lawful
2020-11-25 19:34:20 +0100 <hyperisco> but I am uncomfortable talking about laws on type synonyms
2020-11-25 19:34:23 +0100Iceland_jack(~user@31.124.48.169) (Ping timeout: 256 seconds)
2020-11-25 19:35:36 +0100slack1256(~slack1256@190.162.160.23)
2020-11-25 19:35:39 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-11-25 19:36:12 +0100francesco_(~francesco@host-82-54-193-143.retail.telecomitalia.it)
2020-11-25 19:36:15 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it) (Read error: Connection reset by peer)
2020-11-25 19:37:24 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection)
2020-11-25 19:37:46 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-25 19:37:50 +0100adm(~adm@43.229.88.197)
2020-11-25 19:38:53 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 19:38:58 +0100 <slack1256> Apart from shell scripting, what is the way to determine which package exports certain module?
2020-11-25 19:39:08 +0100francesco_Franciman
2020-11-25 19:39:17 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 19:39:29 +0100 <dminuoso> slack1256: hoogle?
2020-11-25 19:39:49 +0100 <dminuoso> It's not ideal because hoogle by default only looks at some stackage resolver
2020-11-25 19:39:56 +0100 <dminuoso> And it varies between package versions
2020-11-25 19:40:11 +0100 <jle`> stackage maybe (stoogle), if it's on stackage
2020-11-25 19:40:11 +0100 <slack1256> dminuoso: You're golden, thanks.
2020-11-25 19:40:20 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311) ()
2020-11-25 19:41:09 +0100grumble(~Thunderbi@freenode/staff/grumble) (Quit: CHANGE MY MIND: Excel is a functional programming language)
2020-11-25 19:41:56 +0100adm(~adm@43.229.88.197) (Ping timeout: 240 seconds)
2020-11-25 19:42:06 +0100 <koz_> stoogle?
2020-11-25 19:42:07 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
2020-11-25 19:42:14 +0100 <solonarv> suppose I have 'jt = thatFunction _Just _Just' and I run 'toListOf jt (Just 3 & jt %~ succ)', I'll get [5,5]; this isn't the same as 'succ <$> (toListOf jt (Just 3'))', which is [4,4]
2020-11-25 19:42:24 +0100 <jle`> stoogle is what i call stackage hoogle :)
2020-11-25 19:42:52 +0100 <solonarv> the lens laws aren't formulated in terms of toListOf but still this should clearly show that 'jt' isn't a well-behaved (i.e. lawful) optic
2020-11-25 19:43:28 +0100grumble(~Thunderbi@freenode/staff/grumble)
2020-11-25 19:43:42 +0100 <jle`> what is thatFunction ?
2020-11-25 19:44:01 +0100chaosmasttter(~chaosmast@p200300c4a7107e01f51a90bd3c8201d7.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2020-11-25 19:44:05 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 265 seconds)
2020-11-25 19:44:22 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 19:45:08 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 19:45:37 +0100 <monochrom> slack1256: "ghc-pkg find-module" can do it for what you have installed.
2020-11-25 19:45:47 +0100p0a(~user@unaffiliated/p0a)
2020-11-25 19:46:12 +0100 <p0a> Hello given a list of numbers such as [1,2] I'd like to generate [[1,2], [-1,2], [1,-2], [-1,-2]], all possible sign permutations
2020-11-25 19:46:51 +0100 <p0a> I had some sort of zipWith idea in mind, and I vaguelly recall that the monadic implementation of [] is not unique, and I need the other one, not the standard one
2020-11-25 19:46:59 +0100 <slack1256> monochrom: Magic.
2020-11-25 19:47:03 +0100 <slack1256> Thanks monochrom.
2020-11-25 19:47:04 +0100 <monochrom> If you add --package-db=$HOME/.cabal/store/ghc-<version>/package.db , it looks there.
2020-11-25 19:47:13 +0100bergey`(~user@107.181.19.30)
2020-11-25 19:47:24 +0100 <jle`> > mapM (\x -> [x,-x]) [1,2]
2020-11-25 19:47:26 +0100 <lambdabot> [[1,2],[1,-2],[-1,2],[-1,-2]]
2020-11-25 19:47:38 +0100 <jle`> not sure if that's helpful though :)
2020-11-25 19:47:55 +0100 <p0a> nice! thank youl jle` that will do
2020-11-25 19:48:12 +0100 <jle`> fwiw the Monad instance of List is unique-ish, but the Applicative is where you have other options
2020-11-25 19:48:25 +0100 <jle`> > traverse (\x -> [x,-x]) [1,2]
2020-11-25 19:48:27 +0100 <lambdabot> [[1,2],[1,-2],[-1,2],[-1,-2]]
2020-11-25 19:48:27 +0100dhouthoo(~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
2020-11-25 19:48:31 +0100 <jle`> > traverse (\x -> ZipList [x,-x]) [1,2]
2020-11-25 19:48:34 +0100 <lambdabot> ZipList {getZipList = [[1,2],[-1,-2]]}
2020-11-25 19:48:43 +0100 <p0a> ah thank you.I think ZipList is the one I had on mind
2020-11-25 19:48:55 +0100Iceland_jack(~user@31.124.48.169)
2020-11-25 19:48:55 +0100Tario(~Tario@200.119.185.161) (Read error: Connection reset by peer)
2020-11-25 19:50:02 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 256 seconds)
2020-11-25 19:50:15 +0100 <jle`> trying to think of a more readable way to do it but i'm drawing a blank
2020-11-25 19:50:56 +0100 <p0a> jle`: Well, what's the pointfree version of your lambda? :P
2020-11-25 19:50:59 +0100jamm_(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-11-25 19:51:03 +0100 <p0a> That will make it more readable... :)
2020-11-25 19:51:28 +0100 <jle`> heh, maybe a step in the opposite direction :P
2020-11-25 19:52:37 +0100borne(~fritjof@200116b864509c00394a967dc8ef4e61.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-25 19:53:22 +0100alp(~alp@2a01:e0a:58b:4920:1429:542f:b729:d210)
2020-11-25 19:55:09 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 19:55:53 +0100avdb(~avdb@ip-81-11-215-86.dsl.scarlet.be) (Quit: avdb)
2020-11-25 19:56:52 +0100 <hyperisco> solonarv, I think the formulation is necessary to consider in its exact form
2020-11-25 19:57:04 +0100pavonia(~user@unaffiliated/siracusa)
2020-11-25 19:57:11 +0100 <hyperisco> it may be that combining Setters in that way doesn't give you another Setter or something, I don't know
2020-11-25 19:57:16 +0100 <hyperisco> there are different types of optics
2020-11-25 19:57:29 +0100Tario(~Tario@200.119.185.161)
2020-11-25 19:58:01 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-25 19:58:26 +0100p0a(~user@unaffiliated/p0a) (Quit: bye)
2020-11-25 19:58:41 +0100 <solonarv> hyperisco: if you don't want to use the result as a setter then you can just use the Semigroup instance to combine them
2020-11-25 19:58:58 +0100sondr3(~sondr3@cm-84.211.56.132.getinternet.no)
2020-11-25 19:58:59 +0100 <hyperisco> I am using a semigroupoid
2020-11-25 19:59:10 +0100 <hyperisco> I think your example shows the semigroup is not quite right
2020-11-25 19:59:20 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 19:59:23 +0100 <solonarv> no, I literally mean: ("hello", "sailor") ^.. (_1 <> _2)
2020-11-25 19:59:37 +0100 <solonarv> my example shows that you don't get a sensible Setter by combining with <>
2020-11-25 19:59:40 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 246 seconds)
2020-11-25 19:59:44 +0100 <solonarv> but the resulting Fold does work properly
2020-11-25 19:59:53 +0100n0042(d055ed89@208.85.237.137) (Remote host closed the connection)
2020-11-25 20:00:02 +0100 <hyperisco> I don't know about folds
2020-11-25 20:00:10 +0100 <hyperisco> my example was replacing both fst and snd with a value
2020-11-25 20:00:18 +0100 <solonarv> yeah, that's a Setter
2020-11-25 20:00:28 +0100 <hyperisco> sounds like you disagree though
2020-11-25 20:00:43 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 20:01:17 +0100 <hyperisco> and I am guessing it does violate specifically Setter laws
2020-11-25 20:01:38 +0100Ariakenom_(~Ariakenom@h-158-174-186-195.NA.cust.bahnhof.se)
2020-11-25 20:02:51 +0100borne(~fritjof@200116b864509c00394a967dc8ef4e61.dip.versatel-1u1.de)
2020-11-25 20:03:34 +0100berberman_(~berberman@unaffiliated/berberman)
2020-11-25 20:03:58 +0100 <hyperisco> seems this all falls apart because the machinery for working with optics doesn't have semigroupoid/category instances
2020-11-25 20:04:14 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 264 seconds)
2020-11-25 20:04:58 +0100Tario(~Tario@200.119.185.161) (Read error: Connection reset by peer)
2020-11-25 20:05:04 +0100Ariakenom(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Ping timeout: 260 seconds)
2020-11-25 20:05:29 +0100 <hyperisco> I dunno it just seems weird that it sounds like the purpose is to do stuff with deep data structures, yet every time I try and use it it ends up seemingly very inefficient
2020-11-25 20:05:41 +0100 <hyperisco> I don't get it yet
2020-11-25 20:05:45 +0100DTZUZU(~DTZUZU@207.81.171.116) (Read error: Connection reset by peer)
2020-11-25 20:06:01 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl)
2020-11-25 20:08:02 +0100chaosmasttter(~chaosmast@p200300c4a7107e01f51a90bd3c8201d7.dip0.t-ipconnect.de)
2020-11-25 20:10:36 +0100Rudd0(~Rudd0@185.189.115.98) (Ping timeout: 240 seconds)
2020-11-25 20:10:40 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-11-25 20:10:59 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Client Quit)
2020-11-25 20:11:18 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-11-25 20:11:59 +0100dequbed(~dequbed@yanduxian.paranoidlabs.org) (Quit: Bye o/)
2020-11-25 20:14:57 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 20:15:17 +0100dequbed(~dequbed@yanduxian.paranoidlabs.org)
2020-11-25 20:15:40 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 20:16:25 +0100DTZUZU(~DTZUZU@207.81.171.116)
2020-11-25 20:16:31 +0100irc_user(uid423822@gateway/web/irccloud.com/x-gwxffkrhmbtyeyhx) (Quit: Connection closed for inactivity)
2020-11-25 20:18:35 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 256 seconds)
2020-11-25 20:19:14 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds)
2020-11-25 20:21:38 +0100frdg(~nick@pool-71-184-143-249.bstnma.fios.verizon.net)
2020-11-25 20:23:26 +0100 <ezzieyguywuf> if I have `char 'L'; digitChar; digitChar; digitChar` as part of a megaparsec parser, how can I make the error message say something like "Expecting Lnnn" for a failure on any of the four checks, rather than "Expecting an 'L'", "Expecting a digit" etc. for each?
2020-11-25 20:24:12 +0100 <jle`> ezzieyguywuf: does it work if you wrap it and use (...) <?> "Expecting Lnnn" ?
2020-11-25 20:25:09 +0100 <ezzieyguywuf> jle`: yes, thanks! though just "<?> "Lnn"" gets it done, megaparsec adds the "Expecting"
2020-11-25 20:25:15 +0100 <jle`> nice :O
2020-11-25 20:25:25 +0100 <jle`> good ol megaparsec
2020-11-25 20:25:35 +0100 <sondr3> I'm back with yet another parsing question, I want to parse a line that can either end with a newline or EOF, but `takeWhileP Nothing notNewline <> eol <|> T.pack <$> someTill anySingle eof` always fail if the input doesn't contain a newline
2020-11-25 20:25:45 +0100matta(~user@24-113-169-116.wavecable.com) (Ping timeout: 240 seconds)
2020-11-25 20:25:51 +0100 <ezzieyguywuf> good ol that guy
2020-11-25 20:26:12 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 260 seconds)
2020-11-25 20:26:15 +0100 <sondr3> I would've expected it to try the second parser when the first failed since it wants to end with `<> eol`
2020-11-25 20:26:49 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
2020-11-25 20:27:25 +0100 <monochrom> I would think you would have (eol <|> eof) grouped together?
2020-11-25 20:27:30 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it) (Ping timeout: 256 seconds)
2020-11-25 20:28:00 +0100 <jle`> yeah, i definitely do not know how that is supposed to be parsed
2020-11-25 20:28:19 +0100 <jle`> the haskell syntax i mean, not the parser it denotes
2020-11-25 20:28:23 +0100 <xerox_> that was in Parsec too
2020-11-25 20:29:45 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it)
2020-11-25 20:29:56 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-25 20:30:02 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 20:30:13 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 20:30:33 +0100 <sondr3> monochrom: eof returns `m ()`, and I want to include the newline but only if it exists. I feel like I'm just missing something obvious
2020-11-25 20:30:47 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 20:30:50 +0100 <sondr3> So that both `text` and `text\n` are valid
2020-11-25 20:31:02 +0100 <jle`> sondr3: where are you expecting the parentheses to be in that?
2020-11-25 20:31:03 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 256 seconds)
2020-11-25 20:31:16 +0100 <jle`> (takeWhileP Nothing notNewline) <> (eol <|> T.pack <$> someTill anySingle eof) ?
2020-11-25 20:31:28 +0100Er(5fa448e7@95.164.72.231)
2020-11-25 20:31:53 +0100 <jle`> or (takeWhileP Nothing notNewline <> eol) <|> (T.pack <$> someTill anySingle eof)
2020-11-25 20:32:00 +0100 <monochrom> ((eol *> pure ()) <|> eof)
2020-11-25 20:32:15 +0100 <jle`> aka void eol
2020-11-25 20:34:05 +0100kritzefitz(~kritzefit@212.86.56.80) (Ping timeout: 240 seconds)
2020-11-25 20:34:27 +0100 <sondr3> But I don't want void eol, I want void eof but include eol :p
2020-11-25 20:34:32 +0100 <monochrom> ((eol *> pure "\n") <|> eof *> pure "") for the opposite expectation.
2020-11-25 20:34:59 +0100 <monochrom> err, ((eol *> pure "\n") <|> (eof *> pure ""))
2020-11-25 20:35:51 +0100avdb(~avdb@ip-81-11-215-86.dsl.scarlet.be)
2020-11-25 20:36:44 +0100 <sondr3> monochrom: thanks, the final one was exactly what I wanted
2020-11-25 20:36:47 +0100 <monochrom> I hope you have learned a lesson there. That you can always edit and manufacture return values, you are never stuck with what someone returns to you.
2020-11-25 20:37:29 +0100 <sondr3> I was about to comment on exactly that, very obvious in hindsight but I've been to focused on only what I can parse
2020-11-25 20:37:46 +0100 <sondr3> thanks jle` too :)
2020-11-25 20:38:35 +0100Nahra(~Nahra@unaffiliated/nahra)
2020-11-25 20:39:08 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone)
2020-11-25 20:40:13 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-25 20:40:14 +0100skiold(~skiold@ns378912.ip-5-196-69.eu)
2020-11-25 20:42:38 +0100 <dminuoso> solonarv: So I'm not really sure what the semantics of (<>) on the various optics even are.
2020-11-25 20:43:12 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb)
2020-11-25 20:43:21 +0100 <dminuoso> I usually tend to look at optics since its far more constrained and principled, and there you have
2020-11-25 20:43:26 +0100 <dminuoso> failing :: (Is k A_Fold, Is l A_Fold) => Optic' k is s a -> Optic' l js s a -> Fold s a
2020-11-25 20:43:36 +0100howdoi(uid224@gateway/web/irccloud.com/x-koaluaessvhmdatb)
2020-11-25 20:43:54 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-25 20:43:54 +0100 <dminuoso> This little fact suggests that mappending traversals together can be wonky
2020-11-25 20:44:41 +0100 <dminuoso> or wait.. failing is not the right one
2020-11-25 20:44:48 +0100 <dminuoso> summing :: (Is k A_Fold, Is l A_Fold) => Optic' k is s a -> Optic' l js s a -> Fold s a
2020-11-25 20:44:50 +0100 <dminuoso> That's the one
2020-11-25 20:45:21 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 20:46:02 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 20:46:34 +0100 <dminuoso> solonarv: At the very least for the documentation of `failing` on lens its suggested that its only lawful on disjoint traversals, Im guessing the same holds true for (<>)
2020-11-25 20:47:12 +0100 <ezzieyguywuf> hrm, another megaparsec question: is there a more concise way of doing `a <- digitChar; char ':'; b <- digitChar; pure (pack [a, ':', b'])`?
2020-11-25 20:48:28 +0100 <dminuoso> pack <$> traverse [digitChar, char ':', digitChar]
2020-11-25 20:48:30 +0100 <merijn> ezzieyguywuf: "a <- digitChar <* char ':'; b <- digitChar" is one way
2020-11-25 20:48:32 +0100 <dminuoso> err
2020-11-25 20:48:37 +0100 <dminuoso> pack <$> sequence [digitChar, char ':', digitChar]
2020-11-25 20:48:46 +0100 <merijn> ah, that's better
2020-11-25 20:49:06 +0100christo(~chris@81.96.113.213)
2020-11-25 20:49:10 +0100 <ezzieyguywuf> ooooh, nice use of sequence there
2020-11-25 20:49:19 +0100skiold(~skiold@ns378912.ip-5-196-69.eu) (Quit: WeeChat 2.3)
2020-11-25 20:49:38 +0100raichoo(~raichoo@dslb-178-001-144-016.178.001.pools.vodafone-ip.de) (Quit: Lost terminal)
2020-11-25 20:49:52 +0100avdb(~avdb@ip-81-11-215-86.dsl.scarlet.be) (Quit: avdb)
2020-11-25 20:50:11 +0100avdb(~avdb@ip-81-11-215-86.dsl.scarlet.be)
2020-11-25 20:50:20 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-25 20:52:00 +0100 <koz_> :t sequence
2020-11-25 20:52:02 +0100 <lambdabot> (Traversable t, Monad m) => t (m a) -> m (t a)
2020-11-25 20:52:06 +0100 <koz_> Ah, so sequenceA.
2020-11-25 20:52:18 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-25 20:52:40 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 20:53:43 +0100christo(~chris@81.96.113.213) (Ping timeout: 256 seconds)
2020-11-25 20:53:54 +0100 <frdg> I purchased a vps service but I do not have enough ram on the VPS to compile my program with stack. The problem with making binaries is that my OS is openSUSE but the VPS is centos. What are my options?
2020-11-25 20:54:08 +0100skiold(~skiold@ns378912.ip-5-196-69.eu)
2020-11-25 20:54:09 +0100 <dminuoso> frdg: Building inside a docker container
2020-11-25 20:54:21 +0100 <sm[m]> frdg: temporarily increase the size of your vps
2020-11-25 20:54:23 +0100 <merijn> frdg: Download VirtualBox, install centos in VM, build there, copy binary to VPS
2020-11-25 20:54:27 +0100 <ezzieyguywuf> hrm, "Couldn't match type 'Char' with [Char]"
2020-11-25 20:54:50 +0100 <frdg> ok many options
2020-11-25 20:54:53 +0100 <dminuoso> frdg: If you build inside alpine, you can statically link it and then extract the build artifact out of the container
2020-11-25 20:55:05 +0100 <dminuoso> that decouples you from any particular system
2020-11-25 20:55:11 +0100 <sm[m]> frdg: try to configure stack/cabal/ghc to build in less ram
2020-11-25 20:55:14 +0100 <dminuoso> haha
2020-11-25 20:55:17 +0100 <dminuoso> that's a good one
2020-11-25 20:55:20 +0100 <merijn> sm[m]: Pointless
2020-11-25 20:55:20 +0100 <sm[m]> frdg: configure enough swap on your vps, and let it run overnight
2020-11-25 20:55:34 +0100 <merijn> sm[m]: GHC just doesn't really work with less than 1-2GB
2020-11-25 20:55:44 +0100 <merijn> A super cheap VPS will have 256-512 MB or something
2020-11-25 20:55:45 +0100 <sm[m]> you can influence it
2020-11-25 20:56:02 +0100 <frdg> ok I think I am going to start with building from a VM.
2020-11-25 20:56:05 +0100 <sm[m]> we don't know how much frdg has, they might be close to success. And they asked for options
2020-11-25 20:56:07 +0100 <dminuoso> sm[m]: its a fairly lost cause
2020-11-25 20:56:09 +0100 <merijn> Yeah, but why bother? No reason to have GHC on the machine just because you plan to run it there
2020-11-25 20:56:16 +0100 <dminuoso> you add one wrong line of code, and things blow up
2020-11-25 20:56:20 +0100 <dminuoso> just because megaparsec
2020-11-25 20:56:38 +0100 <sm[m]> you're assuming a lot. Sometimes the nearby fix is the cheapest and best
2020-11-25 20:56:47 +0100 <dminuoso> sm[m]: No Im talking from experience
2020-11-25 20:56:47 +0100 <sm[m]> I've said my piece
2020-11-25 20:56:54 +0100christo(~chris@81.96.113.213)
2020-11-25 20:57:10 +0100 <dminuoso> I have a 70 LoC parser that takes about 30 seconds for a single module and memory goes to crazy
2020-11-25 20:57:23 +0100 <dminuoso> for no reason other than megaparsec having inline on almost everything
2020-11-25 20:57:39 +0100 <dminuoso> best part of it is
2020-11-25 20:57:51 +0100 <merijn> It doesn't help performance? :p
2020-11-25 20:57:52 +0100 <dminuoso> I have this `asum [ ... ]` and if I slightly modify that list, it gets exponentially worse
2020-11-25 20:57:56 +0100 <int-e> dminuoso: But... how big is that single module?
2020-11-25 20:58:00 +0100 <dminuoso> int-e: 70 LoC.
2020-11-25 20:58:07 +0100alp(~alp@2a01:e0a:58b:4920:1429:542f:b729:d210) (Ping timeout: 272 seconds)
2020-11-25 20:58:14 +0100 <int-e> ...
2020-11-25 20:58:26 +0100 <dminuoso> oh
2020-11-25 20:58:28 +0100 <int-e> dminuoso: You mean the compiler takes 30 seconds to compile the module?
2020-11-25 20:58:31 +0100 <dminuoso> Yes
2020-11-25 20:58:49 +0100 <int-e> Fun.
2020-11-25 20:59:14 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 20:59:15 +0100 <dminuoso> It's fairly simple, nothing fancy. Just rudimentary megaparsec usage
2020-11-25 20:59:25 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771)
2020-11-25 20:59:28 +0100 <dminuoso> I debugged ghc a bit, filed a bug report. But it's just their overuse of inline
2020-11-25 20:59:46 +0100 <merijn> dminuoso: But INLINE makes things fast!
2020-11-25 20:59:51 +0100 <int-e> Right, overuse of inlining would've been my first guess.
2020-11-25 20:59:55 +0100conal(~conal@64.71.133.70)
2020-11-25 20:59:58 +0100 <int-e> Then, exploding types.
2020-11-25 21:00:14 +0100 <merijn> I love when people make annotations for "performance" without benchmarks
2020-11-25 21:00:30 +0100hackagemigrant-core 0.1.0.0 - Semi-automatic database schema migrations https://hackage.haskell.org/package/migrant-core-0.1.0.0 (TobiasDammers)
2020-11-25 21:00:58 +0100skiold(~skiold@ns378912.ip-5-196-69.eu) (Quit: WeeChat 2.3)
2020-11-25 21:01:07 +0100 <int-e> compilation is a one time cost, right?
2020-11-25 21:01:10 +0100int-eruns.
2020-11-25 21:01:14 +0100 <dminuoso> Result size of Simplifier iteration=1 = {terms: 4,972,599,types: 7,677,397,coercions: 516,358,joins: 146,810/146,811}
2020-11-25 21:01:22 +0100 <maerwald> int-e: hahaha
2020-11-25 21:01:23 +0100 <dminuoso> That's straight out of a minimalistic testcase
2020-11-25 21:01:24 +0100 <merijn> int-e: In my case I had someone mark all of my foreign imports as unsafe
2020-11-25 21:01:30 +0100hackagemigrant-sqlite-simple 0.1.0.0, migrant-postgresql-simple 0.1.0.0, migrant-hdbc 0.1.0.0 (TobiasDammers)
2020-11-25 21:01:41 +0100 <merijn> int-e: Because "unsafe foreign imports are faster, so you should use those by default"
2020-11-25 21:01:43 +0100 <monochrom> https://xkcd.com/303/ applies again. Today is "compiling" day.
2020-11-25 21:01:57 +0100 <koz_> dminuoso: Wat.
2020-11-25 21:01:59 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 21:02:00 +0100 <int-e> merijn: I think I was there for a previous discussion of that incident
2020-11-25 21:02:11 +0100 <dminuoso> koz_: https://gitlab.haskell.org/ghc/ghc/-/issues/17370
2020-11-25 21:02:13 +0100 <dminuoso> :>
2020-11-25 21:02:14 +0100 <merijn> int-e: On foreign calls that were all outside of the critical path and were mostly syscalls >.>
2020-11-25 21:02:25 +0100skiold(~skiold@ns378912.ip-5-196-69.eu)
2020-11-25 21:02:29 +0100fendor_(~fendor@178.165.131.166.wireless.dyn.drei.com) (Remote host closed the connection)
2020-11-25 21:02:31 +0100 <merijn> int-e: Could be, I get sad every time I'm reminded :p
2020-11-25 21:02:40 +0100skiold(~skiold@ns378912.ip-5-196-69.eu) (Client Quit)
2020-11-25 21:02:46 +0100 <int-e> fortunately, system calls never block
2020-11-25 21:03:09 +0100 <dminuoso> until they do
2020-11-25 21:03:18 +0100 <monochrom> Let's up the game. System calls are faster if the caller is in ring 0, too.
2020-11-25 21:03:19 +0100 <int-e> it's true for gettimeofday, and I'm generalizing from there
2020-11-25 21:03:31 +0100 <dminuoso> I know of at least one syscall that blocks
2020-11-25 21:03:33 +0100skiold(~skiold@ns378912.ip-5-196-69.eu)
2020-11-25 21:03:47 +0100skiold(~skiold@ns378912.ip-5-196-69.eu) (Client Quit)
2020-11-25 21:03:49 +0100 <int-e> dminuoso: sleep?
2020-11-25 21:03:53 +0100 <dminuoso> ioctl
2020-11-25 21:03:59 +0100skiold(~skiold@ns378912.ip-5-196-69.eu)
2020-11-25 21:04:10 +0100 <int-e> (which is probably implemented using select I guess)
2020-11-25 21:04:29 +0100 <dminuoso> (well ioctl *can* block, depending on which ioctl you invoke)
2020-11-25 21:04:35 +0100 <int-e> I think the list will be shorter if we list system calls that don't block
2020-11-25 21:04:38 +0100skiold(~skiold@ns378912.ip-5-196-69.eu) (Client Quit)
2020-11-25 21:05:31 +0100jonatanb(jonatanb@gateway/vpn/protonvpn/jonatanb) (Remote host closed the connection)
2020-11-25 21:06:03 +0100 <frdg> when you initially compile a program from scratch will stack use more ram then it would when you later make small changes to the application?
2020-11-25 21:06:33 +0100 <dminuoso> yes. no. perhaps
2020-11-25 21:06:46 +0100 <int-e> frdg: I don't know. ghc tends to use less RAM when it (re-)compiles fewer modules
2020-11-25 21:06:51 +0100 <monochrom> Most likely yes. Because the first time it builds aeson, the second time it doesn't, for example.
2020-11-25 21:06:51 +0100 <dminuoso> frdg: It doesnt really matter at the end. GHC has no parallel module compilatoin
2020-11-25 21:07:19 +0100 <ezzieyguywuf> is there a generalized "concat", i.e. something that would do `foldl (<>) "" ["A", "B", "C"]`
2020-11-25 21:07:22 +0100 <frdg> ok thanks
2020-11-25 21:07:43 +0100 <int-e> dminuoso: Yes it does, because everybody uses ghc --make and GHC has internal caches that are not flushed between module compilations.
2020-11-25 21:07:54 +0100 <int-e> (everybody except ghc's own build system, incidentally)
2020-11-25 21:08:11 +0100skiold(~skiold@gateway/tor-sasl/skiold)
2020-11-25 21:08:12 +0100 <dminuoso> oh
2020-11-25 21:08:18 +0100 <geekosaur> mconcat?
2020-11-25 21:08:36 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it) (Ping timeout: 240 seconds)
2020-11-25 21:08:51 +0100 <geekosaur> or sconcat if it's a Semigroup
2020-11-25 21:09:18 +0100 <dminuoso> int-e: well, recently Ive been annoyed by all the caching. There's subtle bugs in either cabal or ghc, I almost weekly have an issue where I have to nuke dist-newstyle before compilation can succeed
2020-11-25 21:10:03 +0100 <merijn> dminuoso: You must be doing *something* I haven't encountered that in years
2020-11-25 21:10:05 +0100avdb(~avdb@ip-81-11-215-86.dsl.scarlet.be) (Quit: avdb)
2020-11-25 21:10:07 +0100 <int-e> Hmm. I'm still on v1 sandboxes... but I tend to nuke those a lot too.
2020-11-25 21:10:09 +0100wonko7(~wonko7@2a01:e35:2ffb:7040:55f1:c3a3:cdbe:bf52) (Ping timeout: 272 seconds)
2020-11-25 21:10:18 +0100 <merijn> int-e: ... why? o.O
2020-11-25 21:10:21 +0100 <monochrom> "Please wash your hands and run 'cabal clean' often." >:)
2020-11-25 21:10:24 +0100 <dminuoso> merijn: I think its either this particular cabal or ghc version
2020-11-25 21:10:28 +0100 <dminuoso> or combination
2020-11-25 21:10:30 +0100 <ezzieyguywuf> geekosaur: I think one of those may be what I'm looking for thanks.
2020-11-25 21:10:33 +0100 <int-e> merijn: why not?
2020-11-25 21:11:03 +0100 <monochrom> Heh, I don't push everyone to go v2, I was a bit reluctant too.
2020-11-25 21:11:08 +0100 <int-e> They work, they have a neat cleanup story, and I'm used to them.
2020-11-25 21:11:17 +0100 <merijn> because v2-build is so much more robust and reliable >.> It already was years ago >.>
2020-11-25 21:11:18 +0100 <sclv> i've certainly noticed that when i use nix to swap out entire package envs then the cached stuff goes stale on v1
2020-11-25 21:11:25 +0100 <int-e> Well I'll be forced to switch eventually.
2020-11-25 21:11:28 +0100f-a(~f-a@151.34.188.246)
2020-11-25 21:11:44 +0100 <sclv> because the hashing relies on version numbers and the like, so if i'm swapping between different local versions of deps it gets confused
2020-11-25 21:11:46 +0100 <int-e> But this channel should understand the desire to not do so eagerly :P
2020-11-25 21:12:15 +0100Tario(~Tario@200.119.185.214)
2020-11-25 21:12:18 +0100 <int-e> If you want a rational reason: The later I switch the more well-rounded the v2 commands will be.
2020-11-25 21:12:33 +0100f-a(~f-a@151.34.188.246) ()
2020-11-25 21:12:48 +0100 <sclv> this is for $WORK$ which is pervasively nixified so i stick to v1
2020-11-25 21:13:02 +0100 <sclv> for personal dev i use v2 and its pretty damn seamless at this point
2020-11-25 21:13:07 +0100 <merijn> I switched to v2-build in 2016 or something, breaking all my editor tooling (like hdevtools in the progress) because it was less painful than fighting v1 >.>
2020-11-25 21:13:10 +0100 <sclv> given that i sort of know what stuff doesn't work
2020-11-25 21:13:38 +0100treotmnor(~treotmnor@8.210.183.149)
2020-11-25 21:13:55 +0100 <int-e> merijn: that's the thing though... ever since I switched to using sandboxes I never had to fight
2020-11-25 21:14:26 +0100 <merijn> int-e: I had to reinit sandboxes *a lot*, though
2020-11-25 21:14:31 +0100 <merijn> Because that's what I used before
2020-11-25 21:14:36 +0100 <int-e> sure.
2020-11-25 21:14:37 +0100alp(~alp@2a01:e0a:58b:4920:3dd7:733:8dcb:bbbc)
2020-11-25 21:14:44 +0100 <int-e> I have a shell script for that
2020-11-25 21:14:53 +0100Ariakenom__(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se)
2020-11-25 21:14:53 +0100 <merijn> If dependencies are in flux nuking and rebuilding the world every time is a *massive* time sync
2020-11-25 21:15:06 +0100 <geekosaur> "sink"
2020-11-25 21:15:08 +0100 <int-e> sink
2020-11-25 21:15:29 +0100 <merijn> I got stuff to do that doesn't involve waiting for the kmettiverse to compile for the 15th time
2020-11-25 21:15:43 +0100 <int-e> merijn: also, honestly, I don't really have big projects
2020-11-25 21:15:53 +0100 <merijn> geekosaur: Fixing my brain to no output a random homophone when I type is a lost cause :p
2020-11-25 21:15:56 +0100 <monochrom> If dependencies are in flux, v2 rebuilds enough of the world to be a time sink, too.
2020-11-25 21:16:07 +0100 <merijn> monochrom: Depends of how much
2020-11-25 21:16:16 +0100 <int-e> make all the dependencies that are in flux source dependencies :P
2020-11-25 21:16:21 +0100 <merijn> monochrom: Like, adding 1 or 2 packages won't rebuild the entire kmettiverse :p
2020-11-25 21:16:41 +0100 <koz_> merijn: Lol@'kmettiverse'. The Kmett Extended Universe.
2020-11-25 21:16:52 +0100 <merijn> Actually
2020-11-25 21:17:10 +0100 <monochrom> Well I should get out of this debate.
2020-11-25 21:17:12 +0100 <merijn> Maybe we should start calling it the KCU Kmett Cinematic Universe or something :p
2020-11-25 21:17:21 +0100 <koz_> I'm down for KCU.
2020-11-25 21:17:31 +0100 <koz_> Avengers: Rise of the Profunctor.
2020-11-25 21:17:56 +0100 <monochrom> I was going to say, the disease of the lot of you is debating until other people do things your way. This is already the second time within an hour, even half an hour.
2020-11-25 21:18:05 +0100 <monochrom> Today is compiling day and bikeshedding day.
2020-11-25 21:18:20 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Ping timeout: 260 seconds)
2020-11-25 21:18:34 +0100 <merijn> monochrom: It *is* compiling day, that's why I have nothing better to do :p
2020-11-25 21:18:36 +0100 <monochrom> Kmett Categorical Universe
2020-11-25 21:18:43 +0100 <merijn> monochrom: Rats
2020-11-25 21:18:48 +0100 <monochrom> Oh haha good cause
2020-11-25 21:18:48 +0100Ariakenom_(~Ariakenom@h-158-174-186-195.NA.cust.bahnhof.se) (Ping timeout: 260 seconds)
2020-11-25 21:19:03 +0100 <merijn> monochrom: I spent 5 minutes pondering better a better word for C and somehow completely missed Category...
2020-11-25 21:19:33 +0100geekosaurresembles that too (although now the compiling is mostly done but my poor little netbook is still recovering from it)
2020-11-25 21:19:50 +0100 <koz_> Instead of GHC2021, we should have 'KCU' as a language option. :P
2020-11-25 21:19:51 +0100 <merijn> monochrom: I'm messing with the database schema of my code, which is waaaaaaaay at the bottom of my module hierarchy, so it triggers nearly full rebuild that takes like 10 minutes each time >.>
2020-11-25 21:20:03 +0100 <monochrom> You are in front of the guy who thought up how to expand "tl;dr" to "type-level instance diversification and resolution", "sicp" to "structure and identification of cabalized packages". You really stand no chance. :)
2020-11-25 21:20:08 +0100 <merijn> monochrom: So lots of time to spread the gospel :p
2020-11-25 21:20:26 +0100 <koz_> monochrom: Wordplay is how you flex in #haskell (and the ecosystem).
2020-11-25 21:20:31 +0100Fractalis(~Fractalis@c-174-54-165-158.hsd1.pa.comcast.net)
2020-11-25 21:20:50 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-11-25 21:21:16 +0100 <tomjaguarpaw> Yes, we've already maxed out on pointfree flexing
2020-11-25 21:21:24 +0100 <monochrom> Hey, Kmett Compiling Universe is appropriate, too.
2020-11-25 21:21:47 +0100 <koz_> Lol.
2020-11-25 21:22:17 +0100 <koz_> Steps to putting a package on Hackage: 1. Write it; 2. Agonize for hours over suitable worlplay-ey name.
2020-11-25 21:22:18 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771) (Quit: WeeChat 2.8)
2020-11-25 21:22:39 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771)
2020-11-25 21:22:49 +0100pokid(~pokid@unaffiliated/pokid) ()
2020-11-25 21:22:59 +0100 <merijn> koz_: 3. generalize functionality so that name is now overly specific >.>
2020-11-25 21:23:06 +0100 <koz_> merijn: Rofl this.
2020-11-25 21:23:12 +0100Deide(~Deide@217.155.19.23)
2020-11-25 21:23:25 +0100 <koz_> Because if you don't have five type variables and ten constraints, what are you even doing?
2020-11-25 21:23:36 +0100 <koz_> (four of which must be higher-order)
2020-11-25 21:23:39 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 21:23:55 +0100 <merijn> koz_: Oh, more like "I named it broadcast-chan and now it's unclear that there's a bunch of super useful parallelisation things in there" :p
2020-11-25 21:24:25 +0100 <koz_> merijn: I _cannot_ read '-chan' without imagining animu schoolgirls.
2020-11-25 21:25:18 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771) (Client Quit)
2020-11-25 21:25:36 +0100 <monochrom> And the following is true of both complex analysis and lumber work: To take logs, you must cut branches.
2020-11-25 21:25:41 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771)
2020-11-25 21:25:49 +0100 <tomjaguarpaw> Or "I named it product-profunctors and now I realise that sum profunctors are useful too"
2020-11-25 21:25:49 +0100fendor(~fendor@178.165.131.166.wireless.dyn.drei.com)
2020-11-25 21:26:01 +0100kuribas(~user@ptr-25vy0iacghmhtu8v1sd.18120a2.ip6.access.telenet.be)
2020-11-25 21:26:41 +0100 <merijn> tbh, broadcast-chan-conduit is some of the most massively useful code I've written and now it's under a cryptic name like that :p
2020-11-25 21:26:56 +0100wonko7(~wonko7@lns-bzn-55-82-255-183-4.adsl.proxad.net)
2020-11-25 21:27:06 +0100 <tomjaguarpaw> What does it do?
2020-11-25 21:27:08 +0100 <koz_> merijn: Needs more wordplay.
2020-11-25 21:27:15 +0100 <koz_> Quick, summon monochrom!
2020-11-25 21:27:32 +0100gproto023(~gproto23@unaffiliated/gproto23)
2020-11-25 21:28:03 +0100 <merijn> tomjaguarpaw: Suppose you have a stream of items you wanna map an IO function over. You use Conduit.mapM. Except your IO is slow and blocking (like an HTTP request), why not parallelise that part of your conduit pipeline!
2020-11-25 21:28:52 +0100 <tomjaguarpaw> Ah cool
2020-11-25 21:29:10 +0100 <tomjaguarpaw> So you have a queue of items in progress whilst you wait for the first to finish?
2020-11-25 21:29:59 +0100gproto23(~gproto23@unaffiliated/gproto23) (Ping timeout: 256 seconds)
2020-11-25 21:30:06 +0100 <merijn> tomjaguarpaw: You can have N parallel running copies of you "a -> IO b" (or really anything MonadUnliftIO) and just process them in whatever order they finish
2020-11-25 21:30:13 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771) (Client Quit)
2020-11-25 21:30:18 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-25 21:30:38 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771)
2020-11-25 21:32:43 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771) (Client Quit)
2020-11-25 21:32:45 +0100f-a(~f-a@151.34.188.246)
2020-11-25 21:33:04 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771)
2020-11-25 21:33:14 +0100Iceland_jack(~user@31.124.48.169) (Read error: Connection reset by peer)
2020-11-25 21:33:22 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-25 21:33:32 +0100Iceland_jack(~user@31.124.48.169)
2020-11-25 21:33:47 +0100kuribas(~user@ptr-25vy0iacghmhtu8v1sd.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2020-11-25 21:34:51 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
2020-11-25 21:36:02 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 21:36:58 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-11-25 21:40:12 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-25 21:40:28 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:e18f:e78b:7854:f771) (Quit: WeeChat 2.8)
2020-11-25 21:40:29 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-25 21:41:50 +0100Kaivo(~Kaivo@104-200-86-99.mc.derytele.com) (Quit: WeeChat 2.9)
2020-11-25 21:42:11 +0100Kaivo(~Kaivo@104-200-86-99.mc.derytele.com)
2020-11-25 21:42:46 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-25 21:43:21 +0100s00pcan(~chris@075-133-056-178.res.spectrum.com) (Remote host closed the connection)
2020-11-25 21:44:01 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com) (Ping timeout: 264 seconds)
2020-11-25 21:44:28 +0100kelsey(~keteskyl@2600:6c64:7b7f:fa42:880b:e2d1:945a:df75)
2020-11-25 21:44:57 +0100AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving)
2020-11-25 21:45:14 +0100hidedagger(~nate@unaffiliated/hidedagger) (Client Quit)
2020-11-25 21:45:54 +0100Kaivo(~Kaivo@104-200-86-99.mc.derytele.com) (Client Quit)
2020-11-25 21:45:58 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
2020-11-25 21:46:18 +0100Kaivo(~Kaivo@104-200-86-99.mc.derytele.com)
2020-11-25 21:49:52 +0100knupfer(~Thunderbi@200116b82ca96500dc7bf53810219cf9.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-25 21:50:01 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-11-25 21:51:15 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com)
2020-11-25 21:53:44 +0100knupfer(~Thunderbi@200116b82ca9650038f2d3fffee42921.dip.versatel-1u1.de)
2020-11-25 21:53:44 +0100knupfer(~Thunderbi@200116b82ca9650038f2d3fffee42921.dip.versatel-1u1.de) (Client Quit)
2020-11-25 21:54:00 +0100knupfer(~Thunderbi@i5E86B492.versanet.de)
2020-11-25 21:54:07 +0100bergey`(~user@107.181.19.30) (Ping timeout: 246 seconds)
2020-11-25 21:54:57 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-25 21:56:17 +0100knupfer(~Thunderbi@i5E86B492.versanet.de) (Client Quit)
2020-11-25 21:56:24 +0100knupfer(~Thunderbi@200116b82ca9650071867c643babc6d8.dip.versatel-1u1.de)
2020-11-25 21:56:28 +0100gproto023(~gproto23@unaffiliated/gproto23) (Ping timeout: 256 seconds)
2020-11-25 21:58:19 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com) (Ping timeout: 256 seconds)
2020-11-25 21:58:37 +0100dwt(~dwt@c-98-200-58-177.hsd1.tx.comcast.net)
2020-11-25 22:02:38 +0100 <dminuoso> merijn: Why not just mapM with forkIO?
2020-11-25 22:02:49 +0100 <dminuoso> Oh wait
2020-11-25 22:02:55 +0100 <dminuoso> This feeds the results back into the conduit?
2020-11-25 22:02:56 +0100f-a(~f-a@151.34.188.246) (Ping timeout: 240 seconds)
2020-11-25 22:04:01 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-25 22:05:02 +0100 <merijn> dminuoso: Yes
2020-11-25 22:05:12 +0100f-a(~f-a@151.38.94.168)
2020-11-25 22:05:17 +0100 <merijn> dminuoso: Also it handles retrying on exception or other exception mechanisms
2020-11-25 22:05:31 +0100conal(~conal@64.71.133.70)
2020-11-25 22:05:33 +0100 <merijn> dminuoso: Also the parallelism is bounded, unlike mapConcurrently
2020-11-25 22:05:50 +0100 <merijn> Which is important, if you're gonna, say, push a few million entries through :)
2020-11-25 22:06:25 +0100 <merijn> dminuoso: Also, the complexity of handling multiple parallel forkIOs is insane
2020-11-25 22:06:45 +0100f-a(~f-a@151.38.94.168) ()
2020-11-25 22:06:49 +0100 <merijn> dminuoso: Because I implemented it like that in like 3 different projects and figured I might as well do it properly *once* and be done with it
2020-11-25 22:07:14 +0100 <merijn> Because Async doesn't quite fit my wants/needs
2020-11-25 22:10:02 +0100jonn(~sweater@206.81.18.26)
2020-11-25 22:10:04 +0100 <merijn> dminuoso: That's also why I made sure to keep the dependency footprint superlow (3 transitive dependencies: base, transformers, and unliftio-core), so I can easily slap it in/on things :p
2020-11-25 22:10:14 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-25 22:13:16 +0100ystael(~ystael@209.6.50.55) (Read error: Connection reset by peer)
2020-11-25 22:13:27 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Quit: leaving)
2020-11-25 22:15:04 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it)
2020-11-25 22:15:40 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2020-11-25 22:16:19 +0100Er(5fa448e7@95.164.72.231) (Ping timeout: 245 seconds)
2020-11-25 22:16:30 +0100ystael(~ystael@209.6.50.55)
2020-11-25 22:17:41 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it) (Remote host closed the connection)
2020-11-25 22:17:57 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it)
2020-11-25 22:20:30 +0100matta(~user@24-113-169-116.wavecable.com)
2020-11-25 22:20:35 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it) (Client Quit)
2020-11-25 22:21:34 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-25 22:23:16 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net) (Remote host closed the connection)
2020-11-25 22:26:44 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-11-25 22:26:57 +0100Franciman(~francesco@host-82-54-193-143.retail.telecomitalia.it)
2020-11-25 22:27:45 +0100jollygood2(~bc8165ab@217.29.117.252) (Quit: http://www.okay.uz/ (Session timeout))
2020-11-25 22:29:13 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 22:29:39 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 22:32:19 +0100banner(~banner@116-255-17-165.ip4.superloop.com)
2020-11-25 22:32:22 +0100banner(~banner@116-255-17-165.ip4.superloop.com) (Client Quit)
2020-11-25 22:32:38 +0100vollenweider(~vollenwei@4e69b241.skybroadband.com)
2020-11-25 22:32:48 +0100param(~user@c-73-8-150-140.hsd1.il.comcast.net)
2020-11-25 22:34:21 +0100ClaudiusMaximus(~claude@unaffiliated/claudiusmaximus) (Quit: ->)
2020-11-25 22:34:48 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
2020-11-25 22:35:05 +0100 <dminuoso> Huh wow, here's a class I've never seen
2020-11-25 22:35:07 +0100 <dminuoso> https://hackage.haskell.org/package/base-4.14.0.0/docs/Control-Monad-Zip.html#t:MonadZip
2020-11-25 22:35:16 +0100 <dminuoso> % :t mzip
2020-11-25 22:35:16 +0100 <yahb> dminuoso: ; <interactive>:1:1: error:; * Variable not in scope: mzip; * Perhaps you meant one of these: `zip' (imported from Data.List.NonEmpty), `BSLC.zip' (imported from Data.ByteString.Lazy.Char8), `BSC.zip' (imported from Data.ByteString.Char8)
2020-11-25 22:35:27 +0100 <dminuoso> Oh well. Strange I have never seen this
2020-11-25 22:35:43 +0100s00pcan(~chris@075-133-056-178.res.spectrum.com)
2020-11-25 22:35:54 +0100 <dminuoso> liftM (f *** g) (mzip ma mb) = mzip (liftM f ma) (liftM g mb)
2020-11-25 22:38:18 +0100jvsg(~root@165.227.89.139) (Ping timeout: 272 seconds)
2020-11-25 22:38:36 +0100vollenweider(~vollenwei@4e69b241.skybroadband.com) (Ping timeout: 240 seconds)
2020-11-25 22:38:43 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Ping timeout: 240 seconds)
2020-11-25 22:38:46 +0100gehmehgeh_(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-11-25 22:40:52 +0100 <shapr> dminuoso: write a monad comprehension now? :-D
2020-11-25 22:41:59 +0100Amras(~Amras@unaffiliated/amras) (Ping timeout: 272 seconds)
2020-11-25 22:42:49 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com)
2020-11-25 22:43:46 +0100hexfive(~hexfive@50-47-142-195.evrt.wa.frontiernet.net)
2020-11-25 22:44:01 +0100alx741(~alx741@181.196.69.178) (Ping timeout: 264 seconds)
2020-11-25 22:44:04 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-11-25 22:44:23 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 22:44:54 +0100 <dolio> That lets you use zip comprehensions. [ E | x <- l | y <- r ]
2020-11-25 22:45:38 +0100borne(~fritjof@200116b864509c00394a967dc8ef4e61.dip.versatel-1u1.de) (Ping timeout: 264 seconds)
2020-11-25 22:46:06 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Quit: vfaronov)
2020-11-25 22:50:24 +0100conal(~conal@64.71.133.70)
2020-11-25 22:50:40 +0100borne(~fritjof@200116b864509c00394a967dc8ef4e61.dip.versatel-1u1.de)
2020-11-25 22:50:53 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-25 22:52:59 +0100param(~user@c-73-8-150-140.hsd1.il.comcast.net) ("ERC (IRC client for Emacs 26.3)")
2020-11-25 22:54:08 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com) (Ping timeout: 272 seconds)
2020-11-25 22:56:29 +0100alx741(~alx741@181.196.68.166)
2020-11-25 22:57:00 +0100chaosmasttter(~chaosmast@p200300c4a7107e01f51a90bd3c8201d7.dip0.t-ipconnect.de) (Quit: WeeChat 2.9)
2020-11-25 22:57:24 +0100__monty__(~toonn@unaffiliated/toonn) (Quit: leaving)
2020-11-25 22:57:33 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com)
2020-11-25 22:58:06 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 23:02:00 +0100hackagemutable-lens 0.4.1.0 - Interoperate mutable references with regular lens https://hackage.haskell.org/package/mutable-lens-0.4.1.0 (infinity0)
2020-11-25 23:03:18 +0100 <koz_> Wait, I remember someone talking about mutable lens stuffs.
2020-11-25 23:03:41 +0100 <koz_> infinity0: Was it you who inquired about them recently?
2020-11-25 23:04:34 +0100Rudd0(~Rudd0@185.189.115.103)
2020-11-25 23:04:38 +0100 <infinity0> koz_: no but i had a conversation with jle` about it a while ago, here https://github.com/mstksg/mutable/issues/2
2020-11-25 23:05:01 +0100 <koz_> infinity0: Ah, OK. I remember someone in here asking about this very thing not too long ago.
2020-11-25 23:05:12 +0100 <koz_> Nice thing you've got there - I wonder if there's an optics version too?
2020-11-25 23:05:41 +0100 <infinity0> i doubt it, i made this not too long ago, don't think anyone picked up heavily on the idea yet
2020-11-25 23:06:04 +0100 <infinity0> probably could do with a bit of low-level optimisation but it performs reasonably ok
2020-11-25 23:06:05 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com) (Ping timeout: 240 seconds)
2020-11-25 23:06:20 +0100 <koz_> Did you try benching it? Where's the part that makes it choke?
2020-11-25 23:07:00 +0100 <infinity0> i have a benchmark showing ~13% slowdown, probably due to the boxing and unboxing
2020-11-25 23:07:09 +0100 <infinity0> in ghc/haskell you can't mix the two in a polymorphic way
2020-11-25 23:07:40 +0100 <infinity0> so in primitive monads the state is unboxed, in my mutable lens wrapper it has to be boxed to interoperate with regular lens, optics, etc
2020-11-25 23:07:55 +0100 <infinity0> would be great if someone figured out a solution
2020-11-25 23:08:19 +0100 <koz_> Ah, yeah, that's... a tricky prospect.
2020-11-25 23:08:22 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-25 23:08:37 +0100knupfer(~Thunderbi@200116b82ca9650071867c643babc6d8.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-25 23:08:42 +0100darjeeling_(~darjeelin@122.245.217.23) (Ping timeout: 272 seconds)
2020-11-25 23:09:16 +0100 <infinity0> i also haven't tried running it on non-linear functors like [] to see if that would actually result in unsoundness, perhaps that's worth doing too...
2020-11-25 23:09:52 +0100 <infinity0> actually on second thoughts it's probably fine, assuming the content of the reference is itself a pure immutable object and doesn't contain inner references
2020-11-25 23:10:18 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com)
2020-11-25 23:10:28 +0100hseg(~gesh@IGLD-84-228-238-117.inter.net.il)
2020-11-25 23:11:02 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-25 23:11:20 +0100reallymemorable(~quassel@pool-100-2-25-229.nycmny.fios.verizon.net)
2020-11-25 23:11:50 +0100caecilius(~caecilius@pool-108-46-151-95.nycmny.fios.verizon.net)
2020-11-25 23:12:01 +0100kritzefitz(~kritzefit@212.86.56.80) (Remote host closed the connection)
2020-11-25 23:15:04 +0100tsrt^(tsrt@ip98-184-89-2.mc.at.cox.net)
2020-11-25 23:15:34 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 23:16:35 +0100 <koz_> But yeah, cool little thing you have there.
2020-11-25 23:17:05 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com) (Ping timeout: 256 seconds)
2020-11-25 23:18:07 +0100 <infinity0> thanks!
2020-11-25 23:18:29 +0100 <infinity0> to be clear the benchmark i quoted above does nothing except read/write to the reference/lens, so in a "real" program it won't be that much slower
2020-11-25 23:18:36 +0100 <infinity0> so feel free to use it in your pet projects :)
2020-11-25 23:19:16 +0100matta(~user@24-113-169-116.wavecable.com) (Ping timeout: 240 seconds)
2020-11-25 23:19:20 +0100 <koz_> It'd be nice to have the various indexed stuff, since that'd be very useful for mutable arrays.
2020-11-25 23:19:54 +0100dyamon(~dyamon@cpc69058-oxfd26-2-0-cust662.4-3.cable.virginm.net)
2020-11-25 23:20:36 +0100michalz(~user@185.246.204.47) (Remote host closed the connection)
2020-11-25 23:20:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-11-25 23:20:43 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com)
2020-11-25 23:20:45 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-25 23:22:22 +0100darjeeling_(~darjeelin@122.245.217.23)
2020-11-25 23:23:53 +0100hseg(~gesh@IGLD-84-228-238-117.inter.net.il) (Ping timeout: 256 seconds)
2020-11-25 23:25:10 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving)
2020-11-25 23:25:39 +0100kupi(uid212005@gateway/web/irccloud.com/x-wpurhmmpfcznlitw)
2020-11-25 23:26:02 +0100 <infinity0> koz_: what works currently is various indexed lens (or anything really) composed with a mutable-lens, so you could use a MutVar (Map k v) or something like that
2020-11-25 23:26:09 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com) (Ping timeout: 256 seconds)
2020-11-25 23:26:13 +0100 <infinity0> but yeah, i didn't think too hard about mutable arrays etc yet
2020-11-25 23:26:14 +0100 <koz_> Oh, that's nice.
2020-11-25 23:26:24 +0100 <koz_> It'd be very useful to have that baked in, though.
2020-11-25 23:26:41 +0100 <kupi> does Data.ByteString.Lazy.Char8.uncons copy the first chuck?
2020-11-25 23:27:06 +0100 <kupi> *chunk
2020-11-25 23:27:14 +0100neiluj(~jco@unaffiliated/neiluj) (Quit: Lost terminal)
2020-11-25 23:27:24 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Read error: Connection reset by peer)
2020-11-25 23:27:48 +0100Rudd0^(~Rudd0@185.189.115.98)
2020-11-25 23:28:06 +0100hidedagger(~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9)
2020-11-25 23:28:38 +0100 <infinity0> koz_: i'm not sure how well mutable arrays fit into this lens-are-references paradigm, but there is a similar+different framework by jle` that is the "mutable" package https://hackage.haskell.org/package/mutable that covers mutable arrays
2020-11-25 23:29:05 +0100 <koz_> infinity0: Noted.
2020-11-25 23:29:24 +0100 <koz_> I might write an optics version for lols.
2020-11-25 23:29:30 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Remote host closed the connection)
2020-11-25 23:29:45 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 23:29:47 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-25 23:29:49 +0100 <infinity0> i wrote mutable-lens because i had a direct concrete need to abstract over mutable references and pure state monads in the same piece of code without repeating myself, mutable-arrays didn't appear to be part of that need
2020-11-25 23:29:52 +0100Guest10117(~vollenwei@4e69b241.skybroadband.com)
2020-11-25 23:30:19 +0100 <infinity0> cool, yeah i'd be happy to look at it. you can likely re-use some of my types
2020-11-25 23:31:25 +0100Rudd0(~Rudd0@185.189.115.103) (Ping timeout: 264 seconds)
2020-11-25 23:32:48 +0100 <frdg> I dug up another of the same usb and get an entirely different issue. Do not buy `NXT USB 2.0`'s. Ill get a new usb tomorrow.
2020-11-25 23:33:17 +0100revprez_stg(~revprez_s@pool-108-49-213-40.bstnma.fios.verizon.net) (Quit: Lost terminal)
2020-11-25 23:35:15 +0100 <sondr3> question about API design in Haskell, coming from Rust I'm not sure how to create a Haskelly API for my library. Does something similar to https://rust-lang.github.io/api-guidelines/ exist for Haskell?
2020-11-25 23:37:12 +0100son0p(~son0p@181.136.122.143)
2020-11-25 23:37:25 +0100revprez_stg(~revprez_s@pool-108-49-213-40.bstnma.fios.verizon.net)
2020-11-25 23:37:57 +0100 <infinity0> i don't know of a document, your best bet would be to read the standard library and other common libraries and figure out the convention by osmosis
2020-11-25 23:39:05 +0100 <koz_> It also depends very much on what you're trying to write.
2020-11-25 23:39:06 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-25 23:39:07 +0100Tario(~Tario@200.119.185.214) (Ping timeout: 246 seconds)
2020-11-25 23:39:15 +0100Tario(~Tario@201.192.165.173)
2020-11-25 23:39:50 +0100 <sondr3> A library for https://github.com/google/hrx to learn Haskell
2020-11-25 23:39:51 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Excess Flood)
2020-11-25 23:40:07 +0100borne(~fritjof@200116b864509c00394a967dc8ef4e61.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-25 23:40:29 +0100hidedagger(~nate@unaffiliated/hidedagger) (Client Quit)
2020-11-25 23:41:05 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-25 23:41:06 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-11-25 23:42:22 +0100 <infinity0> sondr3: have a look at https://hackage.haskell.org/package/zip-archive-0.4.1/docs/Codec-Archive-Zip.html and other archive-format libraries and spot some naming patterns
2020-11-25 23:44:30 +0100 <sondr3> infinity0: awesome, that looks like a great way to learn by osmosis
2020-11-25 23:44:43 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2020-11-25 23:45:08 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-11-25 23:45:10 +0100 <infinity0> welcome!
2020-11-25 23:47:15 +0100conal_(~conal@64.71.133.70)
2020-11-25 23:50:01 +0100treotmnor(~treotmnor@8.210.183.149) (Remote host closed the connection)
2020-11-25 23:50:03 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
2020-11-25 23:50:20 +0100treotmnor(~treotmnor@218.73.97.199)
2020-11-25 23:53:23 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-25 23:55:31 +0100matta(~user@24-113-169-116.wavecable.com)
2020-11-25 23:56:58 +0100hidedagger(~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9)
2020-11-25 23:57:37 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-25 23:58:22 +0100dizzy_g(~dizzy_g@188.170.200.125)