2021/11/16

2021-11-16 00:07:00 +0100alzgh(~alzgh@user/alzgh)
2021-11-16 00:08:19 +0100zincy_(~zincy@2a00:23c8:970c:4801:2831:8d93:d152:2332)
2021-11-16 00:11:10 +0100epolanski(uid312403@helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-16 00:12:22 +0100Techcable_(~Techcable@168.235.93.147) (Quit: ZNC - https://znc.in)
2021-11-16 00:14:19 +0100jbox(~jbox@user/jbox)
2021-11-16 00:14:26 +0100Techcable(~Techcable@168.235.93.147)
2021-11-16 00:14:49 +0100atlas(~jbox@user/jbox)
2021-11-16 00:16:14 +0100cosimone(~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3) (Quit: ERC (IRC client for Emacs 27.1))
2021-11-16 00:16:15 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-11-16 00:18:38 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2021-11-16 00:19:14 +0100sagax(~sagax_nb@user/sagax) (Excess Flood)
2021-11-16 00:19:22 +0100jbox(~jbox@user/jbox) (Ping timeout: 268 seconds)
2021-11-16 00:21:49 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3)
2021-11-16 00:26:25 +0100puke(~puke@user/puke) (Quit: puke)
2021-11-16 00:29:09 +0100cjb(~cjbayliss@user/cjb) (Remote host closed the connection)
2021-11-16 00:29:35 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-11-16 00:31:13 +0100michalz(~michalz@185.246.204.57) (Remote host closed the connection)
2021-11-16 00:32:23 +0100cjb(~cjbayliss@user/cjb)
2021-11-16 00:32:43 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-11-16 00:40:18 +0100ChanServ+o geekosaur
2021-11-16 00:40:32 +0100geekosaur-b *!*@180.230.60.84
2021-11-16 00:40:36 +0100geekosaur-o geekosaur
2021-11-16 00:40:53 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3)
2021-11-16 00:42:18 +0100mimmy(~mimmy@2607:fea8:6e0:7f90:d1ec:e4ac:744a:8e08)
2021-11-16 00:50:14 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2021-11-16 00:52:30 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-11-16 00:53:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-16 00:53:54 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-16 00:53:54 +0100wroathe(~wroathe@user/wroathe)
2021-11-16 00:54:38 +0100machinedgod(~machinedg@24.105.81.50)
2021-11-16 00:55:04 +0100srk(~sorki@user/srk) (Remote host closed the connection)
2021-11-16 00:55:22 +0100srk(~sorki@user/srk)
2021-11-16 00:58:10 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-11-16 01:02:50 +0100mimmy(~mimmy@2607:fea8:6e0:7f90:d1ec:e4ac:744a:8e08) (Ping timeout: 265 seconds)
2021-11-16 01:09:33 +0100mark__(~a@p200300ef973db1d9502293e1a26d2ca1.dip0.t-ipconnect.de) (Quit: WeeChat 3.0.1)
2021-11-16 01:11:30 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 276 seconds)
2021-11-16 01:14:13 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 250 seconds)
2021-11-16 01:14:36 +0100zava(~zava@ip5f5bdf0f.dynamic.kabel-deutschland.de) (Quit: WeeChat 3.3)
2021-11-16 01:19:25 +0100jkaye(~jkaye@2601:281:8300:7530:7289:19f7:f3fa:e188) (Ping timeout: 250 seconds)
2021-11-16 01:22:27 +0100zincy_(~zincy@2a00:23c8:970c:4801:2831:8d93:d152:2332) (Remote host closed the connection)
2021-11-16 01:22:35 +0100emf_(~emf@2620:10d:c090:400::5:91bf) (Ping timeout: 264 seconds)
2021-11-16 01:23:28 +0100max22-(~maxime@2a01cb08833598005714d2986a3eb6d2.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-11-16 01:23:58 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2021-11-16 01:25:09 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-11-16 01:29:40 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
2021-11-16 01:30:01 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-11-16 01:30:27 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-11-16 01:32:06 +0100mimmy(~mimmy@2607:fea8:6e0:7f90:e4cb:5a57:fd6e:e655)
2021-11-16 01:33:10 +0100renzhi(~xp@2607:fa49:6500:b100::6e7f)
2021-11-16 01:33:34 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 01:36:19 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-11-16 01:38:03 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
2021-11-16 01:39:02 +0100mimmy_(~mimmy@2607:fea8:6e0:7f90:20d6:2b3a:ce41:e0b6)
2021-11-16 01:41:47 +0100mimmy(~mimmy@2607:fea8:6e0:7f90:e4cb:5a57:fd6e:e655) (Ping timeout: 264 seconds)
2021-11-16 01:42:03 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:2d58:181a:7f09:e906)
2021-11-16 01:46:53 +0100mimmy(~mimmy@2607:fea8:6e0:7f90:fc41:a35f:792:b57c)
2021-11-16 01:48:27 +0100mimmy_(~mimmy@2607:fea8:6e0:7f90:20d6:2b3a:ce41:e0b6) (Ping timeout: 250 seconds)
2021-11-16 01:53:08 +0100sagax(~sagax_nb@user/sagax)
2021-11-16 01:54:57 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
2021-11-16 01:58:26 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92)
2021-11-16 02:11:15 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-11-16 02:17:22 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-11-16 02:23:53 +0100Guest4530(~Guest45@185.16.69.203) (Ping timeout: 256 seconds)
2021-11-16 02:25:51 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 02:26:41 +0100 <shapr> OH: Don't use comments. Use PackageImports
2021-11-16 02:27:31 +0100 <dsal> PackageImports looks weird to me. I'm not sure it's valuable enough for mem.
2021-11-16 02:27:51 +0100 <geekosaur> either one is scary imo
2021-11-16 02:28:21 +0100burnsidesLlama(~burnsides@dhcp168-015.wadham.ox.ac.uk) (Remote host closed the connection)
2021-11-16 02:28:45 +0100 <geekosaur> comments are too easy to miss, PackageImports is "wtf are you doin mate?"
2021-11-16 02:28:53 +0100burnsidesLlama(~burnsides@client-8-81.eduroam.oxuni.org.uk)
2021-11-16 02:29:08 +0100 <glguy> Given that we have PackageImports, using comments is just a way to have wrong comments
2021-11-16 02:30:09 +0100 <dsal> I don't know that I could argue against PackageImports in anyway that would be consistent with arguing against unqualified/naked imports
2021-11-16 02:32:37 +0100 <dsal> I guess my only argument is that it sounds hard to do.
2021-11-16 02:33:13 +0100burnsidesLlama(~burnsides@client-8-81.eduroam.oxuni.org.uk) (Ping timeout: 265 seconds)
2021-11-16 02:43:13 +0100JonasTripps(~user@bras-base-crnwon2435w-grc-27-76-70-40-124.dsl.bell.ca)
2021-11-16 02:43:17 +0100 <JonasTripps> https://youtu.be/ykT_g0-bgZo
2021-11-16 02:44:34 +0100JonasTripps(~user@bras-base-crnwon2435w-grc-27-76-70-40-124.dsl.bell.ca) (K-Lined)
2021-11-16 02:47:10 +0100mimmy_(~mimmy@2607:fea8:6e0:7f90:ec1e:7b74:9028:2102)
2021-11-16 02:47:43 +0100mimmy(~mimmy@2607:fea8:6e0:7f90:fc41:a35f:792:b57c) (Ping timeout: 265 seconds)
2021-11-16 02:52:36 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se) (Ping timeout: 245 seconds)
2021-11-16 02:52:46 +0100yauhsien(~yauhsien@49.216.238.61)
2021-11-16 02:53:24 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se)
2021-11-16 02:54:28 +0100Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-11-16 02:58:44 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
2021-11-16 02:59:19 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-11-16 03:00:08 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-16 03:10:23 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-16 03:15:34 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-16 03:15:34 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-16 03:15:34 +0100wroathe(~wroathe@user/wroathe)
2021-11-16 03:20:35 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-11-16 03:21:37 +0100renzhi(~xp@2607:fa49:6500:b100::6e7f) (Ping timeout: 250 seconds)
2021-11-16 03:26:03 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2021-11-16 03:26:03 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-11-16 03:26:03 +0100finn_elijaFinnElija
2021-11-16 03:28:00 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 276 seconds)
2021-11-16 03:34:11 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-11-16 03:34:30 +0100jkaye(~jkaye@2601:281:8300:7530:6f4:bc42:8be5:e20d)
2021-11-16 03:37:01 +0100mimmy_(~mimmy@2607:fea8:6e0:7f90:ec1e:7b74:9028:2102) (Ping timeout: 265 seconds)
2021-11-16 03:39:31 +0100mimmy_(~mimmy@185.244.215.86)
2021-11-16 03:40:03 +0100alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-11-16 03:40:24 +0100alzgh(~alzgh@user/alzgh)
2021-11-16 03:42:42 +0100alx741(~alx741@181.196.68.87) (Quit: alx741)
2021-11-16 03:47:32 +0100Lycurgus(~juan@98.4.112.204)
2021-11-16 03:47:36 +0100paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (Ping timeout: 245 seconds)
2021-11-16 03:48:04 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 03:48:23 +0100jinsun(~quassel@user/jinsun) (Ping timeout: 264 seconds)
2021-11-16 03:49:02 +0100mimmy_(~mimmy@185.244.215.86) (Ping timeout: 268 seconds)
2021-11-16 03:49:30 +0100paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com)
2021-11-16 03:50:11 +0100xff0x(~xff0x@2001:1a81:52ee:6600:288d:876:4868:af07) (Ping timeout: 264 seconds)
2021-11-16 03:51:42 +0100xff0x(~xff0x@2001:1a81:5330:8c00:519e:34db:fab7:a573)
2021-11-16 03:52:50 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-11-16 03:54:03 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2021-11-16 03:54:13 +0100mimmy_(~mimmy@185.244.215.86)
2021-11-16 03:56:17 +0100neurocyte0132889(~neurocyte@user/neurocyte) (Ping timeout: 250 seconds)
2021-11-16 04:03:50 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2021-11-16 04:03:58 +0100chexum_(~quassel@gateway/tor-sasl/chexum)
2021-11-16 04:17:57 +0100yauhsien(~yauhsien@49.216.238.61) (Ping timeout: 250 seconds)
2021-11-16 04:18:33 +0100 <pop3> tomsmeding, thanks
2021-11-16 04:26:29 +0100asivitz(uid178348@tinside.irccloud.com)
2021-11-16 04:31:22 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2021-11-16 04:36:36 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2021-11-16 04:36:36 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-11-16 04:36:36 +0100finn_elijaFinnElija
2021-11-16 04:36:56 +0100 <asivitz> not sure what the right place to ask is, but stack is segfaulting when I use it for basically anything. I got stack from nixpkgs. this is on an m1 mac. anyone seen this before?
2021-11-16 04:37:27 +0100 <dsal> asivitz: What system?
2021-11-16 04:38:03 +0100 <asivitz> system?
2021-11-16 04:38:14 +0100 <dsal> You can override the system in /etc/nix/nix.conf
2021-11-16 04:38:40 +0100 <asivitz> hm no override there. (I am brand new to nix)
2021-11-16 04:39:05 +0100 <dsal> Ah. It used to ship as aarch64, but it works natively now. I've not done a recent install, so I don't know where it leaves you.
2021-11-16 04:39:20 +0100 <dsal> What does "file `which nix`" say?
2021-11-16 04:39:42 +0100 <asivitz> `/nix/var/nix/profiles/default/bin/nix: Mach-O 64-bit executable arm64`
2021-11-16 04:39:58 +0100 <dsal> Huh. What about stack?
2021-11-16 04:40:09 +0100 <asivitz> same
2021-11-16 04:40:38 +0100 <asivitz> it can run --help and --version. seems to die when running ghc
2021-11-16 04:40:39 +0100 <dsal> Interesting. I'm not using a global install, but otherwise that's basically what I'm doing. Is this a recent project?
2021-11-16 04:40:55 +0100 <dsal> i.e., that combination would only work on a fairly recent LTS.
2021-11-16 04:41:10 +0100 <dsal> e.g., lts-18.16
2021-11-16 04:41:11 +0100Nolrai2(~Nolrai2@c-76-27-202-218.hsd1.or.comcast.net)
2021-11-16 04:41:18 +0100 <asivitz> looks like my resolver is nightly-2021-03-01
2021-11-16 04:41:29 +0100 <dsal> That probably won't work.
2021-11-16 04:41:43 +0100 <dsal> If you want to build older stuff, you can do it with rosetta if you change your nix config to amd64
2021-11-16 04:42:25 +0100 <dsal> Basically echo "system = x86_64-darwin" > /etc/nix/nix.conf
2021-11-16 04:42:29 +0100mimmy_(~mimmy@185.244.215.86) (Quit: WeeChat 3.3)
2021-11-16 04:42:46 +0100 <dsal> Then `nix-env -iA nixpkgs.nix`
2021-11-16 04:43:07 +0100 <asivitz> hm, I think I can handle the latest stackage. but, just tried the latest nightly and it still bombs
2021-11-16 04:43:15 +0100 <dsal> I built under emulation for a long time. Only the last month or so has it been useful.
2021-11-16 04:43:24 +0100 <dsal> Yeah, so *newer* GHCs are differently bad. :)
2021-11-16 04:43:32 +0100 <asivitz> haha oh dear
2021-11-16 04:44:05 +0100 <dsal> I've been building with LTS-18.16 just fine.
2021-11-16 04:44:10 +0100 <dsal> Using haskell.nix
2021-11-16 04:44:24 +0100 <asivitz> well, am I right in thinking the problem is in the ghc that built stack when I installed that with nix-env?
2021-11-16 04:44:25 +0100motherfsck(~motherfsc@user/motherfsck)
2021-11-16 04:44:55 +0100 <asivitz> stack hasn't even attempted to download a ghc binary I don't think
2021-11-16 04:45:01 +0100 <dsal> I don't know for sure.
2021-11-16 04:45:30 +0100 <dsal> stack doesn't *come* with a ghc, but the LTS will define one.
2021-11-16 04:45:30 +0100xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2021-11-16 04:46:07 +0100slack1256(~slack1256@186.11.99.34) (Ping timeout: 250 seconds)
2021-11-16 04:46:11 +0100 <dsal> There are a few different ways to configure things, so it can get confusing. It works pretty well for me with stack nix integration.
2021-11-16 04:46:17 +0100mbuf(~Shakthi@223.178.89.16)
2021-11-16 04:47:29 +0100 <asivitz> yea. FWIW I'm familar with stack. but... it bombs immediately when I run any non-trivial command (other than help or version). like it should read my stack.yaml and download the defined ghc and then use that to build other stuff, but it never gets to any of that. so the stack binary itself is messed up somehow... but it is the right arch seemingly :(
2021-11-16 04:48:39 +0100 <dsal> stack nix integration is slightly different.
2021-11-16 04:48:48 +0100 <asivitz> for your setup- you skip stack and turn the stack.yaml into a nix derivation? (do I have that right?)
2021-11-16 04:48:55 +0100 <asivitz> I thought just using stack would be simpler but maybe not
2021-11-16 04:49:02 +0100 <Lycurgus> lol
2021-11-16 04:49:30 +0100 <Lycurgus> (you saved me a status check)
2021-11-16 04:49:44 +0100 <dsal> my ~/.stack/config.nix has "nix:\n enable: true" and my stack projects look like... let me find one.
2021-11-16 04:50:06 +0100 <dsal> Basically this: https://github.com/dustin/waitforsocket/blob/master/stack.yaml
2021-11-16 04:50:13 +0100 <dsal> You'll pretty much always need that zlib thing. heh
2021-11-16 04:50:25 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2021-11-16 04:50:42 +0100 <Nolrai2> So afaict, the mutable unboxed fixed length boolean vectors in vector-fixed just don't work at all, freezing then thawing sets both the original and the resultant immutable vectors to all FALSE. If I want to make a local version of the library so I can fix the issue how would I do that?
2021-11-16 04:50:57 +0100 <Nolrai2> *False
2021-11-16 04:50:58 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2021-11-16 04:50:59 +0100 <dsal> Oh, you might need network-3.1.2.5 as well, because that fixes M1 builds.
2021-11-16 04:54:24 +0100 <asivitz> dsal: welp. it still segfaults even with enabling nix in stack
2021-11-16 04:54:38 +0100 <dsal> asivitz: How did you get stack?
2021-11-16 04:56:15 +0100 <dsal> I wonder if you have an older, broken one. You could try: [sudo] nix-channel --update && nix-shell -p stack
2021-11-16 04:56:32 +0100 <asivitz> I think I did the equivalent of `nix-env -iA nixpkgs.stack`
2021-11-16 04:56:39 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 04:56:52 +0100td_(~td@muedsl-82-207-238-041.citykom.de) (Ping timeout: 256 seconds)
2021-11-16 04:56:56 +0100alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-11-16 04:56:59 +0100 <Lycurgus> dsal, are you using nixos or just nix?
2021-11-16 04:57:04 +0100 <dsal> I run both.
2021-11-16 04:57:09 +0100 <Lycurgus> figured
2021-11-16 04:57:11 +0100 <dsal> This is a Mac, though.
2021-11-16 04:57:16 +0100alzgh(~alzgh@user/alzgh)
2021-11-16 04:57:51 +0100 <asivitz> ok interesting. that does not segfault
2021-11-16 04:57:56 +0100 <dsal> nix-env -u
2021-11-16 04:58:02 +0100 <dsal> It sounds like you just have something old and broken.
2021-11-16 04:58:20 +0100 <Axman6> Nolrai2: that sounds... unfortunate
2021-11-16 04:58:37 +0100td_(~td@94.134.91.233)
2021-11-16 05:00:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-16 05:00:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-16 05:00:25 +0100wroathe(~wroathe@user/wroathe)
2021-11-16 05:03:43 +0100 <Nolrai2> Axman6 : It is somewhat.
2021-11-16 05:04:07 +0100 <Axman6> maybe it's a statement on the state of the world, everything is truly false
2021-11-16 05:04:13 +0100 <Nolrai2> >.<
2021-11-16 05:04:35 +0100 <Nolrai2> I mean it works if I don't use a fixed sized vector, so what does that mean? :P
2021-11-16 05:04:46 +0100 <asivitz> dsal: well if you don't mind taking a look, here's basically the set of nix things I'm doing. I'm probably doing something really stupid here. just kind of picking things off the internet. https://paste.tomsmeding.com/hgvAv0QV
2021-11-16 05:05:26 +0100jinsun(~quassel@user/jinsun)
2021-11-16 05:06:13 +0100 <asivitz> maybe I should just read the nix manual and stop bothering #haskell lol
2021-11-16 05:06:32 +0100 <dsal> Oh interesting. I use home-manager. I don't exactly understand how that installs stuff. You said it works OK in a nix-shell, though?
2021-11-16 05:07:43 +0100 <asivitz> yea it does. so I'm doing something silly. maybe I should just use home-manager
2021-11-16 05:07:57 +0100 <asivitz> thanks so much for your help! I'm on the right track now at least
2021-11-16 05:09:10 +0100puke(~puke@user/puke)
2021-11-16 05:12:07 +0100zaquest(~notzaques@5.130.79.72) (Quit: Leaving)
2021-11-16 05:19:55 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 250 seconds)
2021-11-16 05:22:18 +0100zaquest(~notzaques@5.130.79.72)
2021-11-16 05:24:41 +0100jkaye(~jkaye@2601:281:8300:7530:6f4:bc42:8be5:e20d) (Ping timeout: 250 seconds)
2021-11-16 05:27:33 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 05:31:05 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-11-16 05:32:11 +0100ralu(~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 264 seconds)
2021-11-16 05:33:30 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
2021-11-16 05:35:19 +0100rkrishnan(~user@122.167.19.65)
2021-11-16 05:36:20 +0100welterde(welterde@thinkbase.srv.welterde.de) (Ping timeout: 268 seconds)
2021-11-16 05:39:50 +0100hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8)
2021-11-16 05:40:04 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2021-11-16 05:42:31 +0100Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-11-16 05:44:43 +0100deadmarshal(~deadmarsh@95.38.114.190)
2021-11-16 05:45:22 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 05:46:08 +0100hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2021-11-16 05:47:16 +0100welterde(welterde@thinkbase.srv.welterde.de)
2021-11-16 05:50:58 +0100ralu(~ralu@static.211.245.203.116.clients.your-server.de)
2021-11-16 05:51:22 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 260 seconds)
2021-11-16 05:52:34 +0100MoC_(~moc@user/moc)
2021-11-16 05:52:50 +0100MoC(~moc@user/moc) (Ping timeout: 265 seconds)
2021-11-16 05:53:43 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
2021-11-16 05:55:46 +0100pfurla(~pfurla@2804:14d:5c81:4104:54e1:e6c6:79ac:779c)
2021-11-16 05:58:32 +0100mvk(~mvk@2607:fea8:5cc3:e900::df92) (Ping timeout: 268 seconds)
2021-11-16 05:59:07 +0100deadmarshal(~deadmarsh@95.38.114.190) (Ping timeout: 265 seconds)
2021-11-16 06:00:43 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2021-11-16 06:01:46 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 245 seconds)
2021-11-16 06:08:25 +0100img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-11-16 06:08:41 +0100img(~img@user/img)
2021-11-16 06:12:20 +0100EvanR(~evan@user/evanr) (Quit: Leaving)
2021-11-16 06:12:25 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 06:17:01 +0100 <jackdk> Given `x :: Lens' a (Maybe b)` and `y :: Lens' b (Maybe c)`, is there a combinator that produces a `Lens' a (Maybe c)`?
2021-11-16 06:18:35 +0100 <nshepperd> There is not
2021-11-16 06:19:19 +0100 <jackdk> darn. feels like there should
2021-11-16 06:19:36 +0100 <awpr> hm, I don't think that can be a valid Lens -- when setting to Nothing, it can't distinguish outer Nothing from inner Nothing
2021-11-16 06:19:43 +0100atlas(~jbox@user/jbox) (Ping timeout: 250 seconds)
2021-11-16 06:21:47 +0100 <nshepperd> also, putting Just (x :: c) into such a lens if it was initially Nothing would not tell it how to make the required b
2021-11-16 06:21:51 +0100 <jackdk> fair. this is distilled from an example using amazonka-dynamodb's AttributeValue type, which (because of codegen reasons) badly implements a sumtype by providing a set of lenses in lieu of prisms.
2021-11-16 06:23:12 +0100deadmarshal(~deadmarsh@95.38.114.190)
2021-11-16 06:23:18 +0100 <jackdk> If you parsed AttributeValue into a better AST and then had `x :: Prism' a b` and `y :: Lens' b (Maybe c)`, could you then get a `Lens' a (Maybe c)`? Feels more plausible, anyway
2021-11-16 06:24:16 +0100 <nshepperd> however i think if you have a concept of a "default value" for b, you can convert Lens' a (Maybe b) to Lens' a b
2021-11-16 06:31:09 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2021-11-16 06:31:18 +0100chexum_(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 276 seconds)
2021-11-16 06:32:32 +0100 <glguy> :t non
2021-11-16 06:32:33 +0100 <lambdabot> (Eq a, Profunctor p, Functor f) => a -> p a (f a) -> p (Maybe a) (f (Maybe a))
2021-11-16 06:33:11 +0100 <glguy> Like: at 'k' . non 0
2021-11-16 06:37:22 +0100 <asivitz> dsal: lol this was the problem: https://github.com/commercialhaskell/stack/issues/5607
2021-11-16 06:38:12 +0100 <dsal> Ah, I don't run zsh
2021-11-16 06:41:54 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-11-16 06:51:03 +0100 <dibblego> jackdk: there is a traversal
2021-11-16 06:52:58 +0100 <dibblego> @type \x y -> x . _Just . y
2021-11-16 06:52:59 +0100 <lambdabot> (Choice p, Applicative f) => (p (Maybe a1) (f (Maybe b)) -> c) -> (a2 -> p a1 (f b)) -> a2 -> c
2021-11-16 06:53:06 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-11-16 07:04:10 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
2021-11-16 07:09:49 +0100 <jackdk> dibblego: thanks but i particularly want to be able to write back in . but I think I need to write a proper AST type for amazonka-dynamodb's attributevalue type. After I get around to everything else I need to write
2021-11-16 07:16:29 +0100cjb(~cjbayliss@user/cjb) ()
2021-11-16 07:20:00 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-11-16 07:20:26 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi)
2021-11-16 07:25:38 +0100phma(phma@2001:5b0:210f:6c88:14c5:503:d6e5:c919) (Read error: Connection reset by peer)
2021-11-16 07:26:35 +0100phma(phma@2001:5b0:2172:a9b8:34c1:76b3:d477:41fd)
2021-11-16 07:27:06 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 07:29:50 +0100deadmarshal(~deadmarsh@95.38.114.190) (Ping timeout: 260 seconds)
2021-11-16 07:37:06 +0100Guest8054(~Guest80@pd9ed79bf.dip0.t-ipconnect.de)
2021-11-16 07:43:24 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2021-11-16 07:43:53 +0100 <turlando> Hello everyone. I'm not sure what's wrong with this code https://pastebin.com/raw/2H6dmtqE GHC says "Could not deduce (Simulation state event0 result)" ... "The type variable ‘event0’ is ambiguous" in the "simulation" function definition
2021-11-16 07:48:15 +0100 <sm> AllowAmbiguousTypes extension makes it go away..
2021-11-16 07:49:17 +0100atlas(~jbox@user/jbox)
2021-11-16 07:51:32 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-11-16 07:52:30 +0100 <sm> ..or maybe just moves it around ? not sure
2021-11-16 07:53:52 +0100atlasjbox
2021-11-16 08:01:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-11-16 08:06:35 +0100 <turlando> sm: I have AllowAmbiguousTypes enabled for the Simulator module (not enabled globally)
2021-11-16 08:06:54 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-11-16 08:07:16 +0100 <turlando> I also have FunctionalDependencies for the module and MultiParamTypeClasses and RankNTypes globally
2021-11-16 08:12:49 +0100deadmarshal(~deadmarsh@95.38.114.190)
2021-11-16 08:14:06 +0100 <sm> turlando: I'm playing with this much:... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/b695ad494f768676bc5b4018dff0490c9be6…)
2021-11-16 08:14:43 +0100sm2n_(~sm2n@user/sm2n)
2021-11-16 08:14:56 +0100sm2n(~sm2n@user/sm2n) (Read error: Connection reset by peer)
2021-11-16 08:15:01 +0100 <sm> I may have wrong terminology: the rule seems to be that if one of the class type variables is not mentioned in the a type signature, it must be declared as a dependent variable with a functional dependency
2021-11-16 08:15:26 +0100ystael(~ystael@user/ystael) (Ping timeout: 268 seconds)
2021-11-16 08:15:27 +0100erisco(~erisco@d24-57-249-233.home.cgocable.net) (Ping timeout: 268 seconds)
2021-11-16 08:15:59 +0100ystael(~ystael@user/ystael)
2021-11-16 08:16:38 +0100erisco(~erisco@d24-57-249-233.home.cgocable.net)
2021-11-16 08:18:51 +0100 <turlando> sm: now it cannot deduce result0 in finalState :\
2021-11-16 08:18:59 +0100 <turlando> May I need to define multiple fundeps?
2021-11-16 08:20:12 +0100 <turlando> Sorry, I misread your comment, that's exactly what you proposed. It worked, thank you a lot
2021-11-16 08:21:04 +0100 <sm> excellent
2021-11-16 08:22:00 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:c480:7b03:c5d:3876)
2021-11-16 08:26:16 +0100retro_(~retro@97e2ba2e.skybroadband.com)
2021-11-16 08:27:04 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 08:29:33 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 08:30:14 +0100retroid_(~retro@97e2ba2e.skybroadband.com) (Ping timeout: 268 seconds)
2021-11-16 08:31:38 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-11-16 08:34:16 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
2021-11-16 08:41:49 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-11-16 08:44:25 +0100xff0x(~xff0x@2001:1a81:5330:8c00:519e:34db:fab7:a573) (Ping timeout: 265 seconds)
2021-11-16 08:44:53 +0100xff0x(~xff0x@2001:1a81:5330:8c00:614e:b47b:9eaf:eaca)
2021-11-16 08:49:18 +0100the_finn(uid526334@hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-16 08:54:28 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection)
2021-11-16 08:56:05 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-11-16 08:59:06 +0100zincy_(~zincy@2a00:23c8:970c:4801:2831:8d93:d152:2332)
2021-11-16 09:00:51 +0100Everything(~Everythin@37.115.210.35)
2021-11-16 09:03:53 +0100chele(~chele@user/chele)
2021-11-16 09:07:25 +0100slice(~slice@user/slice)
2021-11-16 09:07:34 +0100pfurla_(~pfurla@2804:14d:5c81:4104:6cc4:7b65:8ee1:2dd3)
2021-11-16 09:08:44 +0100pfurla__(~pfurla@2804:14d:5c81:4104:8de2:1993:a832:eced)
2021-11-16 09:10:31 +0100pfurla(~pfurla@2804:14d:5c81:4104:54e1:e6c6:79ac:779c) (Ping timeout: 265 seconds)
2021-11-16 09:12:27 +0100pfurla_(~pfurla@2804:14d:5c81:4104:6cc4:7b65:8ee1:2dd3) (Ping timeout: 265 seconds)
2021-11-16 09:12:54 +0100michalz(~michalz@185.246.204.41)
2021-11-16 09:17:30 +0100chomwitt(~chomwitt@2a02:587:dc12:3f00:12c3:7bff:fe6d:d374)
2021-11-16 09:18:05 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-11-16 09:25:19 +0100zincy_(~zincy@2a00:23c8:970c:4801:2831:8d93:d152:2332) (Remote host closed the connection)
2021-11-16 09:29:31 +0100cfricke(~cfricke@user/cfricke)
2021-11-16 09:30:02 +0100kuribas(~user@ptr-25vy0i87u19ttsdwrve.18120a2.ip6.access.telenet.be)
2021-11-16 09:30:28 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 09:33:19 +0100Midjak(~Midjak@82-65-111-221.subs.proxad.net)
2021-11-16 09:35:34 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:2d58:181a:7f09:e906) (Remote host closed the connection)
2021-11-16 09:36:23 +0100deadmarshal(~deadmarsh@95.38.114.190) (Ping timeout: 264 seconds)
2021-11-16 09:40:32 +0100johnjay(~pi@192.142.100.50) (Ping timeout: 268 seconds)
2021-11-16 09:42:28 +0100johnjay(~pi@192.142.100.50)
2021-11-16 09:42:40 +0100wei2912(~wei2912@138.75.71.147)
2021-11-16 09:47:38 +0100gehmehgeh(~user@user/gehmehgeh)
2021-11-16 09:48:21 +0100neurocyte0132889(~neurocyte@45.131.36.116)
2021-11-16 09:48:21 +0100neurocyte0132889(~neurocyte@45.131.36.116) (Changing host)
2021-11-16 09:48:21 +0100neurocyte0132889(~neurocyte@user/neurocyte)
2021-11-16 09:50:57 +0100smunix(~smunix@static.26.70.12.49.clients.your-server.de)
2021-11-16 09:53:08 +0100mmhat(~mmh@55d47041.access.ecotel.net)
2021-11-16 09:55:35 +0100jbox(~jbox@user/jbox) (Ping timeout: 264 seconds)
2021-11-16 09:56:43 +0100jumper149(~jumper149@static.6.71.203.116.clients.your-server.de)
2021-11-16 09:58:35 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2021-11-16 09:58:36 +0100chele_(~chele@user/chele)
2021-11-16 10:00:00 +0100shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-11-16 10:00:08 +0100stoicswe[m](~deadlette@2001:470:69fc:105::d277) (Quit: You have been kicked for being idle)
2021-11-16 10:01:16 +0100chele(~chele@user/chele) (Ping timeout: 265 seconds)
2021-11-16 10:02:16 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
2021-11-16 10:02:33 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2021-11-16 10:08:37 +0100aegon(~mike@174.127.249.180) (Remote host closed the connection)
2021-11-16 10:09:18 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-11-16 10:12:09 +0100AlexNoo_(~AlexNoo@178.34.150.115)
2021-11-16 10:14:26 +0100AlexNoo(~AlexNoo@178.34.150.115) (Read error: Connection reset by peer)
2021-11-16 10:19:15 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-11-16 10:20:13 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 250 seconds)
2021-11-16 10:36:21 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9)
2021-11-16 10:36:53 +0100 <zincy> davean: Hey
2021-11-16 10:37:02 +0100 <zincy> Good meeting?
2021-11-16 10:39:58 +0100vysn(~vysn@user/vysn)
2021-11-16 10:40:55 +0100enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
2021-11-16 10:41:47 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9) (Ping timeout: 264 seconds)
2021-11-16 10:42:27 +0100vysn(~vysn@user/vysn) (Client Quit)
2021-11-16 10:42:44 +0100vysn(~vysn@user/vysn)
2021-11-16 10:44:22 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2021-11-16 10:48:52 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-11-16 10:49:25 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 10:49:58 +0100chele(~chele@user/chele)
2021-11-16 10:52:01 +0100chele_(~chele@user/chele) (Ping timeout: 265 seconds)
2021-11-16 10:53:36 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-16 10:54:28 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 10:54:38 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2021-11-16 10:55:43 +0100 <carbolymer> will `act >>= (\x -> x `seq` pure x)` evalute x in this case?
2021-11-16 10:57:27 +0100 <Axman6> for one, it depends on which monad you're using
2021-11-16 10:57:46 +0100 <carbolymer> a stack, with IO on the bottom
2021-11-16 10:58:58 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se) (Ping timeout: 256 seconds)
2021-11-16 10:59:13 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
2021-11-16 10:59:28 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se)
2021-11-16 10:59:35 +0100 <tomsmeding> in plain IO, it would because bindIO is strict IIRC
2021-11-16 10:59:48 +0100 <tomsmeding> in a stack it might depend on what exactly is above it?
2021-11-16 10:59:59 +0100 <kuribas> carbolymer: That doesn't evaluate the function, it creates a new IO monad.
2021-11-16 11:00:20 +0100 <carbolymer> kuribas: by function you mean x?
2021-11-16 11:00:29 +0100 <carbolymer> tomsmeding: damn, I forgot that bind can be lazy
2021-11-16 11:00:29 +0100 <kuribas> carbolymer: no (\x -> ..)
2021-11-16 11:01:54 +0100 <tomsmeding> kuribas: point is whether writing that will ensure that x is evaluated before any further evaluation is done in the monad
2021-11-16 11:02:44 +0100 <carbolymer> yeah, going step back, I have `act :: m a`, I want to evaluate `a` when evaluating `act`
2021-11-16 11:02:45 +0100 <kuribas> tomsmeding: yes, to hnf
2021-11-16 11:02:46 +0100 <tomsmeding> like, readFile "a.txt" >>= (\x -> x `deepseq` pure x) >>= (\x -> deleteFile "a.txt" >> doSomethingWith x)
2021-11-16 11:02:56 +0100 <tomsmeding> kuribas: point is, depends on the monad
2021-11-16 11:03:06 +0100 <tomsmeding> >>= may be lazy, in which case no, it will not evaluate
2021-11-16 11:03:52 +0100 <tomsmeding> oh I misplaced some parens
2021-11-16 11:04:03 +0100 <tomsmeding> like, readFile "a.txt" >>= (\x -> x `deepseq` pure x >>= (\x -> deleteFile "a.txt" >> doSomethingWith x))
2021-11-16 11:04:05 +0100 <tomsmeding> I think
2021-11-16 11:04:52 +0100 <tomsmeding> carbolymer: what kind of monads are on top, if they require sequencing in the underlying IO monad for every >>= of the stack, then it'll probably evaluate
2021-11-16 11:05:04 +0100 <tomsmeding> but I think there are other monads that have lazy bind
2021-11-16 11:05:39 +0100 <tomsmeding> s/have lazy bind/do their bind magic within itself, only calling underlying >>= once in a while or something/
2021-11-16 11:05:44 +0100 <carbolymer> tomsmeding: ReaderT and ExceptT, I guess you're right, this should evaluate in my case
2021-11-16 11:05:51 +0100 <tomsmeding> yeah those are well-behaving
2021-11-16 11:06:11 +0100 <tomsmeding> was thinking along the lines of ContT or LogicT or what have you
2021-11-16 11:06:18 +0100tomsmedingdoesn't actually know how those things work
2021-11-16 11:07:02 +0100 <carbolymer> yeah, in our team we aren't eager into jumping into that voodoo stuff, we have a lot of fun with laziness already ;]
2021-11-16 11:07:18 +0100 <tomsmeding> sounds smart :p
2021-11-16 11:14:00 +0100 <tomsmeding> carbolymer: example of non-strict >>= https://hackage.haskell.org/package/base-4.16.0.0/docs/src/GHC.Base.html#line-1176
2021-11-16 11:14:15 +0100xff0x(~xff0x@2001:1a81:5330:8c00:614e:b47b:9eaf:eaca) (Ping timeout: 265 seconds)
2021-11-16 11:14:33 +0100AlexNoo_AlexNoo
2021-11-16 11:15:05 +0100xff0x(~xff0x@2001:1a81:5330:8c00:7ee9:82eb:bec8:3505)
2021-11-16 11:15:44 +0100 <carbolymer> tomsmeding: hmm, well, this works, i.e. GHCi sees exception: `(foo (pure undefined :: [Int]) >> pure 2)` where `foo act = act >>= (\x -> x `seq` pure x)`
2021-11-16 11:15:46 +0100 <tomsmeding> or hm, maybe it ends up being strict anyway
2021-11-16 11:15:51 +0100 <carbolymer> yeah, seems to be strict
2021-11-16 11:17:37 +0100 <carbolymer> hmm, but why?
2021-11-16 11:18:48 +0100 <tomsmeding> because even >> traverses its left argument
2021-11-16 11:18:59 +0100 <tomsmeding> I believe
2021-11-16 11:21:00 +0100 <carbolymer> > ((pure undefined :: [Int]) >> pure 2)
2021-11-16 11:21:02 +0100 <lambdabot> [2]
2021-11-16 11:21:06 +0100 <carbolymer> tomsmeding: ^
2021-11-16 11:21:25 +0100 <tomsmeding> yeah traverses its left _monad_ argument
2021-11-16 11:21:35 +0100 <tomsmeding> Control.Monad.Writer.Lazy is an example though
2021-11-16 11:21:51 +0100 <tomsmeding> % foo act = act >>= (\x -> x `seq` pure x)
2021-11-16 11:21:51 +0100 <yahb> tomsmeding:
2021-11-16 11:22:25 +0100 <tomsmeding> % Control.Monad.Trans.Writer.Strict.mapWriter (second (const "")) $ foo (pure undefined :: Writer String Int) >> pure 2
2021-11-16 11:22:25 +0100 <yahb> tomsmeding: ; <interactive>:78:67: error:; * Couldn't match type: WriterT String Identity; with: Control.Monad.Trans.Writer.Strict.WriterT w0 Identity; Expected: Control.Monad.Trans.Writer.Strict.Writer w0 a; Actual: WriterT String Identity a; NB: `Control.Monad.Trans.Writer.Strict.WriterT' is defined in `Control.Monad.Trans.Writer.Strict'; `WriterT' is defined
2021-11-16 11:22:46 +0100 <tomsmeding> % Control.Monad.Trans.Writer.Strict.mapWriter (second (const "")) $ foo (pure undefined :: Control.Monad.Trans.Writer.Strict.Writer String Int) >> pure 2
2021-11-16 11:22:47 +0100 <yahb> tomsmeding: WriterT (Identity (*** Exception: Prelude.undefined; CallStack (from HasCallStack):; error, called at libraries/base/GHC/Err.hs:75:14 in base:GHC.Err; undefined, called at <interactive>:79:77 in interactive:Ghci34
2021-11-16 11:22:57 +0100 <tomsmeding> % Control.Monad.Trans.Writer.Lazy.mapWriter (second (const "")) $ foo (pure undefined :: Control.Monad.Trans.Writer.Lazy.Writer String Int) >> pure 2
2021-11-16 11:22:57 +0100 <yahb> tomsmeding: WriterT (Identity (2,""))
2021-11-16 11:22:59 +0100 <tomsmeding> boom
2021-11-16 11:23:29 +0100 <tomsmeding> (you need the mapWriter here because otherwise there is still, of course, a bottom in the written log)
2021-11-16 11:23:37 +0100MarcoZ[m](~ocramzmat@2001:470:69fc:105::1:35b0)
2021-11-16 11:23:43 +0100MarcoZ[m]ocramz[m]
2021-11-16 11:23:51 +0100 <ocramz[m]> o/
2021-11-16 11:23:51 +0100 <tomsmeding> s/of course/I think/
2021-11-16 11:24:12 +0100 <tomsmeding> yeah there is because of how >>= works
2021-11-16 11:24:20 +0100 <tomsmeding> carbolymer: ^
2021-11-16 11:24:54 +0100 <tomsmeding> ocramz[m]: \o
2021-11-16 11:25:35 +0100deadmarshal(~deadmarsh@95.38.114.190)
2021-11-16 11:26:16 +0100 <kuribas> @hoogle $>
2021-11-16 11:26:17 +0100 <lambdabot> Data.Functor ($>) :: Functor f => f a -> b -> f b
2021-11-16 11:26:17 +0100 <lambdabot> Data.Functor.Compat ($>) :: Functor f => f a -> b -> f b
2021-11-16 11:26:17 +0100 <lambdabot> Data.Functor.Apply ($>) :: Functor f => f a -> b -> f b
2021-11-16 11:26:25 +0100 <kuribas> @hoogle <$
2021-11-16 11:26:25 +0100 <lambdabot> Prelude (<$) :: Functor f => a -> f b -> f a
2021-11-16 11:26:25 +0100 <lambdabot> Control.Monad (<$) :: Functor f => a -> f b -> f a
2021-11-16 11:26:25 +0100 <lambdabot> Control.Applicative (<$) :: Functor f => a -> f b -> f a
2021-11-16 11:26:31 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 250 seconds)
2021-11-16 11:26:47 +0100 <tomsmeding> clearly, you only need <$ when you rose above the world of functors
2021-11-16 11:27:07 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2021-11-16 11:27:50 +0100 <kuribas> what do you mean?
2021-11-16 11:28:17 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 11:28:35 +0100slice(~slice@user/slice) (Quit: cya)
2021-11-16 11:28:37 +0100 <tomsmeding> dumb joke, because <$ is in Control.{Applicative,Monad} while $> is in Data.Functor
2021-11-16 11:29:02 +0100 <kuribas> right, strange indeed
2021-11-16 11:31:33 +0100 <carbolymer> tomsmeding: yeah, but https://hackage.haskell.org/package/transformers-0.6.0.2/docs/src/Control.Monad.Trans.Writer.Lazy.… has irrefutable patterns, so it kind of explicitly encodes laziness in Monad instance - so `>>` is strict by default?
2021-11-16 11:31:48 +0100 <ocramz[m]> imagine what kind of shouting match if we were to move <$ and $> to the same module
2021-11-16 11:32:21 +0100 <tomsmeding> carbolymer: note that WriterT doesn't specialise >>
2021-11-16 11:32:27 +0100 <tomsmeding> so the strictness can't come from >>
2021-11-16 11:32:37 +0100 <tomsmeding> ocramz[m]: heh yes
2021-11-16 11:33:49 +0100 <tomsmeding> carbolymer: note that the irrefutable patterns are not essential; that >>= can also be written: m >>= k = WriterT $ runWriterT m >>= \p -> runWriterT (k (fst p)) >>= \q -> return (fst q, snd p `mappend` snd q)
2021-11-16 11:34:00 +0100 <tomsmeding> using fst/snd instead of irrefutable patterns, same semantics
2021-11-16 11:34:29 +0100 <carbolymer> tomsmeding: but you demonstrated the laziness of `>>` in lazy Writer
2021-11-16 11:34:49 +0100 <tomsmeding> which inherits laziness from >>=
2021-11-16 11:34:50 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 11:35:55 +0100 <tomsmeding> I wonder if lazy Writer becomes strict if you do 'WriterT StrictIdentity', where StrictIdentity doesn't have 'm >>= k = k (runIdentity m)' but '!m >>= k = k (runIdentity m)'
2021-11-16 11:36:17 +0100 <carbolymer> tomsmeding: so that bind oneliner you wrote is also lazy?
2021-11-16 11:36:26 +0100 <tomsmeding> the fst/snd one? yes
2021-11-16 11:36:34 +0100 <tomsmeding> it's completely equivalent to the ~() version
2021-11-16 11:38:05 +0100 <carbolymer> I think I don't see it (yet)
2021-11-16 11:38:43 +0100 <tomsmeding> that equivalence? or where the laziness comes from
2021-11-16 11:38:49 +0100 <tomsmeding> I'm also not completely sure yet about the latter
2021-11-16 11:38:59 +0100 <carbolymer> the laziness
2021-11-16 11:45:39 +0100 <tomsmeding> ah, making Identity strict indeed defeats the laziness of lazy Writer
2021-11-16 11:46:10 +0100 <tomsmeding> carbolymer: https://paste.tomsmeding.com/iVwhUJ6g
2021-11-16 11:46:28 +0100 <tomsmeding> only difference between Identity and SIdentity is that SIdentity's bind operator is strict, as you can see
2021-11-16 11:46:40 +0100 <tomsmeding> mapWriter' is just mapWriter but then for SIdentity
2021-11-16 11:47:03 +0100 <tomsmeding> thing1 produces 'WriterT (Identity (2,""))', while thing2 produces WriterT (SIdentity (*** Exception: Prelude.undefined'
2021-11-16 11:47:17 +0100 <carbolymer> so now I don't understand why list's `>>` is strict ;]
2021-11-16 11:48:10 +0100 <tomsmeding> carbolymer: >> = *> for lists, and in *> you see that in order to produce items of the result list, you have to evaluate the spine of the left-hand argument to *>
2021-11-16 11:49:12 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-11-16 11:49:16 +0100 <tomsmeding> so the spine (i.e. monad structure) of the result list is dependent on the spine (monad structure) of the left argument
2021-11-16 11:49:33 +0100 <carbolymer> tomsmeding: so this is because of this pattern match: `xs *> ys = [y | _ <- xs, y <- ys]` ?
2021-11-16 11:49:40 +0100 <tomsmeding> yeah talking about that one
2021-11-16 11:50:16 +0100 <tomsmeding> if xs is [], the result is []; if xs is _ : _, the result depends on ys
2021-11-16 11:50:28 +0100 <carbolymer> so this means that list comprehension is strict?
2021-11-16 11:50:38 +0100 <tomsmeding> so evaluating (xs >> ys) to WHNF requires evaluation of xs to WHNF -- to check whether it's [] or _:_
2021-11-16 11:51:00 +0100 <tomsmeding> it must be! because the outermost constructor of the result depends on the inputs :p
2021-11-16 11:51:00 +0100ubert(~Thunderbi@p200300ecdf0ba2663873d9a1bfed1dd8.dip0.t-ipconnect.de)
2021-11-16 11:51:21 +0100 <carbolymer> ok, now everything makes sense
2021-11-16 11:51:22 +0100 <carbolymer> ;]
2021-11-16 11:51:23 +0100 <tomsmeding> bit like 'if isJust x then 1 else 2' is strict in x, because, well, it must be
2021-11-16 11:51:29 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 11:51:34 +0100 <tomsmeding> even if there is no seq in sight
2021-11-16 11:51:48 +0100 <tomsmeding> carbolymer: does it? it only half does for me
2021-11-16 11:51:50 +0100 <tomsmeding> :p
2021-11-16 11:52:14 +0100 <tomsmeding> but yeah, lazy bind exists shrugs
2021-11-16 11:52:59 +0100 <carbolymer> tomsmeding: I mean, it still feels that "haskell is lazy, except [list of dozen corner cases"
2021-11-16 11:53:08 +0100 <tomsmeding> haskell is call-by-need
2021-11-16 11:53:16 +0100 <tomsmeding> stuff gets evaluated when the result depends on it
2021-11-16 11:53:33 +0100 <tomsmeding> and you can create artificial dependencies using seq/BangPatterns
2021-11-16 11:53:46 +0100 <kuribas> carbolymer: well, stuff has to be evaluated *some* time :)
2021-11-16 11:54:09 +0100 <tomsmeding> carbolymer: and then you have https://gitlab.haskell.org/ghc/ghc/-/issues/20687
2021-11-16 11:54:18 +0100ubert(~Thunderbi@p200300ecdf0ba2663873d9a1bfed1dd8.dip0.t-ipconnect.de) (Client Quit)
2021-11-16 11:54:27 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2021-11-16 11:55:53 +0100max22-(~maxime@2a01cb0883359800761b1c69d9198b7f.ipv6.abo.wanadoo.fr)
2021-11-16 11:56:12 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-16 11:56:22 +0100 <carbolymer> kuribas: well yes, until you use `void` ;]
2021-11-16 11:56:32 +0100 <carbolymer> or similar thing
2021-11-16 11:58:28 +0100 <tomsmeding> carbolymer: my feeling with stuff like this is more, I think I'm okay enough with the low-level rules, like I know what irrefutable patterns do in the common cases and things like that. But then people build skyscrapers on top of that, and hell if I know what the resonance index of a skyscraper is given the resonance indices of all the individual metal panels
2021-11-16 11:59:03 +0100 <tomsmeding> WriterT s Identity is fairly low building still
2021-11-16 11:59:15 +0100 <carbolymer> tomsmeding: that's when abstractions failed you, because you need to know internals to properly use them
2021-11-16 11:59:17 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se) (Ping timeout: 268 seconds)
2021-11-16 11:59:25 +0100 <tomsmeding> I guess
2021-11-16 11:59:35 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se)
2021-11-16 12:00:03 +0100 <carbolymer> tomsmeding: and then you stick chewing gum to the metal panel - and resonance avoided!
2021-11-16 12:00:07 +0100 <tomsmeding> though Writer in particular also allows you to reason on a higher level: strict WriterT adds strictness, while lazy WriterT doesn't. So it's lazy only if the underlying monad is lazy and you're using lazy WriterT
2021-11-16 12:00:12 +0100 <tomsmeding> :D
2021-11-16 12:00:37 +0100 <tomsmeding> but that high-level reasoning doesn't transfer to other monads
2021-11-16 12:00:39 +0100alx741(~alx741@181.196.68.87)
2021-11-16 12:00:45 +0100 <carbolymer> yeah
2021-11-16 12:01:39 +0100 <maerwald> "laziness is a leaky abstraction"?
2021-11-16 12:01:44 +0100 <maerwald> I think I might agree on that
2021-11-16 12:02:24 +0100 <maerwald> at least when you reason operationally
2021-11-16 12:02:35 +0100 <kuribas> laziness isn't an abstraction
2021-11-16 12:02:35 +0100m1dnight(~christoph@christophe.dev) (Quit: WeeChat 3.1)
2021-11-16 12:03:00 +0100 <carbolymer> pipes are monads, so they sometimes leak
2021-11-16 12:03:24 +0100 <maerwald> kuribas: I think it is
2021-11-16 12:03:41 +0100 <maerwald> you can write lazy code in other languages like C, but it requires manual effort
2021-11-16 12:03:44 +0100 <tomsmeding> laziness is an abstraction, but for something else than we're talking about here
2021-11-16 12:03:56 +0100 <tomsmeding> the topic here was how monads abstract over certain instances of laziness
2021-11-16 12:03:59 +0100m1dnight(~christoph@christophe.dev)
2021-11-16 12:04:24 +0100 <tomsmeding> what laziness abstracts over is the evaluation model, which we're not even talking about currently
2021-11-16 12:13:39 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-16 12:13:49 +0100alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-11-16 12:14:09 +0100alzgh(~alzgh@user/alzgh)
2021-11-16 12:17:41 +0100__monty__(~toonn@user/toonn)
2021-11-16 12:21:44 +0100Guest8054(~Guest80@pd9ed79bf.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2021-11-16 12:23:43 +0100deadmarshal(~deadmarsh@95.38.114.190) (Ping timeout: 250 seconds)
2021-11-16 12:23:44 +0100kaychaks__(sid236345@helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-16 12:30:03 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-11-16 12:34:17 +0100nschoe(~quassel@178.251.84.79)
2021-11-16 12:37:26 +0100jakalx(~jakalx@base.jakalx.net) ()
2021-11-16 12:38:07 +0100mark__(~a@p200300ef973db1d9502293e1a26d2ca1.dip0.t-ipconnect.de)
2021-11-16 12:39:04 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9)
2021-11-16 12:41:55 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 250 seconds)
2021-11-16 12:42:06 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-16 12:42:40 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 12:43:35 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9) (Ping timeout: 264 seconds)
2021-11-16 12:53:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-11-16 12:53:39 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 12:54:10 +0100dfip^(~dfip@h50.174.139.63.static.ip.windstream.net) (Remote host closed the connection)
2021-11-16 13:01:33 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 265 seconds)
2021-11-16 13:04:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-11-16 13:04:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 13:05:11 +0100machinedgod(~machinedg@24.105.81.50)
2021-11-16 13:05:15 +0100jmorris(uid433911@hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-16 13:09:52 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-16 13:10:00 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 13:11:23 +0100dlbh^(~dlbh@h50.174.139.63.static.ip.windstream.net)
2021-11-16 13:13:43 +0100jakalx(~jakalx@base.jakalx.net)
2021-11-16 13:15:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-11-16 13:15:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 13:18:54 +0100Lycurgus(~juan@98.4.112.204)
2021-11-16 13:20:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-11-16 13:21:01 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 13:21:15 +0100fef(~thedawn@user/thedawn)
2021-11-16 13:24:21 +0100 <dminuoso> Is there a simple way to have a const generic over the number of arguments?
2021-11-16 13:24:48 +0100Guest4216(~Guest42@wificampus-098145.grenet.fr)
2021-11-16 13:24:57 +0100 <dminuoso> Background: Im writing out some servant code, and I have a bunch of handlers where Im writing: { foo = \_ _ _ -> forbidden, bar = \_ -> forbidden, quux = \_ _ _ _ _ -> forbidden } and so on
2021-11-16 13:25:26 +0100 <dminuoso> And it'd be much simpler if I could just write `API { foo = constG forbidden; bar = constG forbidden; quux = constG forbidden }`
2021-11-16 13:26:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-11-16 13:26:11 +0100Guest80(~Guest80@pd9ed79bf.dip0.t-ipconnect.de)
2021-11-16 13:26:47 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 13:27:34 +0100boxscape_(~boxscape_@134.171.69.87)
2021-11-16 13:28:11 +0100Codaraxis(~Codaraxis@user/codaraxis) (Remote host closed the connection)
2021-11-16 13:28:36 +0100Codaraxis(~Codaraxis@user/codaraxis)
2021-11-16 13:32:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-11-16 13:32:11 +0100vysn(~vysn@user/vysn) (Ping timeout: 264 seconds)
2021-11-16 13:32:32 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 13:33:39 +0100Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-11-16 13:36:20 +0100wei2912(~wei2912@138.75.71.147) (Quit: Lost terminal)
2021-11-16 13:36:51 +0100jespada(~jespada@252-155-231-201.fibertel.com.ar)
2021-11-16 13:47:45 +0100jespada(~jespada@252-155-231-201.fibertel.com.ar) (Quit: Textual IRC Client: www.textualapp.com)
2021-11-16 13:50:45 +0100Kaiepi(~Kaiepi@156.34.44.192) (Remote host closed the connection)
2021-11-16 13:55:41 +0100 <tomsmeding> I think the only way would be with a printf-like type class, but that won't work here because the final return type doesn't have anything to distinguish it
2021-11-16 13:56:41 +0100 <tomsmeding> or hm, does seem to work?
2021-11-16 13:56:41 +0100 <dminuoso> Indeed, Ive been trying to crack this nut for a while now
2021-11-16 13:56:46 +0100 <dminuoso> How would you?
2021-11-16 13:57:04 +0100 <tomsmeding> % :set -XFlexibleInstances -XMultiParamTypeClasses
2021-11-16 13:57:04 +0100 <yahb> tomsmeding:
2021-11-16 13:57:11 +0100 <tomsmeding> % class GenConst a t where constG :: a -> t
2021-11-16 13:57:12 +0100 <yahb> tomsmeding:
2021-11-16 13:57:15 +0100 <tomsmeding> % instance GenConst a a where constG = id
2021-11-16 13:57:16 +0100 <yahb> tomsmeding:
2021-11-16 13:57:19 +0100 <tomsmeding> % instance GenConst a t => GenConst a (s -> t) where constG x = const (constG x)
2021-11-16 13:57:20 +0100 <yahb> tomsmeding:
2021-11-16 13:57:24 +0100 <merijn> I missed the preamble
2021-11-16 13:57:27 +0100 <merijn> What's the goal?
2021-11-16 13:57:39 +0100 <tomsmeding> % constG 42 'a' [] () :: Int
2021-11-16 13:57:39 +0100 <yahb> tomsmeding: ; <interactive>:85:1: error:; * No instance for (GenConst Integer Int) arising from a use of `constG'; * In the expression: constG 42 'a' [] () :: Int; In an equation for `it': it = constG 42 'a' [] () :: Int
2021-11-16 13:57:55 +0100 <tomsmeding> % (constG :: Int -> a -> b -> c -> Int) 42 'a' [] () :: Int
2021-11-16 13:57:55 +0100 <yahb> tomsmeding: 42
2021-11-16 13:58:12 +0100 <tomsmeding> okay type inference breaks completely so doesn't help
2021-11-16 13:58:25 +0100 <tomsmeding> merijn: https://ircbrowse.tomsmeding.com/day/lchaskell/2021/11/16?id=274123#trid274123
2021-11-16 13:58:39 +0100 <opqdonut> % constG (42::Int) 'a' [] () :: Int
2021-11-16 13:58:39 +0100 <yahb> opqdonut: 42
2021-11-16 13:58:43 +0100 <opqdonut> not completely
2021-11-16 13:58:44 +0100 <tomsmeding> oh!
2021-11-16 13:58:52 +0100 <tomsmeding> oh lol defaulting
2021-11-16 13:58:59 +0100 <opqdonut> yeh
2021-11-16 13:58:59 +0100 <tomsmeding> dminuoso: ^
2021-11-16 13:59:08 +0100 <merijn> ah
2021-11-16 13:59:32 +0100 <tomsmeding> this seems deceptively simple
2021-11-16 13:59:33 +0100max22-(~maxime@2a01cb0883359800761b1c69d9198b7f.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2021-11-16 13:59:47 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-16 13:59:58 +0100 <tomsmeding> how are those instances not overlapping, by the way?
2021-11-16 13:59:59 +0100Kaiepi(~Kaiepi@156.34.44.192) (Remote host closed the connection)
2021-11-16 14:00:10 +0100 <dminuoso> tomsmeding: Yeah no: https://gist.github.com/dminuoso/3465f25002106f618cf2d69a6deda9e8
2021-11-16 14:00:14 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-16 14:00:16 +0100Kaiepi(~Kaiepi@156.34.44.192) (Remote host closed the connection)
2021-11-16 14:00:26 +0100 <dminuoso> Mmm
2021-11-16 14:00:31 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-16 14:00:33 +0100 <dminuoso> Probably doesn't help that `forbidden` is polymorphic either
2021-11-16 14:00:44 +0100 <tomsmeding> dminuoso: the problem is precisely that 'forbidden' is polymorphic
2021-11-16 14:00:53 +0100 <tomsmeding> are you ever going to put a function value in that?
2021-11-16 14:00:53 +0100 <dminuoso> Given the problem domain, it has to be
2021-11-16 14:01:03 +0100 <dminuoso> tomsmeding: forbidden just throws an exception.
2021-11-16 14:01:14 +0100 <tomsmeding> like, are you ever going to write 'constG f' with f of function type
2021-11-16 14:01:16 +0100 <dminuoso> You can think of it as type `IO a`
2021-11-16 14:01:19 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-11-16 14:01:33 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 14:01:34 +0100 <dminuoso> No
2021-11-16 14:01:40 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-11-16 14:01:57 +0100 <tomsmeding> if not, make the '->' instance OVERLAPPING and rewrite the first instance to 'instance {-# OVERLAPPABLE #-} a ~ b => GenConst a b where constG = id'
2021-11-16 14:02:07 +0100 <tomsmeding> untested :D
2021-11-16 14:02:28 +0100Kaiepi(~Kaiepi@156.34.44.192) (Client Quit)
2021-11-16 14:02:36 +0100Guest4216(~Guest42@wificampus-098145.grenet.fr) (Ping timeout: 256 seconds)
2021-11-16 14:02:43 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-16 14:02:56 +0100 <dminuoso> tomsmeding: Ah yes, that did the trick.
2021-11-16 14:03:04 +0100 <tomsmeding> \o/
2021-11-16 14:03:07 +0100kmein_kmein
2021-11-16 14:03:07 +0100 <dminuoso> My typeclass-fu is not good enough to understand why that even worked.
2021-11-16 14:03:29 +0100 <tomsmeding> it now always selects the -> instance if possible, which gives the const another argument
2021-11-16 14:03:33 +0100Kaiepi(~Kaiepi@156.34.44.192) (Client Quit)
2021-11-16 14:03:39 +0100 <tomsmeding> if it's not a function anymore, it always selects the first instance
2021-11-16 14:03:51 +0100 <dminuoso> That much I understand, but why did you move the `a ~ b` into a constraint?
2021-11-16 14:03:57 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-16 14:04:05 +0100 <tomsmeding> the difference between 'instance GenConst a a' and 'instance a ~ b => GenConst a b' is that with the 'a a' version, ghc has to have proven already that the two arguments are equal
2021-11-16 14:04:11 +0100 <tomsmeding> before being able to use the instance
2021-11-16 14:04:14 +0100 <dminuoso> Is that because instance selection occurs first, and you want that instance to be not preferred?
2021-11-16 14:04:30 +0100 <tomsmeding> with the ~ version, ghc can always select the instance, and then _learn_ that it must also have equality
2021-11-16 14:04:43 +0100 <tomsmeding> which then, subsequently, forces the polymorphic 'forbidden' to have the right type
2021-11-16 14:04:48 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-11-16 14:04:49 +0100ubert(~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
2021-11-16 14:04:51 +0100 <dminuoso> Ohh
2021-11-16 14:04:56 +0100 <dminuoso> I kind of..
2021-11-16 14:04:59 +0100 <dminuoso> Not quite.
2021-11-16 14:05:05 +0100 <tomsmeding> ghc can't prove that GuardM a ~ GuardM [Server], but it can _instantiate_ a to [Server]
2021-11-16 14:05:28 +0100 <dminuoso> Alright. Next up, I have to cook up generic code that can generically set `forbidden` on any handler with this!
2021-11-16 14:05:35 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-11-16 14:05:43 +0100Kaiepi(~Kaiepi@156.34.44.192) (Remote host closed the connection)
2021-11-16 14:05:51 +0100 <dminuoso> (Arguably, if I have generics, I could just generically do a nested const...)
2021-11-16 14:06:16 +0100 <dminuoso> 14:05:05 tomsmeding | ghc can't prove that GuardM a ~ GuardM [Server], but it can _instantiate_ a to [Server]
2021-11-16 14:06:19 +0100 <dminuoso> Mmm
2021-11-16 14:06:49 +0100 <dminuoso> I think there's an earlier piece that Im missing
2021-11-16 14:06:52 +0100 <tomsmeding> the key thing here, I believe, is that type classes are _open_
2021-11-16 14:07:18 +0100 <tomsmeding> if they were closed, i.e. ghc could be sure there are no more instances floating around that it doesn't know of, then the ~ version and the 'a a' version would be equivalent
2021-11-16 14:07:45 +0100 <tomsmeding> but because type classes are open, ghc doesn't know that there might not be some other 'GenConst a b' instance around that it should select if the two arguments are _not_ equal
2021-11-16 14:08:00 +0100 <dminuoso> Maybe Im actually confused about your construction of the base case to begin with
2021-11-16 14:08:07 +0100 <tomsmeding> so ghc can't pick the 'GenConst a a' instance if it isn't already sure that the arguments are the same
2021-11-16 14:08:36 +0100 <tomsmeding> whereas writing 'GenConst a b' precludes the existence of any other such instance, so ghc can freely pick this one
2021-11-16 14:08:48 +0100cfricke(~cfricke@user/cfricke) (Ping timeout: 256 seconds)
2021-11-16 14:08:57 +0100 <tomsmeding> dminuoso: the base case, as in, const with zero ignored arguments is id?
2021-11-16 14:09:01 +0100 <dminuoso> Yes
2021-11-16 14:09:22 +0100nschoe(~quassel@178.251.84.79) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-11-16 14:09:25 +0100 <dminuoso> Oh.
2021-11-16 14:09:31 +0100 <dminuoso> I get it.
2021-11-16 14:09:40 +0100tomsmedingis not quite sure what your confusion as
2021-11-16 14:09:51 +0100 <tomsmeding> but "I get it" sounds good :D
2021-11-16 14:09:53 +0100 <dminuoso> Yeah no, I think Ive looked at this problem for far too long
2021-11-16 14:10:09 +0100 <tomsmeding> 13:59 <tomsmeding> this seems deceptively simple
2021-11-16 14:10:10 +0100 <merijn> dminuoso: My advice would be: just write the lambdas :p
2021-11-16 14:10:17 +0100 <tomsmeding> I didn't expect this to work
2021-11-16 14:10:30 +0100 <dminuoso> merijn: I have a lot of them with varying arguments.
2021-11-16 14:10:50 +0100 <merijn> dminuoso: Write a TH function or just write them out once? :p
2021-11-16 14:10:51 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-11-16 14:10:51 +0100 <tomsmeding> dminuoso: do you see why this breaks completely if you ever pass a function value to constG ?
2021-11-16 14:11:14 +0100 <tomsmeding> % constG (id :: Int -> Int) () [] :: Int -> Int
2021-11-16 14:11:14 +0100 <yahb> tomsmeding: ; <interactive>:88:1: error:; * Overlapping instances for GenConst (Int -> Int) (Int -> Int) arising from a use of `constG'; Matching instances:; instance [safe] forall a. GenConst a a -- Defined at <interactive>:83:10; instance [safe] forall a t s. GenConst a t => GenConst a (s -> t) -- Defined at <interactive>:84:10; * In the expression: constG (id :: Int -> Int) () [] ::
2021-11-16 14:11:15 +0100 <merijn> Write a helper for 1-10 (or whatever) arguments with a number at the end of the name and don't think about it again
2021-11-16 14:11:25 +0100 <merijn> Utils.hs to the rescue
2021-11-16 14:11:57 +0100 <tomsmeding> yeah, functions not working make me sort of prefer merijn's suggestion of const3 const4 const5 const6
2021-11-16 14:12:17 +0100 <dminuoso> Perhaps if this was ever needed
2021-11-16 14:12:34 +0100neurocyte0132889(~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
2021-11-16 14:15:46 +0100neurocyte0132889(~neurocyte@45.131.36.116)
2021-11-16 14:15:46 +0100neurocyte0132889(~neurocyte@45.131.36.116) (Changing host)
2021-11-16 14:15:46 +0100neurocyte0132889(~neurocyte@user/neurocyte)
2021-11-16 14:16:45 +0100 <merijn> I mean, is it ugly to handwrite that function 10 times? Sure. It's also foolproof and unlikely to ever break or need any maintenance
2021-11-16 14:16:48 +0100 <merijn> so who cares
2021-11-16 14:17:08 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2021-11-16 14:17:16 +0100 <dminuoso> Perhaps you're right. Another reason is that it doesnt require a trip to #haskell and having luck whether tomsmeding is around to make sense of it.
2021-11-16 14:17:22 +0100 <dminuoso> Mmm
2021-11-16 14:17:52 +0100 <tomsmeding> :p
2021-11-16 14:18:19 +0100 <dminuoso> tomsmeding: To continue the previous, why would it have to prove `GuardM a ~ GuardM [Server]`?
2021-11-16 14:18:26 +0100 <tomsmeding> who knew that I would be in a position to spread type class fu
2021-11-16 14:18:42 +0100 <tomsmeding> dminuoso: for the original 'GenConst a a' instance
2021-11-16 14:19:17 +0100 <tomsmeding> the constraint at that point is 'GenConst (GuardM a) (GuardM [Server])', because the value it's passed is 'forbidden', and the value it should produce is GuardM [Server]
2021-11-16 14:19:37 +0100 <tomsmeding> to be allowed to even look at that 'GenConst a a' instance, ghc has to prove that those arguments are equal
2021-11-16 14:19:54 +0100 <tomsmeding> because there might be another 'GenConst a b' instance around, technically
2021-11-16 14:20:03 +0100wmacmil(~wmacmil@83-233-165-97.cust.bredband2.com)
2021-11-16 14:20:10 +0100 <tomsmeding> overlapping instances notwithstanding, I guess
2021-11-16 14:20:45 +0100kupi(uid212005@hampstead.irccloud.com)
2021-11-16 14:20:53 +0100 <wmacmil> whats the easiest way to work with vanilla mutually inductive datatypes in haskell? for gadts?
2021-11-16 14:20:54 +0100 <dminuoso> tomsmeding: But why cant GHC simply insert its `a ~ [Server]` constraint itself?
2021-11-16 14:21:13 +0100 <tomsmeding> dminuoso: because there might be another 'GenConst a b' instance around :p
2021-11-16 14:21:13 +0100 <dminuoso> This might sound a bit dumb, and perhaps ignorant of what you just wrote
2021-11-16 14:21:15 +0100 <dminuoso> Mmm
2021-11-16 14:21:22 +0100 <tomsmeding> which it might have to select if it turns out that a ~ () or something
2021-11-16 14:21:23 +0100 <wmacmil> i.e. how do you replicate the mutual keyword from agda
2021-11-16 14:21:41 +0100 <tomsmeding> wmacmil: gadts are already mutually recursive by default in haskell?
2021-11-16 14:22:09 +0100 <tomsmeding> everything is mutually recursive in haskell, except for template haskell stuff
2021-11-16 14:22:20 +0100 <wmacmil> cool :)
2021-11-16 14:22:54 +0100zincy_(~zincy@host-92-8-239-246.as13285.net)
2021-11-16 14:23:35 +0100 <dminuoso> tomsmeding: But GHC already sees all instances in scope, the resolution happens right here. My use of constG doesnt produce any GenConst constraint, why would GHC care whether someone on the moon wrote an instance for that?
2021-11-16 14:23:48 +0100 <tomsmeding> dminuoso: no, type classes are open, ghc cannot assume it sees all instances in scope
2021-11-16 14:24:02 +0100 <tomsmeding> compare 'type family F a ; type instance F Int = ... ; ...' with 'type family F a where ...'
2021-11-16 14:24:06 +0100 <tomsmeding> the first is open, the second is closed
2021-11-16 14:24:10 +0100 <tomsmeding> type classes are always open
2021-11-16 14:24:42 +0100 <tomsmeding> type classes are supposed to be coherent
2021-11-16 14:24:43 +0100 <dminuoso> tomsmeding: That cant be entirely true, since clearly you can have more specific instances in some cases.
2021-11-16 14:25:06 +0100 <tomsmeding> ghc isn't allowed to instantiate the same type class with two different dictionaries in two different situations
2021-11-16 14:25:11 +0100 <tomsmeding> so it has to be careful
2021-11-16 14:25:23 +0100 <tomsmeding> dminuoso: with overlapping instances you mean?
2021-11-16 14:26:07 +0100 <tomsmeding> indeed, I believe ghc actively optimises code based on the assumption that two dictionaries of the same type class are always equal
2021-11-16 14:26:43 +0100 <dminuoso> Well you can write this:
2021-11-16 14:26:43 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Remote host closed the connection)
2021-11-16 14:26:47 +0100 <dminuoso> % class F a where f :: a
2021-11-16 14:26:47 +0100 <yahb> dminuoso:
2021-11-16 14:26:48 +0100 <tomsmeding> see the Note [NOINLINE someNatVal] here: https://hackage.haskell.org/package/base-4.15.0.0/docs/src/GHC-TypeNats.html
2021-11-16 14:26:52 +0100 <dminuoso> % instance F [a] where f = []
2021-11-16 14:26:52 +0100 <yahb> dminuoso:
2021-11-16 14:26:58 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-16 14:27:21 +0100 <tomsmeding> in particular the second-to-last paragraph of that Note
2021-11-16 14:27:36 +0100 <dminuoso> tomsmeding: If GHC was in a complete open world assumption, GHC was *never* allowed to select that instance for `[T]`, since someone on the moon - outside the scope of the compilation unit - could have written an instance F [T]
2021-11-16 14:27:49 +0100 <dminuoso> (Which would be more specific)
2021-11-16 14:27:55 +0100 <dminuoso> These are not overlapping, mind you
2021-11-16 14:28:01 +0100 <dminuoso> Just more specific
2021-11-16 14:28:04 +0100 <tomsmeding> they are, right?
2021-11-16 14:28:13 +0100 <tomsmeding> % instance F [Int] where f = Maybe
2021-11-16 14:28:13 +0100 <yahb> tomsmeding: ; <interactive>:6:28: error:; * Data constructor not in scope: Maybe :: [Int]; * Perhaps you meant variable `maybe' (imported from Prelude)
2021-11-16 14:28:17 +0100 <dminuoso> Well sure
2021-11-16 14:28:21 +0100 <tomsmeding> % instance F [Int] where f = ()
2021-11-16 14:28:21 +0100 <yahb> tomsmeding: ; <interactive>:7:28: error:; * Couldn't match expected type `[Int]' with actual type `()'; * In the expression: (); In an equation for `f': f = (); In the instance declaration for `F [Int]'
2021-11-16 14:28:29 +0100 <tomsmeding> OH it's a class
2021-11-16 14:28:35 +0100 <tomsmeding> % instance F [Int] where f = []
2021-11-16 14:28:35 +0100 <yahb> tomsmeding:
2021-11-16 14:28:35 +0100 <dminuoso> % instance F String where f = "foo"
2021-11-16 14:28:35 +0100 <yahb> dminuoso:
2021-11-16 14:28:43 +0100 <dminuoso> % f @String
2021-11-16 14:28:44 +0100 <yahb> dminuoso: ; <interactive>:10:1: error:; * Overlapping instances for F String arising from a use of `f'; Matching instances:; instance [safe] F [a] -- Defined at <interactive>:5:10; instance [safe] F String -- Defined at <interactive>:9:10; * In the expression: f @String; In an equation for `it': it = f @String
2021-11-16 14:28:46 +0100tomsmedingis confused
2021-11-16 14:28:47 +0100 <dminuoso> Oh
2021-11-16 14:28:48 +0100 <tomsmeding> right
2021-11-16 14:28:49 +0100 <dminuoso> Hold on
2021-11-16 14:28:50 +0100 <tomsmeding> there you go
2021-11-16 14:29:04 +0100 <tomsmeding> which you can fix with OVERLAPPING and OVERLAPPABLE pragmas
2021-11-16 14:29:15 +0100 <tomsmeding> which are more specific versions of the earlier INCOHERENT pragma
2021-11-16 14:29:16 +0100 <tomsmeding> ;)
2021-11-16 14:30:21 +0100 <dminuoso> tomsmeding: The error message was that the type variable 'a0' is ambiguous though
2021-11-16 14:30:34 +0100 <dminuoso> But I guess your point is:
2021-11-16 14:31:11 +0100 <dminuoso> GHC doesnt have a mechanism to monomorphize and introduce that constraint in the type checker in general, since in the general case it doesnt make sense in an open world assumption
2021-11-16 14:31:31 +0100 <dminuoso> Since I might as well have written something like `f = genConst forbidden` and exported `f`
2021-11-16 14:31:46 +0100 <dminuoso> Err `f = constG forbidden`, and exported `f`. here we go.
2021-11-16 14:32:00 +0100 <tomsmeding> I think so, yes
2021-11-16 14:32:13 +0100 <tomsmeding> the justifications and details of the algorithm I also don't know :p
2021-11-16 14:32:19 +0100 <dminuoso> Strictly speaking, inside this compilation unit, GHC could have safely made that unfiication
2021-11-16 14:32:31 +0100 <dminuoso> Or introduced that constraint
2021-11-16 14:32:50 +0100 <tomsmeding> I suspect that writing that F [T] instance in another module would be technically invalid
2021-11-16 14:33:14 +0100 <tomsmeding> just like defining the same name in two different compilation units in C/C++ might work sometimes but is technically undefined behaviour
2021-11-16 14:33:40 +0100 <tomsmeding> but this is my feeling, not anything concrete
2021-11-16 14:34:23 +0100 <merijn> Looks like there might be a 2022 NL-FP \o/
2021-11-16 14:34:28 +0100 <merijn> But it won't be in January >.>
2021-11-16 14:34:44 +0100 <tomsmeding> \o/
2021-11-16 14:34:47 +0100 <tomsmeding> saw the email
2021-11-16 14:35:15 +0100 <maerwald> merijn: like... remote?
2021-11-16 14:35:23 +0100 <merijn> I think wouter forgot to replace 2021 with 2022 though xD
2021-11-16 14:36:02 +0100 <tomsmeding> heh yes
2021-11-16 14:36:10 +0100 <merijn> I see basically zero value in a remote NL-FP. Better off cancelled than remote
2021-11-16 14:36:37 +0100 <maerwald> I haven't checked whether my front door still works
2021-11-16 14:37:18 +0100 <merijn> Remote conferences already suck with conferences that have actual money to pay for online infrastructure/streaming >.>
2021-11-16 14:39:21 +0100zincy_(~zincy@host-92-8-239-246.as13285.net) (Remote host closed the connection)
2021-11-16 14:40:00 +0100pfurla__(~pfurla@2804:14d:5c81:4104:8de2:1993:a832:eced) (Quit: gone to sleep. ZZZzzz…)
2021-11-16 14:40:44 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9)
2021-11-16 14:41:17 +0100 <dminuoso> Id rather spend 800EUR on a national compulsory vaccination, and then spend another 800 on a cool conference, than some remote conference where you cant hang out with people and talk to them over a beer.
2021-11-16 14:42:26 +0100 <maerwald> Does tea not work for you?
2021-11-16 14:42:28 +0100 <maerwald> :D
2021-11-16 14:43:08 +0100 <dminuoso> Tea, beer, combined, I dont care.
2021-11-16 14:43:45 +0100ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2021-11-16 14:44:00 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
2021-11-16 14:45:23 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9) (Ping timeout: 264 seconds)
2021-11-16 14:45:33 +0100Carras(~carras@2001:f40:904:54b9:f507:3f1e:f14f:9046)
2021-11-16 14:45:45 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-11-16 14:45:50 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-16 14:46:27 +0100zincy_(~zincy@host-92-8-239-246.as13285.net)
2021-11-16 14:46:47 +0100zincy_(~zincy@host-92-8-239-246.as13285.net) (Remote host closed the connection)
2021-11-16 14:48:17 +0100zincy_(~zincy@host-92-8-239-246.as13285.net)
2021-11-16 14:51:32 +0100fef(~thedawn@user/thedawn) (Quit: Leaving)
2021-11-16 14:53:04 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 14:57:59 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
2021-11-16 14:58:01 +0100Carras(~carras@2001:f40:904:54b9:f507:3f1e:f14f:9046) (Remote host closed the connection)
2021-11-16 14:58:32 +0100Carras(~carras@2001:f40:904:54b9:cc2c:1730:8d25:ddca)
2021-11-16 14:59:07 +0100deadmarshal(~deadmarsh@95.38.114.190)
2021-11-16 15:00:09 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2021-11-16 15:03:27 +0100zincy_(~zincy@host-92-8-239-246.as13285.net) (Remote host closed the connection)
2021-11-16 15:03:37 +0100deadmarshal(~deadmarsh@95.38.114.190) (Ping timeout: 250 seconds)
2021-11-16 15:05:24 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-16 15:06:31 +0100jippiedoe(~david@2a02-a44c-e14e-1-12d4-e982-14bb-9a24.fixed6.kpn.net)
2021-11-16 15:07:39 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-11-16 15:08:36 +0100aman(~aman@user/aman)
2021-11-16 15:08:57 +0100zincy_(~zincy@host-92-8-239-246.as13285.net)
2021-11-16 15:10:09 +0100pfurla(~pfurla@201.17.118.230)
2021-11-16 15:12:16 +0100shriekingnoise(~shrieking@186.137.144.80)
2021-11-16 15:12:32 +0100zincy_(~zincy@host-92-8-239-246.as13285.net) (Remote host closed the connection)
2021-11-16 15:13:11 +0100zincy_(~zincy@host-92-8-239-246.as13285.net)
2021-11-16 15:14:31 +0100emerson(~emerson@libera/staff/emerson) (Quit: Quitting)
2021-11-16 15:14:40 +0100benin(~benin@183.82.27.20)
2021-11-16 15:18:13 +0100sprout_(~quassel@2a02:a467:ccd6:1:e14a:d90e:46d2:87c4) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-11-16 15:19:03 +0100sprout(~quassel@2a02:a467:ccd6:1:e14a:d90e:46d2:87c4)
2021-11-16 15:19:07 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 15:23:30 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-11-16 15:23:40 +0100zincy_(~zincy@host-92-8-239-246.as13285.net) (Remote host closed the connection)
2021-11-16 15:26:07 +0100zincy_(~zincy@host-92-8-239-246.as13285.net)
2021-11-16 15:31:49 +0100eruditass(uid248673@uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-16 15:33:07 +0100cfricke(~cfricke@user/cfricke)
2021-11-16 15:35:01 +0100acarrico1(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-11-16 15:38:42 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-16 15:38:42 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-16 15:38:42 +0100wroathe(~wroathe@user/wroathe)
2021-11-16 15:39:58 +0100Guest42(~Guest42@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-11-16 15:41:08 +0100thyriaen(~thyriaen@dynamic-077-013-170-047.77.13.pool.telefonica.de)
2021-11-16 15:42:00 +0100 <Guest42> if `(+) :: Num a => a -> a -> a`, then is this a function defined somewhere in Prelude, or is it a compiler intrinsic?
2021-11-16 15:43:45 +0100 <Guest42> all I could find from hackage was the Num type class definition
2021-11-16 15:43:46 +0100 <Guest42> https://hackage.haskell.org/package/base-4.16.0.0/docs/src/GHC.Num.html#%2B
2021-11-16 15:44:18 +0100vysn(~vysn@user/vysn)
2021-11-16 15:44:21 +0100 <maerwald> Guest42: the instance are right below that
2021-11-16 15:45:53 +0100 <Guest42> so for example Integer defines `(+) = integerAdd`
2021-11-16 15:46:45 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Excess Flood)
2021-11-16 15:46:47 +0100 <Guest42> trying to click it leads me nowhere, I'll try cloning the source for myself I guess
2021-11-16 15:46:48 +0100 <Guest42> https://hackage.haskell.org/package/base-4.16.0.0/ghc-bignum-1.2/src/GHC-Num-Integer.html#integerAdd
2021-11-16 15:46:52 +0100asm(~alexander@burner.asm89.io) (Changing host)
2021-11-16 15:46:52 +0100asm(~alexander@user/asm)
2021-11-16 15:47:15 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2021-11-16 15:48:11 +0100 <Guest42> 640k objects o_O
2021-11-16 15:48:36 +0100 <maerwald> there's also integer-simple
2021-11-16 15:48:37 +0100 <Guest42> ghc's my favourite compiler, it always feels like pure magic
2021-11-16 15:48:48 +0100 <maerwald> https://hackage.haskell.org/package/integer-simple-0.1.1.1/docs/src/GHC.Integer.Type.html#plusInte…
2021-11-16 15:48:49 +0100zincy_(~zincy@host-92-8-239-246.as13285.net) (Remote host closed the connection)
2021-11-16 15:48:52 +0100 <maerwald> different bignum backend
2021-11-16 15:48:53 +0100 <Guest42> maerwald: yes but what are they?
2021-11-16 15:49:10 +0100zincy_(~zincy@host-92-8-239-246.as13285.net)
2021-11-16 15:49:29 +0100 <maerwald> ghc-bignum depends on libgmp
2021-11-16 15:50:00 +0100 <Guest42> so compiler instrinsics?
2021-11-16 15:50:31 +0100 <Guest42> integerAdd is in the end a call into GMP?
2021-11-16 15:50:46 +0100 <Guest42> or is there something below integerAdd too
2021-11-16 15:51:09 +0100zincy_(~zincy@host-92-8-239-246.as13285.net) (Remote host closed the connection)
2021-11-16 15:51:17 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 250 seconds)
2021-11-16 15:52:22 +0100zincy_(~zincy@host-92-8-239-246.as13285.net)
2021-11-16 15:52:50 +0100zincy_(~zincy@host-92-8-239-246.as13285.net) (Remote host closed the connection)
2021-11-16 15:52:55 +0100servytor(uid525486@hampstead.irccloud.com)
2021-11-16 15:54:14 +0100[Kalisto](~nico@user/kalisto/x-8968079) (Ping timeout: 268 seconds)
2021-11-16 15:54:15 +0100acarrico1(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Quit: Leaving.)
2021-11-16 15:54:15 +0100[Kalisto]_(~nico@user/kalisto/x-8968079)
2021-11-16 15:54:31 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-11-16 15:54:31 +0100 <lortabac> Guest42: most of these primitives are just FFI calls to C code
2021-11-16 15:54:39 +0100[Kalisto]_[Kalisto]
2021-11-16 15:56:02 +0100pfurla(~pfurla@201.17.118.230) (Quit: gone to sleep. ZZZzzz…)
2021-11-16 15:56:13 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Client Quit)
2021-11-16 15:56:31 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-11-16 15:58:42 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2021-11-16 15:58:50 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Client Quit)
2021-11-16 15:59:09 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-11-16 16:00:48 +0100nvmd(~nvmd@user/nvmd)
2021-11-16 16:00:54 +0100 <merijn> lortabac: Most of them are primitives that are just primitives in the compiler, tbh
2021-11-16 16:01:30 +0100 <merijn> But the Integer stuff is just libgmp calls, yeah
2021-11-16 16:01:35 +0100mark__(~a@p200300ef973db1d9502293e1a26d2ca1.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2021-11-16 16:01:57 +0100mark__(~a@p200300ef973db186502293e1a26d2ca1.dip0.t-ipconnect.de)
2021-11-16 16:02:52 +0100 <merijn> Guest42: Most of the primitives are "in" ghc-prim (which mostly exists for typechecking, the primitives themselves are implemented inside GHC's codegen)
2021-11-16 16:02:57 +0100 <merijn> Guest42: See, for example, https://hackage.haskell.org/package/ghc-prim-0.8.0/docs/GHC-PrimopWrappers.html
2021-11-16 16:03:25 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Remote host closed the connection)
2021-11-16 16:03:47 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-11-16 16:03:48 +0100 <merijn> Guest42: Which also shows that Int/Word/Float/Double/Char/etc. are just thing wrappers around primitive types: https://hackage.haskell.org/package/ghc-prim-0.8.0/docs/GHC-Types.html#t:Int
2021-11-16 16:05:13 +0100 <lortabac> the definition of Int# is: data Int# :)
2021-11-16 16:05:13 +0100gentauro(~gentauro@user/gentauro) (Read error: Connection reset by peer)
2021-11-16 16:05:15 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-11-16 16:05:58 +0100 <merijn> Same for stuff like "gtChar# = gtChar#"
2021-11-16 16:07:34 +0100 <boxscape_> IIRC it used to be a lot of `gtChar# = let x = x in x` - I wonder why it was changed
2021-11-16 16:07:55 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-16 16:07:55 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-16 16:07:55 +0100wroathe(~wroathe@user/wroathe)
2021-11-16 16:08:24 +0100 <merijn> I don't recall it being that, so that must've been a *long* time ago
2021-11-16 16:08:32 +0100 <boxscape_> hmm
2021-11-16 16:09:55 +0100Carras(~carras@2001:f40:904:54b9:cc2c:1730:8d25:ddca) (Ping timeout: 250 seconds)
2021-11-16 16:10:09 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Excess Flood)
2021-11-16 16:10:34 +0100jkaye(~jkaye@BELVEDERE-T.ear2.Denver1.Level3.net)
2021-11-16 16:10:36 +0100gentauro(~gentauro@user/gentauro)
2021-11-16 16:10:56 +0100mimmy(~mimmy@146.70.75.156)
2021-11-16 16:11:02 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2021-11-16 16:11:30 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 265 seconds)
2021-11-16 16:11:53 +0100 <boxscape_> looking through the commits there's not a ton of instances of this so maybe I'm misremembering
2021-11-16 16:12:05 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 250 seconds)
2021-11-16 16:12:39 +0100 <boxscape_> wait I need to grep the ghc-prim submodule
2021-11-16 16:13:01 +0100 <boxscape_> okay no difference
2021-11-16 16:13:14 +0100Unode(~Unode@194.94.44.220) (Quit: Not that cable)
2021-11-16 16:13:52 +0100 <boxscape_> https://stackoverflow.com/questions/15893524/what-is-the-meaning-of-let-x-x-in-x-and-data-float-in…
2021-11-16 16:14:35 +0100 <boxscape_> https://hackage.haskell.org/package/ghc-prim-0.3.1.0/docs/src/GHC-Prim.html has a lot of `let x = x in x`
2021-11-16 16:15:16 +0100 <boxscape_> ...clearly I need to hone my grepping skills if I wasn't able to find this with grepping through commits
2021-11-16 16:15:17 +0100cosimone(~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3)
2021-11-16 16:15:55 +0100Unode(~Unode@194.94.44.220)
2021-11-16 16:17:28 +0100 <boxscape_> merijn it was changed in ghc-prim 0.5.0.0, uploaded 2016-05-21
2021-11-16 16:18:59 +0100srk(~sorki@user/srk) (Quit: ZNC 1.8.1 - https://znc.in)
2021-11-16 16:19:18 +0100srk(~sorki@user/srk)
2021-11-16 16:20:39 +0100John_Ivan(~John_Ivan@user/john-ivan/x-1515935)
2021-11-16 16:20:56 +0100 <John_Ivan> hi. anyone want to teach me haskell?
2021-11-16 16:21:50 +0100dlbh^(~dlbh@h50.174.139.63.static.ip.windstream.net) (Remote host closed the connection)
2021-11-16 16:22:15 +0100 <sm> https://wiki.haskell.org/Haskell , ready set go!
2021-11-16 16:22:33 +0100wmacmil(~wmacmil@83-233-165-97.cust.bredband2.com) (Quit: Leaving)
2021-11-16 16:23:04 +0100 <John_Ivan> sm, without inkhorn please.
2021-11-16 16:23:08 +0100 <dminuoso> John_Ivan: Depends, are you ready to pay usual developer consulting fees?
2021-11-16 16:23:43 +0100 <dminuoso> @where cis194
2021-11-16 16:23:44 +0100 <lambdabot> https://www.seas.upenn.edu/~cis194/spring13/lectures.html
2021-11-16 16:24:16 +0100 <dminuoso> This is a high quality haskell course that is widely regarded in this community
2021-11-16 16:24:21 +0100 <John_Ivan> dminuoso, sorry. I don't abide by inkhorns ;/
2021-11-16 16:24:30 +0100 <dminuoso> Im not sure why you think there's an inkhorn here, but okay
2021-11-16 16:24:32 +0100 <sm> @where htac
2021-11-16 16:24:32 +0100 <lambdabot> "Haskell Tutorial and Cookbook" by Mark Watson in 2017-09-04 at <https://leanpub.com/haskell-cookbook>
2021-11-16 16:25:19 +0100 <John_Ivan> right. more inkhorn material.
2021-11-16 16:25:25 +0100John_Ivansighs
2021-11-16 16:25:33 +0100 <dminuoso> Not sure what you're asking for.
2021-11-16 16:25:55 +0100 <John_Ivan> I suppose I'm not asking for anything.
2021-11-16 16:26:17 +0100geekosaursuddenly wants to misquote Hillel
2021-11-16 16:27:10 +0100 <shapr> oh yeah?
2021-11-16 16:30:01 +0100 <dminuoso> "That which is yummy to you, do cook it for another. That is the whole dish. The rest is just side dishes. Now go and eat"
2021-11-16 16:30:04 +0100 <dminuoso> geekosaur: ^- this?
2021-11-16 16:30:17 +0100 <geekosaur> roughly yes
2021-11-16 16:30:18 +0100 <geekosaur> https://www.chabad.org/library/article_cdo/aid/689306/jewish/On-One-Foot.htm
2021-11-16 16:30:58 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 16:31:03 +0100 <geekosaur> problem being I can't come up with a pithy enough Haskellism to teach on one foot :)
2021-11-16 16:31:21 +0100John_Ivanremoves his mask
2021-11-16 16:31:30 +0100 <John_Ivan> it is I, Scooby.
2021-11-16 16:31:35 +0100dminuosoidly wonders about the lack of division of powers in old religion.
2021-11-16 16:31:57 +0100 <merijn> Now I'm curious what the hell an inkhorn is in this context
2021-11-16 16:32:10 +0100 <dminuoso> Maybe anything that closely resembles writing?
2021-11-16 16:32:23 +0100 <dminuoso> Who knows, they could be illiterate
2021-11-16 16:32:46 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se) (Ping timeout: 265 seconds)
2021-11-16 16:32:53 +0100geekosaurthinking they're the opposite of me, they want a youtube or something
2021-11-16 16:33:11 +0100rtsn(~nstr@c-c7fe225c.07-59-7570703.bbcust.telenor.se)
2021-11-16 16:33:38 +0100 <John_Ivan> I already know Haskell, sorry to break your bubble.
2021-11-16 16:33:51 +0100John_Ivanplot twist.
2021-11-16 16:33:56 +0100 <dminuoso> That's what I thought too
2021-11-16 16:34:04 +0100 <dminuoso> Then I discovered functions.
2021-11-16 16:34:47 +0100 <maerwald> John_Ivan: that's amazing
2021-11-16 16:35:54 +0100 <John_Ivan> dminuoso, yeah. damn inkhorns. them applicative functors and their monadic rules.
2021-11-16 16:36:09 +0100 <John_Ivan> burn all higher order level functions
2021-11-16 16:36:40 +0100 <John_Ivan> "function pointer" was a better substitute
2021-11-16 16:36:43 +0100John_Ivanslaps Jill
2021-11-16 16:36:53 +0100 <John_Ivan> you had one job Jill. one job
2021-11-16 16:37:03 +0100 <John_Ivan> and that was to not go apeshit with your terminology.
2021-11-16 16:37:08 +0100 <John_Ivan> I don't care if math is your background
2021-11-16 16:37:13 +0100 <geekosaur> wat
2021-11-16 16:37:16 +0100 <John_Ivan> when in Rome, you do as the Romans do.
2021-11-16 16:37:38 +0100 <John_Ivan> don't ever let a mathematician touch a compiler
2021-11-16 16:37:45 +0100aman(~aman@user/aman) (Quit: aman)
2021-11-16 16:37:47 +0100 <John_Ivan> they will start producing the plague
2021-11-16 16:38:48 +0100 <yushyin> What is going on? o.O
2021-11-16 16:39:37 +0100 <merijn> yushyin: (an attempt at) trolling, presumably
2021-11-16 16:39:52 +0100 <maerwald> I could see this happening from a mile away
2021-11-16 16:40:23 +0100 <dminuoso> maerwald: Is that a nautic mile?
2021-11-16 16:40:54 +0100 <Franciman> hi maerwald how are you?
2021-11-16 16:40:59 +0100 <John_Ivan> side effects my ass and zypper my balls
2021-11-16 16:41:03 +0100 <maerwald> So... after I've read some non-trivial code using freer-simple, I'm starting to form the opinion that I dislike effects systems that are used for high-level effects
2021-11-16 16:41:08 +0100 <merijn> @where ops
2021-11-16 16:41:08 +0100 <lambdabot> byorgey Cale conal copumpkin dcoutts dibblego dolio edwardk geekosaur glguy jmcarthur johnw mniip monochrom quicksilver shachaf shapr ski
2021-11-16 16:41:24 +0100ChanServ+o geekosaur
2021-11-16 16:41:27 +0100 <merijn> maerwald: See, I just skipped all that effort
2021-11-16 16:41:33 +0100geekosaur+b *!*@*user/john-ivan/x-1515935
2021-11-16 16:41:34 +0100John_Ivangeekosaur (John_Ivan)
2021-11-16 16:41:34 +0100 <boxscape_> what counts as a high-level effect?
2021-11-16 16:41:38 +0100 <merijn> maerwald: And went straight to "I don't think they're worth the effort"
2021-11-16 16:41:48 +0100 <merijn> boxscape_: The various composable effects stuff
2021-11-16 16:41:55 +0100 <boxscape_> I see
2021-11-16 16:41:56 +0100 <maerwald> it's impossible to understand what the code does, unless you constantly jump back and forth between the effect handlers and re-examine the code over and over again
2021-11-16 16:42:21 +0100geekosaur-o geekosaur
2021-11-16 16:42:25 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9)
2021-11-16 16:42:32 +0100 <geekosaur> and I think I already like litharge :)
2021-11-16 16:43:19 +0100 <maerwald> I mean... low-level effects like filesystem operations, maybe
2021-11-16 16:43:24 +0100max22-(~maxime@2a01cb0883359800502e2c31bca551ab.ipv6.abo.wanadoo.fr)
2021-11-16 16:43:35 +0100 <maerwald> but complex effects make it really impossible to understand behavior
2021-11-16 16:44:59 +0100 <maerwald> and... you can't understand an effect handler isolated
2021-11-16 16:45:22 +0100 <Franciman> that's the curse of delconts, right?
2021-11-16 16:45:26 +0100 <Franciman> you jumping around
2021-11-16 16:45:29 +0100 <maerwald> so the code structure is bad as well
2021-11-16 16:46:18 +0100 <maerwald> if the domain is spaghetti... better keep it in one pot
2021-11-16 16:46:49 +0100Kaiepi(~Kaiepi@156.34.44.192) (Remote host closed the connection)
2021-11-16 16:47:08 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-16 16:47:11 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9) (Ping timeout: 264 seconds)
2021-11-16 16:47:59 +0100 <Franciman> is mtl style better, tho maerwald ?
2021-11-16 16:48:12 +0100 <maerwald> Franciman: mtl are not high-level effects
2021-11-16 16:48:23 +0100 <Franciman> ah I don't know what they are then
2021-11-16 16:48:25 +0100 <Franciman> sorry
2021-11-16 16:49:14 +0100 <maerwald> think of effects as business domain effects
2021-11-16 16:49:45 +0100 <Franciman> like, downloadPirateMusic
2021-11-16 16:49:48 +0100 <Franciman> for a clone of napsters?
2021-11-16 16:49:57 +0100 <maerwald> now you read the code... and your functions fire different effects everywhere and they are intertwined, maybe through remote state... so you jump to the handler, but that doesn't make sense on its own
2021-11-16 16:51:03 +0100 <Franciman> so you are basically arguing that having this concept gets you nothing because it's so powerful you get fully side effected code
2021-11-16 16:51:05 +0100 <Franciman> it's like coding in C
2021-11-16 16:51:39 +0100 <maerwald> no, the separation of effects code and interpreters clouds control flow and breaks reasoning about actual behavior
2021-11-16 16:51:41 +0100 <Hecate> merijn: oh, I was looking for you!
2021-11-16 16:51:51 +0100merijnhides
2021-11-16 16:51:52 +0100 <Hecate> merijn: What are you doing these days, Haskell-wise?
2021-11-16 16:52:14 +0100 <merijn> atm nothing :p
2021-11-16 16:52:30 +0100 <Hecate> merijn: needing to rest, or is boredom eating at you? :p
2021-11-16 16:52:42 +0100 <Franciman> maerwald: to be more clear, you don't know what the heck is going on in your code, when using the damn abstraction?
2021-11-16 16:52:56 +0100 <maerwald> Franciman: I don't use effects systems in my own code
2021-11-16 16:53:34 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-11-16 16:54:46 +0100 <merijn> Hecate: thesis is at the committee, so no need to touch my phd code for awhile and I still haven't fixed any of my CIs from Travis breaking, so I can't be arsed to update stuff until I fix that >.>
2021-11-16 16:55:01 +0100 <Franciman> merijn: what is your phd thesis about?
2021-11-16 16:55:14 +0100thyriaen(~thyriaen@dynamic-077-013-170-047.77.13.pool.telefonica.de) (Quit: Leaving)
2021-11-16 16:55:16 +0100 <Franciman> maerwald: wise
2021-11-16 16:55:18 +0100 <Franciman> I see
2021-11-16 16:55:53 +0100 <maerwald> merijn: I might have broken your travis xD
2021-11-16 16:56:14 +0100 <merijn> Franciman: Supposedly graph processing on GPUs. In reality it's me whining that everyone's terrible at empirical computer science and showing that 5 years is just enough time to built infrastructure to *begin* research :p
2021-11-16 16:56:32 +0100 <maerwald> Franciman: I mean... to understand effects code, you either need an *intuition* about the effects or *total understanding* of the interpreters
2021-11-16 16:56:40 +0100 <merijn> maerwald: Naah, ran out of free minutes in half a month after they limited open source CI time
2021-11-16 16:56:44 +0100 <Franciman> ggwp merijn
2021-11-16 16:56:52 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-11-16 16:56:52 +0100 <merijn> maerwald: So I should migrate to github actions
2021-11-16 16:57:20 +0100 <Franciman> maerwald: unfortunately I am still miles away from learning about these stuff
2021-11-16 16:57:24 +0100 <Franciman> that's why I asked
2021-11-16 16:57:27 +0100 <maerwald> intuition is difficult if your effects are very high-level
2021-11-16 16:57:49 +0100 <Franciman> i like conal's idea of denotational semantics design
2021-11-16 16:58:02 +0100 <Franciman> for very high level things
2021-11-16 16:58:12 +0100 <dminuoso> Franciman: The idea is good and noble, but I think its hard to employ in a lot of situations.
2021-11-16 16:58:14 +0100 <Franciman> if I interpret it correctly, sorry if I don't
2021-11-16 16:58:23 +0100 <Franciman> you deliver a dumbass easy model
2021-11-16 16:58:26 +0100 <merijn> Hecate: tbh, I haven't really done any programming "as hobby" since, like, Advent of Code last year and with a new round of semi-lockdown, I doubt I will do any any time soon
2021-11-16 16:58:27 +0100burnsidesLlama(~burnsides@dhcp168-035.wadham.ox.ac.uk)
2021-11-16 16:58:27 +0100 <dminuoso> The example frequently picked, namely that of an image transformation library, is extremely cherry picked.
2021-11-16 16:58:32 +0100 <maerwald> merijn: I mean I broke github actions
2021-11-16 16:58:43 +0100 <Franciman> I see dminuoso
2021-11-16 16:58:45 +0100 <Franciman> thanks
2021-11-16 16:58:54 +0100 <merijn> Hecate: I have plans to try and sucker the people on my new project into letting me do it in Haskell, but we'll have to see :p
2021-11-16 16:59:09 +0100 <maerwald> merijn: github actions environments are not fixed... they are rebuilt every week and may change randomly
2021-11-16 16:59:22 +0100 <maerwald> that has some merits though
2021-11-16 16:59:29 +0100 <Franciman> dminuoso: I mostly think about it liek this, you define your language, your laws
2021-11-16 16:59:34 +0100 <merijn> maerwald: Well, that's one reason why I haven't bothered fixing anything :p
2021-11-16 16:59:36 +0100 <Franciman> and give a dumbass easy model for it
2021-11-16 16:59:36 +0100 <dminuoso> Franciman: And on a high level it becomes quickly hard, because at some point you need to prove an equivalence of your implementation to mathematical models.
2021-11-16 16:59:45 +0100 <dminuoso> Franciman: so it's easier on a small level
2021-11-16 16:59:48 +0100 <Franciman> I see
2021-11-16 16:59:52 +0100 <merijn> I made a new command to migrate the Travis setups from Haskell-CI to the github ones
2021-11-16 17:00:00 +0100 <merijn> But phadej hasn't commented on that PR yet
2021-11-16 17:00:00 +0100 <Franciman> for high level we should then give up to the our lord compositionality?
2021-11-16 17:00:02 +0100 <Franciman> I hope
2021-11-16 17:00:06 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2021-11-16 17:00:08 +0100afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b) (Quit: You have been kicked for being idle)
2021-11-16 17:00:12 +0100 <merijn> Not sure if he's still working much on Haskell-CI
2021-11-16 17:00:16 +0100 <dminuoso> What does "compositionality" even mean?
2021-11-16 17:00:25 +0100 <Franciman> that's the lord part
2021-11-16 17:00:27 +0100afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b)
2021-11-16 17:00:27 +0100afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b) ()
2021-11-16 17:00:31 +0100 <Franciman> I don'tu nderstand what it means
2021-11-16 17:00:35 +0100 <Franciman> just try to make things compose
2021-11-16 17:00:39 +0100 <dminuoso> Denotational semantics has little to do with expression effects, it's more about linking a programs meaning to mathematical models.
2021-11-16 17:00:40 +0100 <Franciman> and say hey that's from CT
2021-11-16 17:00:43 +0100 <Franciman> that's why it works
2021-11-16 17:01:30 +0100 <maerwald> high-level effects are like microservices... if you get the boundaries wrong, you're f****d
2021-11-16 17:02:11 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-11-16 17:02:42 +0100jippiedoe(~david@2a02-a44c-e14e-1-12d4-e982-14bb-9a24.fixed6.kpn.net) (Quit: Leaving)
2021-11-16 17:03:00 +0100 <Franciman> I understand thanks dminuoso
2021-11-16 17:03:04 +0100 <Franciman> and maerwald
2021-11-16 17:03:15 +0100waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-11-16 17:03:17 +0100 <Franciman> I will probably try to use comonads to infer purity, on the other hand, in my journey
2021-11-16 17:03:29 +0100 <Franciman> seems easier to start with
2021-11-16 17:06:47 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-11-16 17:07:04 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-11-16 17:07:06 +0100boxscape_(~boxscape_@134.171.69.87) (Ping timeout: 260 seconds)
2021-11-16 17:07:37 +0100zebrag(~chris@user/zebrag)
2021-11-16 17:08:00 +0100benin(~benin@183.82.27.20) (Quit: The Lounge - https://thelounge.chat)
2021-11-16 17:09:00 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-11-16 17:09:14 +0100Vajb(~Vajb@nalkaylds2h97nzof-2.v6.elisa-mobile.fi)
2021-11-16 17:10:08 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-11-16 17:11:55 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-16 17:13:40 +0100MidAutumnMoon3(~MidAutumn@user/midautumnmoon)
2021-11-16 17:14:06 +0100MidAutumnMoon(~MidAutumn@user/midautumnmoon) (Ping timeout: 256 seconds)
2021-11-16 17:14:06 +0100MidAutumnMoon3MidAutumnMoon
2021-11-16 17:15:46 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 17:16:04 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 17:17:14 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-11-16 17:19:03 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Quit: Reconnecting)
2021-11-16 17:19:13 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 17:20:39 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-11-16 17:22:45 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 17:23:01 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 17:23:03 +0100xkuru(~xkuru@user/xkuru)
2021-11-16 17:24:43 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 17:27:05 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-16 17:27:32 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 17:31:40 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 17:31:58 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 17:35:38 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 17:35:56 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 17:36:58 +0100 <dolio> "Compositionality" means that you can understand something by understanding smaller pieces of it individually, together with understanding the ways of combining those pieces.
2021-11-16 17:37:24 +0100 <dolio> Rather than having to understand the entire system as an irreducible unit.
2021-11-16 17:39:36 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 17:39:53 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 17:40:17 +0100 <dolio> For instance, some category theorists are trying to figure out how Petri nets form a topos, so that instead of just figuring out an entire net as a blob, you might be able to analyze it as a product/sum/exponential/... of smaller nets.
2021-11-16 17:40:48 +0100justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-11-16 17:43:21 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 17:44:18 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 265 seconds)
2021-11-16 17:44:23 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 250 seconds)
2021-11-16 17:45:21 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-11-16 17:46:09 +0100Guest68(~Guest68@2401:4900:1f2a:2065:285b:1f0c:e2ab:1175)
2021-11-16 17:46:35 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-16 17:47:51 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
2021-11-16 17:48:11 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9)
2021-11-16 17:48:36 +0100 <Guest68> Iam trying to create an API using servant
2021-11-16 17:48:37 +0100 <Guest68> To begin I want to load some config which includes config db creds
2021-11-16 17:48:37 +0100 <Guest68> What is the best practice to do so
2021-11-16 17:48:38 +0100 <Guest68> 1. create a config.json file read interpret it as a data type and pass it to server
2021-11-16 17:48:38 +0100 <Guest68> 2. read each parameter from env variables and create a data type or map and pass it to the server
2021-11-16 17:49:37 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:c480:7b03:c5d:3876) (Ping timeout: 265 seconds)
2021-11-16 17:49:37 +0100Vajb(~Vajb@nalkaylds2h97nzof-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-11-16 17:49:47 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-11-16 17:50:33 +0100 <ocramz[m]> @Guest68 I made a little utility package to embed environment variables into the binary itself https://hackage.haskell.org/package/include-env-0.4.0.0 . I use it for building on CI
2021-11-16 17:50:33 +0100 <lambdabot> Unknown command, try @list
2021-11-16 17:50:39 +0100EvanR(~evan@user/evanr)
2021-11-16 17:50:47 +0100 <ocramz[m]> s/@//
2021-11-16 17:51:39 +0100moet(~moet@mobile-166-171-251-187.mycingular.net)
2021-11-16 17:51:56 +0100 <ocramz[m]> this requires you trust your CI agent. I use repo secrets, works well with github actions
2021-11-16 17:52:25 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2021-11-16 17:52:35 +0100 <Guest68> Sounds cool I'll check it out ..
2021-11-16 17:53:37 +0100 <Guest68> But wouldn't this be a problem if I dockerize the app
2021-11-16 17:54:03 +0100 <Guest68> if it was env vars I could deploy from the same image to all envs
2021-11-16 17:55:27 +0100 <ocramz[m]> where do you build your docker images?
2021-11-16 17:57:10 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 17:57:28 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 17:57:44 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-16 17:57:49 +0100rkrishnan(~user@122.167.19.65) (Ping timeout: 250 seconds)
2021-11-16 17:58:28 +0100pfurla(~pfurla@2804:14d:5c81:4104:8de2:1993:a832:eced)
2021-11-16 17:59:17 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Quit: Leaving)
2021-11-16 17:59:39 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-16 18:00:52 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 18:01:11 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 18:01:20 +0100 <Guest68> Oh I am learning
2021-11-16 18:01:24 +0100 <Guest68> now locally
2021-11-16 18:01:42 +0100 <Guest68> but eventually some CI pipeline
2021-11-16 18:03:22 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 18:05:27 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-11-16 18:05:35 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 18:06:53 +0100zincy_(~zincy@host86-181-60-139.range86-181.btcentralplus.com)
2021-11-16 18:09:16 +0100 <moet> as a general rule, don't put secrets in env-vars .. any process on the same machine can read your secrets out of the env-vars
2021-11-16 18:10:14 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-11-16 18:11:22 +0100zincy_(~zincy@host86-181-60-139.range86-181.btcentralplus.com) (Ping timeout: 265 seconds)
2021-11-16 18:11:39 +0100 <Guest68> Ok but what is the best way to do include creds
2021-11-16 18:11:43 +0100 <EvanR> imagine sharing a machine with literal other users that you can't trust xD
2021-11-16 18:14:19 +0100 <Guest68> embed to binary?
2021-11-16 18:14:46 +0100 <EvanR> how many levels of paranoia are we on
2021-11-16 18:14:57 +0100ubert(~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
2021-11-16 18:15:18 +0100 <Guest68> wont docker containers give enough isolation to prevent that
2021-11-16 18:15:39 +0100mbuf(~Shakthi@223.178.89.16) (Quit: Leaving)
2021-11-16 18:15:49 +0100 <Guest68> And why would we share a machine with others we dont trust
2021-11-16 18:16:49 +0100 <EvanR> if someone got access to any user at all, then you could be thinking of ways to mitigate the fallout of that
2021-11-16 18:19:06 +0100son0p(~ff@181.136.122.143) (Ping timeout: 265 seconds)
2021-11-16 18:19:45 +0100MidAutumnMoon(~MidAutumn@user/midautumnmoon) (Read error: Connection reset by peer)
2021-11-16 18:19:48 +0100MidAutumnMoon6(~MidAutumn@user/midautumnmoon)
2021-11-16 18:21:51 +0100Nolrai2(~Nolrai2@c-76-27-202-218.hsd1.or.comcast.net) (Quit: Client closed)
2021-11-16 18:22:14 +0100tired(~tired@user/tired) (Ping timeout: 268 seconds)
2021-11-16 18:22:16 +0100tired-(~tired@user/tired)
2021-11-16 18:23:26 +0100 <moet> Guest68: the way this is done in larger companies is: after your production service starts up it requests credentials scoped to the task it needs to perform from some credentialing service.. there needs to be material provided to auth against the credentialing service, and the credentialing service should also look up the identity of the requester in a table, etc.. all of that might be too much for your use
2021-11-16 18:23:32 +0100 <moet> case
2021-11-16 18:24:13 +0100 <moet> Guest68: a simpler approach would be to have your deployment system provide the creds to the production service at startup, though instead of envvars or the cli, write them to stdin
2021-11-16 18:24:27 +0100desantra(~skykanin@user/skykanin)
2021-11-16 18:25:51 +0100 <Guest68> something like aws secrets manager right?
2021-11-16 18:25:52 +0100 <Guest68> So what about the creds for authenticating with thta service ?
2021-11-16 18:26:06 +0100alzgh(~alzgh@user/alzgh) (Ping timeout: 256 seconds)
2021-11-16 18:26:33 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 268 seconds)
2021-11-16 18:26:34 +0100 <Guest68> moet You mean giving them as arguments while running
2021-11-16 18:27:46 +0100pfurla(~pfurla@2804:14d:5c81:4104:8de2:1993:a832:eced) (Quit: gone to sleep. ZZZzzz…)
2021-11-16 18:27:56 +0100 <moet> Guest68: the heavyweight approach is to give credentials after startup, the lightweight approach is to give credentials at startup, but never via envvars or cli
2021-11-16 18:29:18 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Quit: WeeChat 3.3)
2021-11-16 18:29:24 +0100 <moet> aws secrets manager falls into the heavyweight approach, but that's probably the right approach if you're building on aws.. if you're building on aws you can dictate access to secrets via the requester iam role
2021-11-16 18:29:42 +0100enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
2021-11-16 18:30:05 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-16 18:30:20 +0100emf(~emf@2620:10d:c090:400::5:69fc)
2021-11-16 18:31:23 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2021-11-16 18:31:55 +0100 <Guest68> moet thank you
2021-11-16 18:31:56 +0100 <Guest68> could you please elaborate a little on the lightweight approach
2021-11-16 18:32:35 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 18:32:50 +0100alzgh(alzgh@user/alzgh)
2021-11-16 18:33:58 +0100deadmarshal(~deadmarsh@95.38.114.190)
2021-11-16 18:34:17 +0100 <EvanR> how do you provide the material the authenticate with the credentially service
2021-11-16 18:34:36 +0100 <EvanR> oof
2021-11-16 18:35:37 +0100Guest80(~Guest80@pd9ed79bf.dip0.t-ipconnect.de) (Quit: Client closed)
2021-11-16 18:36:25 +0100 <moet> EvanR: you could embed a key in the binary or some other less secure path, but the point is that the credentialing service doesn't only use that data, it also checks a table using the identity of the requester .. this isn't foolproof.. if you want to go the really heavyweight approach, you'd have a TOFU key exchanged for an expiring key and the production service is responsible for continually updating the
2021-11-16 18:36:26 +0100Guest80(~Guest80@pd9ed79bf.dip0.t-ipconnect.de)
2021-11-16 18:36:31 +0100 <moet> expiring key forever
2021-11-16 18:37:26 +0100burnsidesLlama(~burnsides@dhcp168-035.wadham.ox.ac.uk) (Remote host closed the connection)
2021-11-16 18:37:34 +0100 <moet> Guest68: lightweight approach: on startup, your production service reads stdin; your deployment service starts your production service and then writes data to its stdin
2021-11-16 18:37:52 +0100burnsidesLlama(~burnsides@dhcp168-035.wadham.ox.ac.uk)
2021-11-16 18:37:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-11-16 18:38:05 +0100 <EvanR> the more over engineered it is, the less I believe it's secure xD
2021-11-16 18:38:07 +0100 <moet> it's hard to elaborate further because i don't know what deployment service you're using .. also, your deployment service should have documentation about how to provide secrets to your production service
2021-11-16 18:38:25 +0100 <moet> EvanR: you're gonna be surprised when you take a look at encryption code <3
2021-11-16 18:38:39 +0100 <moet> s/surprised/horrified/g
2021-11-16 18:39:26 +0100 <EvanR> steps taken in encryption are always for a good reason though, sort of another topic from configuring web apps
2021-11-16 18:39:44 +0100burnside_(~burnsides@dhcp168-035.wadham.ox.ac.uk)
2021-11-16 18:39:53 +0100burnsidesLlama(~burnsides@dhcp168-035.wadham.ox.ac.uk) (Remote host closed the connection)
2021-11-16 18:39:53 +0100 <moet> sure
2021-11-16 18:40:19 +0100 <moet> Guest68: if the stdin thing doesn't seem like it'll work, you could always use a file with permissions locked down, as long as you have a secure way to put the file in place
2021-11-16 18:41:03 +0100 <moet> really, don't go nuts with this; the security precautions you take should reflect the risk of a breach.. if you're not risking anything, then you don't need to worry about this as much..
2021-11-16 18:42:08 +0100 <maerwald> You should at least follow IEC 62443
2021-11-16 18:46:20 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 18:48:23 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-16 18:49:54 +0100mmhat(~mmh@55d47041.access.ecotel.net) (Quit: WeeChat 3.3)
2021-11-16 18:53:04 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 268 seconds)
2021-11-16 18:53:30 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 18:54:58 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9) (Remote host closed the connection)
2021-11-16 18:56:24 +0100 <maerwald> is there a version of hp2ps that doesn't suck? (e.g. doesn't cut off half of the graph/legend)
2021-11-16 18:57:01 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2021-11-16 18:59:30 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 18:59:43 +0100 <glguy> maerwald: have you used this? https://hackage.haskell.org/package/hp2html
2021-11-16 18:59:47 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 19:01:01 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 19:02:38 +0100Guest68(~Guest68@2401:4900:1f2a:2065:285b:1f0c:e2ab:1175) (Quit: Client closed)
2021-11-16 19:02:57 +0100fef(~thedawn@user/thedawn)
2021-11-16 19:03:30 +0100 <maerwald> it seems to leak memory... let's see if it finishes
2021-11-16 19:04:13 +0100epolanski(uid312403@helmsley.irccloud.com)
2021-11-16 19:05:34 +0100gensyst(gensyst@user/gensyst)
2021-11-16 19:05:39 +0100 <maerwald> 27mb html file, let's see how that goes
2021-11-16 19:05:44 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-16 19:05:56 +0100 <gensyst> Hi, how come Data.Finite (https://hackage.haskell.org/package/finite-typelits-0.1.4.2/docs/Data-Finite.html) has no monadic indexing? Is it someplace else or do I have to write my own utility func?
2021-11-16 19:05:56 +0100 <maerwald> well, it doesn't: entirely broken page :D
2021-11-16 19:06:12 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-11-16 19:06:17 +0100 <gensyst> (such a utility func would unwrap it and rewrap it..)
2021-11-16 19:06:52 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2021-11-16 19:08:32 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 19:08:50 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 19:10:31 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 19:10:48 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 19:13:12 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 19:13:30 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 19:18:13 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-11-16 19:18:50 +0100drewolson(~drewolson@user/drewolson) (Quit: Ping timeout (120 seconds))
2021-11-16 19:19:01 +0100drewolson(~drewolson@user/drewolson)
2021-11-16 19:19:36 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 276 seconds)
2021-11-16 19:19:41 +0100FragByte(~christian@user/fragbyte) (Ping timeout: 245 seconds)
2021-11-16 19:20:01 +0100cfebs(~cfebs@user/cfebs) (Quit: ZNC 1.8.2 - https://znc.in)
2021-11-16 19:20:06 +0100thaumavorio_(~thaumavor@thaumavor.io) (Ping timeout: 260 seconds)
2021-11-16 19:20:21 +0100dragestil_(~znc@user/dragestil)
2021-11-16 19:20:50 +0100dragestil(~znc@user/dragestil) (Ping timeout: 246 seconds)
2021-11-16 19:20:56 +0100eldritch(~eldritch@user/eldritch/x-9272577) (Ping timeout: 245 seconds)
2021-11-16 19:20:56 +0100Aleksejs(~Aleksejs@haskell.lv) (Ping timeout: 245 seconds)
2021-11-16 19:21:26 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-11-16 19:21:46 +0100FragByte(~christian@user/fragbyte)
2021-11-16 19:22:02 +0100Aleksejs(~Aleksejs@haskell.lv)
2021-11-16 19:22:23 +0100dragestil_dragestil
2021-11-16 19:22:23 +0100cfebs(~cfebs@user/cfebs)
2021-11-16 19:22:30 +0100gensyst(gensyst@user/gensyst) (Quit: Leaving)
2021-11-16 19:24:54 +0100Guest80(~Guest80@pd9ed79bf.dip0.t-ipconnect.de) (Quit: Client closed)
2021-11-16 19:25:13 +0100eldritch_(~eldritch@user/eldritch/x-9272577)
2021-11-16 19:25:36 +0100Guest80(~Guest80@pd9ed79bf.dip0.t-ipconnect.de)
2021-11-16 19:25:55 +0100boxscape_(~boxscape_@i59F67A72.versanet.de)
2021-11-16 19:26:05 +0100thaumavorio(~thaumavor@thaumavor.io)
2021-11-16 19:26:16 +0100 <boxscape_> Can i tell cabal to use a particular ghc executable rather than the one in path?
2021-11-16 19:26:35 +0100 <glguy> boxscape_: -w
2021-11-16 19:26:40 +0100 <boxscape_> thanks!
2021-11-16 19:27:05 +0100mimmy(~mimmy@146.70.75.156) (Ping timeout: 250 seconds)
2021-11-16 19:27:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 19:27:56 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Remote host closed the connection)
2021-11-16 19:28:18 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9)
2021-11-16 19:28:21 +0100aegon(~mike@174.127.249.180)
2021-11-16 19:33:02 +0100econo(uid147250@user/econo)
2021-11-16 19:33:23 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 19:35:01 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 19:35:18 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 19:35:42 +0100 <dminuoso> 18:09:16 moet | as a general rule, don't put secrets in env-vars .. any process on the same machine can read your secrets out of the env-vars
2021-11-16 19:35:46 +0100alzgh(alzgh@user/alzgh) (Remote host closed the connection)
2021-11-16 19:35:48 +0100 <dminuoso> This is grossly misleading.
2021-11-16 19:36:08 +0100alzgh(alzgh@user/alzgh)
2021-11-16 19:36:13 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 19:36:17 +0100 <moet> dminuoso: okay?
2021-11-16 19:36:23 +0100 <moet> dminuoso: any more? :)
2021-11-16 19:36:23 +0100 <dminuoso> On linux the only API you have to access this is via procfs, but /proc/$pid/environ has permissions matching the owner of the process.
2021-11-16 19:36:43 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-11-16 19:36:45 +0100 <dminuoso> And if you have *that* much access, you can pretty much get access to its credentials anyway
2021-11-16 19:36:55 +0100 <dminuoso> In other words: environment variables are perfectly safe.
2021-11-16 19:36:55 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 19:38:27 +0100fef(~thedawn@user/thedawn) (Ping timeout: 276 seconds)
2021-11-16 19:38:28 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9) (Remote host closed the connection)
2021-11-16 19:39:22 +0100 <dminuoso> And arguably "credential manager" are a double edged sword. Poor security can result to a much larger leak, and now you have additional runtime dependencies on services and on networking.
2021-11-16 19:39:31 +0100 <boxscape_> You love to see it: "Could not deduce (Braided JSFunc (Product JSFunc)) from the context: Braided JSFunc (Product JSFunc)"
2021-11-16 19:40:19 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-11-16 19:40:33 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 19:40:41 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-11-16 19:40:46 +0100 <boxscape_> (problem is invisible kind arguments are different)
2021-11-16 19:41:02 +0100 <dminuoso> And it dramatically increases the security implications, since if you have wide spread credentials, are they all accessible via a singular host?
2021-11-16 19:41:34 +0100 <EvanR> all your eggs in one basket / are belong to us
2021-11-16 19:42:05 +0100ChanServ+o litharge
2021-11-16 19:42:05 +0100litharge-bo *!*@*user/john-ivan/x-1515935 litharge
2021-11-16 19:42:23 +0100Everything(~Everythin@37.115.210.35) (Quit: leaving)
2021-11-16 19:43:23 +0100 <dminuoso> And then you quickly get to the point "why do we want another poor reimplementation of kerberos, when you should be using kerberos instead"
2021-11-16 19:43:33 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
2021-11-16 19:44:22 +0100 <dminuoso> Or having all your services depend on an additional network path/firewall/routers/hypervisor/VM/credential service to potentially come up. If that service goes down, how much of your infrastructure will follow?
2021-11-16 19:45:06 +0100dminuosofinds it ridiculous how some people overengineer
2021-11-16 19:49:12 +0100chele(~chele@user/chele) (Remote host closed the connection)
2021-11-16 19:51:16 +0100fef(~thedawn@user/thedawn)
2021-11-16 19:51:21 +0100xff0x(~xff0x@2001:1a81:5330:8c00:7ee9:82eb:bec8:3505) (Ping timeout: 250 seconds)
2021-11-16 19:51:41 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9)
2021-11-16 19:52:17 +0100xff0x(~xff0x@port-92-195-74-242.dynamic.as20676.net)
2021-11-16 19:54:16 +0100mimmy(~mimmy@146.70.75.158)
2021-11-16 19:55:34 +0100deadmarshal(~deadmarsh@95.38.114.190) (Ping timeout: 260 seconds)
2021-11-16 19:57:18 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 19:57:36 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 19:57:40 +0100jespada(~jespada@252-155-231-201.fibertel.com.ar)
2021-11-16 19:58:19 +0100eruditass(uid248673@uxbridge.irccloud.com)
2021-11-16 19:59:00 +0100mimmy(~mimmy@146.70.75.158) (Ping timeout: 256 seconds)
2021-11-16 19:59:03 +0100Guest42(~Guest42@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
2021-11-16 19:59:25 +0100 <moet> dminuoso: fwiw, i recommended that Guest68 not overengineer it and suggested two lightweight approaches
2021-11-16 19:59:40 +0100 <dminuoso> moet: Absolutely.
2021-11-16 20:00:05 +0100 <dminuoso> That wasn't really meant as criticsm towards you
2021-11-16 20:01:45 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 20:01:50 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-16 20:02:04 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 20:02:16 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9) (Remote host closed the connection)
2021-11-16 20:03:15 +0100fef(~thedawn@user/thedawn) (Remote host closed the connection)
2021-11-16 20:03:37 +0100desantra(~skykanin@user/skykanin) (Quit: WeeChat 3.3)
2021-11-16 20:03:51 +0100fef(~thedawn@user/thedawn)
2021-11-16 20:05:48 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 20:05:55 +0100max22-(~maxime@2a01cb0883359800502e2c31bca551ab.ipv6.abo.wanadoo.fr) (Ping timeout: 265 seconds)
2021-11-16 20:06:06 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 20:07:46 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 20:08:03 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com)
2021-11-16 20:09:02 +0100unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-11-16 20:10:18 +0100fef(~thedawn@user/thedawn) (Ping timeout: 276 seconds)
2021-11-16 20:11:11 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 20:11:13 +0100Guest80(~Guest80@pd9ed79bf.dip0.t-ipconnect.de) (Quit: Client closed)
2021-11-16 20:11:58 +0100Guest80(~Guest80@pd9ed79bf.dip0.t-ipconnect.de)
2021-11-16 20:13:12 +0100jkhs(~jkhs@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-11-16 20:13:27 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 250 seconds)
2021-11-16 20:14:10 +0100mimmy(~mimmy@146.70.75.158)
2021-11-16 20:15:37 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
2021-11-16 20:16:07 +0100asivitz(uid178348@tinside.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-16 20:17:36 +0100pfurla(~pfurla@2804:14d:5c81:4104:8de2:1993:a832:eced)
2021-11-16 20:21:11 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9)
2021-11-16 20:23:19 +0100desantra(~skykanin@user/skykanin)
2021-11-16 20:42:10 +0100max22-(~maxime@2a01cb0883359800fa2f4e7c9f6204ba.ipv6.abo.wanadoo.fr)
2021-11-16 20:42:47 +0100zincy_(~zincy@2a00:23c8:970c:4801:78f3:43f3:fd48:5ac3)
2021-11-16 20:43:50 +0100Guest42(~Guest42@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-11-16 20:46:03 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 20:50:27 +0100kupi(uid212005@hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-16 20:50:52 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-11-16 21:02:00 +0100 <moet> totally. and you're totally right that awsthings are easy to misuse and create gaping security holes.. thanks for pointing out the thing about /proc/$pid/environ .. now I want to follow up with the people who taught me this and figure out what they were referring to
2021-11-16 21:02:51 +0100 <monochrom> Perhaps a long long time ago in a unix version far far away it was true.
2021-11-16 21:03:08 +0100zincy_(~zincy@2a00:23c8:970c:4801:78f3:43f3:fd48:5ac3) (Remote host closed the connection)
2021-11-16 21:03:50 +0100 <monochrom> You should still check it on Solaris, Mac, various BSDs, etc.
2021-11-16 21:04:20 +0100 <monochrom> But the over-arching lesson is: check before speaking up.
2021-11-16 21:04:45 +0100Guest80(~Guest80@pd9ed79bf.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2021-11-16 21:05:05 +0100 <monochrom> You would be surprised how many conventional wisdoms are outdated or even prejudiced.
2021-11-16 21:05:39 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 268 seconds)
2021-11-16 21:06:11 +0100pop3(~pop3@user/pop3) (Remote host closed the connection)
2021-11-16 21:06:43 +0100juhp(~juhp@128.106.188.82)
2021-11-16 21:06:52 +0100pop3(~pop3@user/pop3)
2021-11-16 21:08:29 +0100 <monochrom> Even I am surprised once in a while, e.g., https://mail.haskell.org/pipermail/haskell-cafe/2013-April/107775.html
2021-11-16 21:10:00 +0100mc47(~mc47@xmonad/TheMC47)
2021-11-16 21:11:39 +0100moet(~moet@mobile-166-171-251-187.mycingular.net) (Ping timeout: 265 seconds)
2021-11-16 21:15:59 +0100 <boxscape_> is there a way to refer to (%1 ->) with LinearHaskell just like how you can refer to (->) for regular functions usually?
2021-11-16 21:16:03 +0100 <boxscape_> that particular syntax doesn't seem to wkr
2021-11-16 21:16:03 +0100 <Rembane_> monochrom: That's so good.
2021-11-16 21:16:08 +0100 <boxscape_> s/wkr/work
2021-11-16 21:16:33 +0100 <boxscape_> oh I suppose maybe I have to use FUN from GHC.Exts
2021-11-16 21:16:43 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 250 seconds)
2021-11-16 21:17:27 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9) (Remote host closed the connection)
2021-11-16 21:17:53 +0100 <boxscape_> s/GHC.Exts/Data.Kind
2021-11-16 21:18:42 +0100moet(~moet@mobile-166-171-249-243.mycingular.net)
2021-11-16 21:20:59 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-11-16 21:21:24 +0100kuribas(~user@ptr-25vy0i87u19ttsdwrve.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
2021-11-16 21:21:41 +0100kaizen(sid501599@helmsley.irccloud.com) (Ping timeout: 268 seconds)
2021-11-16 21:22:16 +0100 <boxscape_> yeah that works
2021-11-16 21:22:17 +0100mimmy(~mimmy@146.70.75.158) (Ping timeout: 265 seconds)
2021-11-16 21:22:33 +0100kaizen(sid501599@helmsley.irccloud.com)
2021-11-16 21:25:35 +0100burnside_(~burnsides@dhcp168-035.wadham.ox.ac.uk) (Remote host closed the connection)
2021-11-16 21:27:15 +0100nvmd(~nvmd@user/nvmd) (Quit: Later, nerds.)
2021-11-16 21:28:19 +0100pavonia(~user@user/siracusa)
2021-11-16 21:28:52 +0100Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-11-16 21:31:02 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-16 21:31:02 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-16 21:31:02 +0100wroathe(~wroathe@user/wroathe)
2021-11-16 21:31:33 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-11-16 21:31:53 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 250 seconds)
2021-11-16 21:33:04 +0100carter(sid14827@helmsley.irccloud.com) (Ping timeout: 256 seconds)
2021-11-16 21:34:31 +0100carter(sid14827@helmsley.irccloud.com)
2021-11-16 21:34:46 +0100nrr__(sid20938@lymington.irccloud.com) (Ping timeout: 256 seconds)
2021-11-16 21:36:09 +0100nrr__(sid20938@lymington.irccloud.com)
2021-11-16 21:36:18 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-11-16 21:36:51 +0100 <boxscape_> Am I seeing this right that I cannot have {-# OVERLAPPING #-} instances for classes with associated types, because GHC would always complain about conflicting family instance declarations?
2021-11-16 21:37:06 +0100 <boxscape_> (i.e. I would have to make it a non-associated type family?)
2021-11-16 21:37:45 +0100 <c_wraith> Well, you can't create conflicting type families. Doesn't matter whether you put them inside a class or not.
2021-11-16 21:38:03 +0100 <boxscape_> but GHC won't let me compile it :(
2021-11-16 21:38:09 +0100 <boxscape_> oh wait
2021-11-16 21:38:12 +0100 <boxscape_> I thought you wrote "can"
2021-11-16 21:38:37 +0100 <boxscape_> I know I can't do it anyway, it's just that the type family instances happen to match for the overlapping and the overlapped instance
2021-11-16 21:38:46 +0100 <boxscape_> so separating it out would work in this case, I think
2021-11-16 21:43:08 +0100EvanR(~evan@user/evanr) (Quit: Leaving)
2021-11-16 21:46:28 +0100werner100(~werner100@2601:2c2:400:4440:517c:b3d6:3517:bdd4)
2021-11-16 21:48:59 +0100mimmy(~mimmy@146.70.75.156)
2021-11-16 21:49:48 +0100jmorris(uid433911@hampstead.irccloud.com)
2021-11-16 21:54:06 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2021-11-16 21:54:17 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9)
2021-11-16 21:55:35 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
2021-11-16 21:56:12 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2021-11-16 21:56:31 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net)
2021-11-16 21:56:35 +0100neurocyte0132889(~neurocyte@user/neurocyte) (Ping timeout: 250 seconds)
2021-11-16 21:58:30 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-16 22:01:26 +0100yauhsien(~yauhsien@61-231-43-127.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
2021-11-16 22:02:30 +0100desantra(~skykanin@user/skykanin) (Quit: WeeChat 3.3)
2021-11-16 22:03:11 +0100zincy_(~zincy@2a00:23c8:970c:4801:78f3:43f3:fd48:5ac3)
2021-11-16 22:04:20 +0100rond_(~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438)
2021-11-16 22:05:36 +0100zincy_(~zincy@2a00:23c8:970c:4801:78f3:43f3:fd48:5ac3) (Remote host closed the connection)
2021-11-16 22:05:54 +0100zincy_(~zincy@2a00:23c8:970c:4801:78f3:43f3:fd48:5ac3)
2021-11-16 22:07:38 +0100eruditass(uid248673@uxbridge.irccloud.com) (Ping timeout: 256 seconds)
2021-11-16 22:07:38 +0100obviyus(sid415299@user/obviyus) (Ping timeout: 256 seconds)
2021-11-16 22:07:58 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-16 22:08:32 +0100obviyus(sid415299@user/obviyus)
2021-11-16 22:09:21 +0100eruditass(uid248673@uxbridge.irccloud.com)
2021-11-16 22:10:40 +0100coolnickname(~omg@user/coolnickname)
2021-11-16 22:11:32 +0100jespada(~jespada@252-155-231-201.fibertel.com.ar) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-11-16 22:16:16 +0100eruditass(uid248673@uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-16 22:16:43 +0100wootehfoot(~wootehfoo@user/wootehfoot)
2021-11-16 22:18:53 +0100burnsidesLlama(~burnsides@dhcp168-035.wadham.ox.ac.uk)
2021-11-16 22:22:14 +0100werner100(~werner100@2601:2c2:400:4440:517c:b3d6:3517:bdd4) (Quit: Ping timeout (120 seconds))
2021-11-16 22:23:25 +0100zincy_(~zincy@2a00:23c8:970c:4801:78f3:43f3:fd48:5ac3) (Remote host closed the connection)
2021-11-16 22:23:53 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-16 22:23:53 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-16 22:23:53 +0100wroathe(~wroathe@user/wroathe)
2021-11-16 22:24:34 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset)
2021-11-16 22:26:46 +0100jurjen(~jurjen@62-133-96-120.mobile.kpn.net)
2021-11-16 22:27:02 +0100zincy_(~zincy@host86-181-60-139.range86-181.btcentralplus.com)
2021-11-16 22:28:14 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2021-11-16 22:32:07 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 250 seconds)
2021-11-16 22:32:51 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-11-16 22:35:54 +0100lavaman(~lavaman@98.38.249.169)
2021-11-16 22:36:56 +0100son0p(~ff@181.136.122.143)
2021-11-16 22:38:52 +0100Pickchea(~private@user/pickchea)
2021-11-16 22:40:30 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-11-16 22:42:45 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-11-16 22:49:29 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-16 22:49:29 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-16 22:49:29 +0100wroathe(~wroathe@user/wroathe)
2021-11-16 22:54:07 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-11-16 22:56:23 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 250 seconds)
2021-11-16 22:59:38 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:85c4:4386:63fc:8e9) (Remote host closed the connection)
2021-11-16 22:59:38 +0100jurjen(~jurjen@62-133-96-120.mobile.kpn.net) (Read error: Connection reset by peer)
2021-11-16 23:00:38 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2021-11-16 23:03:11 +0100 <__monty__> Has anyone written up the potential for confusion of $?
2021-11-16 23:03:18 +0100pop3(~pop3@user/pop3) (Remote host closed the connection)
2021-11-16 23:04:00 +0100 <dsal> :t ($?)
2021-11-16 23:04:01 +0100 <lambdabot> error:
2021-11-16 23:04:01 +0100 <lambdabot> • Variable not in scope: $?
2021-11-16 23:04:01 +0100 <lambdabot> • Perhaps you meant one of these:
2021-11-16 23:04:57 +0100 <monochrom> I think it would be just one short sentence.
2021-11-16 23:05:17 +0100 <monochrom> I mean, if there were any confusion in the first place.
2021-11-16 23:05:32 +0100 <dsal> What is the confusion?
2021-11-16 23:05:49 +0100 <int-e> ($) is just an ordinary infix operator
2021-11-16 23:06:02 +0100 <int-e> `otherwise` is a Prelude function defined as True
2021-11-16 23:06:36 +0100 <int-e> what other things do we have that could be mistaken for syntax but really aren't?
2021-11-16 23:06:38 +0100 <dsal> `otherwise` has confused me a few times.
2021-11-16 23:06:41 +0100 <geekosaur> newcomers often get confused about (.) vs. ($)?
2021-11-16 23:07:22 +0100 <int-e> newcomers need to learn about types
2021-11-16 23:07:27 +0100 <int-e> so... that's expected
2021-11-16 23:07:51 +0100 <dsal> I find people tend to just put $ everywhere because it often does what they expect as a `(` kind of thing.
2021-11-16 23:07:52 +0100 <monochrom> To be sure, I speak against overused of ($) too, but the root issue is people going out of their way to hate parentheses, and digging deeper, people going out of their way to hate math. If ($) didn't exist, people would still find other ways to hate math (and they do).
2021-11-16 23:08:08 +0100 <dsal> I just hate money.
2021-11-16 23:08:16 +0100 <int-e> @src ($)
2021-11-16 23:08:16 +0100 <lambdabot> f $ x = f x
2021-11-16 23:08:55 +0100 <maerwald> monochrom: people also think using lambdas (the core of our language) is uncool
2021-11-16 23:11:07 +0100mimmy(~mimmy@146.70.75.156) (Ping timeout: 250 seconds)
2021-11-16 23:11:36 +0100 <monochrom> Regarding being confused about (.) vs ($): I see that as comparable to math newcomers confusing "x*(y+z) = x*y + x*z" with "sqrt(y+z) = sqrt(y) + sqrt(z)", too. Does that mean the former is confusing, therefore we should just never teach distributivity, period?
2021-11-16 23:11:40 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2021-11-16 23:12:41 +0100 <monochrom> People always look for oversimplifications to comfort themselves. They will always confused by facts.
2021-11-16 23:13:40 +0100Axman6needs to remember to return otherwise more often, and also use it as a binder name sometimes
2021-11-16 23:14:23 +0100 <geekosaur> meh. we're writing haskell, not perl
2021-11-16 23:14:36 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-11-16 23:19:11 +0100burnsidesLlama(~burnsides@dhcp168-035.wadham.ox.ac.uk) (Remote host closed the connection)
2021-11-16 23:19:34 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-16 23:19:43 +0100burnsidesLlama(~burnsides@client-8-84.eduroam.oxuni.org.uk)
2021-11-16 23:20:12 +0100Midjak(~Midjak@82-65-111-221.subs.proxad.net) (Quit: This computer has gone to sleep)
2021-11-16 23:21:55 +0100 <dsal> The thing that's a little confusing about operators is that their precedence is invisible.
2021-11-16 23:22:27 +0100 <maerwald> if unsure about precedence, use ($) :D
2021-11-16 23:24:05 +0100burnsidesLlama(~burnsides@client-8-84.eduroam.oxuni.org.uk) (Ping timeout: 265 seconds)
2021-11-16 23:26:46 +0100 <int-e> > ((succ $ 2) + (pred $ 3))
2021-11-16 23:26:47 +0100 <lambdabot> 5
2021-11-16 23:27:02 +0100 <int-e> (better safe than sorry)
2021-11-16 23:27:38 +0100 <monochrom> > (((succ) $ (2)) + ((pred) $ (3))) -- really, really safe >:)
2021-11-16 23:27:39 +0100 <lambdabot> 5
2021-11-16 23:27:56 +0100 <hpc> this is why i always write ((-)1) instead of (-1)
2021-11-16 23:28:06 +0100 <monochrom> heh
2021-11-16 23:28:15 +0100 <kronicmage> int-e: "($) is just an infix operator" I thought there was special casing for higher rank types?
2021-11-16 23:28:20 +0100 <monochrom> But you should write ((-) (1)) >:)
2021-11-16 23:28:35 +0100 <kronicmage> So you can't actually define your own ($) that works the same way
2021-11-16 23:28:48 +0100 <hpc> ((-) ( ) (1)), just to be sure
2021-11-16 23:29:04 +0100 <monochrom> haha that's the best
2021-11-16 23:29:24 +0100 <janus> kronicmage: the workaround has been removed with the new quick look impredicativity i think?
2021-11-16 23:29:48 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
2021-11-16 23:29:51 +0100 <int-e> kronicmage: Yes there is an ad-hoc hack that makes runST $ foo work
2021-11-16 23:30:02 +0100 <janus> int-e: even in 9.2? why?
2021-11-16 23:30:05 +0100 <geekosaur> supposedly the only part that remains is that ($) is alway simpredicative
2021-11-16 23:30:06 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2021-11-16 23:30:26 +0100 <int-e> janus: Sorry I checked 8.10.7
2021-11-16 23:31:48 +0100michalz(~michalz@185.246.204.41) (Remote host closed the connection)
2021-11-16 23:32:07 +0100 <int-e> And now 9.0.1 as well...
2021-11-16 23:32:24 +0100 <int-e> 9.2 is way too new :P
2021-11-16 23:32:47 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 250 seconds)
2021-11-16 23:33:51 +0100 <hpc> maybe a dependent-typed ($) will fix runST
2021-11-16 23:33:59 +0100 <hpc> just wait for ghc 10
2021-11-16 23:36:06 +0100mimmy(~mimmy@146.70.75.156)
2021-11-16 23:36:42 +0100 <maerwald> hpc: hopefully we'll get the long awaited No-Neq patch by then
2021-11-16 23:37:11 +0100jkaye(~jkaye@BELVEDERE-T.ear2.Denver1.Level3.net) (Quit: Leaving)
2021-11-16 23:38:54 +0100alzgh(alzgh@user/alzgh) (Remote host closed the connection)
2021-11-16 23:39:15 +0100alzgh(alzgh@user/alzgh)
2021-11-16 23:41:11 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish)
2021-11-16 23:45:17 +0100wootehfoot(~wootehfoo@user/wootehfoot) (Quit: Leaving)
2021-11-16 23:46:15 +0100alzgh(alzgh@user/alzgh) (Ping timeout: 256 seconds)
2021-11-16 23:47:14 +0100 <monochrom> No-Neq is a little bit of witch-hunting IMO. Although, it's a pretty small issue either way, so I won't make a big fuss about it.
2021-11-16 23:47:47 +0100 <monochrom> But if they try to apply the same thinking to the "redundant" methods of Ord, now that will be very alarming.
2021-11-16 23:47:47 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Remote host closed the connection)
2021-11-16 23:48:08 +0100 <maerwald> No-Neq is irrelevant as a proposal
2021-11-16 23:48:16 +0100 <maerwald> but the discussion is relevant
2021-11-16 23:48:31 +0100 <monochrom> Yeah that's true.
2021-11-16 23:48:41 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-16 23:48:59 +0100 <maerwald> Not that I envy the CLC stepping into that discussion on their first decision, haha
2021-11-16 23:49:32 +0100cosimone(~user@2001:b07:ae5:db26:a7aa:8027:6b4e:2fb3) (Quit: ERC (IRC client for Emacs 27.1))
2021-11-16 23:49:54 +0100 <maerwald> like on a landmine
2021-11-16 23:50:19 +0100 <maerwald> "this probably won't be controversial..."
2021-11-16 23:50:23 +0100alzgh(~alzgh@user/alzgh)
2021-11-16 23:50:24 +0100 <unit73e> I need to simplify this: https://paste.tomsmeding.com/iDgRrIMF
2021-11-16 23:50:32 +0100 <unit73e> all that occurs to me is mapAccumR
2021-11-16 23:50:41 +0100 <[exa]> wth, like removing /= from the typeclass?
2021-11-16 23:51:03 +0100 <monochrom> Oh, every ideology believer also believes that their ideology is uncontroverial.
2021-11-16 23:51:04 +0100 <hpc> we should save our brainpower for more important proposals, like (<>) = getLine like every other sane language has
2021-11-16 23:51:50 +0100 <monochrom> Yes I'm saying that No-Neq is driven by ideology. It's why I conclude that it's witch-hunting.
2021-11-16 23:52:07 +0100 <monochrom> haha hpc
2021-11-16 23:52:32 +0100 <monochrom> Yes [exa].
2021-11-16 23:53:07 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-11-16 23:53:31 +0100 <[exa]> actually in hs you lose functionality if you remove either of == or /= right? (for partial results)
2021-11-16 23:53:49 +0100 <[exa]> s/partial results/non-total comparisons)
2021-11-16 23:55:44 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2021-11-16 23:56:24 +0100 <unit73e> nvm I was being dumb, as usual
2021-11-16 23:57:08 +0100 <int-e> janus: 9.2 does the same thing (runST $ return () type-checks; replacing $ by a custom operator doesn't)
2021-11-16 23:57:08 +0100Pickchea(~private@user/pickchea) (Remote host closed the connection)
2021-11-16 23:57:33 +0100 <int-e> (that's without enabling any extra extensions)