2020/12/13

2020-12-13 00:00:01 +0100__monty__(~toonn@unaffiliated/toonn) (Quit: leaving)
2020-12-13 00:00:15 +0100Tops2(~Tobias@dyndsl-095-033-025-077.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2020-12-13 00:01:11 +0100conal(~conal@64.71.133.70)
2020-12-13 00:02:26 +0100aev(~aev@pool-108-5-152-94.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
2020-12-13 00:04:10 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2020-12-13 00:10:31 +0100shalokshalom(~quassel@2a02:1748:dd5e:7f60:e2dc:326:1bfd:b9fc)
2020-12-13 00:10:44 +0100 <shalokshalom> https://github.com/commercialhaskell/stack/issues/5452
2020-12-13 00:10:57 +0100 <shalokshalom> Where in the source code to add this, so I can raise a PR?
2020-12-13 00:13:24 +0100 <dminuoso> shalokshalom: https://github.com/commercialhaskell/stack/blob/master/src/Stack/Setup.hs
2020-12-13 00:13:52 +0100mirrorbird(~psutcliff@2a00:801:2d6:5a31:e851:a991:dd63:f024)
2020-12-13 00:13:54 +0100 <dminuoso> shalokshalom: The exit point for the error you're getting is the UnknownCompilerVersion exception
2020-12-13 00:13:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 00:14:00 +0100 <dminuoso> Beyond that I cant help
2020-12-13 00:15:08 +0100zincy__(~tom@host86-169-79-54.range86-169.btcentralplus.com)
2020-12-13 00:15:16 +0100tom__(~tom@2a00:23c8:970a:3501:b89a:3974:7a09:75a2) (Remote host closed the connection)
2020-12-13 00:18:37 +0100 <sm[m]> huh, I was thinking https://github.com/commercialhaskell/stack/blob/master/etc/scripts/get-stack.sh
2020-12-13 00:19:58 +0100 <dminuoso> oh
2020-12-13 00:20:39 +0100 <dminuoso> sm[m]: The error diagnostic definitely comes from the above Setup.hs
2020-12-13 00:21:06 +0100 <dminuoso> ahh, I see
2020-12-13 00:21:18 +0100 <sm[m]> I see. That's the stack setup command I guess
2020-12-13 00:21:47 +0100 <dminuoso> No your pointer is definitely right
2020-12-13 00:22:12 +0100 <dminuoso> @pl \f -> (\(ann, n) -> (f ann n, n)))
2020-12-13 00:22:12 +0100 <lambdabot> (line 1, column 34):
2020-12-13 00:22:12 +0100 <lambdabot> unexpected ')'
2020-12-13 00:22:12 +0100 <lambdabot> expecting variable, "(", operator or end of input
2020-12-13 00:22:39 +0100 <dminuoso> @pl (\(ann, n) -> (f ann n, n))
2020-12-13 00:22:40 +0100 <lambdabot> uncurry (join . ((,) .) . f)
2020-12-13 00:22:59 +0100 <dminuoso> Mmm. Is there a profunctor thing for this?
2020-12-13 00:23:21 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2020-12-13 00:25:14 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 260 seconds)
2020-12-13 00:25:32 +0100 <quarters> when trying to run scotty using the code here: https://hackage.haskell.org/package/scotty, I get an error saying that where "/:word" is, a RoutePattern was expected and I was wondering what i'm doing wrong
2020-12-13 00:25:58 +0100 <glguy> quarters, did you add this to the top of the file? {-# LANGUAGE OverloadedStrings #-}
2020-12-13 00:26:11 +0100 <quarters> oooh no i didn't
2020-12-13 00:26:23 +0100 <quarters> I suppose I didn't do it verbatim after all
2020-12-13 00:26:32 +0100 <quarters> thanks! let me try that
2020-12-13 00:27:18 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31)
2020-12-13 00:29:11 +0100 <quarters> that worked :)
2020-12-13 00:30:27 +0100veox(~veox@185.163.110.125) (Remote host closed the connection)
2020-12-13 00:30:36 +0100z0(~z0@188.251.86.84) (Ping timeout: 240 seconds)
2020-12-13 00:30:38 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
2020-12-13 00:31:04 +0100son0p(~son0p@181.136.122.143) (Quit: Lost terminal)
2020-12-13 00:31:58 +0100cosimone(~cosimone@93-47-228-249.ip115.fastwebnet.it) (Quit: cosimone)
2020-12-13 00:32:26 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31) (Ping timeout: 264 seconds)
2020-12-13 00:33:58 +0100acidjnk_new(~acidjnk@p200300d0c719ff439996fb92bd8d62ee.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
2020-12-13 00:34:36 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:2934:49bf:39ab:a879) (Remote host closed the connection)
2020-12-13 00:34:49 +0100Gurkenglas_(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 246 seconds)
2020-12-13 00:36:04 +0100Ariakenom(~Ariakenom@h-98-128-229-53.NA.cust.bahnhof.se) (Quit: Leaving)
2020-12-13 00:36:46 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 00:37:45 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr)
2020-12-13 00:39:04 +0100alainb(~alainb@bras-base-hullpq2034w-grc-41-70-55-129-251.dsl.bell.ca)
2020-12-13 00:41:07 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:2934:49bf:39ab:a879)
2020-12-13 00:41:14 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Remote host closed the connection)
2020-12-13 00:41:43 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 00:45:25 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 00:46:37 +0100fendor(~fendor@91.141.1.222.wireless.dyn.drei.com) (Remote host closed the connection)
2020-12-13 00:46:49 +0100alainb(~alainb@bras-base-hullpq2034w-grc-41-70-55-129-251.dsl.bell.ca) ()
2020-12-13 00:48:06 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-13 00:49:37 +0100 <Sose> btw regarding my issue with installing `warp` earlier.. I deleted ~/.stack and suddenly it works
2020-12-13 00:49:38 +0100nfd(~nfd9001@c-67-183-38-33.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
2020-12-13 00:50:43 +0100gac410(~gac410@178.162.204.214)
2020-12-13 00:55:45 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 240 seconds)
2020-12-13 01:02:58 +0100sgibber2018(~arch-gibb@208.85.237.137)
2020-12-13 01:03:59 +0100mirrorbird(~psutcliff@2a00:801:2d6:5a31:e851:a991:dd63:f024) (Quit: Leaving)
2020-12-13 01:04:18 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 260 seconds)
2020-12-13 01:04:33 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-ztimugujetgdzvmd)
2020-12-13 01:07:01 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 246 seconds)
2020-12-13 01:09:03 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2020-12-13 01:09:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2020-12-13 01:10:26 +0100Tario(~Tario@200.119.184.207)
2020-12-13 01:11:00 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-13 01:12:45 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Quit: So long and thanks for all the fish!)
2020-12-13 01:14:01 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 01:14:02 +0100fresheyeball(~isaac@c-71-237-105-37.hsd1.co.comcast.net) (Quit: WeeChat 2.7.1)
2020-12-13 01:15:29 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Max SendQ exceeded)
2020-12-13 01:16:41 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-13 01:17:09 +0100conal(~conal@64.71.133.70)
2020-12-13 01:17:47 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-12-13 01:18:04 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31)
2020-12-13 01:18:13 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net)
2020-12-13 01:19:34 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 01:19:47 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
2020-12-13 01:19:47 +0100conal(~conal@64.71.133.70)
2020-12-13 01:22:36 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 240 seconds)
2020-12-13 01:23:09 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 01:26:49 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 01:28:00 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 256 seconds)
2020-12-13 01:28:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2020-12-13 01:28:39 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Quit: So long and thanks for all the fish!)
2020-12-13 01:32:14 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 258 seconds)
2020-12-13 01:33:05 +0100MOSCOS(~MOSCOS@122.54.107.175) (Remote host closed the connection)
2020-12-13 01:33:13 +0100wonko7(~wonko7@2a01:e35:2ffb:7040:14a1:46f4:68f7:2133) (Ping timeout: 272 seconds)
2020-12-13 01:33:29 +0100MOSCOS(~MOSCOS@122.54.107.175)
2020-12-13 01:34:37 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-13 01:35:02 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 01:35:20 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net)
2020-12-13 01:36:29 +0100conal(~conal@64.71.133.70)
2020-12-13 01:36:29 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-12-13 01:37:29 +0100nfd(~nfd9001@2600:380:445c:2b0:c0:f0a1:32bc:f09)
2020-12-13 01:38:18 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Max SendQ exceeded)
2020-12-13 01:38:33 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving)
2020-12-13 01:40:09 +0100rprije(~rprije@14-201-170-17.tpgi.com.au)
2020-12-13 01:40:11 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
2020-12-13 01:40:49 +0100shalokshalom(~quassel@2a02:1748:dd5e:7f60:e2dc:326:1bfd:b9fc) (Ping timeout: 272 seconds)
2020-12-13 01:40:50 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 01:42:23 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds)
2020-12-13 01:42:47 +0100nfd(~nfd9001@2600:380:445c:2b0:c0:f0a1:32bc:f09) (Ping timeout: 260 seconds)
2020-12-13 01:48:43 +0100Tario(~Tario@200.119.184.207) (Read error: Connection reset by peer)
2020-12-13 01:49:09 +0100Tario(~Tario@201.192.165.173)
2020-12-13 01:49:50 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Quit: So long and thanks for all the fish!)
2020-12-13 01:50:54 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 01:51:15 +0100conal(~conal@64.71.133.70)
2020-12-13 01:51:18 +0100 <cnmne[m]> having trouble seeing where a miscount is coming up when i try https://paste.tomsmeding.com/DIzLGJv8 for AoC 2015 Day 8. all my tests come up correct, and i've hand-counted a few nasty-looking ones -- all correct
2020-12-13 01:54:09 +0100_linker_(~linker@2a02:a31a:a041:9a80:30fe:7017:9f55:4ae6) (Remote host closed the connection)
2020-12-13 01:56:45 +0100Vulfe_(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375)
2020-12-13 02:00:02 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:2934:49bf:39ab:a879) (Ping timeout: 264 seconds)
2020-12-13 02:00:27 +0100sgibber2018(~arch-gibb@208.85.237.137) (Quit: WeeChat 2.9)
2020-12-13 02:00:33 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Quit: So long and thanks for all the fish!)
2020-12-13 02:01:14 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-13 02:01:29 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 260 seconds)
2020-12-13 02:02:54 +0100conal(~conal@64.71.133.70)
2020-12-13 02:02:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 02:03:07 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-12-13 02:03:36 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 02:04:00 +0100thecoffemakerthecoffem
2020-12-13 02:04:22 +0100conal(~conal@64.71.133.70)
2020-12-13 02:04:36 +0100 <MarcelineVQ> idk but looking at line 1 of the input, read turns "\xd2" into "\210" which means it's become 4 chars instead of 1
2020-12-13 02:04:39 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-12-13 02:05:07 +0100Vulfe_(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375) (Remote host closed the connection)
2020-12-13 02:05:26 +0100conal(~conal@64.71.133.70)
2020-12-13 02:05:26 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-12-13 02:05:57 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375)
2020-12-13 02:06:09 +0100 <MarcelineVQ> Instructions given have "\x plus two hexadecimal characters (which represents a single character with that ASCII code" which is violated if read gives 4 chars instead of 1
2020-12-13 02:06:54 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Remote host closed the connection)
2020-12-13 02:07:18 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2020-12-13 02:09:03 +0100conal(~conal@64.71.133.70)
2020-12-13 02:09:46 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 256 seconds)
2020-12-13 02:10:34 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375) (Ping timeout: 258 seconds)
2020-12-13 02:11:06 +0100mceier(~mceier@89-68-132-187.dynamic.chello.pl) (Ping timeout: 265 seconds)
2020-12-13 02:11:24 +0100SomeoneSerge(~someone-s@5.253.207.86) (Ping timeout: 260 seconds)
2020-12-13 02:12:01 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-12-13 02:12:15 +0100mceier(~mceier@89-68-132-187.dynamic.chello.pl)
2020-12-13 02:12:30 +0100thecoffem(~thecoffem@unaffiliated/thecoffemaker) (Quit: So long and thanks for all the fish!)
2020-12-13 02:12:32 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2020-12-13 02:13:33 +0100SomeoneSerge(~someone-s@broadband-178-140-231-18.ip.moscow.rt.ru)
2020-12-13 02:15:27 +0100alx741(~alx741@181.196.69.196) (Ping timeout: 265 seconds)
2020-12-13 02:16:16 +0100Rudd0(~Rudd0@185.189.115.108) (Ping timeout: 240 seconds)
2020-12-13 02:17:32 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-12-13 02:18:27 +0100 <cnmne[m]> i think it's ok
2020-12-13 02:18:35 +0100 <cnmne[m]> when i check length it shows 1
2020-12-13 02:18:45 +0100 <pavonia> Which input line fails?
2020-12-13 02:20:05 +0100 <cnmne[m]> neither; i get an answer, but apparently the wrong answer
2020-12-13 02:20:37 +0100fuzzypixelz_(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2020-12-13 02:20:42 +0100quarters(~quarters@unaffiliated/quarters) (Ping timeout: 256 seconds)
2020-12-13 02:20:54 +0100 <pavonia> Ah, e.g. this one gives wrong results "hc\"lg\x6bcpupsewzklai\"l"
2020-12-13 02:21:22 +0100 <pavonia> Because the Haskell parser keeps reading hex chars until it can't find any more
2020-12-13 02:21:53 +0100 <pavonia> > "\x6bcp"
2020-12-13 02:21:55 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.157) (Quit: Leaving)
2020-12-13 02:21:55 +0100 <lambdabot> "\1724p"
2020-12-13 02:22:04 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 258 seconds)
2020-12-13 02:22:05 +0100fuzzypixelz_fuzzypixelz
2020-12-13 02:22:08 +0100 <cnmne[m]> ah!
2020-12-13 02:22:12 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.157)
2020-12-13 02:22:42 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 265 seconds)
2020-12-13 02:22:46 +0100 <cnmne[m]> that makes sense, thanks. I guess there's no short cut and I'll have to pattern match a little more ...
2020-12-13 02:23:01 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 02:24:59 +0100nfd(~nfd9001@c-67-183-38-33.hsd1.wa.comcast.net)
2020-12-13 02:25:43 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375)
2020-12-13 02:25:48 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-13 02:27:41 +0100alx741(~alx741@186.178.110.71)
2020-12-13 02:27:48 +0100Kronic(~Kronic___@84.203.98.133) (Quit: Leaving)
2020-12-13 02:28:39 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 02:30:05 +0100nfd(~nfd9001@c-67-183-38-33.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
2020-12-13 02:30:19 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8)
2020-12-13 02:30:30 +0100columbarius(~columbari@87.123.198.150) (Ping timeout: 258 seconds)
2020-12-13 02:31:13 +0100rprije(~rprije@14-201-170-17.tpgi.com.au) (Remote host closed the connection)
2020-12-13 02:31:39 +0100rprije(~rprije@14-201-170-17.tpgi.com.au)
2020-12-13 02:31:58 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Quit: So long and thanks for all the fish!)
2020-12-13 02:32:40 +0100columbarius(~columbari@mue-88-130-54-086.dsl.tropolys.de)
2020-12-13 02:33:20 +0100dnlkrgr(~dnlkrgr@HSI-KBW-46-223-1-192.hsi.kabel-badenwuerttemberg.de) (Ping timeout: 265 seconds)
2020-12-13 02:33:38 +0100bgamari(~bgamari@72.65.101.158)
2020-12-13 02:34:14 +0100bgamari_(~bgamari@2001:470:e438::1) (Ping timeout: 264 seconds)
2020-12-13 02:34:21 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-12-13 02:36:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-12-13 02:37:10 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 02:37:11 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 02:39:40 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 02:40:15 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 02:40:30 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Read error: Connection reset by peer)
2020-12-13 02:40:43 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 02:40:47 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-13 02:42:15 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: fuzzypixelz)
2020-12-13 02:42:39 +0100bgamari_(~bgamari@72.65.102.219)
2020-12-13 02:42:41 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375) (Remote host closed the connection)
2020-12-13 02:42:52 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375)
2020-12-13 02:43:24 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net)
2020-12-13 02:43:29 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 260 seconds)
2020-12-13 02:44:04 +0100bgamari(~bgamari@72.65.101.158) (Ping timeout: 260 seconds)
2020-12-13 02:44:28 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 02:45:05 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 02:45:27 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 02:45:28 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-12-13 02:47:29 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Quit: So long and thanks for all the fish!)
2020-12-13 02:47:57 +0100nullniverse(~null@unaffiliated/nullniverse)
2020-12-13 02:48:30 +0100Varis(~Tadas@unaffiliated/varis)
2020-12-13 02:48:53 +0100Lord_of_Life(~Lord@46.217.220.245)
2020-12-13 02:49:16 +0100Lord_of_Life_(~Lord@46.217.220.217) (Ping timeout: 240 seconds)
2020-12-13 02:49:53 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-12-13 02:51:39 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 260 seconds)
2020-12-13 02:51:57 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 02:54:19 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Max SendQ exceeded)
2020-12-13 02:59:04 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2020-12-13 02:59:05 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 240 seconds)
2020-12-13 03:01:15 +0100sakirious(~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Quit: The Lounge - https://thelounge.chat)
2020-12-13 03:01:42 +0100perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2020-12-13 03:02:36 +0100Neuromancer(~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 240 seconds)
2020-12-13 03:03:09 +0100hiroaki(~hiroaki@2a02:908:4b1b:20a0::4e53) (Ping timeout: 272 seconds)
2020-12-13 03:04:12 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 03:04:25 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 240 seconds)
2020-12-13 03:05:06 +0100polyrain(~polyrain@2001:8003:e501:6901:344b:e1da:e2ed:956)
2020-12-13 03:06:25 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 240 seconds)
2020-12-13 03:08:01 +0100jespada(~jespada@90.254.245.49)
2020-12-13 03:09:05 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-12-13 03:10:13 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net)
2020-12-13 03:11:41 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-12-13 03:11:50 +0100sgibber2018(~arch-gibb@208.85.237.137)
2020-12-13 03:12:02 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 03:13:21 +0100wildlander(~wildlande@unaffiliated/wildlander)
2020-12-13 03:14:22 +0100xff0x(~fox@2001:1a81:525b:e100:290b:d404:9fb5:ba71) (Ping timeout: 260 seconds)
2020-12-13 03:16:12 +0100xff0x(~fox@2001:1a81:5293:a900:fbf2:9a22:7e7:d551)
2020-12-13 03:18:49 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net)
2020-12-13 03:21:03 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Quit: So long and thanks for all the fish!)
2020-12-13 03:22:26 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 03:22:40 +0100nfd(~nfd9001@c-67-183-38-33.hsd1.wa.comcast.net)
2020-12-13 03:23:14 +0100xsperry(~as@unaffiliated/xsperry) (Remote host closed the connection)
2020-12-13 03:23:43 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 260 seconds)
2020-12-13 03:24:45 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Read error: Connection reset by peer)
2020-12-13 03:25:21 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net) (Quit: WeeChat 3.0)
2020-12-13 03:26:07 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net)
2020-12-13 03:29:28 +0100jchia(~jchia@58.32.35.91) (Ping timeout: 246 seconds)
2020-12-13 03:31:06 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net) (Quit: WeeChat 3.0)
2020-12-13 03:33:06 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 03:33:26 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 03:34:18 +0100jchia(~jchia@58.32.71.163)
2020-12-13 03:36:06 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 03:38:22 +0100nfd(~nfd9001@c-67-183-38-33.hsd1.wa.comcast.net) (Read error: Connection reset by peer)
2020-12-13 03:39:35 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Read error: Connection timed out)
2020-12-13 03:44:11 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 03:44:39 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net)
2020-12-13 03:45:32 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Max SendQ exceeded)
2020-12-13 03:47:34 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net) (Client Quit)
2020-12-13 03:49:26 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 03:50:14 +0100gzj(~gzj@unaffiliated/gzj) (Ping timeout: 258 seconds)
2020-12-13 03:51:15 +0100Kronic(~Kronic___@84.203.98.133)
2020-12-13 03:56:55 +0100quarters(~quarters@38-73-246-124.starry-inc.net)
2020-12-13 03:58:26 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Quit: So long and thanks for all the fish!)
2020-12-13 03:59:40 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-13 04:07:50 +0100abhixec(~abhixec@c-67-169-141-95.hsd1.ca.comcast.net)
2020-12-13 04:10:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-13 04:12:10 +0100electrostat(~dag@unaffiliated/electrostat) (Ping timeout: 246 seconds)
2020-12-13 04:13:12 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-13 04:14:26 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 256 seconds)
2020-12-13 04:16:08 +0100nullniverse(~null@unaffiliated/nullniverse) (Ping timeout: 256 seconds)
2020-12-13 04:17:11 +0100electrostat(~dag@unaffiliated/electrostat)
2020-12-13 04:17:57 +0100jamm(~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
2020-12-13 04:19:53 +0100polyrain(~polyrain@2001:8003:e501:6901:344b:e1da:e2ed:956) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 04:21:45 +0100 <siraben> Anyone writing time-traveling code in Haskell?
2020-12-13 04:23:12 +0100 <ephemient> we are all time travellers, moving at 1 second per second
2020-12-13 04:23:52 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375) (Remote host closed the connection)
2020-12-13 04:24:05 +0100theDon(~td@94.134.91.51) (Ping timeout: 240 seconds)
2020-12-13 04:24:53 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375)
2020-12-13 04:26:13 +0100theDon(~td@muedsl-82-207-238-126.citykom.de)
2020-12-13 04:26:46 +0100xirhtogal(~lagothrix@unaffiliated/lagothrix)
2020-12-13 04:26:46 +0100lagothrix(~lagothrix@unaffiliated/lagothrix) (Killed (beckett.freenode.net (Nickname regained by services)))
2020-12-13 04:26:46 +0100xirhtogallagothrix
2020-12-13 04:28:40 +0100 <dsal> siraben: depends on what you mean. I used something you could call that for traversing a maze-like problem in last year's AoC. I just kept all the states as I proceeded and could move back to any prior point in time to make different decisions.
2020-12-13 04:29:26 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:4007:51f:3ce1:375) (Ping timeout: 264 seconds)
2020-12-13 04:30:28 +0100 <siraben> Something like https://kcsongor.github.io/time-travel-in-haskell-for-dummies/
2020-12-13 04:34:00 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net)
2020-12-13 04:36:05 +0100solonarv(~solonarv@astrasbourg-157-1-27-135.w90-40.abo.wanadoo.fr) (Ping timeout: 240 seconds)
2020-12-13 04:39:05 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 04:39:24 +0100ensyde(~ensyde@2600:1702:2e30:1a40:2d5d:a36c:99c3:9606)
2020-12-13 04:39:26 +0100aev(~aev@pool-108-5-152-94.nwrknj.fios.verizon.net)
2020-12-13 04:39:33 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 04:39:49 +0100Gurkenglas_(~Gurkengla@unaffiliated/gurkenglas)
2020-12-13 04:40:01 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 04:44:19 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 265 seconds)
2020-12-13 04:45:02 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2020-12-13 04:45:12 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-13 04:45:28 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9)
2020-12-13 04:45:47 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 04:46:44 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.157) (Quit: Leaving)
2020-12-13 04:48:58 +0100 <dsal> I didn't just tardis for that particular problem. Just a map of the past.
2020-12-13 04:50:02 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9) (Ping timeout: 258 seconds)
2020-12-13 04:50:38 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2020-12-13 04:51:45 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net) (Ping timeout: 245 seconds)
2020-12-13 04:52:07 +0100aevaev_software
2020-12-13 04:54:21 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2020-12-13 04:59:33 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-12-13 05:00:02 +0100alexelcu(~alexelcu@142.93.180.198) (Quit: ZNC 1.8.2 - https://znc.in)
2020-12-13 05:00:33 +0100Rudd0(~Rudd0@185.189.115.103)
2020-12-13 05:00:53 +0100 <iqubic> "If you love it so much, why don't you marry it." Turns out that Haskell makes it really easy to tye the knot.
2020-12-13 05:00:59 +0100alexelcu(~alexelcu@142.93.180.198)
2020-12-13 05:03:29 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-12-13 05:05:23 +0100nullniverse(~null@unaffiliated/nullniverse)
2020-12-13 05:05:25 +0100nullniverse(~null@unaffiliated/nullniverse) (Max SendQ exceeded)
2020-12-13 05:06:44 +0100 <dsal> Ha
2020-12-13 05:08:26 +0100ensyde(~ensyde@2600:1702:2e30:1a40:2d5d:a36c:99c3:9606) (Quit: Leaving)
2020-12-13 05:12:30 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net)
2020-12-13 05:13:34 +0100 <ezzieyguywuf> hrm, how do I use optparse-applicative to parse an optional argument? i.e. `myProg -f some.file` versus `myProg`
2020-12-13 05:14:05 +0100Gurkenglas_(~Gurkengla@unaffiliated/gurkenglas) (Read error: Connection reset by peer)
2020-12-13 05:14:28 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 05:15:17 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-13 05:15:50 +0100Kronic(~Kronic___@84.203.98.133) (Read error: Connection reset by peer)
2020-12-13 05:17:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 05:20:37 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net)
2020-12-13 05:21:14 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 05:21:53 +0100 <monochrom> Use "option". In the "Mod OptionFields a" parameter, include "value ..." for the default value to make it optional.
2020-12-13 05:24:12 +0100kupi(uid212005@gateway/web/irccloud.com/x-zcsljpeaozocdwya) (Quit: Connection closed for inactivity)
2020-12-13 05:24:35 +0100nullniverse(~null@unaffiliated/nullniverse)
2020-12-13 05:24:35 +0100nullniverse(~null@unaffiliated/nullniverse) (Max SendQ exceeded)
2020-12-13 05:25:44 +0100matryoshka(~matryoshk@184.75.223.227) (Quit: ZNC 1.8.2 - https://znc.in)
2020-12-13 05:25:53 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 265 seconds)
2020-12-13 05:27:01 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9)
2020-12-13 05:27:05 +0100darjeeling_(~darjeelin@115.215.43.136) (Ping timeout: 260 seconds)
2020-12-13 05:28:23 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
2020-12-13 05:28:56 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 272 seconds)
2020-12-13 05:28:57 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-12-13 05:31:27 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9) (Ping timeout: 260 seconds)
2020-12-13 05:32:47 +0100conal(~conal@64.71.133.70)
2020-12-13 05:36:55 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net) (Remote host closed the connection)
2020-12-13 05:37:24 +0100 <ezzieyguywuf> monochrom: but if I provide any default value, then essentially that default value can never be provided by the user as valid input, right?
2020-12-13 05:38:00 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-13 05:38:24 +0100 <ezzieyguywuf> i.e. "value -1", because sure maybe nobody would even name their file "-1", but the one time someone does and they can't because I have an `if filename == "-1" then doSomethingElse..." somewhere
2020-12-13 05:40:37 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-13 05:40:38 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius)
2020-12-13 05:42:46 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2020-12-13 05:43:34 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9)
2020-12-13 05:44:59 +0100conal(~conal@64.71.133.70)
2020-12-13 05:46:10 +0100 <iqubic> Don't just parse into "-1". Parse into Maybe a. Then you can set the default to Nothing, and use "Just a" for when the user provides a value.
2020-12-13 05:46:25 +0100 <iqubic> This is literally why Maybe exists.
2020-12-13 05:47:11 +0100 <ezzieyguywuf> iqubic: yea, I was trying to do it into Maybe, but I guess I must have borked it up
2020-12-13 05:47:16 +0100 <ezzieyguywuf> :) time to try again
2020-12-13 05:47:37 +0100quarters(~quarters@38-73-246-124.starry-inc.net) (Changing host)
2020-12-13 05:47:37 +0100quarters(~quarters@unaffiliated/quarters)
2020-12-13 05:48:37 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-12-13 05:49:29 +0100Tario(~Tario@201.192.165.173)
2020-12-13 05:50:18 +0100conal(~conal@64.71.133.70)
2020-12-13 05:50:29 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-12-13 05:51:59 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2020-12-13 05:52:14 +0100doct0rhu(~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net)
2020-12-13 05:54:20 +0100 <doct0rhu> Hi, I've a question regarding <> and >>. In some context, for example IO, I can chain several IO actions with >> if I don't care about the result of the previous action
2020-12-13 05:54:52 +0100isd(zenhackmat@gateway/shell/matrix.org/x-hljwevtqkvvirxdh)
2020-12-13 05:55:03 +0100argento(~argent0@168.227.97.29)
2020-12-13 05:55:11 +0100 <doct0rhu> though the result of previous action is not retained, it would still be executed.
2020-12-13 05:55:30 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 05:55:53 +0100 <dsal> <> and >> don't have much to do with each other.
2020-12-13 05:55:58 +0100 <doct0rhu> But I recently come across the case where I tried using >> to chain several `X ()` actions in XMonad. But it turned out only the last one is executed
2020-12-13 05:56:03 +0100 <doct0rhu> I have to use <>
2020-12-13 05:56:40 +0100 <dsal> :t (<>)
2020-12-13 05:56:42 +0100 <lambdabot> Semigroup a => a -> a -> a
2020-12-13 05:56:42 +0100 <dsal> :t (>>)
2020-12-13 05:56:45 +0100 <lambdabot> Monad m => m a -> m b -> m b
2020-12-13 05:57:13 +0100 <doct0rhu> Yes, purely from type theory point of view <> and >> are entirely different. But I've seen in several sources saying that >> is used to chain monadic actions together
2020-12-13 05:57:21 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 05:57:36 +0100 <dsal> Well, sort of.
2020-12-13 05:57:53 +0100 <dsal> It's >>= discarding the result of the left.
2020-12-13 05:57:54 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 05:58:14 +0100drbean(~drbean@TC210-63-209-32.static.apol.com.tw)
2020-12-13 05:58:23 +0100 <doct0rhu> But clearly in some cases, such as the one I had, <> is the correct one but >> doesn't work
2020-12-13 05:58:39 +0100 <dsal> <> is entirely unrelated to monads.
2020-12-13 05:59:07 +0100 <dsal> Without knowing the types you're talking about, it's difficult to even guess what you mean.
2020-12-13 05:59:34 +0100 <doct0rhu> sorry I should say `mappend`
2020-12-13 05:59:43 +0100 <dsal> :t mappend
2020-12-13 05:59:44 +0100 <doct0rhu> I should use `mappend` instead of `>>`
2020-12-13 05:59:45 +0100 <lambdabot> Monoid a => a -> a -> a
2020-12-13 05:59:50 +0100 <dsal> Still not related to monads
2020-12-13 06:00:00 +0100 <doct0rhu> `mappend` is the same as `<>` though
2020-12-13 06:00:07 +0100 <isd> Is there a good way to get the runtime to tell you how often STM transactions are being restarted due to conflicts? I'm having performance problems, and I have a hunch that it may be an issue with contenton between transactions, but I don't know how to measure.
2020-12-13 06:00:17 +0100spod_(~spod@c-24-16-29-179.hsd1.wa.comcast.net)
2020-12-13 06:00:44 +0100 <doct0rhu> :t X
2020-12-13 06:00:46 +0100 <lambdabot> error: Data constructor not in scope: X
2020-12-13 06:01:04 +0100 <doct0rhu> or does the bot only works with Base?
2020-12-13 06:01:36 +0100shenyi(uid216035@gateway/web/irccloud.com/x-rigdbqxfostrvmoh) (Quit: Connection closed for inactivity)
2020-12-13 06:02:05 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 240 seconds)
2020-12-13 06:02:58 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9) (Remote host closed the connection)
2020-12-13 06:03:58 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8) (Quit: Ping timeout (120 seconds))
2020-12-13 06:04:01 +0100 <doct0rhu> newtype X a = X (ReaderT XConf (StateT XState IO) a)
2020-12-13 06:04:31 +0100 <doct0rhu> newtype StateT s m a
2020-12-13 06:04:42 +0100 <doct0rhu> Monad m => Monad (StateT s m)
2020-12-13 06:05:17 +0100 <doct0rhu> so second argument to ReaderT implments Monad
2020-12-13 06:05:21 +0100 <doct0rhu> Monad m => Monad (ReaderT r m)
2020-12-13 06:05:40 +0100 <doct0rhu> so ReaderT XConf (StateT XState IO) implements Monad
2020-12-13 06:06:13 +0100 <doct0rhu> Can I deduce that, when I use >>, it's chaining `ReaderT XConf (StateT XState IO)` but not `a`
2020-12-13 06:06:22 +0100 <doct0rhu> where `a` is actually what I want to chain
2020-12-13 06:06:56 +0100aev_software(~aev@pool-108-5-152-94.nwrknj.fios.verizon.net) (Ping timeout: 272 seconds)
2020-12-13 06:08:08 +0100spod_(~spod@c-24-16-29-179.hsd1.wa.comcast.net) (Quit: Leaving)
2020-12-13 06:10:05 +0100dragestil(~quassel@fsf/member/dragestil) (Ping timeout: 240 seconds)
2020-12-13 06:10:16 +0100darjeeling_(~darjeelin@115.215.43.136)
2020-12-13 06:11:09 +0100 <ezzieyguywuf> hah, whoot I got it.
2020-12-13 06:11:12 +0100 <ezzieyguywuf> i'm such a clutz
2020-12-13 06:14:05 +0100quarters(~quarters@unaffiliated/quarters) (Ping timeout: 240 seconds)
2020-12-13 06:18:08 +0100dmiles(~dmiles@c-98-232-203-165.hsd1.wa.comcast.net)
2020-12-13 06:18:42 +0100SanchayanMaity(~Sanchayan@223.226.34.150)
2020-12-13 06:21:56 +0100jedws(~jedws@121.209.189.201) (Read error: Connection reset by peer)
2020-12-13 06:24:06 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 06:26:45 +0100terrorjack(~terrorjac@static.23.111.201.195.clients.your-server.de) (Remote host closed the connection)
2020-12-13 06:27:27 +0100Saukk(~Saukk@2001:998:ec:954:1c59:9bb5:b94c:3)
2020-12-13 06:29:28 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-13 06:36:25 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:2474:9519:9fb5:8678)
2020-12-13 06:37:38 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 06:39:32 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 06:39:59 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 06:40:03 +0100shutdown_-h_now(~arjan@2001:1c06:2d0b:2312:b4bc:f6c9:c430:776f) (Ping timeout: 258 seconds)
2020-12-13 06:40:04 +0100quarters(~quarters@38-73-246-124.starry-inc.net)
2020-12-13 06:40:11 +0100 <ski> doct0rhu : do you have several actions of type `X a', and you want to combine all the `a' results of them, not just the one from the last action ?
2020-12-13 06:40:11 +0100 <iqubic> Is there an easy way to convert a list of [(a, Maybe b)] -> [(a, b)] by throwing away all the elements where the snd is Nothing?
2020-12-13 06:41:43 +0100notzmv(~user@unaffiliated/zmv) (Remote host closed the connection)
2020-12-13 06:43:30 +0100 <ski> @type \l -> [(x,y) | (x,Just y) <- l]
2020-12-13 06:43:32 +0100 <lambdabot> [(a, Maybe b)] -> [(a, b)]
2020-12-13 06:43:42 +0100sh9(~sh9@softbank060116136158.bbtec.net)
2020-12-13 06:45:10 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 256 seconds)
2020-12-13 06:46:28 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 06:46:34 +0100 <ski> @type catMaybes . map (uncurry (fmap . (,))) :: [(a,Maybe b)] -> [(a,b)]
2020-12-13 06:46:36 +0100 <lambdabot> [(a, Maybe b)] -> [(a, b)]
2020-12-13 06:46:36 +0100 <ski> @type mapMaybe (uncurry (fmap . (,))) :: [(a,Maybe b)] -> [(a,b)]
2020-12-13 06:46:38 +0100 <lambdabot> [(a, Maybe b)] -> [(a, b)]
2020-12-13 06:46:47 +0100shutdown_-h_now(~arjan@2001:1c06:2d0b:2312:fd44:2741:1ec1:624c)
2020-12-13 06:47:20 +0100 <int-e> :t catMaybes . map sequenceA
2020-12-13 06:47:22 +0100 <lambdabot> Traversable t => [t (Maybe a)] -> [t a]
2020-12-13 06:47:22 +0100 <ski> (unfortunately there's no `Traversable (w,)', otherwise one could use `mapMaybe sequence')
2020-12-13 06:47:46 +0100 <int-e> instance Traversable ((,) a) -- Defined in ‘Data.Traversable’
2020-12-13 06:48:14 +0100 <ski> oh, nice :)
2020-12-13 06:49:05 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 06:49:15 +0100 <int-e> :t mapMaybe traverse
2020-12-13 06:49:18 +0100 <lambdabot> error:
2020-12-13 06:49:18 +0100 <lambdabot> • Couldn't match type ‘t0 a -> f (t0 b)’ with ‘Maybe b1’
2020-12-13 06:49:18 +0100 <lambdabot> Expected type: (a -> f b) -> Maybe b1
2020-12-13 06:49:21 +0100 <int-e> err
2020-12-13 06:49:22 +0100 <ski> (for some reason, i thought it was missing, due to `WriterT' having the wrong ordering)
2020-12-13 06:49:25 +0100 <int-e> :t mapMaybe sequenceA
2020-12-13 06:49:27 +0100 <lambdabot> Traversable t => [t (Maybe a)] -> [t a]
2020-12-13 06:49:46 +0100 <int-e> Somehow I didn't know about mapMaybe.
2020-12-13 06:50:05 +0100 <ski> @type mapMaybe sequenceA :: [(a,Maybe b)] -> [(a,b)]
2020-12-13 06:50:07 +0100 <lambdabot> [(a, Maybe b)] -> [(a, b)]
2020-12-13 06:52:53 +0100 <heatsink> Is there a way to make shake use fewer parallel processes? It's not my shake program
2020-12-13 06:54:11 +0100polyrain(~polyrain@2001:8003:e501:6901:344b:e1da:e2ed:956)
2020-12-13 06:54:42 +0100 <heatsink> I was looking in the wrong place. It was stack installing prerequisites
2020-12-13 06:57:01 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 06:59:35 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9)
2020-12-13 07:00:39 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 07:01:10 +0100dmiles(~dmiles@c-98-232-203-165.hsd1.wa.comcast.net) (Remote host closed the connection)
2020-12-13 07:01:29 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2020-12-13 07:02:34 +0100dmiles(~dmiles@c-98-232-203-165.hsd1.wa.comcast.net)
2020-12-13 07:03:25 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 07:03:40 +0100pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 246 seconds)
2020-12-13 07:04:12 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9) (Ping timeout: 258 seconds)
2020-12-13 07:05:10 +0100conal(~conal@64.71.133.70)
2020-12-13 07:05:27 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 265 seconds)
2020-12-13 07:06:59 +0100pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net)
2020-12-13 07:07:16 +0100sgibber2018(~arch-gibb@208.85.237.137) (Quit: WeeChat 2.9)
2020-12-13 07:12:59 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2020-12-13 07:13:19 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 07:15:04 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
2020-12-13 07:17:16 +0100abhixec(~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2020-12-13 07:18:26 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-13 07:19:23 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 07:20:01 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 264 seconds)
2020-12-13 07:20:04 +0100conal(~conal@64.71.133.70)
2020-12-13 07:20:20 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-12-13 07:20:35 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 07:22:44 +0100Cthalupa(~cthulhu@47.186.47.75) (Ping timeout: 256 seconds)
2020-12-13 07:22:53 +0100Saukk(~Saukk@2001:998:ec:954:1c59:9bb5:b94c:3) (Remote host closed the connection)
2020-12-13 07:23:26 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31) (Ping timeout: 264 seconds)
2020-12-13 07:24:45 +0100Cthalupa(~cthulhu@47.186.47.75)
2020-12-13 07:25:45 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 07:25:55 +0100shenyi(uid216035@gateway/web/irccloud.com/x-jphgcsxjzhmtvsqg)
2020-12-13 07:26:56 +0100jlamothe(~jlamothe@198.251.55.207) (Ping timeout: 240 seconds)
2020-12-13 07:28:11 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31)
2020-12-13 07:32:27 +0100elliott_(~elliott@pool-108-45-178-3.washdc.fios.verizon.net) (Quit: WeeChat 2.9)
2020-12-13 07:33:15 +0100elliott_(~elliott@pool-108-45-178-3.washdc.fios.verizon.net)
2020-12-13 07:34:52 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31) (Ping timeout: 258 seconds)
2020-12-13 07:34:58 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-13 07:38:12 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2020-12-13 07:38:24 +0100jedws(~jedws@121.209.189.201)
2020-12-13 07:38:33 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31)
2020-12-13 07:39:44 +0100noecho(~noecho@2a01:4f8:1c0c:80ee::4223) (Quit: ZNC - http://znc.in)
2020-12-13 07:40:17 +0100noecho(~noecho@2a01:4f8:1c0c:80ee::4223)
2020-12-13 07:41:10 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9)
2020-12-13 07:43:43 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
2020-12-13 07:44:16 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 256 seconds)
2020-12-13 07:45:38 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9) (Ping timeout: 264 seconds)
2020-12-13 07:50:17 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:2474:9519:9fb5:8678) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 07:51:27 +0100thunderrd(~thunderrd@183.182.111.131) (Quit: If it wasn't written down it didn't happen...)
2020-12-13 07:51:53 +0100da39a3ee5e6b4b0d(~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th)
2020-12-13 07:53:26 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31) (Ping timeout: 264 seconds)
2020-12-13 07:54:09 +0100Foritus(~buggery@cpc91316-watf11-2-0-cust68.15-2.cable.virginm.net) (Quit: ლ(ಠ益ಠლ) .:. <Ashley> my porn is hidden in a folder called "BBC Micro Emulator")
2020-12-13 07:56:10 +0100Foritus(~buggery@cpc91316-watf11-2-0-cust68.15-2.cable.virginm.net)
2020-12-13 07:56:44 +0100Cthalupa(~cthulhu@47.186.47.75) (Ping timeout: 256 seconds)
2020-12-13 07:57:16 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-12-13 07:59:38 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
2020-12-13 07:59:42 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31)
2020-12-13 08:00:42 +0100Cthalupa(~cthulhu@47.186.47.75)
2020-12-13 08:06:55 +0100quarters(~quarters@38-73-246-124.starry-inc.net) (Changing host)
2020-12-13 08:06:55 +0100quarters(~quarters@unaffiliated/quarters)
2020-12-13 08:07:56 +0100HarveyPwca(~HarveyPwc@c-98-220-98-201.hsd1.il.comcast.net) (Quit: Leaving)
2020-12-13 08:09:42 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 08:11:52 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl)
2020-12-13 08:12:58 +0100tput(~tput@S0106a84e3fe54613.ed.shawcable.net) (Ping timeout: 246 seconds)
2020-12-13 08:14:42 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-13 08:15:30 +0100elliott_(~elliott@pool-108-45-178-3.washdc.fios.verizon.net) (Quit: WeeChat 2.9)
2020-12-13 08:16:32 +0100elliott_(~elliott@pool-108-45-178-3.washdc.fios.verizon.net)
2020-12-13 08:17:24 +0100acidjnk_new(~acidjnk@p200300d0c719ff439996fb92bd8d62ee.dip0.t-ipconnect.de)
2020-12-13 08:17:34 +0100 <doct0rhu> @ski I've multiple `X a`, and I want them to be executed consecutively. I don't need any of their results because I only want their side effects.
2020-12-13 08:17:34 +0100 <lambdabot> Maybe you meant: wiki src ask
2020-12-13 08:18:03 +0100 <doct0rhu> ski, I've multiple `X a`, and I want them to be executed consecutively. I don't need any of their results because I only want their side effects.
2020-12-13 08:19:08 +0100 <doct0rhu> But with `foo >> bar` only the last one is executed. I have to use `mappend foo bar` or `foo <> bar`
2020-12-13 08:19:53 +0100 <xerox_> :t mapMaybe
2020-12-13 08:19:55 +0100 <lambdabot> (a -> Maybe b) -> [a] -> [b]
2020-12-13 08:20:00 +0100 <xerox_> @index mapMaybe
2020-12-13 08:20:01 +0100 <lambdabot> Data.Maybe, Data.IntMap.Strict, Data.IntMap.Lazy, Data.IntMap, Data.Map.Strict, Data.Map.Lazy, Data.Map
2020-12-13 08:20:04 +0100 <xerox_> oh neat
2020-12-13 08:22:27 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection)
2020-12-13 08:23:29 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer)
2020-12-13 08:24:10 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9)
2020-12-13 08:24:13 +0100elliott_(~elliott@pool-108-45-178-3.washdc.fios.verizon.net) (Ping timeout: 264 seconds)
2020-12-13 08:25:21 +0100sakirious(~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
2020-12-13 08:26:44 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-13 08:28:32 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9) (Ping timeout: 258 seconds)
2020-12-13 08:31:58 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 265 seconds)
2020-12-13 08:36:40 +0100Jajik(xchlup2@gateway/shell/fi.muni.cz/x-bbqnixzbgkvhiykp) (Quit: The Lounge - https://thelounge.chat)
2020-12-13 08:36:41 +0100xsarnik0(xsarnik@gateway/shell/fi.muni.cz/x-ddaekukwitkncfss) (Quit: The Lounge - https://thelounge.chat)
2020-12-13 08:39:17 +0100Jajik(xchlup2@gateway/shell/fi.muni.cz/x-glzailaxclrtbxni)
2020-12-13 08:40:37 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 08:41:27 +0100xsarnik0(xsarnik@gateway/shell/fi.muni.cz/x-wrudlzggfhmxxjno)
2020-12-13 08:42:43 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8)
2020-12-13 08:43:16 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 08:45:36 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 240 seconds)
2020-12-13 08:45:45 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 240 seconds)
2020-12-13 08:47:19 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 258 seconds)
2020-12-13 08:52:58 +0100da39a3ee5e6b4b0d(~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 08:53:56 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2020-12-13 08:53:58 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 08:54:18 +0100da39a3ee5e6b4b0d(~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th)
2020-12-13 08:54:33 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 08:59:09 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 260 seconds)
2020-12-13 09:03:33 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 09:05:15 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
2020-12-13 09:05:19 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-12-13 09:06:12 +0100chris8142(~chris8142@srvnet-01-071.ikbnet.co.at)
2020-12-13 09:12:38 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-12-13 09:13:29 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2020-12-13 09:16:28 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 09:17:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2020-12-13 09:21:42 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca)
2020-12-13 09:22:25 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 240 seconds)
2020-12-13 09:22:45 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 240 seconds)
2020-12-13 09:22:45 +0100quarters(~quarters@unaffiliated/quarters) (Ping timeout: 240 seconds)
2020-12-13 09:22:53 +0100 <ski> doct0rhu : how did you make `X' a monad ?
2020-12-13 09:23:35 +0100chris8142(~chris8142@srvnet-01-071.ikbnet.co.at) (Quit: WeeChat 3.0)
2020-12-13 09:23:58 +0100 <iqubic> ski: The 'X' monad is from the window manager XMonad, it's used in the code for that, and you can also use it in your configuration too.
2020-12-13 09:24:05 +0100dnlkrgr(~dnlkrgr@HSI-KBW-46-223-1-192.hsi.kabel-badenwuerttemberg.de)
2020-12-13 09:24:38 +0100Lord_of_Life(~Lord@46.217.220.245) (Changing host)
2020-12-13 09:24:38 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362)
2020-12-13 09:24:59 +0100christo(~chris@81.96.113.213)
2020-12-13 09:25:36 +0100jespada(~jespada@90.254.245.49)
2020-12-13 09:25:59 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9)
2020-12-13 09:27:16 +0100Aleyna_(~Aleyna@4e69b241.skybroadband.com) (Ping timeout: 240 seconds)
2020-12-13 09:29:29 +0100xsperry(~as@unaffiliated/xsperry)
2020-12-13 09:30:37 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9) (Ping timeout: 260 seconds)
2020-12-13 09:33:55 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 09:35:11 +0100 <ski> then i highly doubt "But with `foo >> bar` only the last one is executed. I have to use `mappend foo bar` or `foo <> bar`"
2020-12-13 09:35:47 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 09:36:26 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 09:37:53 +0100Aleyna(~Aleyna@4e69b241.skybroadband.com)
2020-12-13 09:40:56 +0100Cthalupa(~cthulhu@47.186.47.75) (Ping timeout: 240 seconds)
2020-12-13 09:41:01 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 264 seconds)
2020-12-13 09:44:21 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 09:44:21 +0100Cthalupa(~cthulhu@47.186.47.75)
2020-12-13 09:46:56 +0100mozzarella(~sam@unaffiliated/sam113101) (Ping timeout: 240 seconds)
2020-12-13 09:49:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-12-13 09:51:40 +0100sgibber2018(~arch-gibb@208.85.237.137)
2020-12-13 09:52:08 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 09:54:09 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr)
2020-12-13 09:54:29 +0100 <doct0rhu> Try yourself
2020-12-13 09:55:40 +0100 <doct0rhu> `newtype X a = X (ReaderT XConf (StateT XState IO) a)`
2020-12-13 09:57:02 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 265 seconds)
2020-12-13 09:57:33 +0100 <ski> that does not make `X' an instance of `Monad'
2020-12-13 09:57:52 +0100 <ski> are you omitting some `deriving (...Monad..)' declaration or some `instance Monad X where ...' declaration ?
2020-12-13 09:58:27 +0100taurux(~taurux@net-188-152-78-21.cust.vodafonedsl.it) (Quit: ZNC 1.7.5 - https://znc.in)
2020-12-13 09:59:35 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-qeakgiprhskzevyk) (Quit: Connection closed for inactivity)
2020-12-13 09:59:45 +0100 <ski> % data XConf = FakeXConf
2020-12-13 09:59:45 +0100 <yahb> ski:
2020-12-13 09:59:48 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0)
2020-12-13 09:59:52 +0100 <ski> % data XState = FakeXState
2020-12-13 09:59:53 +0100 <yahb> ski:
2020-12-13 10:00:06 +0100 <ski> % newtype X a = MkX (ReaderT XConf (StateT XState IO) a)
2020-12-13 10:00:07 +0100 <yahb> ski:
2020-12-13 10:00:24 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
2020-12-13 10:00:48 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362)
2020-12-13 10:00:51 +0100brodie_(~brodie@207.53.253.137)
2020-12-13 10:00:53 +0100 <ski> % :t let foo :: X a -> X b -> X b; foo x0 x1 = x0 >> x1 in foo
2020-12-13 10:00:54 +0100 <yahb> ski: ; <interactive>:1:43: error:; * No instance for (Monad X) arising from a use of `>>'; * In the expression: x0 >> x1; In an equation for `foo': foo x0 x1 = x0 >> x1; In the expression:; let; foo :: X a -> X b -> X b; foo x0 x1 = x0 >> x1; in foo
2020-12-13 10:00:58 +0100brodie_brodie
2020-12-13 10:01:09 +0100 <ski> doct0rhu : i just tried it for myself, did not work
2020-12-13 10:02:05 +0100 <doct0rhu> just hoogle
2020-12-13 10:02:07 +0100hth313(~user@node-1w7jr9qio22jw89j5t7q3mryw.ipv6.telus.net) (Ping timeout: 260 seconds)
2020-12-13 10:02:23 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
2020-12-13 10:03:46 +0100dragestil(~quassel@fsf/member/dragestil)
2020-12-13 10:04:30 +0100 <ski> if you're talking about trying the `X' defined in `xmonad', at <https://hackage.haskell.org/package/xmonad-0.15/docs/src/XMonad.Core.html#X>, rather than the `newtype X a = MkX (ReaderT XConf (StateT XState IO) a)' you suggested above (not including any `deriving' or `instance' clause or declaration), then it does derive `Monad' using `GeneralizedNewtypeDeriving', and therefore `x0 >> x1' will combine the
2020-12-13 10:04:36 +0100 <ski> effects of both `x0' and `x1'
2020-12-13 10:07:00 +0100 <ski> so .. my guess then is that there's most probably some other issue involved. perhaps you could show the code in question ?
2020-12-13 10:07:42 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9)
2020-12-13 10:08:22 +0100wonko7(~wonko7@2a01:e35:2ffb:7040:14a1:46f4:68f7:2133)
2020-12-13 10:08:33 +0100 <doct0rhu> `newtype X a = X (ReaderT XConf (StateT XState IO) a)` is the definition of X
2020-12-13 10:08:35 +0100da39a3ee5e6b4b0d(~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 10:08:58 +0100 <ski> the complete definition includes the next line, `deriving (Functor, Monad, MonadFail, MonadIO, MonadState XState, MonadReader XConf, Typeable)'
2020-12-13 10:09:07 +0100 <doct0rhu> yes so you know that
2020-12-13 10:09:12 +0100 <doct0rhu> what's the point of asking me
2020-12-13 10:09:16 +0100da39a3ee5e6b4b0d(~da39a3ee5@171.5.29.209)
2020-12-13 10:09:31 +0100 <ski> i didn't know you were talking about the `X' of `XMonad', initially
2020-12-13 10:09:50 +0100 <doct0rhu> if you just hoogled it's clear
2020-12-13 10:10:06 +0100 <doct0rhu> the question is not XMonad specific
2020-12-13 10:10:14 +0100 <doct0rhu> the question is why >> doesn't work and <> works
2020-12-13 10:11:14 +0100 <ski> i don't know (a) what you tried; (b) what effect you expected; (c) what effect you observed instead
2020-12-13 10:11:32 +0100 <doct0rhu> I described
2020-12-13 10:12:16 +0100 <ski> (so i don't know what you mean by "doesn't work" and "work", apart from the rather general/vague "though the result of previous action is not retained, it would still be executed" (and similar statements))
2020-12-13 10:12:31 +0100 <ski> it's hard to guess at what might be wrong, without more specific code to look at
2020-12-13 10:12:37 +0100 <doct0rhu> I described exactly
2020-12-13 10:12:37 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:8d71:c22e:142f:74d9) (Ping timeout: 260 seconds)
2020-12-13 10:13:00 +0100 <doct0rhu> > But I recently come across the case where I tried using >> to chain several `X ()` actions in XMonad. But it turned out only the last one is executed
2020-12-13 10:13:05 +0100 <lambdabot> <hint>:1:37: error:
2020-12-13 10:13:05 +0100 <lambdabot> <hint>:1:37: error: parse error on input ‘where’
2020-12-13 10:13:06 +0100 <ski> which actions, exactly, did you pass to `>>' respectively to `<>' ?
2020-12-13 10:13:24 +0100 <ski> "I tried using >> to chain several `X ()` actions in XMonad" -- which actions, specifically ?
2020-12-13 10:13:28 +0100 <doct0rhu> does that really matter which action
2020-12-13 10:13:32 +0100 <doct0rhu> only the type matter
2020-12-13 10:13:56 +0100 <doct0rhu> if some x of X works but not the other
2020-12-13 10:14:03 +0100 <doct0rhu> that's a serious bug in type system
2020-12-13 10:14:09 +0100catchme(uid355354@gateway/web/irccloud.com/x-mmxzzojjfcqrnkrg)
2020-12-13 10:14:24 +0100drbean(~drbean@TC210-63-209-32.static.apol.com.tw) (Ping timeout: 260 seconds)
2020-12-13 10:15:06 +0100 <doct0rhu> If I want to ask about XMonad question I've already asked in that way
2020-12-13 10:15:07 +0100da39a3ee5e6b4b0d(~da39a3ee5@171.5.29.209) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 10:15:15 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 10:15:16 +0100 <doct0rhu> the question is not XMonad specific
2020-12-13 10:16:38 +0100 <ski> the `XMonad'-non-specific answer is that both `x0' and `x1' are executed, when `x0 >> x1' are executed (assuming `x0' doesn't abort execution (e.g. via an exception), or that some other thread terminates the thread executing `x0 >> x1', or something like that)
2020-12-13 10:17:02 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 10:17:27 +0100 <ski> since that's not what you're observing, i don't know what else to do, than dig deeper into more details of what you tried, what you expected, and what you observed
2020-12-13 10:17:38 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 10:17:48 +0100 <doct0rhu> I don't think that's what I'm asking
2020-12-13 10:19:33 +0100 <whataday> (sort . <>) [1..5] [3..7] how to fix it?
2020-12-13 10:20:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 10:20:22 +0100 <xerox_> > ((sort .) . (<>)) [1..5] [3..7]
2020-12-13 10:20:23 +0100 <boxscape> @pl \xs ys -> sort (xs <> ys)
2020-12-13 10:20:24 +0100 <lambdabot> (sort .) . (<>)
2020-12-13 10:20:26 +0100 <lambdabot> [1,2,3,3,4,4,5,5,6,7]
2020-12-13 10:20:32 +0100 <ski> something is clearly mismatched between what you expected/wanted, and what you observed. i can only attempt to debug the issue in the same way i would do it, if it occured to me : by digging deeper into details and expectations
2020-12-13 10:21:46 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 246 seconds)
2020-12-13 10:21:57 +0100 <doct0rhu> I'm not trying to debug anything
2020-12-13 10:22:31 +0100 <doct0rhu> my question is purely about the theory not about the specific behaviour of a library
2020-12-13 10:23:20 +0100 <ski> you're not attempting to resolve your question regarding the difference you observed regarding `<>' and `>>' ?
2020-12-13 10:23:55 +0100 <doct0rhu> holy
2020-12-13 10:23:58 +0100 <ski> in the case of `X', the relevant type signatures are `(>>) :: X a -> X b -> X b' vs. `(<>) :: Monoid a => X a -> X a -> X a'
2020-12-13 10:23:58 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-12-13 10:24:20 +0100 <whataday> what is (sort .)?
2020-12-13 10:25:04 +0100 <xerox_> (f . g) = \x -> f (g x) so (sort .) is that with 'f' filled (sort .) = \g x -> sort (g x)
2020-12-13 10:25:09 +0100 <hyiltiz> I am programmatically creating hundreds of latex files from a template, and calling builder on them. Currently, it sequentially runs pdflatex, slowly building and then writing the PDFs on disk. Should I just create a hundred thread each of which tries to grab CPU cycles and build it, or just concurrently submit one per CPU worker so it essentially builds 4 at a time? Not sure which one would be more efficient/fast.
2020-12-13 10:25:32 +0100gac410(~gac410@178.162.204.214) (Ping timeout: 256 seconds)
2020-12-13 10:25:40 +0100 <ski> both `x0 >> x1' and `x0 <> x1', when executed, will execute `x0' and `x1' (in the absence of any abortion of execution as mentioned above). `x0 >> x1' will ignore the result (but not the effect) of `x0', giving back the result of `x1'. `x0 <> x1' will combine the result of `x0' with that of `x1' (using `<>' on those individual results)
2020-12-13 10:26:03 +0100 <hyiltiz> tex -> pdf is a bit CPU intensive but writing PDF into disk is also IO intensive, so not sure what would be the best strategy to parallelize/make it concurrent
2020-12-13 10:26:31 +0100 <hyiltiz> all of the tex -> pdf computation is fully independent with no sharing
2020-12-13 10:26:44 +0100 <ski> doct0rhu : the theory answer is that `x0 >> x1' ought to execute both `x0' and `x1'. if that's not happening in your experience, then something is amiss between the theory, and the practical application of it
2020-12-13 10:27:51 +0100 <doct0rhu> `X a <> X b` == `X (a <> b)`
2020-12-13 10:28:14 +0100 <ski> yes
2020-12-13 10:30:10 +0100 <doct0rhu> `X a >> X b` ?= `X (a >> b)`
2020-12-13 10:31:15 +0100 <ski> almost. (yes, to what i think you meant to express)
2020-12-13 10:31:42 +0100 <doct0rhu> In the definition, `newtype X a = X (ReaderT XConf (StateT XState IO) a)`, `StateT XState IO` is a monad, `ReaderT XConf (StateT XState IO)` is also a monad
2020-12-13 10:32:49 +0100 <ski> X a >> X b = X (liftM2 (liftM2 (>>)) a b)
2020-12-13 10:32:54 +0100 <doct0rhu> `ReaderT`'s `(>>)` is same as `(*>)`, `u *> v = ReaderT $ \ r -> runReaderT u r *> runReaderT v r`
2020-12-13 10:34:31 +0100 <doct0rhu> `newtype ReaderT r m a = ReaderT { runReaderT :: r -> m a }`
2020-12-13 10:35:31 +0100 <ski> = X (ReaderT (\xConf -> StateT (\xState0 -> do xState1 <- execStateT (runReaderT a xConf) xState0; runStateT (runReaderT b xConf) xState1)))
2020-12-13 10:35:58 +0100 <ski> doct0rhu : yes
2020-12-13 10:36:03 +0100 <whataday> but <> apply on two lists, sort aply on one, (sort .) . (<>) is ok?
2020-12-13 10:37:07 +0100pavonia(~user@unaffiliated/siracusa) (Quit: Bye!)
2020-12-13 10:37:25 +0100 <whataday> does (sort .) expect an unary function and an parameter?
2020-12-13 10:37:49 +0100 <ski> @type (sort .)
2020-12-13 10:37:51 +0100 <lambdabot> Ord a1 => (a2 -> [a1]) -> a2 -> [a1]
2020-12-13 10:37:54 +0100brodie(~brodie@207.53.253.137) (Quit: brodie)
2020-12-13 10:38:08 +0100 <ski> @type \f -> (sort .) . f
2020-12-13 10:38:11 +0100 <lambdabot> Ord a1 => (a2 -> a3 -> [a1]) -> a2 -> a3 -> [a1]
2020-12-13 10:38:19 +0100 <ski> @type (sort .) . (<>)
2020-12-13 10:38:21 +0100 <lambdabot> Ord a => [a] -> [a] -> [a]
2020-12-13 10:38:27 +0100brodie(~brodie@207.53.253.137)
2020-12-13 10:38:35 +0100 <ski> @type (null .) . (<>)
2020-12-13 10:38:38 +0100 <lambdabot> (Foldable t, Semigroup (t a)) => t a -> t a -> Bool
2020-12-13 10:39:05 +0100 <ski> @type (map isSpace .) . (<>)
2020-12-13 10:39:09 +0100 <lambdabot> [Char] -> [Char] -> [Bool]
2020-12-13 10:39:45 +0100 <ski> `(sort .) . (<>)' will, curriedly, accept two lists, combine them using `(<>)', then `sort' the result
2020-12-13 10:39:53 +0100Hexxeh(~Hexxeh@2.58.47.203)
2020-12-13 10:40:30 +0100 <ski> `h = (f .) . g' is the same as `h x y = f (g x y)'. so `h = (sort .) . (<>)' is the same as `h xs ys = sort (xs <> ys)'
2020-12-13 10:41:51 +0100 <ski> (if you care about it, i could show how to systematically derive `h = (f .) . g'/`h = (sort .) . (<>)', from `h x y = f (g x y)'/`h xs ys = sort (xs <> ys)' ..)
2020-12-13 10:42:14 +0100superstar64(6ccefa7c@108-206-250-124.lightspeed.miamfl.sbcglobal.net)
2020-12-13 10:43:38 +0100gentauro_(~gentauro@185.107.12.141)
2020-12-13 10:44:36 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-13 10:46:25 +0100gentauro(~gentauro@unaffiliated/gentauro) (Ping timeout: 264 seconds)
2020-12-13 10:50:36 +0100SomeoneSerge(~someone-s@broadband-178-140-231-18.ip.moscow.rt.ru) (Ping timeout: 240 seconds)
2020-12-13 10:51:48 +0100rprije(~rprije@14-201-170-17.tpgi.com.au) (Remote host closed the connection)
2020-12-13 10:52:07 +0100rprije(~rprije@14-201-170-17.tpgi.com.au)
2020-12-13 10:53:45 +0100 <superstar64> what's causing my syntax error here? https://gist.github.com/Superstar64/1913d4f016d878d2893f0fbdd1313812
2020-12-13 10:53:59 +0100 <superstar64> ghc's message isn't that helpful source/Main.hs:27:25: error: Unexpected do block in function application:
2020-12-13 10:54:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2020-12-13 10:57:56 +0100gentauro_(~gentauro@185.107.12.141) (Ping timeout: 265 seconds)
2020-12-13 10:59:11 +0100 <int-e> superstar64: does the code that ghc prints match the code you pasted? a self-contained example would help, or at least the full error message
2020-12-13 10:59:32 +0100 <int-e> but 25 is in the middle of the 'do'
2020-12-13 10:59:52 +0100 <superstar64> ok i updated it with the error message
2020-12-13 10:59:53 +0100 <int-e> So something seems off. Maybe tabs?
2020-12-13 11:00:23 +0100 <superstar64> i'm not using tabs
2020-12-13 11:00:39 +0100 <int-e> oh I'm miscounting, my bad
2020-12-13 11:01:29 +0100 <superstar64> wait, nvm i fixed it
2020-12-13 11:01:42 +0100 <superstar64> i forgot to wrap the second type annotation in parens
2020-12-13 11:02:45 +0100 <ski> let (Right (κ,_)) = runCore (typeCheck σ :: Core Kind) (CoreState Map.empty Map.empty)
2020-12-13 11:02:53 +0100 <boxscape> looking forward to visible type application so we can replace inline type annotations with a function, like Idris has
2020-12-13 11:03:33 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 11:04:12 +0100 <ski> like `(:: T) (...)' or `id @T (...)' ?
2020-12-13 11:04:26 +0100 <boxscape> Idris has `the Int 5`
2020-12-13 11:04:52 +0100 <boxscape> (or at least it did when I last used it 5 years ago)
2020-12-13 11:05:16 +0100tdammers(~tdammers@unaffiliated/tdammers) (Ping timeout: 256 seconds)
2020-12-13 11:05:32 +0100 <superstar64> `Map.!: given key is not an element in the map` any way to debug this?
2020-12-13 11:05:36 +0100 <boxscape> you could do it with a visibility override like your id example already, of course
2020-12-13 11:05:44 +0100 <boxscape> it's just a bit nicer without the @
2020-12-13 11:05:51 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-12-13 11:06:16 +0100dmiles(~dmiles@c-98-232-203-165.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
2020-12-13 11:06:55 +0100 <int-e> superstar64: as ski said, you need parentheses for the :: Core Kind
2020-12-13 11:07:03 +0100 <int-e> And the resulting error is awful.
2020-12-13 11:07:07 +0100brodie(~brodie@207.53.253.137) (Quit: brodie)
2020-12-13 11:07:09 +0100 <superstar64> i already mentioned i fixed it
2020-12-13 11:07:29 +0100 <boxscape> superstar64 surround any calls of Map.! with trace that prints the Map and the key you're trying to get?
2020-12-13 11:07:29 +0100dmiles(~dmiles@c-98-232-203-165.hsd1.wa.comcast.net)
2020-12-13 11:07:44 +0100 <superstar64> when will ghc support stacktraces?
2020-12-13 11:07:46 +0100brodie(~brodie@207.53.253.137)
2020-12-13 11:08:00 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 258 seconds)
2020-12-13 11:08:17 +0100 <boxscape> um I think it does but I'm not very well versed in them
2020-12-13 11:08:58 +0100 <boxscape> you might have to compile with a specific flag or something to get them to show up
2020-12-13 11:12:08 +0100doct0rhu(~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net) (Ping timeout: 260 seconds)
2020-12-13 11:16:33 +0100fendor(~fendor@91.141.1.222.wireless.dyn.drei.com)
2020-12-13 11:17:22 +0100brodie(~brodie@207.53.253.137) (Quit: brodie)
2020-12-13 11:17:50 +0100Varis(~Tadas@unaffiliated/varis)
2020-12-13 11:18:43 +0100gentauro(~gentauro@unaffiliated/gentauro)
2020-12-13 11:18:58 +0100brodie(~brodie@207.53.253.137)
2020-12-13 11:21:50 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 11:23:56 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net)
2020-12-13 11:27:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2020-12-13 11:28:25 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 264 seconds)
2020-12-13 11:28:43 +0100brodie(~brodie@207.53.253.137) (Quit: brodie)
2020-12-13 11:29:38 +0100jedws(~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 11:30:02 +0100 <ski> <https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#hascallstack>,<https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#stack-traces-in-ghci>,<https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#the-ghci-debugger>,<https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/debug-info.html#requesting-a-stack…>
2020-12-13 11:30:47 +0100kuribas(~user@ptr-25vy0iac96ewj3pswoy.18120a2.ip6.access.telenet.be)
2020-12-13 11:31:24 +0100Hexxeh(~Hexxeh@2.58.47.203) (Ping timeout: 260 seconds)
2020-12-13 11:31:40 +0100da39a3ee5e6b4b0d(~da39a3ee5@171.5.29.209)
2020-12-13 11:31:40 +0100 <kuribas> Let's say If I have a type SomeApp which is an applicative, but which makes a Monad when I add a function
2020-12-13 11:32:00 +0100 <kuribas> pressed enter to soon...
2020-12-13 11:32:01 +0100tdammers(~tdammers@unaffiliated/tdammers)
2020-12-13 11:32:45 +0100 <kuribas> Let's say I have a type SomeApp which is an applicative, and makes a Monad when I add another function. So data SomeMonad = SomeMonad SomeApp SomeFun.
2020-12-13 11:32:52 +0100brodie(~brodie@207.53.253.137)
2020-12-13 11:33:23 +0100 <kuribas> Is there a way to make a monad instance without including SomeFun for every value of SomeMonad?
2020-12-13 11:33:37 +0100 <kuribas> SomeFun is always the same function
2020-12-13 11:33:54 +0100 <ski> does `SomeFun' depend on the result type ?
2020-12-13 11:34:28 +0100 <kuribas> it doesn't
2020-12-13 11:35:13 +0100 <kuribas> for example: data PartialData m a = PartialData (Query -> Query) (ResultSet -> a)
2020-12-13 11:35:19 +0100 <ski> could you just do `newtype SomeMonad a = MkSomeMonad (SomeApp a)', and reference your function of type `SomeFun' directly in the `instance Monad SomeMonad where ...' ?
2020-12-13 11:35:19 +0100 <kuribas> which formas an applicative
2020-12-13 11:36:03 +0100 <ski> (where did `m' go ?)
2020-12-13 11:36:18 +0100 <kuribas> ah right, I don't need m here
2020-12-13 11:36:38 +0100 <kuribas> and type QueryRunner m = Query -> m ResultSet
2020-12-13 11:36:44 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 11:37:19 +0100 <kuribas> ski: I could, but I want it to be generic
2020-12-13 11:37:21 +0100kish`(~oracle@unaffiliated/oracle)
2020-12-13 11:38:29 +0100 <ski> runPartialData :: Monad m => QueryRunner m -> PartialData a -> Query -> m a -- ?
2020-12-13 11:38:42 +0100 <ski> generic, in which sense ?
2020-12-13 11:39:05 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection)
2020-12-13 11:39:42 +0100 <kuribas> for example making Query and ResultSet a type variable
2020-12-13 11:39:43 +0100Unhammer(~Unhammer@gateway/tor-sasl/unhammer)
2020-12-13 11:41:28 +0100 <kuribas> (the context is that I am trying to make a dataloader for graphql)
2020-12-13 11:41:35 +0100 <ski> i don't see why you feel like you have to "including SomeFun for every value of SomeMonad" in the first place
2020-12-13 11:42:08 +0100hiroaki(~hiroaki@2a02:908:4b1b:20a0::77a4)
2020-12-13 11:43:01 +0100zar(~zar@fw1.ciirc.cvut.cz)
2020-12-13 11:44:02 +0100 <kuribas> how can I define the monad instance otherwise?
2020-12-13 11:44:59 +0100 <ski> if you have a global `mySpecificSomeFun :: Query -> Query', then just refer to it in the `instance Monad PartialData where ...' declaration, if that's what you want ?
2020-12-13 11:45:29 +0100 <ski> (assuming the monad laws will be upheld still)
2020-12-13 11:45:47 +0100 <kuribas> ski: ah no, it's not global
2020-12-13 11:45:59 +0100 <ski> then where does it come from ?
2020-12-13 11:46:10 +0100 <kuribas> ski: it should be defined by the user
2020-12-13 11:46:23 +0100 <ski> so it's not always the same function ?
2020-12-13 11:46:35 +0100 <kuribas> no
2020-12-13 11:46:58 +0100 <kuribas> maybe Class QueryRunner query resultSet m | query -> resultSet
2020-12-13 11:47:15 +0100 <ski> then i misunderstood what you meant, when you said "SomeFun is always the same function". perhaps you meant, for the extent of a single invocation of `runPartialData'
2020-12-13 11:47:22 +0100tfk(~tfk@197.206.206.247)
2020-12-13 11:47:27 +0100SteveMcIntyre(~SteveMcIn@195.140.213.38)
2020-12-13 11:47:27 +0100 <kuribas> right, that's what I meant
2020-12-13 11:47:52 +0100 <kuribas> well, it should be the same function for the same query and resultSet type (see my class above)
2020-12-13 11:48:07 +0100 <ski> could you use `newtype PartialData a = MkPartialData ((Query -> Query) -> ResultSet -> a)' ?
2020-12-13 11:48:39 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
2020-12-13 11:48:48 +0100 <kuribas> no, that's different
2020-12-13 11:49:31 +0100 <kuribas> the cps transform would be MkPartialData ((query -> query) -> (resultSet -> a) -> k)
2020-12-13 11:50:01 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
2020-12-13 11:50:04 +0100 <ski> (the FD above would make sure the type `resultSet' is determined uniquely by the type `query'. not that the value of type `query -> query' is determined uniquely by the type `resultSet' (and the type `query', if you want to))
2020-12-13 11:50:27 +0100 <kuribas> indeed
2020-12-13 11:50:44 +0100 <kuribas> the resultSet is determined by the query type
2020-12-13 11:50:59 +0100 <kuribas> (query -> query) is different for each value.
2020-12-13 11:51:26 +0100 <ski> perhaps you want `class QueryFun query where queryFun :: query -> query' and `class QueryFun query => QueryRunner query resultSet m | ... where ...', or something like that
2020-12-13 11:51:28 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 272 seconds)
2020-12-13 11:51:47 +0100 <ski> (i was not thinking of CPS)
2020-12-13 11:52:30 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 11:52:31 +0100 <ski> "(query -> query) is different for each value" -- each value of which type ? what value are we talking about ?
2020-12-13 11:52:58 +0100kish`(~oracle@unaffiliated/oracle) (Ping timeout: 260 seconds)
2020-12-13 11:53:19 +0100 <ski> (i was thinking of `ReaderT (Query -> Query) (..) (..)')
2020-12-13 11:55:22 +0100 <kuribas> hmm, this may actually work: https://gist.github.com/kuribas/dc0721c819925a85666c4a313224aabd
2020-12-13 11:56:48 +0100 <ski> how are you accumulating/summarizing `queryState' ?
2020-12-13 11:56:57 +0100 <kuribas> queryState?
2020-12-13 11:57:01 +0100 <kuribas> you mean query?
2020-12-13 11:57:16 +0100 <kuribas> that's just (.)
2020-12-13 11:57:23 +0100 <ski> i mean the field `queryState :: query -> query' of `PartialData query resultSet m a'
2020-12-13 11:57:25 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 256 seconds)
2020-12-13 11:57:26 +0100 <ski> ok
2020-12-13 11:57:55 +0100tfk(~tfk@197.206.206.247) (Quit: tfk)
2020-12-13 11:57:56 +0100 <ski> could have been either `\f g -> f . g' or `\f g x -> f x <> g x'
2020-12-13 11:58:20 +0100 <ski> (latter requiring `Monoid query' ..)
2020-12-13 11:58:22 +0100w0rstpr0grammer_(~w0rstp0gr@197.206.206.247)
2020-12-13 11:58:41 +0100 <kuribas> more like Endo query
2020-12-13 11:58:46 +0100 <ski> yep
2020-12-13 11:59:24 +0100 <kuribas> like this: https://gist.github.com/kuribas/dc0721c819925a85666c4a313224aabd
2020-12-13 11:59:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-13 12:00:00 +0100 <kuribas> ski: ah right, queryState is a bad name. Maybe queryTransformer
2020-12-13 12:00:13 +0100 <kuribas> or queryAdder
2020-12-13 12:01:32 +0100 <kuribas> ah, it looks so easy now...
2020-12-13 12:01:49 +0100 <kuribas> took me a good effort to make it like this...
2020-12-13 12:02:51 +0100 <kuribas> ski: the idea is to implement a graphql server (using https://hackage.haskell.org/package/graphql), but with a dataloader, which composes the query in parallel.
2020-12-13 12:03:05 +0100 <kuribas> rather than doing a single SQL query for each object
2020-12-13 12:04:06 +0100 <ski> mhm
2020-12-13 12:04:14 +0100 <ski> (that tells me very little)
2020-12-13 12:05:03 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 12:05:11 +0100 <kuribas> the library does a traversal over each field
2020-12-13 12:05:39 +0100 <kuribas> that's the "applicative action".
2020-12-13 12:05:44 +0100Wuzzy(~Wuzzy@p549c9bc8.dip0.t-ipconnect.de)
2020-12-13 12:05:46 +0100 <kuribas> but the subfields are monadic
2020-12-13 12:05:57 +0100polyrain(~polyrain@2001:8003:e501:6901:344b:e1da:e2ed:956) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 12:06:07 +0100waddlepon(~waddlepon@2603:3024:182f:9300:b4d3:bbe1:7f16:783a)
2020-12-13 12:06:10 +0100w0rstpr0grammer_(~w0rstp0gr@197.206.206.247) (Quit: w0rstpr0grammer_)
2020-12-13 12:09:11 +0100brodie(~brodie@207.53.253.137) (Quit: brodie)
2020-12-13 12:09:38 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 264 seconds)
2020-12-13 12:10:08 +0100neevor(~neevor@2601:646:4380:2460:c8b1:2b2d:8a79:bb8f)
2020-12-13 12:13:03 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-13 12:13:10 +0100livvy(~livvy@gateway/tor-sasl/livvy)
2020-12-13 12:15:40 +0100nicren(~nicren@81-66-205-86.rev.numericable.fr)
2020-12-13 12:17:01 +0100 <kuribas> hmm, that may not work with this library...
2020-12-13 12:17:28 +0100 <kuribas> The monad will force a query for every field...
2020-12-13 12:18:41 +0100 <kuribas> or maybe I can change the extractor to work in parallel
2020-12-13 12:18:55 +0100jrm(~jrm@freebsd/developer/jrm) (Ping timeout: 258 seconds)
2020-12-13 12:19:38 +0100superstar64(6ccefa7c@108-206-250-124.lightspeed.miamfl.sbcglobal.net) ()
2020-12-13 12:20:10 +0100christo(~chris@81.96.113.213)
2020-12-13 12:24:49 +0100christo(~chris@81.96.113.213) (Ping timeout: 264 seconds)
2020-12-13 12:24:58 +0100tomboy64(~tomboy64@gateway/tor-sasl/tomboy64) (Remote host closed the connection)
2020-12-13 12:25:57 +0100tomboy64(~tomboy64@gateway/tor-sasl/tomboy64)
2020-12-13 12:30:25 +0100acidjnk_new(~acidjnk@p200300d0c719ff439996fb92bd8d62ee.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
2020-12-13 12:30:30 +0100 <kuribas> hmm, so in the extractors which recurse on objects, I need to suspend each continuation, collected the results in paralell, then call the continuations...
2020-12-13 12:30:56 +0100 <kuribas> that looks stricky...
2020-12-13 12:31:24 +0100ph88(~ph88@2a02:8109:9e00:7e5c:cb1:a2e:bc62:aff6)
2020-12-13 12:34:06 +0100nicren(~nicren@81-66-205-86.rev.numericable.fr) (Quit: Leaving)
2020-12-13 12:34:06 +0100MOSCOS(~MOSCOS@122.54.107.175) (Remote host closed the connection)
2020-12-13 12:34:32 +0100MOSCOS(~MOSCOS@122.54.107.175)
2020-12-13 12:39:02 +0100waddlepon(~waddlepon@2603:3024:182f:9300:b4d3:bbe1:7f16:783a) (Ping timeout: 264 seconds)
2020-12-13 12:41:56 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 12:42:08 +0100w0rstpr0grammer_(~w0rstp0gr@197.206.206.247)
2020-12-13 12:42:48 +0100taurux(~taurux@net-188-152-78-21.cust.dsl.teletu.it)
2020-12-13 12:43:41 +0100wildlander(~wildlande@unaffiliated/wildlander) (Quit: Konversation terminated!)
2020-12-13 12:44:44 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Quit: vfaronov)
2020-12-13 12:44:59 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 12:45:09 +0100w0rstpr0grammer_w0rstpr0grammer
2020-12-13 12:46:31 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 258 seconds)
2020-12-13 12:47:17 +0100jrm(~jrm@freebsd/developer/jrm)
2020-12-13 12:49:15 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Client Quit)
2020-12-13 12:49:31 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 12:50:24 +0100opposite1996(8cd59a73@140.213.154.115)
2020-12-13 12:50:26 +0100da39a3ee5e6b4b0d(~da39a3ee5@171.5.29.209) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 12:51:38 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 272 seconds)
2020-12-13 12:51:43 +0100 <opposite1996> hi
2020-12-13 12:52:53 +0100__monty__(~toonn@unaffiliated/toonn)
2020-12-13 12:53:58 +0100da39a3ee5e6b4b0d(~da39a3ee5@171.5.29.209)
2020-12-13 12:54:12 +0100ph88(~ph88@2a02:8109:9e00:7e5c:cb1:a2e:bc62:aff6) (Quit: Leaving)
2020-12-13 12:54:33 +0100 <opposite1996> hi
2020-12-13 12:55:47 +0100plutoniix(~q@node-uhc.pool-125-24.dynamic.totinternet.net)
2020-12-13 12:56:48 +0100 <juri_> meep.
2020-12-13 12:57:14 +0100da39a3ee5e6b4b0d(~da39a3ee5@171.5.29.209) (Client Quit)
2020-12-13 12:57:33 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 12:58:20 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 12:59:15 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
2020-12-13 13:02:18 +0100opposite1996(8cd59a73@140.213.154.115) (Remote host closed the connection)
2020-12-13 13:02:34 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2020-12-13 13:07:49 +0100conal(~conal@64.71.133.70)
2020-12-13 13:10:29 +0100neevor(~neevor@2601:646:4380:2460:c8b1:2b2d:8a79:bb8f) ("Leaving")
2020-12-13 13:10:31 +0100w0rstpr0grammer(~w0rstp0gr@197.206.206.247) (Quit: w0rstpr0grammer)
2020-12-13 13:11:00 +0100w0rstpr0grammer(~w0rstp0gr@197.206.206.247)
2020-12-13 13:12:20 +0100conal_(~conal@66.115.176.144)
2020-12-13 13:13:15 +0100fendor_(~fendor@178.115.130.118.wireless.dyn.drei.com)
2020-12-13 13:13:29 +0100conal(~conal@64.71.133.70) (Ping timeout: 260 seconds)
2020-12-13 13:14:37 +0100 <lambda> is there any good reason why there isn't a generic list split function in base (like words, but for any type and delimiter)? is this really such a rare use case I keep running into for some reason?
2020-12-13 13:15:20 +0100 <kuribas> lambda: https://hackage.haskell.org/package/split-0.2.3.4
2020-12-13 13:16:10 +0100fendor(~fendor@91.141.1.222.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2020-12-13 13:16:27 +0100 <lambda> kuribas: ah, bikeshedding, I see :) thanks
2020-12-13 13:19:34 +0100wwwww(~wwwww@unaffiliated/wwwww) (Ping timeout: 256 seconds)
2020-12-13 13:19:47 +0100w0rstpr0grammer(~w0rstp0gr@197.206.206.247) (Quit: w0rstpr0grammer)
2020-12-13 13:20:10 +0100w0rstpr0grammer(~w0rstp0gr@197.206.206.247)
2020-12-13 13:21:27 +0100wwwww(~wwwww@unaffiliated/wwwww)
2020-12-13 13:22:19 +0100Fractalis(~Fractalis@2601:987:280:8d40:1493:3822:f5a1:3ca7)
2020-12-13 13:22:26 +0100Fractalis(~Fractalis@2601:987:280:8d40:1493:3822:f5a1:3ca7) (Remote host closed the connection)
2020-12-13 13:23:42 +0100drbean(~drbean@TC210-63-209-149.static.apol.com.tw)
2020-12-13 13:28:13 +0100rprije(~rprije@14-201-170-17.tpgi.com.au) (Remote host closed the connection)
2020-12-13 13:28:36 +0100rprije(~rprije@14-201-170-17.tpgi.com.au)
2020-12-13 13:29:04 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 13:29:44 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Quit: vfaronov)
2020-12-13 13:29:45 +0100Cthalupa(~cthulhu@47.186.47.75) (Ping timeout: 240 seconds)
2020-12-13 13:29:45 +0100christo(~chris@81.96.113.213)
2020-12-13 13:30:03 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 13:30:46 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
2020-12-13 13:31:02 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:2474:9519:9fb5:8678)
2020-12-13 13:32:56 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Client Quit)
2020-12-13 13:32:57 +0100HeavyRain(~heavyrain@194.127.172.77)
2020-12-13 13:33:20 +0100Cthalupa(~cthulhu@47.186.47.75)
2020-12-13 13:34:17 +0100w0rstpr0grammer(~w0rstp0gr@197.206.206.247) (Quit: w0rstpr0grammer)
2020-12-13 13:35:02 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 256 seconds)
2020-12-13 13:37:06 +0100jespada(~jespada@90.254.245.49)
2020-12-13 13:37:44 +0100Deide(~Deide@217.155.19.23)
2020-12-13 13:37:55 +0100Tops2(~Tobias@dyndsl-095-033-094-096.ewe-ip-backbone.de)
2020-12-13 13:42:21 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-13 13:43:27 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 13:44:56 +0100 <merijn> lambda: I mean, we don't have arrays or maps in base either :p
2020-12-13 13:45:18 +0100 <merijn> (And some would argue base is still much too big)
2020-12-13 13:47:52 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-13 13:51:57 +0100 <kuribas> It's small compared to other languages.
2020-12-13 13:51:59 +0100HeavyRain(~heavyrain@194.127.172.77) (Quit: leaving)
2020-12-13 13:52:08 +0100 <kuribas> Big compared to common lisp though
2020-12-13 13:53:24 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 13:53:32 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2020-12-13 13:54:45 +0100xff0x(~fox@2001:1a81:5293:a900:fbf2:9a22:7e7:d551) (Ping timeout: 258 seconds)
2020-12-13 13:54:53 +0100Tops21(~Tobias@dyndsl-095-033-094-096.ewe-ip-backbone.de)
2020-12-13 13:55:22 +0100xff0x(~fox@2001:1a81:5293:a900:a065:b2ef:56bb:c171)
2020-12-13 13:56:26 +0100Ariakenom(~Ariakenom@h-98-128-229-53.NA.cust.bahnhof.se)
2020-12-13 13:57:30 +0100opposite1996(8cd59a73@140.213.154.115)
2020-12-13 13:57:45 +0100Tops2(~Tobias@dyndsl-095-033-094-096.ewe-ip-backbone.de) (Ping timeout: 240 seconds)
2020-12-13 13:58:03 +0100 <carbolymer> any ideas why my popQueue loops infinitely? https://bpa.st/HNOA
2020-12-13 13:58:53 +0100 <carbolymer> F.alter should in the end return Nothing - and remove queue from map
2020-12-13 13:59:01 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 264 seconds)
2020-12-13 13:59:23 +0100 <carbolymer> I mean - it's not popQueue that loops, but drainQ
2020-12-13 14:00:18 +0100 <dminuoso> carbolymer: Insert debugging statements?
2020-12-13 14:00:31 +0100 <dminuoso> unsafeIOtoSTM is useful here
2020-12-13 14:00:59 +0100 <dminuoso> (Just be aware that STM transactions can be restarted multiple times for various reasons when judging the output)
2020-12-13 14:01:06 +0100stackdimes(~stackdime@45.132.115.107)
2020-12-13 14:01:08 +0100stackdimes(~stackdime@45.132.115.107) (Client Quit)
2020-12-13 14:01:10 +0100 <carbolymer> hmm
2020-12-13 14:01:36 +0100 <dminuoso> Or rather, read all the notes relating to unsafeIOtoSTM
2020-12-13 14:01:55 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius)
2020-12-13 14:06:34 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-13 14:06:41 +0100fendor_fendor
2020-12-13 14:07:06 +0100 <dminuoso> carbolymer: Also, is it a proper evaluation loop, or does the transaction appear to be stuck?
2020-12-13 14:07:41 +0100 <carbolymer> it just prints "foo" again and again
2020-12-13 14:07:47 +0100 <carbolymer> so it seems that tx isn't stuck
2020-12-13 14:12:42 +0100knupfer(~Thunderbi@200116b82c21a800a86d6bfffe485153.dip.versatel-1u1.de)
2020-12-13 14:15:06 +0100knupfer(~Thunderbi@200116b82c21a800a86d6bfffe485153.dip.versatel-1u1.de) (Remote host closed the connection)
2020-12-13 14:15:14 +0100knupfer(~Thunderbi@200116b82c21a800d1fd2af288fd3bd8.dip.versatel-1u1.de)
2020-12-13 14:15:47 +0100Neuromancer(~Neuromanc@unaffiliated/neuromancer)
2020-12-13 14:16:47 +0100ibloom(sid350277@gateway/web/irccloud.com/x-ftwuwcmqpnbfrqgs) (Ping timeout: 260 seconds)
2020-12-13 14:17:05 +0100ibloom(sid350277@gateway/web/irccloud.com/x-qvdyimokdwsnoffs)
2020-12-13 14:17:34 +0100Randy_(randy@freebsd/user/randy)
2020-12-13 14:17:40 +0100BeatZ(~BeatZ@uk-lon.vpn.courvix.com)
2020-12-13 14:17:57 +0100tabaqui(~tabaqui@2604:a880:800:c1::21b:3001) (Ping timeout: 260 seconds)
2020-12-13 14:18:15 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 14:18:31 +0100otulp(~otulp@ti0187q162-6038.bb.online.no) (Ping timeout: 256 seconds)
2020-12-13 14:18:32 +0100BenSima[m](bensimatim@gateway/shell/matrix.org/x-gsvyurbvvhccmgvr) (Ping timeout: 260 seconds)
2020-12-13 14:18:34 +0100Randy(randy@freebsd/user/randy) (Ping timeout: 260 seconds)
2020-12-13 14:18:35 +0100Feuermagier(~Feuermagi@213.178.26.41) (Remote host closed the connection)
2020-12-13 14:18:40 +0100Randy_Randy
2020-12-13 14:19:24 +0100BeatZ(~BeatZ@uk-lon.vpn.courvix.com) (Remote host closed the connection)
2020-12-13 14:19:24 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
2020-12-13 14:19:40 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Remote host closed the connection)
2020-12-13 14:19:54 +0100livvy(~livvy@gateway/tor-sasl/livvy)
2020-12-13 14:20:17 +0100BenSima[m](bensimatim@gateway/shell/matrix.org/x-gdhisogubvluiqlm)
2020-12-13 14:20:30 +0100tabaqui(~tabaqui@2604:a880:800:c1::21b:3001)
2020-12-13 14:21:31 +0100 <carbolymer> when function passed to alter returns Nothing, the element should be removed from the collection, right? https://hackage.haskell.org/package/focus-1.0.1.4/docs/Focus.html#v:alter
2020-12-13 14:21:52 +0100 <carbolymer> I don't know if I don't understand the docs, or stm-containers immplementation of Focus is faulty
2020-12-13 14:22:21 +0100 <dminuoso> assuming the implementation is correct, yes
2020-12-13 14:22:51 +0100 <dminuoso> Using pseudo syntax, `Nothing -> Just ...` is an insertion, `Just ... -> Nothing` is a deletion and `Just ... -> Just ...` is an update
2020-12-13 14:23:32 +0100 <carbolymer> well damn, `F.update (NES.nonEmptySeq . NES.tail)` doesn't remove the element if `NES.nonEmptySeq . NES.tail)` returns Nothing
2020-12-13 14:23:38 +0100christo(~chris@81.96.113.213)
2020-12-13 14:23:47 +0100 <carbolymer> neither alter do
2020-12-13 14:28:55 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 14:29:19 +0100halbGefressen(~halbGefre@2a02:810d:f40:2a9c:40b2:2308:84bd:8b9b)
2020-12-13 14:29:52 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 14:31:18 +0100philopso1(~caecilius@gateway/tor-sasl/caecilius)
2020-12-13 14:31:32 +0100ggole(~ggole@2001:8003:8119:7200:e9c3:d38f:e40d:d76e)
2020-12-13 14:31:56 +0100 <halbGefressen> Hi, I am trying to create an AUR package for a Haskell program (https://github.com/lukasstevens/cyp). When installing my program, it complains about the missing library that is required to run the program, which is also built in the repository by running stack build.
2020-12-13 14:31:59 +0100toorevitimirp(~tooreviti@117.182.180.221)
2020-12-13 14:32:12 +0100 <halbGefressen> or rather it complains when trying to run it
2020-12-13 14:32:23 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
2020-12-13 14:32:29 +0100drbean_(~drbean@TC210-63-209-188.static.apol.com.tw)
2020-12-13 14:32:38 +0100 <halbGefressen> Because I need ibHScyp-0.2.0.0-263wPg8EQSF297H60K9S4t-ghc8.8.4.so which gets built in the build section
2020-12-13 14:33:04 +0100drbean(~drbean@TC210-63-209-149.static.apol.com.tw) (Ping timeout: 246 seconds)
2020-12-13 14:33:13 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 14:34:50 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 264 seconds)
2020-12-13 14:35:47 +0100 <maerwald> halbGefressen: don't try
2020-12-13 14:36:02 +0100 <halbGefressen> How do I build into a single binary then?
2020-12-13 14:36:43 +0100 <maerwald> yes, you can do fully static linking with musl
2020-12-13 14:36:47 +0100 <maerwald> e.g. on alpine
2020-12-13 14:39:03 +0100 <halbGefressen> I just want to package that program so that somebody can run it. What is the best method to achieve that?
2020-12-13 14:39:20 +0100 <maerwald> ask upstream to do releases with static binaries
2020-12-13 14:41:01 +0100opposite1996(8cd59a73@140.213.154.115) (Quit: opposite1996)
2020-12-13 14:41:42 +0100 <maerwald> then can use github workflows for that
2020-12-13 14:42:10 +0100 <maerwald> here's an example https://github.com/hasufell/stack2cabal/blob/e6fae40d913ed67363671fb7238e74afedd78ffc/.github/work…
2020-12-13 14:42:31 +0100 <halbGefressen> Do I even need a static binary? My package depends on glibc already, just this one library doesn't get copied
2020-12-13 14:42:51 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 14:48:29 +0100andrew_znc(~andrew@unaffiliated/andrew-znc)
2020-12-13 14:48:38 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 14:50:22 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
2020-12-13 14:52:25 +0100drbean_(~drbean@TC210-63-209-188.static.apol.com.tw) (Ping timeout: 264 seconds)
2020-12-13 14:54:13 +0100toorevitimirp(~tooreviti@117.182.180.221) (Remote host closed the connection)
2020-12-13 14:56:20 +0100toorevitimirp(~tooreviti@117.182.180.221)
2020-12-13 14:59:43 +0100SomeoneSerge(~someone-s@37.120.212.76)
2020-12-13 15:00:38 +0100halbGefressen(~halbGefre@2a02:810d:f40:2a9c:40b2:2308:84bd:8b9b) (Quit: halbGefressen)
2020-12-13 15:01:06 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 15:01:27 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 15:04:09 +0100 <carbolymer> damn, delete in stm-containers (or rather focus) is broken :/
2020-12-13 15:06:07 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 15:06:28 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 15:06:38 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2020-12-13 15:07:08 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 15:07:29 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 15:08:26 +0100philopso1(~caecilius@gateway/tor-sasl/caecilius) (Remote host closed the connection)
2020-12-13 15:08:39 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius)
2020-12-13 15:09:08 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 15:09:29 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 15:09:46 +0100toorevitimirp(~tooreviti@117.182.180.221) (Remote host closed the connection)
2020-12-13 15:11:08 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 15:11:29 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 15:13:08 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 15:13:27 +0100SanchayanMaity(~Sanchayan@223.226.34.150) (Quit: SanchayanMaity)
2020-12-13 15:13:30 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 15:14:12 +0100opposite1996(8cd59a73@140.213.154.115)
2020-12-13 15:15:09 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-13 15:15:33 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 15:19:40 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 15:22:07 +0100sgibber2018(~arch-gibb@208.85.237.137) (Quit: WeeChat 2.9)
2020-12-13 15:24:36 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8) (Ping timeout: 240 seconds)
2020-12-13 15:29:37 +0100gentauro(~gentauro@unaffiliated/gentauro) (Ping timeout: 264 seconds)
2020-12-13 15:31:25 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz)
2020-12-13 15:31:29 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 15:32:11 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 15:33:28 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 15:36:20 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 258 seconds)
2020-12-13 15:36:22 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-13 15:37:45 +0100gzj(~gzj@unaffiliated/gzj) (Ping timeout: 240 seconds)
2020-12-13 15:39:53 +0100gentauro(~gentauro@unaffiliated/gentauro)
2020-12-13 15:41:01 +0100argento(~argent0@168.227.97.29) (Quit: leaving)
2020-12-13 15:41:30 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 15:41:45 +0100opposite1996(8cd59a73@140.213.154.115) (Quit: opposite1996)
2020-12-13 15:42:02 +0100isd(zenhackmat@gateway/shell/matrix.org/x-hljwevtqkvvirxdh) ("User left")
2020-12-13 15:42:47 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:2474:9519:9fb5:8678) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 15:46:16 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2020-12-13 15:47:01 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 15:53:09 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Quit: mputz)
2020-12-13 15:54:02 +0100urodna(~urodna@unaffiliated/urodna)
2020-12-13 15:54:57 +0100geekosaur(ae68c070@cpe-174-104-192-112.neo.res.rr.com)
2020-12-13 15:54:58 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 15:57:27 +0100bitmagie(~Thunderbi@200116b806b03000d4de5885499e1489.dip.versatel-1u1.de)
2020-12-13 15:58:16 +0100arahael(~arahael@124-168-0-93.tpgi.com.au) (Ping timeout: 240 seconds)
2020-12-13 15:59:06 +0100Kronic(~Kronic___@84.203.98.133)
2020-12-13 15:59:36 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 240 seconds)
2020-12-13 16:03:47 +0100son0p(~son0p@181.136.122.143)
2020-12-13 16:05:36 +0100SomeoneSerge(~someone-s@37.120.212.76) (Ping timeout: 256 seconds)
2020-12-13 16:07:25 +0100arahael(~arahael@220-245-222-231.tpgi.com.au)
2020-12-13 16:07:43 +0100SomeoneSerge(~someone-s@143.244.42.97)
2020-12-13 16:10:27 +0100kuribas(~user@ptr-25vy0iac96ewj3pswoy.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
2020-12-13 16:14:28 +0100knupfer(~Thunderbi@200116b82c21a800d1fd2af288fd3bd8.dip.versatel-1u1.de) (Remote host closed the connection)
2020-12-13 16:14:35 +0100knupfer(~Thunderbi@200116b82c21a8005c6c9e172e74e2cf.dip.versatel-1u1.de)
2020-12-13 16:15:13 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2020-12-13 16:17:25 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 16:18:24 +0100HorseGirl(~UserNick@217.138.194.74)
2020-12-13 16:18:53 +0100 <HorseGirl> hello
2020-12-13 16:20:24 +0100bitmagie(~Thunderbi@200116b806b03000d4de5885499e1489.dip.versatel-1u1.de) (Quit: bitmagie)
2020-12-13 16:20:36 +0100 <wz1000> Where do I find a function to randomly choose (without replacement) n elements from a list?
2020-12-13 16:21:22 +0100kenran(~kenran@mue-88-130-62-085.dsl.tropolys.de)
2020-12-13 16:23:20 +0100MarcelineVQ(~anja@198.254.202.72) (Ping timeout: 256 seconds)
2020-12-13 16:24:52 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2020-12-13 16:25:03 +0100MarcelineVQ(~anja@198.254.202.72)
2020-12-13 16:27:19 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-13 16:27:27 +0100 <adamCS> wz100: How about shuffling the list and taking the first n? http://hackage.haskell.org/package/random-shuffle-0.0.4/docs/System-Random-Shuffle.html
2020-12-13 16:27:35 +0100tenniscp25(~tenniscp2@134.196.209.118)
2020-12-13 16:27:36 +0100 <adamCS> wz1000: ^
2020-12-13 16:28:10 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-13 16:28:52 +0100 <merijn> Also, the magical words "Partial Fisher-Yates shuffle"! ;)
2020-12-13 16:29:50 +0100 <ski> HorseGirl : hello
2020-12-13 16:31:33 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2020-12-13 16:32:03 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8)
2020-12-13 16:32:42 +0100jamm(~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
2020-12-13 16:33:18 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-13 16:34:02 +0100jlamothe(~jlamothe@198.251.55.207)
2020-12-13 16:36:13 +0100errst(~errst@unaffiliated/tirej) (Ping timeout: 264 seconds)
2020-12-13 16:38:20 +0100ixian(~mgold@2002:4a74:ba78:1701:0:ff:fe78:6269) (Quit: leaving)
2020-12-13 16:38:20 +0100jlamothe(~jlamothe@198.251.55.207) (Client Quit)
2020-12-13 16:39:07 +0100tomboy64(~tomboy64@gateway/tor-sasl/tomboy64) (Remote host closed the connection)
2020-12-13 16:39:34 +0100tomboy64(~tomboy64@gateway/tor-sasl/tomboy64)
2020-12-13 16:41:12 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Remote host closed the connection)
2020-12-13 16:41:41 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 16:45:49 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8) (Ping timeout: 264 seconds)
2020-12-13 16:46:29 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 258 seconds)
2020-12-13 16:46:36 +0100Tario(~Tario@201.192.165.173)
2020-12-13 16:49:05 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-13 16:49:10 +0100ixian(~mgold@2002:4a74:ba78:1701:0:ff:fe78:6269)
2020-12-13 16:53:38 +0100bitmagie(~Thunderbi@200116b806b03000d4de5885499e1489.dip.versatel-1u1.de)
2020-12-13 16:53:48 +0100w0rstp0grammer(~w0rstp0gr@197.206.206.247)
2020-12-13 16:55:00 +0100w0rstp0grammer(~w0rstp0gr@197.206.206.247) (Remote host closed the connection)
2020-12-13 16:55:27 +0100ixian(~mgold@2002:4a74:ba78:1701:0:ff:fe78:6269) (Ping timeout: 260 seconds)
2020-12-13 16:56:06 +0100jlamothe(~jlamothe@198.251.55.207)
2020-12-13 16:56:07 +0100machinedgod(~machinedg@24.105.81.50)
2020-12-13 16:56:20 +0100ixian(~mgold@2002:4a74:ba78:1701:0:ff:fe78:6269)
2020-12-13 17:04:33 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net)
2020-12-13 17:04:52 +0100bitmagie(~Thunderbi@200116b806b03000d4de5885499e1489.dip.versatel-1u1.de) (Quit: bitmagie)
2020-12-13 17:05:12 +0100solonarv(~solonarv@astrasbourg-157-1-27-135.w90-40.abo.wanadoo.fr)
2020-12-13 17:05:34 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 17:10:02 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-13 17:11:45 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 17:12:38 +0100hiroaki(~hiroaki@2a02:908:4b1b:20a0::77a4) (Ping timeout: 264 seconds)
2020-12-13 17:20:19 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net) ("WeeChat 3.0")
2020-12-13 17:20:41 +0100otulp(~otulp@ti0187q162-6038.bb.online.no)
2020-12-13 17:20:55 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net)
2020-12-13 17:21:16 +0100solarion(~solarion@fsf/member/solarion)
2020-12-13 17:22:05 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 240 seconds)
2020-12-13 17:23:48 +0100jespada(~jespada@90.254.245.49)
2020-12-13 17:25:41 +0100hekkaidekapus[(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-12-13 17:26:30 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 17:26:33 +0100 <gentauro> why does phadej write on /r/haskell that Safe-Haskell should be removed from GHC?
2020-12-13 17:26:36 +0100 <gentauro> :(
2020-12-13 17:27:03 +0100hekkaidekapus}(~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2020-12-13 17:27:47 +0100wonko7(~wonko7@2a01:e35:2ffb:7040:14a1:46f4:68f7:2133) (Ping timeout: 260 seconds)
2020-12-13 17:28:41 +0100 <hpc> he likes to live dangerously - https://www.smbc-comics.com/comic/dangerous
2020-12-13 17:30:15 +0100 <gentauro> hpc: but it's not gonna happen right? It's just his preferences?
2020-12-13 17:30:35 +0100 <gentauro> Isn't it like the linear types, if you don't want to use them, you don't?
2020-12-13 17:31:05 +0100 <merijn> gentauro: There's almost no reasonable use for it, though
2020-12-13 17:31:11 +0100 <merijn> gentauro: like, what would you use it for?
2020-12-13 17:31:12 +0100 <int-e> if you have a library you might have people like me approach you with patches that mark modules Trustworthy
2020-12-13 17:31:16 +0100 <int-e> so there is a cost
2020-12-13 17:31:47 +0100 <merijn> gentauro: Have you ever actually used SafeHaskell? If so, for what?
2020-12-13 17:31:54 +0100 <int-e> (in my case because lambdabot relies on SafeHaskell)
2020-12-13 17:33:15 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Ping timeout: 258 seconds)
2020-12-13 17:33:44 +0100 <int-e> If this is part of a larger effort to cut down unpopular extensions from ghc I'd not even be opposed... but slashing only SafeHaskell seems unfair.
2020-12-13 17:34:00 +0100bitmagie(~Thunderbi@200116b806b03000d4de5885499e1489.dip.versatel-1u1.de)
2020-12-13 17:34:46 +0100 <gentauro> merijn: yeah pretty much -> uniprocess.org (noticed GitLab hasn't actualized my cert …)
2020-12-13 17:34:48 +0100son0p(~son0p@181.136.122.143) (Quit: leaving)
2020-12-13 17:34:53 +0100 <merijn> int-e: I think phadej was just underlining how useless it basically is
2020-12-13 17:35:39 +0100 <merijn> gentauro: Oh, if you rely on SafeHaskell for safety in the presence of untrusted code, you're already doomed
2020-12-13 17:35:43 +0100 <gentauro> merijn: I use it for `sanity` and to exclude `stuff` GHC don't really trust
2020-12-13 17:35:54 +0100 <gentauro> merijn: how come?
2020-12-13 17:36:14 +0100 <gentauro> safe haskell tells me that Data.Text isn't "good" and therefore can't be trusted. I like that
2020-12-13 17:36:16 +0100 <merijn> gentauro: It's fairly trivial to bypass and escape
2020-12-13 17:36:28 +0100 <gentauro> merijn: could you elaborate?
2020-12-13 17:36:44 +0100 <int-e> gentauro: so how do you decide what to trust?
2020-12-13 17:36:45 +0100 <merijn> gentauro: "enabling -XGeneralizedNewtypeDeriving" is sufficient to implement unsafeCoerce and therefore completely bypass SafeHaskell
2020-12-13 17:37:04 +0100 <int-e> also you're bound to have to trust base and that's a can of worms right there
2020-12-13 17:37:24 +0100 <gentauro> int-e: I noticed that
2020-12-13 17:37:40 +0100 <int-e> merijn: is it? I thought it was supposed to use `coerce` now and thereby by type-safe.
2020-12-13 17:37:42 +0100 <merijn> gentauro: Basically, there's almost no work in defining how SafeHaskell should interact with any of the extensions introduced after it (or even before it)
2020-12-13 17:37:49 +0100 <gentauro> merijn: so you are telling me that `-XXGeneralizedNewtypeDeriving` should be removed instead? xD
2020-12-13 17:38:01 +0100 <merijn> int-e: It's not about the code generated by GeneralizedNewtypeDeriving
2020-12-13 17:38:15 +0100 <merijn> gentauro: I'm not saying that
2020-12-13 17:38:20 +0100 <int-e> merijn: but?
2020-12-13 17:38:23 +0100 <gentauro> I am :)
2020-12-13 17:38:52 +0100 <merijn> int-e: Lemme lookup the blogpost
2020-12-13 17:39:09 +0100 <int-e> merijn: I mean I know of an old technique that does exactly what you said, and I was under the impression that when `coerce` was implemented that particular hole got plugged.
2020-12-13 17:39:18 +0100rprije(~rprije@14-201-170-17.tpgi.com.au) (Remote host closed the connection)
2020-12-13 17:39:39 +0100rprije(~rprije@14-201-170-17.tpgi.com.au)
2020-12-13 17:39:51 +0100 <int-e> and that, in fact, this was a key motivation for tackling safe coercions.
2020-12-13 17:40:06 +0100 <gentauro> but merijn it's possible to remove PRAGMAS with GHC flags right? So it wouldn't really be a problem on SafeHaskell project
2020-12-13 17:40:35 +0100 <merijn> gentauro: Sure, it just means "not allowing people to use a number of widely used extensions", so that rules out tons of code you might wanna use
2020-12-13 17:40:36 +0100zaquest(~notzaques@5.128.210.178)
2020-12-13 17:40:40 +0100 <merijn> int-e: hmm, maybe
2020-12-13 17:40:41 +0100zaquest(~notzaques@5.128.210.178) (Remote host closed the connection)
2020-12-13 17:41:07 +0100 <merijn> int-e: It's pretty likely a number of other extensions bypass SafeHaskell anyway, so my point stands even without GND ;)
2020-12-13 17:41:17 +0100 <gentauro> 17:40 < merijn> gentauro: Sure, it just means "not allowing people to use a number of widely used extensions"
2020-12-13 17:41:20 +0100 <gentauro> yes please :)
2020-12-13 17:41:29 +0100 <gentauro> I'm scared of the one that turns on 200 extensions :o
2020-12-13 17:41:42 +0100 <gentauro> those codebases will not be maintanable
2020-12-13 17:41:44 +0100 <gentauro> :(
2020-12-13 17:42:31 +0100 <int-e> merijn: let me know if you find something concrete
2020-12-13 17:42:39 +0100 <int-e> :)
2020-12-13 17:42:58 +0100 <int-e> I do share the uneasy feeling.
2020-12-13 17:43:11 +0100 <gentauro> merijn: yeah, I would like to read that blogpoast as well :)
2020-12-13 17:43:15 +0100 <merijn> int-e: TypeFamilies and GADTs are known unsafe, afaik
2020-12-13 17:43:23 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-13 17:44:05 +0100 <merijn> gentauro: Of course, even without bypassing SafeHaskell running untrusted Haskell is still unsafe. DOS attacks are fairly trivial
2020-12-13 17:44:16 +0100 <int-e> merijn: well not according to ghc itself
2020-12-13 17:45:02 +0100 <int-e> (There's no complaint with {-# LANGUAGE Safe, GADTs, TypeFamilies #-})
2020-12-13 17:45:51 +0100 <gentauro> merijn: I use this for many of my `cli` projects -> https://hackage.haskell.org/package/echo-0.1.3/docs/System-IO-Echo.html I like that something that I type in my passwords with, is actually Safe !!!
2020-12-13 17:46:09 +0100 <merijn> gentauro: What do you think "Safe" means?
2020-12-13 17:46:33 +0100 <merijn> Because I fail to see how "typing passwords" is relevant for that
2020-12-13 17:46:36 +0100 <gentauro> I have read the paper from the 2xDavids and 2xSimons
2020-12-13 17:46:51 +0100 <int-e> "Safe" means you can't subvert the type system. Basically, the promise is that you can't implement unsafeCoerce unless you trust a broken library that allows it.
2020-12-13 17:46:54 +0100 <gentauro> merijn: it means that nothing `suspect` happens `under the hood`
2020-12-13 17:46:56 +0100srk(~sorki@gateway/tor-sasl/sorki) (Remote host closed the connection)
2020-12-13 17:46:56 +0100hexo(~hexo@gateway/tor-sasl/hexo) (Remote host closed the connection)
2020-12-13 17:47:10 +0100 <int-e> (That's my understanding.)
2020-12-13 17:47:10 +0100hexo(~hexo@gateway/tor-sasl/hexo)
2020-12-13 17:47:12 +0100 <merijn> gentauro: It does not
2020-12-13 17:47:14 +0100srk(~sorki@gateway/tor-sasl/sorki)
2020-12-13 17:47:15 +0100 <gentauro> int-e: explained it way better
2020-12-13 17:47:21 +0100 <merijn> Right
2020-12-13 17:47:40 +0100 <merijn> But you can still forward someone's password to a webserver without violating the type system...
2020-12-13 17:47:57 +0100 <int-e> So GND (before `coerce`) is decidably unsafe.
2020-12-13 17:48:12 +0100 <merijn> A package like echo could literally send everything you type to a webserver and still be SafeHaskell
2020-12-13 17:48:32 +0100 <merijn> So I'm not sure what peace of mind you get from "Safe"
2020-12-13 17:48:33 +0100 <int-e> So is Typeable if anybody every puts the required effort into a hash collision (it's MD5 but the data isn't binary so the cheap attacks don't seem to apply)
2020-12-13 17:48:40 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 17:48:59 +0100 <gentauro> 17:47 < merijn> But you can still forward someone's password to a webserver without violating the type system...
2020-12-13 17:49:15 +0100 <gentauro> yes, if you allow global IO, but I tend to restrict my IO (granualary)
2020-12-13 17:49:18 +0100 <int-e> It's a very modest notion of safety.
2020-12-13 17:49:27 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-13 17:49:31 +0100 <gentauro> so as long as GHC type-system is trustable, I think I got that solved
2020-12-13 17:49:36 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
2020-12-13 17:50:25 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-13 17:50:32 +0100christo(~chris@81.96.113.213)
2020-12-13 17:50:37 +0100 <gentauro> solved = covered
2020-12-13 17:50:39 +0100 <merijn> gentauro: But echo is in IO, so it being Safe does nothing
2020-12-13 17:51:00 +0100 <int-e> merijn: The thing about GADTs and TypeFamilies is that any unsafety in the SafeHaskell sense would really mean that the underlying type system is unsound. And that's something SPJ and goldfire and co really care about quite strongly.
2020-12-13 17:52:32 +0100 <int-e> merijn: if you allow IO you're screwed
2020-12-13 17:52:41 +0100 <gentauro> merijn: you can even use Foreign ptr and stuff like that and make the module Safe to Haskell -> http://blog.stermon.com/articles/2019/02/04/haskell-usage-of-malloc-free-is-safe.html
2020-12-13 17:52:49 +0100 <gentauro> but you MUST expose that you are doing IO
2020-12-13 17:53:09 +0100 <gentauro> so you know `stuff` happens under the hood
2020-12-13 17:53:13 +0100 <int-e> merijn: "screwed" if your notion of safety requires no arbitrary effects
2020-12-13 17:53:40 +0100 <merijn> int-e: Sure, but if your notion of safety doesn't require that, then Safe Haskell is redundant :p
2020-12-13 17:53:41 +0100 <gentauro> but if you try to hide `IO` away with `unsafePerformIO`, you will get an error
2020-12-13 17:53:57 +0100 <merijn> int-e: Hence, my original quesiton
2020-12-13 17:54:01 +0100 <merijn> Safe *from what*
2020-12-13 17:54:05 +0100 <int-e> merijn: so you have to do something that never runs untrusted IO values
2020-12-13 17:54:08 +0100 <merijn> And why does it warrant worrying
2020-12-13 17:54:28 +0100 <int-e> (which is why lambdabot doesn't allow IO)
2020-12-13 17:54:51 +0100 <merijn> int-e: But that still means auditing all the IO in your transitive dependencies
2020-12-13 17:54:57 +0100christo(~chris@81.96.113.213) (Ping timeout: 260 seconds)
2020-12-13 17:54:59 +0100 <int-e> merijn: no
2020-12-13 17:55:00 +0100 <merijn> int-e: Which I'm pretty sure no one ever does :p
2020-12-13 17:55:04 +0100 <int-e> merijn: because you can't run them
2020-12-13 17:55:06 +0100jamm(~jamm@unaffiliated/jamm) (Ping timeout: 258 seconds)
2020-12-13 17:55:12 +0100 <int-e> > print ""
2020-12-13 17:55:17 +0100 <lambdabot> <IO ()>
2020-12-13 17:55:20 +0100 <merijn> int-e: I wasn't refering to lambdabot
2020-12-13 17:55:24 +0100 <gentauro> int-e: this is how I handle IO (ask described in the Safe Haskell paper) -> https://uniprocess.org/effects.html
2020-12-13 17:55:31 +0100 <gentauro> (updated the GitLab certificate)
2020-12-13 17:55:33 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 17:55:48 +0100 <merijn> int-e: I was referring to "never run untrusted IO values" <- you have to audit the IO in all your transitive dependencies to do that
2020-12-13 17:56:15 +0100 <int-e> merijn: *if* you allow your untrusted code to run IO actions then yes, you have to audit them transitively. and you'l end up in base where obviously many things in IO are too risky to expose
2020-12-13 17:56:39 +0100 <int-e> The solution is to not allow your untrusted code to run IO at all.
2020-12-13 17:56:54 +0100 <merijn> int-e: No I'm literally talking about "code you write yourself that uses dependencies"
2020-12-13 17:57:14 +0100 <int-e> We're obviously arguing with different goals in mind.
2020-12-13 17:57:23 +0100 <merijn> int-e: My point is: You can't trust dependencies to not do bad things without auditing them, because Safe Haskell doesn't prevent that
2020-12-13 17:57:53 +0100 <merijn> int-e: I cannot trust my use of the "echo" package to be safe, even if I myself write the code that does that
2020-12-13 17:57:55 +0100 <gentauro> merijn: that's the hole point of trust ;)
2020-12-13 17:58:01 +0100 <int-e> I'm protecting against random IRC users that want to abuse lambdabot. The libraries that lambdabot relies on are, by and large, and for better or worse, part of the trusted code base.
2020-12-13 17:58:51 +0100 <int-e> I have actually made an effort to audit modules marked Trustworthy... outside of base.
2020-12-13 17:59:07 +0100 <merijn> int-e: And redone so every upstream version? ;)
2020-12-13 17:59:30 +0100 <int-e> merijn: take a guess. (somewhat, but not nearly as diligently)
2020-12-13 18:00:16 +0100 <int-e> I have a namespace based sandbox as well, because...
2020-12-13 18:00:27 +0100 <Logio> merijn: are you saying that as it stands now, I cannot get any guarantees of purity about packages marked as Safe?
2020-12-13 18:00:31 +0100 <int-e> (linux namespaces)
2020-12-13 18:00:51 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 265 seconds)
2020-12-13 18:01:24 +0100 <merijn> Logio: Define "guarantee" and "purity" :)
2020-12-13 18:01:48 +0100 <int-e> Logio: you get the guarantee that any not-Safe module gets imported through (or is) a Trustworthy module in a trusted package.
2020-12-13 18:01:54 +0100conal_(~conal@66.115.176.144) (Quit: Computer has gone to sleep.)
2020-12-13 18:01:54 +0100 <gentauro> merijn: the sentence from SPJ about launching the missiles :P
2020-12-13 18:01:57 +0100christo(~chris@81.96.113.213)
2020-12-13 18:02:01 +0100 <merijn> int-e: Right, but most of the reddit proponents of SafeHaskell don't consider any of these things :)
2020-12-13 18:02:23 +0100 <merijn> int-e: And once you have the sandbox the only real issue with lambdabot is it spamming the channel
2020-12-13 18:02:26 +0100 <int-e> Logio: on top of that you get all the guarantees that the type system provides... assuming it is sound (which is up to ghc)
2020-12-13 18:02:33 +0100 <merijn> And most of SafeHaskell becomes irrelevant :)
2020-12-13 18:03:09 +0100 <int-e> merijn: Well I feel better about the sandbox not being the first line of defense.
2020-12-13 18:03:10 +0100 <merijn> Logio: Anyway, what I'm really saying is that the guarantees Safe gives you are mostly worthless
2020-12-13 18:03:13 +0100 <Logio> merijn: I mean, running IO actions and having side effects
2020-12-13 18:03:19 +0100 <int-e> And I also like SafeHaskell on an intellectual level.
2020-12-13 18:03:35 +0100 <merijn> SafeHaskell is conceptually neat, but practically worthless
2020-12-13 18:03:58 +0100 <Logio> merijn: I'm mostly conserned with things touching the filesystem without me knowing about it
2020-12-13 18:04:02 +0100 <merijn> In that they don't protect against threat models people actually have
2020-12-13 18:04:36 +0100 <gentauro> so this is useless? https://gitlab.com/uniprocess/haskell-template/-/blob/master/pkg/granulated/package.core.yaml#L4-12
2020-12-13 18:04:38 +0100 <merijn> Logio: Well, a completely Safe package could still ruin your filesystem at compile time :p
2020-12-13 18:04:47 +0100 <int-e> Well, obviously I think it has some practical value.
2020-12-13 18:04:54 +0100 <merijn> (Or does SafeHaskell disallow TemplateHaskell?)
2020-12-13 18:05:00 +0100 <Logio> I've been bitten by Python packages that did stupid stuff like running executables on import (for non-nefarious, but stupid reasons)
2020-12-13 18:05:08 +0100 <gentauro> merijn: yes it does ;)
2020-12-13 18:05:13 +0100 <merijn> gentauro: What's your threat model?
2020-12-13 18:05:17 +0100 <int-e> merijn: Of course it does :)
2020-12-13 18:05:41 +0100 <gentauro> merijn: I don't trust anybody, specially myself ;)
2020-12-13 18:05:55 +0100 <merijn> Question #1 of any safety/security issue is always: What's your threat model?
2020-12-13 18:06:03 +0100 <int-e> Which is why I'm mostly worried about *subtle* holes in SafeHaskell... and those that are there by design (trusting a broken or subverted library)
2020-12-13 18:06:57 +0100 <gentauro> I mean, aren't all these arguments on why to use a `pure` programming language?
2020-12-13 18:06:59 +0100 <int-e> merijn: SafeHaskell has a big marketing problem... it's probably oversold, lifting expectations in it to a level that it can't meet.
2020-12-13 18:07:13 +0100 <int-e> But that doesn't make it useless.
2020-12-13 18:07:27 +0100int-eshrugs.
2020-12-13 18:07:38 +0100 <Logio> merijn: my threats are not about running untrusted code (in the nefarious sense), they're about statically determining that the code does no IO that might interfere with parallel execution, etc.
2020-12-13 18:07:45 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2020-12-13 18:07:58 +0100conal(~conal@66.115.176.144)
2020-12-13 18:08:22 +0100 <merijn> Logio: I mean, you don't really need SafeHaskell for that, tbh. Unsafe is generally so unsafe that it breaks rather quickly, so most people avoid it anyway
2020-12-13 18:08:52 +0100 <merijn> Logio: Like, I doubt you'll find many packages that actually end up using unsafePerformIO
2020-12-13 18:08:55 +0100 <Logio> merijn: yes, but I'm not guarding myself from the bad decisions of most people, but the stupid ones
2020-12-13 18:09:08 +0100 <merijn> And the ones that do are generally things like bytestring
2020-12-13 18:09:23 +0100 <int-e> merijn: foreign import unsafe ...
2020-12-13 18:09:24 +0100 <merijn> Logio: Stupid people can't use unsafeX in any remotely reliable way, it's too hard :p
2020-12-13 18:09:34 +0100 <int-e> actually just foreign import
2020-12-13 18:09:40 +0100xff0x(~fox@2001:1a81:5293:a900:a065:b2ef:56bb:c171) (Ping timeout: 258 seconds)
2020-12-13 18:09:45 +0100 <merijn> int-e: The unsafe there doesn't refer to IO at all :p
2020-12-13 18:09:50 +0100 <Logio> merijn: but they might at least realize that they are doing something stupid if their compile fails
2020-12-13 18:09:55 +0100 <int-e> merijn: I was going to say that that's a misnomer
2020-12-13 18:10:03 +0100 <gentauro> int-e: SafeHaskell (and rio) without this -> https://gitlab.com/uniprocess/haskell-template/-/blob/master/pkg/isolatedio/src/Uniprocess/Effects… isnt' very usefull (combined with the trust of packages of well ofc)
2020-12-13 18:10:03 +0100 <merijn> int-e: Sure, but not many people foreign importing without IO
2020-12-13 18:10:17 +0100 <int-e> merijn: but they could.
2020-12-13 18:10:25 +0100 <merijn> Logio: I never check safe Haskell and I haven't hit issues like that in practice
2020-12-13 18:10:27 +0100 <Logio> and the stupid person might also be me, writing debug code somewhere that it shouldn't be
2020-12-13 18:10:34 +0100xff0x(~fox@2001:1a81:5293:a900:dcb2:a43d:af2b:c6be)
2020-12-13 18:10:45 +0100 <int-e> and when they do, they basically have unsafePerformIO in their code without realizing it.
2020-12-13 18:11:27 +0100bitmagie(~Thunderbi@200116b806b03000d4de5885499e1489.dip.versatel-1u1.de) (Quit: bitmagie)
2020-12-13 18:11:43 +0100 <gentauro> SafeHaskell and Debug.trace don't play well together
2020-12-13 18:12:04 +0100 <int-e> gentauro: duh :)
2020-12-13 18:12:04 +0100 <gentauro> btw, you can't even start GHCi if your project is marked as -XSafe
2020-12-13 18:12:08 +0100 <Logio> merijn: so what will you do when you do hit an issue like that?
2020-12-13 18:12:30 +0100 <int-e> gentauro: and you can bypass it using your own trustworthy reexport of Debug.Trace... if that's what you want
2020-12-13 18:12:31 +0100 <gentauro> I find that annoying when developing (I turn it off) but when I'm done, I turn it on again ;)
2020-12-13 18:12:53 +0100 <int-e> the ghci thing *is* annoying though
2020-12-13 18:12:58 +0100 <gentauro> int-e: as long as you comply with exposing the IO so it complies with the type-system
2020-12-13 18:13:09 +0100 <gentauro> but if you try do `hide` something, you get a DENY from GHC
2020-12-13 18:13:10 +0100 <gentauro> ;)
2020-12-13 18:13:18 +0100 <gentauro> I spent so much time with this xD
2020-12-13 18:13:30 +0100 <int-e> or rather was... I think this is fixed in ghc 8.8?
2020-12-13 18:13:57 +0100 <merijn> Logio: I mean, it hasn't happened in about 10+ years of Haskell, so it's not something I worry about
2020-12-13 18:14:30 +0100pavonia(~user@unaffiliated/siracusa)
2020-12-13 18:14:50 +0100 <gentauro> merijn: my only point is that I would be really sad if they just remove it from GHC cos some NSA agents, I mean some people find it annoying xD
2020-12-13 18:16:06 +0100Jonno_FTW(~come@api.carswap.me) (Ping timeout: 256 seconds)
2020-12-13 18:16:10 +0100 <Logio> merijn: sure, I'm probably just a bit paranoid having seen what Python packages are willing to do to mess with you
2020-12-13 18:16:28 +0100 <gentauro> anybody know if the peeps from Galois is using SafeHaskell for some of their projects?
2020-12-13 18:16:57 +0100 <gentauro> I guess they have some high-level-sec reqs from their Government contracts right?
2020-12-13 18:17:05 +0100Bergle_1(~Bergle_4@101.165.90.119) (Ping timeout: 260 seconds)
2020-12-13 18:17:12 +0100 <Logio> the thing is though, I would rather have some mechanism of guarding (or at least alerting) me from stupidity, and not just hope that people know what they are doing
2020-12-13 18:17:15 +0100 <gentauro> (does anybody know any of Galois Haskell projects?)
2020-12-13 18:17:45 +0100Bergle_1(~Bergle_4@101.165.90.119)
2020-12-13 18:17:48 +0100 <merijn> Logio: Well, a key difference compared to python is that modules can't run any code unless you call it :p
2020-12-13 18:17:49 +0100Jonno_FTW(~come@api.carswap.me)
2020-12-13 18:18:13 +0100SomeoneSerge(~someone-s@143.244.42.97) (Ping timeout: 264 seconds)
2020-12-13 18:18:21 +0100hth313(~user@node-1w7jr9qio22jw89j5t7q3mryw.ipv6.telus.net)
2020-12-13 18:18:30 +0100 <Logio> merijn: and I would like that to be true for any function not typed IO
2020-12-13 18:19:58 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-12-13 18:20:02 +0100SomeoneSerge(~someone-s@5.253.207.84)
2020-12-13 18:21:16 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Quit: jpds)
2020-12-13 18:21:21 +0100 <Logio> I don't want to find out later that your supposedly pure algorithm goes and phones wolframalpha.com for answers (which is not far off from things I've seen Python people do)
2020-12-13 18:22:47 +0100 <gentauro> Logio: slide number 10 -> http://blog.stermon.com/assets/talks/2019-04-08_foss-north-limiting-side-effects-of-applications-a… ssh-decorator was sending your private keys to the author …
2020-12-13 18:23:09 +0100 <gentauro> that's stuff I would like to remove from my codebase … and that's the reason I "really, really" try to use SafeHaskell
2020-12-13 18:23:32 +0100shatriff(~vitaliish@176-52-216-242.irishtelecom.com)
2020-12-13 18:24:37 +0100 <gentauro> and you get to think on a another level when you try to solve problems. This is a good summary on using SafeHaskell -> http://blog.stermon.com/articles/2019/02/21/the-main-reason-i-use-safe-haskell-is-restriction.html
2020-12-13 18:24:41 +0100 <gentauro> ;)
2020-12-13 18:24:58 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.167)
2020-12-13 18:25:26 +0100 <gentauro> in my book, forcing yourself to use SafeHaskell, will make you a better Haskell dev
2020-12-13 18:25:47 +0100 <gentauro> (in some obscure and unhealty way xD)
2020-12-13 18:26:26 +0100 <Logio> that's a bit beside my point, since that package would'be always been about having side effects
2020-12-13 18:27:14 +0100 <Logio> If I run anything typed IO from anyone elses package, I expect missiles to be launched
2020-12-13 18:28:04 +0100 <gentauro> Logio: unless you avoid it :P
2020-12-13 18:28:05 +0100 <Logio> if it's not, I want my compiler to assure me that that's not happening
2020-12-13 18:28:23 +0100 <Athas> I don't think Safe Haskell will be removed, even if I also think it is not very useful. I recall that it was described as easy to implement and maintain.
2020-12-13 18:28:53 +0100 <Logio> the latter case is something that should not require trust
2020-12-13 18:28:59 +0100 <gentauro> Logio: slides 17-21 -> http://blog.stermon.com/assets/talks/2019-04-08_foss-north-limiting-side-effects-of-applications-a…
2020-12-13 18:29:10 +0100 <gentauro> you can't actually design your way out of it ;)
2020-12-13 18:29:42 +0100 <gentauro> and for me that's a really powerfull thing when it comes to security
2020-12-13 18:30:06 +0100 <Kronic> It took a long time but I finally understand how use megaparsec to solve some of the AOC problems. Embarassingly what confused me the most was where the combinators were coming from
2020-12-13 18:30:31 +0100 <gentauro> btw, Kris Jenkins (at Tweag.io who does a lot of Elm and PureScript) said that Global IO in Haskell is as bad as Global variables in imperative/OO languages. And I somehow tend to agree
2020-12-13 18:31:07 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 18:31:20 +0100 <gentauro> 18:28 < Athas> I don't think Safe Haskell will be removed, even if I also think it is not very useful. I recall that it was described as easy to implement and maintain.
2020-12-13 18:31:31 +0100 <gentauro> Athas: if it happens, I guess it would be time to move to Futhark ;)
2020-12-13 18:32:39 +0100Tario(~Tario@201.192.165.173)
2020-12-13 18:32:42 +0100coot_(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl)
2020-12-13 18:33:01 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection)
2020-12-13 18:33:27 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz)
2020-12-13 18:33:49 +0100 <dsal> Kronic: that's pretty normal, afaict
2020-12-13 18:34:20 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-13 18:34:25 +0100 <sm[m]> Agreed, you and all of us Kronic
2020-12-13 18:34:48 +0100conal(~conal@66.115.176.144) (Quit: Computer has gone to sleep.)
2020-12-13 18:35:09 +0100 <dminuoso> Kronic: Overall, I dont think AOC is a good way to learn megaparsec.
2020-12-13 18:35:50 +0100conal(~conal@66.115.176.144)
2020-12-13 18:35:56 +0100conal(~conal@66.115.176.144) (Client Quit)
2020-12-13 18:36:03 +0100 <dminuoso> In my opinion, the ideal way to write parsers with parser combinators like megaparsec, is by trying to formulate production rules in BNF, and then match your code with the BNF as much as possible.
2020-12-13 18:36:13 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds)
2020-12-13 18:36:13 +0100coot_coot
2020-12-13 18:36:14 +0100 <sm[m]> it sure has caused a wave of new megaparsec learners..
2020-12-13 18:36:31 +0100 <gentauro> dminuoso: you have to start small …
2020-12-13 18:36:31 +0100 <dminuoso> Rather than trying to make an ad-hoc thing
2020-12-13 18:36:40 +0100 <dminuoso> gentauro: Then start with a simple grammar!
2020-12-13 18:37:01 +0100 <dminuoso> monochrom has a lot to say about folks trying to skip the theory and just "get practical first"
2020-12-13 18:37:03 +0100 <gentauro> dminuoso: most people (no academic background) don't know what a grammar is ;)
2020-12-13 18:37:14 +0100 <dminuoso> So learn about grammars then?
2020-12-13 18:37:19 +0100 <dsal> I tend to read manuals later.
2020-12-13 18:37:42 +0100 <gentauro> dminuoso: to drive a car, you don't need to know how the engine works right?
2020-12-13 18:37:43 +0100 <sm[m]> I agree with dminuoso, these days I always write a grammar as a comment before writing any non trivial parser
2020-12-13 18:38:01 +0100 <gentauro> to compile your application, you don't need to know how the compiler works right?
2020-12-13 18:38:02 +0100 <dminuoso> gentauro: The analogy is deeply flawed.
2020-12-13 18:38:09 +0100 <dsal> If you want to make crushed ice, you have to have a strong physics background.
2020-12-13 18:38:14 +0100conal(~conal@66.115.176.144)
2020-12-13 18:38:14 +0100conal(~conal@66.115.176.144) (Client Quit)
2020-12-13 18:38:43 +0100conal(~conal@66.115.176.144)
2020-12-13 18:38:45 +0100 <gentauro> dminuoso: might be, but it still delivers the point ;)
2020-12-13 18:38:55 +0100 <sm[m]> Iwrite a spec to know what correct parser behaviour is
2020-12-13 18:39:01 +0100conal(~conal@66.115.176.144) (Client Quit)
2020-12-13 18:39:13 +0100gzj(~gzj@unaffiliated/gzj) (Ping timeout: 264 seconds)
2020-12-13 18:39:14 +0100 <Kronic> A fair few people told me that AOC is not a good way to learn it but I wansn't using megaparsec to solve AOC, it's the other way around
2020-12-13 18:39:20 +0100 <dsal> For real projects, I often just write a config file in the format I want, then write a parser for that, then use my software.
2020-12-13 18:39:43 +0100 <dsal> Kronic: AoC isn't a good way to learn megaparsec because the parsing you get to do is typically pretty limited.
2020-12-13 18:40:01 +0100 <sm[m]> surely that's good when starting ?
2020-12-13 18:40:07 +0100 <glguy> aoc seems like a fine way to learn megaparsec
2020-12-13 18:40:10 +0100 <dsal> But it's a good way to learn megaparsec because you at least can use it some, and I learn nice little things.
2020-12-13 18:40:14 +0100 <gentauro> glguy: I agree
2020-12-13 18:40:20 +0100 <glguy> you get some easy stuff to learn on, and if something really complicated you shouldn't be using parser combinators anyway
2020-12-13 18:40:32 +0100 <gentauro> basic examples that get you `hooked` on the power of `parser combinators`
2020-12-13 18:40:39 +0100 <ephemient> there were some more interesting inputs to parse in past years
2020-12-13 18:40:46 +0100 <ephemient> not much this year so far though
2020-12-13 18:40:48 +0100 <gentauro> for that point, if you are more interesed, then learn more about parsing and
2020-12-13 18:40:50 +0100 <dminuoso> My main beef with parser combinators here, is that they have way too much adhoc power.
2020-12-13 18:41:09 +0100 <gentauro> 18:40 < ephemient> not much this year so far though
2020-12-13 18:41:13 +0100 <gentauro> ephemient: I agree :)
2020-12-13 18:41:17 +0100 <dsal> ephemient: Yeah, I can't remember whether input was harder to parse, or I'm just better at parsing because I've written a lot of parsers since then.
2020-12-13 18:41:47 +0100 <glguy> I can only think of a couple AoC problems that were close to hard to parse over the years
2020-12-13 18:42:25 +0100mozzarella(~sam@unaffiliated/sam113101)
2020-12-13 18:42:49 +0100thunderseethe(4a882763@cpe-74-136-39-99.kya.res.rr.com)
2020-12-13 18:42:52 +0100conal(~conal@66.115.176.144)
2020-12-13 18:43:06 +0100 <glguy> 2018 day 24 was more annoying
2020-12-13 18:43:08 +0100 <Kronic> Generally I tune out anything like that, megaparsec is clearly very robust but I would not want to have to try to learn it in the context of something much more complicated because I find when that is the case, stuff inside my head is fighting for room. AOC let me just ignore the problem and focus on the solution.
2020-12-13 18:43:28 +0100 <Kronic> I mean, there is a reason that during a driving test they make you go around the car park at first
2020-12-13 18:43:46 +0100 <glguy> megaparsec is particularly good for aoc because its error messages can help with debugging your parser as you write it
2020-12-13 18:44:05 +0100 <thunderseethe> Is there a way to construct a type level function that behaves like `(\i -> a i -> b i)`?
2020-12-13 18:45:25 +0100 <ephemient> <off-topic> eh, my driving lessons and driving test went out onto public roads right away
2020-12-13 18:45:27 +0100 <solonarv> sure: type AB i = A i -> B i -- for example
2020-12-13 18:45:42 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-13 18:45:46 +0100 <solonarv> although this isn't quite a "type-level function" since you must fully apply it
2020-12-13 18:45:49 +0100 <thunderseethe> Or I guess like, a type alias `type Fn a b i = a i -> b i` except `Fn a b` is valid as a type
2020-12-13 18:46:01 +0100 <thunderseethe> Ah yeah, I need the partial application specifically
2020-12-13 18:46:10 +0100 <ski> s/is/isn't/
2020-12-13 18:46:34 +0100 <glguy> Parsing AoC 2017 Day 25 was rather annoying, too
2020-12-13 18:46:38 +0100 <ski> where do you need it ?
2020-12-13 18:47:02 +0100 <sm[m]> #haskell driving instruction: throw you out in a F1 car on day 1 :)
2020-12-13 18:47:05 +0100 <glguy> but maybe not so much hard as tedious
2020-12-13 18:47:16 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-12-13 18:47:44 +0100 <thunderseethe> or perhaps I'm misguided in general. I'm trying to put together an indexed applicative class with sig `class IxFunctor f => IxApplicative (f :: (Type -> Type) -> Type -> Type) where` and struggling with sig for `<*>`
2020-12-13 18:48:31 +0100 <thunderseethe> I assume I need something like `f (\i a i -> b i) i -> f a i -> f b i` but I would not be surprised if my approach if fundamentally flawed
2020-12-13 18:49:04 +0100Varis(~Tadas@unaffiliated/varis)
2020-12-13 18:49:21 +0100sh9(~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8)
2020-12-13 18:50:16 +0100 <solonarv> I've mostly seen "IxApplicative" defined like so: class IxApplicative (f :: k -> k -> Type -> Tyoe) where ipure :: a -> f i i a; (<*@>) :: f i j (a -> b) -> f j k a -> f i k b
2020-12-13 18:50:16 +0100 <ski> thunderseethe : that doesn't kind-check
2020-12-13 18:50:24 +0100 <solonarv> note that there are *two* indices!
2020-12-13 18:50:58 +0100 <ski> (perhaps not use `k' for two different things)
2020-12-13 18:51:07 +0100 <solonarv> oh, oops ;)
2020-12-13 18:52:00 +0100cosimone(~cosimone@2001:b07:ae5:db26:1fb3:ef3f:ece2:c6f8)
2020-12-13 18:52:33 +0100 <ski> thunderseethe : i guess you actually meant `\i -> a i -> b i', when you said `\i a i -> b i' there ?
2020-12-13 18:52:44 +0100 <thunderseethe> yes
2020-12-13 18:53:47 +0100 <thunderseethe> with the `k -> k -> Type -> Type` is the idea that by foregoing `(Type -> Type)` we avoid needing (->) specifically and sidestep the type level partial application?
2020-12-13 18:55:57 +0100 <ski> the usual thing people want, when they do "indexed monad" is to express a kind of "binary relations" on these indices. so `return' ends up expressing reflexivity on the indices, and `(>>=)' (or `join', if you prefer) ends up expressing transitivity
2020-12-13 18:56:13 +0100juuandyy(~juuandyy@90.166.144.65)
2020-12-13 18:57:28 +0100 <ski> while it looks like you're wanting to express functors, not on `Type', but on `ki -> Type', where `ki' is whatever the kind of your indices you want to have
2020-12-13 18:58:47 +0100johnw(~johnw@haskell/developer/johnw) (Ping timeout: 260 seconds)
2020-12-13 18:59:09 +0100 <ski> (still endofunctors, just like `Functor' expresses endofunctors on concrete Haskell types. only difference is that you want to express endofunctors on types parameterized on input type of kind `ki', and then want to have an applicative version of these functors)
2020-12-13 18:59:28 +0100 <ski> thunderseethe : anyway, try `newtype'
2020-12-13 19:00:01 +0100 <thunderseethe> That may be the case but I'm not following your throughline, if I swap to `f :: (ki -> Type) -> Type -> Type` For a given concrete `ki` I'm in the same spot right wrt to my `<*>` def?
2020-12-13 19:00:41 +0100johnw(~johnw@haskell/developer/johnw)
2020-12-13 19:00:44 +0100 <ski> the situation i was describing would be `f :: (ki -> Type) -> (ki -> Type)' (only you had `ki = Type' above)
2020-12-13 19:01:27 +0100 <thunderseethe> by newtype do you mean somthing like `newtype Fn a b i = Fn (a i -> b i)`?
2020-12-13 19:01:36 +0100 <ski> yes
2020-12-13 19:02:00 +0100 <ski> (i'm not too sure it makes sense in your situation, but you can try it and see ?)
2020-12-13 19:02:47 +0100 <thunderseethe> Is there a way I can do that without it influencing the remainder of my api? My reservation with a newtype is that anyone consuming `<*>` would require wrapping their base (->) in my `Fn` wrapper
2020-12-13 19:03:01 +0100 <thunderseethe> not the end of the world, but I'd like to avoid it if possible
2020-12-13 19:04:19 +0100p8m_(p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 246 seconds)
2020-12-13 19:04:29 +0100 <ski> (the question would be : if `C' and `KI' are categories, and `C' is cartesian closed, is `C^KI' also cartesian closed, and is the exponential `F -> G' in it the functor that maps `I' (in `KI') to the exponential object `F I -> G I' ?)
2020-12-13 19:04:58 +0100p8m(p8m@gateway/vpn/protonvpn/p8m)
2020-12-13 19:05:12 +0100 <dolio> "Yes" and "no".
2020-12-13 19:05:35 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in)
2020-12-13 19:05:55 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2020-12-13 19:06:20 +0100 <thunderseethe> I don't think that's the question, but maybe
2020-12-13 19:07:06 +0100 <ski> is the latter salvagable by some "reasonable" extra assumptions ? or is there some other "interesting" modification that would hold ?
2020-12-13 19:07:08 +0100 <dolio> Actually, that might require qualifiers. C needs to have tensors by homs of KI, I think.
2020-12-13 19:08:49 +0100 <dolio> Maybe if KI is discrete it would reduce to that.
2020-12-13 19:09:23 +0100 <thunderseethe> KI is `Type` so I'd guess that implies it's hask?
2020-12-13 19:09:28 +0100 <ski> thunderseethe : i was thinking perhaps you could yoneda or coyoneda it (by which i mean, being able to "lift" `\i -> a i -> b i' out into a context, where you could hopefully saturate the application), but then i recalled that you're exactly trying to express that `f' is a functor, so i don't think that'd work ..
2020-12-13 19:09:48 +0100 <thunderseethe> Ah yeah
2020-12-13 19:11:13 +0100 <dolio> ski: The reason what you said doesn't work is that it's not functorial, so it needs to be fixed up by doing `forall r. (i -> r) -> F r -> G r` instead.
2020-12-13 19:11:18 +0100 <ezzieyguywuf> lol, search results for "haskell cassava" https://i.imgur.com/Xcb8zY1.png
2020-12-13 19:11:23 +0100 <ski> (if `F' is a functor, then `F T' is (yoneda) equivalent to `forall a. (T -> a) -> F a', and (coyoneda) to `exists a. (F a,a -> T)'. so, using either of those, you can "lift" `T' out of `F')
2020-12-13 19:11:29 +0100 <dolio> Like Kripke semantics.
2020-12-13 19:12:15 +0100 <ski> dolio : oh, right. of course
2020-12-13 19:12:31 +0100 <ski> (you just yonedaed it)
2020-12-13 19:12:48 +0100 <ski> (how's it like Kripke semantics ?)
2020-12-13 19:12:49 +0100elliott_(~elliott@pool-108-45-178-3.washdc.fios.verizon.net)
2020-12-13 19:13:14 +0100 <dolio> Implication works the same way. Quantify over all worlds in one direction.
2020-12-13 19:13:36 +0100 <ski> hm, i see
2020-12-13 19:13:36 +0100 <monochrom> haha ezzieyguywuf
2020-12-13 19:13:42 +0100 <ski> interesting observation
2020-12-13 19:14:07 +0100 <dolio> Because otherwise it wouldn't be appropriately monotone.
2020-12-13 19:14:22 +0100 <ski> (reminds me of some modal logic whose Kripke semantics used a ternary relation, for interpreting implication)
2020-12-13 19:14:39 +0100 <ski> yea
2020-12-13 19:14:45 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Quit: vfaronov)
2020-12-13 19:15:04 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 19:15:36 +0100 <ski> (something like `forall v,w. R u v w -> F v -> G w'. might misremember the quantifiers)
2020-12-13 19:17:23 +0100sakirious(~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Quit: The Lounge - https://thelounge.chat)
2020-12-13 19:17:27 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
2020-12-13 19:19:15 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Client Quit)
2020-12-13 19:19:36 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 19:20:06 +0100 <dolio> So basically, presheaves become a generalization of the stuff used in Kripke semantics, and when you use presheaves as to interpret logic people call it Kripke-Joyal semantics, I think.
2020-12-13 19:20:32 +0100 <ski> mhm
2020-12-13 19:20:42 +0100 <dolio> Or maybe sheaves as well.
2020-12-13 19:21:32 +0100 <ski> have presheaves been used for modal stuff ?
2020-12-13 19:22:39 +0100 <dolio> Probably.
2020-12-13 19:25:26 +0100 <ski> hmm. so `forall r. (i -> r) -> F r -> G r' is actually like `[] (F -> G)' (interpreting `F -> G' here plain pointwise, as thunderseethe wanted), since `[] F T' is `forall a. (T -> a) -> F a' (and `<> F T' is `exists a. (F a,a -> T)')
2020-12-13 19:25:32 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 19:26:57 +0100 <dolio> `[](F -> G)` would be `λ j -> forall i r. (i -> r) -> F r -> G r` I believe.
2020-12-13 19:27:17 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 19:27:24 +0100 <ski> yea, forgot to abstract over `i'
2020-12-13 19:27:55 +0100 <ski> hm, oh. you quantified `i'. what's `j' for then ?
2020-12-13 19:27:57 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 19:28:14 +0100amiri(~amiri@cpe-76-91-154-9.socal.res.rr.com) (Remote host closed the connection)
2020-12-13 19:28:17 +0100 <dolio> Every proposition in modal logic is interpreted as a functor from the worlds.
2020-12-13 19:28:38 +0100 <ski> yes, i should have said `\i -> forall r. (i -> r) -> F r -> G r' is actually like `[] (F -> G)'
2020-12-13 19:28:54 +0100 <dolio> It's not, though. That is just `F -> G`.
2020-12-13 19:30:35 +0100 <dolio> Well, I guess if you're talking about classical modal logic, it might be.
2020-12-13 19:31:01 +0100 <dolio> What I'm talking about is the semantics for intuitionistic logic, I guess.
2020-12-13 19:31:41 +0100 <ski> well, i'm interpreting `[] F' (interior of `F') by `\u -> forall v. (u -> v) -> F v', and taking `F -> G' in `[] (F -> G)' to mean exactly `\i -> F i -> G i' (which is not monotone / upper / a functor)
2020-12-13 19:32:22 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 260 seconds)
2020-12-13 19:32:50 +0100 <ski> yea, i was first thinking about Kripke for intuitionistic logic, and then thinking about the usual Kripke for modal logic, interpreting `[]' and `<>' as switching worlds (and then thinking of `[]' and `<>' as yoneda and coyoneda in this functor setting)
2020-12-13 19:34:27 +0100 <ski> so yoneda / necessity is used to make the interpretation of implication monotone, because it wouldn't otherwise be, because of the contravariance
2020-12-13 19:34:31 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta)
2020-12-13 19:34:45 +0100 <dolio> Yeah.
2020-12-13 19:34:56 +0100juuandyy(~juuandyy@90.166.144.65) (Ping timeout: 240 seconds)
2020-12-13 19:35:34 +0100 <ski> (and i hadn't noticed before that that could be seen as a reason for the modal interpretation of intuitionistic logic wrapping implication in necessity)
2020-12-13 19:35:49 +0100Foobarblob(188838c2@ip24-136-56-194.ga.at.cox.net)
2020-12-13 19:37:52 +0100 <operand> How do I "cast" an Int to an Integer?
2020-12-13 19:38:06 +0100 <operand> It's quite difficult to find on Hoogle
2020-12-13 19:38:13 +0100 <hpc> @hoogle Int -> Integer
2020-12-13 19:38:14 +0100 <lambdabot> Test.DejaFu.SCT.Internal toId :: Coercible Id a => Int -> a
2020-12-13 19:38:14 +0100 <lambdabot> Prelude toInteger :: Integral a => a -> Integer
2020-12-13 19:38:14 +0100 <lambdabot> GHC.Real toInteger :: Integral a => a -> Integer
2020-12-13 19:38:25 +0100 <hpc> toInteger :P
2020-12-13 19:38:31 +0100 <operand> Thanks! :P
2020-12-13 19:38:35 +0100 <hpc> what were you searching for?
2020-12-13 19:38:45 +0100 <operand> I somehow didnt think of searching for a type signature... I've mostly used hoogle to look up the signatures of names rather than the other way around
2020-12-13 19:38:54 +0100 <hpc> ah yep, that'll do it
2020-12-13 19:38:59 +0100 <teddyc> wow hoogle bot. really cool
2020-12-13 19:39:01 +0100 <hpc> i always start with type signatures
2020-12-13 19:39:06 +0100 <ski> @type fromInteger
2020-12-13 19:39:08 +0100 <lambdabot> Num a => Integer -> a
2020-12-13 19:39:09 +0100 <ski> @type fromIntegral
2020-12-13 19:39:11 +0100 <lambdabot> (Integral a, Num b) => a -> b
2020-12-13 19:39:32 +0100 <ski> @src fromIntegral
2020-12-13 19:39:32 +0100 <lambdabot> fromIntegral = fromInteger . toInteger
2020-12-13 19:40:00 +0100 <ski> @type realToFrac
2020-12-13 19:40:04 +0100 <lambdabot> (Real a, Fractional b) => a -> b
2020-12-13 19:40:05 +0100 <ski> @src realToFrac
2020-12-13 19:40:05 +0100 <lambdabot> realToFrac = fromRational . toRational
2020-12-13 19:41:25 +0100thunderseethe(4a882763@cpe-74-136-39-99.kya.res.rr.com) (Remote host closed the connection)
2020-12-13 19:47:01 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 19:47:48 +0100xff0x(~fox@2001:1a81:5293:a900:dcb2:a43d:af2b:c6be) (Ping timeout: 258 seconds)
2020-12-13 19:48:13 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-12-13 19:48:46 +0100xff0x(~fox@2001:1a81:5293:a900:f3be:5ee0:a079:bf8c)
2020-12-13 19:48:48 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 19:49:25 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 19:50:23 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Ping timeout: 240 seconds)
2020-12-13 19:53:45 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 240 seconds)
2020-12-13 19:56:37 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 19:59:17 +0100mounty(~mounty@210.1.196.133) (Ping timeout: 260 seconds)
2020-12-13 20:01:14 +0100dmiles(~dmiles@c-98-232-203-165.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
2020-12-13 20:01:50 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 256 seconds)
2020-12-13 20:03:08 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 258 seconds)
2020-12-13 20:03:31 +0100berberman(~berberman@unaffiliated/berberman)
2020-12-13 20:06:16 +0100Sheilong(uid293653@gateway/web/irccloud.com/x-besskplfeidxcvug)
2020-12-13 20:06:58 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net)
2020-12-13 20:07:50 +0100dmiles(~dmiles@c-98-232-203-165.hsd1.wa.comcast.net)
2020-12-13 20:07:56 +0100 <dminuoso> operand: As an additional primitive to be aware of: toIntegralSized for converting into a smaller numeric type without loss by including a runtime check
2020-12-13 20:08:08 +0100 <dminuoso> (That is, between any two Integral types)
2020-12-13 20:11:29 +0100lambda-11235(~lambda-11@2600:1700:7c70:4600:bc15:16d3:5c9f:657f)
2020-12-13 20:11:32 +0100Rudd0(~Rudd0@185.189.115.103) (Read error: Connection reset by peer)
2020-12-13 20:15:57 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Remote host closed the connection)
2020-12-13 20:16:43 +0100Vulfe(~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net)
2020-12-13 20:16:55 +0100Vulfe(~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) (Remote host closed the connection)
2020-12-13 20:17:02 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 20:19:25 +0100amiri(~amiri@cpe-76-91-154-9.socal.res.rr.com)
2020-12-13 20:19:37 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Ping timeout: 258 seconds)
2020-12-13 20:22:18 +0100tenniscp25(~tenniscp2@134.196.209.118) ()
2020-12-13 20:23:41 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 20:23:59 +0100shatriff(~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
2020-12-13 20:24:39 +0100tsrt^(tsrt@ip98-184-89-2.mc.at.cox.net) ()
2020-12-13 20:27:53 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-12-13 20:28:17 +0100caef^(caef@ip98-184-89-2.mc.at.cox.net)
2020-12-13 20:31:32 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2020-12-13 20:34:25 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-12-13 20:35:14 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-13 20:36:17 +0100 <justsomeguy> Out of curiosity, is there a way to persist type information to runtime (so for example, a function can query the type of new input values)? Or is the type system completely static?
2020-12-13 20:37:00 +0100hf69(~haskeller@ip72-205-40-121.dc.dc.cox.net) (Remote host closed the connection)
2020-12-13 20:37:03 +0100 <solonarv> you can do that, yes, that's what Typeable and the related machinery do
2020-12-13 20:37:39 +0100 <merijn> justsomeguy: It's completely static, but that doesn't mean you can't do fascinating dynamic looking hacks :p
2020-12-13 20:37:45 +0100 <merijn> :t cast
2020-12-13 20:37:47 +0100 <lambdabot> (Typeable a, Typeable b) => a -> Maybe b
2020-12-13 20:38:00 +0100 <mniip> a TypeRep is a complete runtime description of a concrete type
2020-12-13 20:38:03 +0100 <merijn> > cast True :: Maybe Int
2020-12-13 20:38:06 +0100 <lambdabot> Nothing
2020-12-13 20:38:10 +0100 <merijn> > cast True :: Maybe Bool
2020-12-13 20:38:13 +0100 <lambdabot> Just True
2020-12-13 20:38:28 +0100 <mniip> Typeable is the (compiler-managed) typeclass that associates a type with its TypeRep
2020-12-13 20:38:39 +0100 <merijn> justsomeguy: There's also the Dynamic type, which is basically built on top of Typeable and cast
2020-12-13 20:38:42 +0100 <mniip> Dynamic is a pair of a value and its TypeRep
2020-12-13 20:38:54 +0100 <merijn> @hoogle Dynamic
2020-12-13 20:38:55 +0100 <lambdabot> module Data.Dynamic
2020-12-13 20:38:55 +0100 <lambdabot> Data.Dynamic data Dynamic
2020-12-13 20:38:55 +0100 <lambdabot> Data.Dynamic Dynamic :: forall a . TypeRep a -> a -> Dynamic
2020-12-13 20:39:44 +0100 <mniip> I wonder what happens if you codensity dynamic
2020-12-13 20:40:15 +0100 <mniip> data Dynamic where Dynamic :: (forall b. Typeable b => Maybe b) -> Dynamic
2020-12-13 20:40:58 +0100 <solonarv> looks to me like a DMap TypeRep Identity
2020-12-13 20:41:32 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Remote host closed the connection)
2020-12-13 20:41:37 +0100 <Kronic> with the haskell plugin in vscode is there a way to see what the type of something under the cursor is instead of on mouse hover ?
2020-12-13 20:42:14 +0100Vulfe(~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net)
2020-12-13 20:44:15 +0100nek0(~nek0@mail.nek0.eu) (Quit: The Lounge - https://thelounge.chat)
2020-12-13 20:44:24 +0100 <mniip> solonarv, hmm I haven't thought about that
2020-12-13 20:44:29 +0100 <mniip> you could store multiple types
2020-12-13 20:45:00 +0100 <mniip> I guess the correct codensity would be
2020-12-13 20:45:10 +0100 <mniip> ((forall a. Typeable a => a -> r) -> r)
2020-12-13 20:45:13 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 264 seconds)
2020-12-13 20:45:20 +0100 <solonarv> eh, not quite the same becaose you can't go write fwd :: Dynamic -> DMap TypeRep Identity
2020-12-13 20:45:32 +0100DTZUZU(~DTZUZU@205.ip-149-56-132.net)
2020-12-13 20:45:39 +0100 <solonarv> (since there's no way to get "all the typereps for which this is Just")
2020-12-13 20:46:03 +0100 <mniip> it is to DMap as function is to Map
2020-12-13 20:47:07 +0100Vulfe(~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) (Ping timeout: 265 seconds)
2020-12-13 20:47:14 +0100 <solonarv> yeah
2020-12-13 20:47:44 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-12-13 20:47:55 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Remote host closed the connection)
2020-12-13 20:48:22 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-12-13 20:48:57 +0100 <justsomeguy> It's interesting how Haaskell has these facilities for introspection, even though its type system starts from a completely different place than the other languages I've used (Python, JS). ...I'm going to have to read through Data.Typeable and the paper for Type.Reflection.
2020-12-13 20:52:55 +0100knupfer(~Thunderbi@200116b82c21a8005c6c9e172e74e2cf.dip.versatel-1u1.de) (Quit: knupfer)
2020-12-13 20:53:04 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Ping timeout: 256 seconds)
2020-12-13 20:54:13 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-12-13 20:54:25 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311) (Remote host closed the connection)
2020-12-13 20:55:09 +0100HorseGirl(~UserNick@217.138.194.74) (Quit: Going offline, see ya! (www.adiirc.com))
2020-12-13 20:56:35 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-12-13 20:56:42 +0100quarters(~quarters@unaffiliated/quarters)
2020-12-13 20:56:45 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Read error: Connection reset by peer)
2020-12-13 20:56:53 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt)
2020-12-13 20:57:08 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-13 21:00:47 +0100 <quarters> hello. while I'm able to run stack just fine on arch linux, the ~/.stack directory is at least 2x that of ~/.cabal . I was hoping to use cabal for this reason, but it sounds like arch package maintainers abandoned haskell. that said, I was considering using the haskell docker image to develop with, but wasn't quite sure how to go about doing this. I'm using vs code for development and was considering using the dev container feature for this
2020-12-13 21:02:09 +0100 <merijn> quarters: cabal/ghc work fine, just don't use the Arch packages to install them. You can either use ghcup or consult the Arch wiki (which I think has a lot of info on how to fix/work around their broken Haskell environment)
2020-12-13 21:03:41 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 21:05:33 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-12-13 21:07:30 +0100 <quarters> merijn: thanks. I'll look into using ghcup right now. the issue I was having (in case a solution's been found for this) is the one described here: https://bbs.archlinux.org/viewtopic.php?id=230166
2020-12-13 21:08:18 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 258 seconds)
2020-12-13 21:10:53 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving)
2020-12-13 21:10:58 +0100 <merijn> quarters: The problem is that Arch maintainers *intentionally* ship a broken GHC configuration
2020-12-13 21:11:56 +0100 <merijn> quarters: Specifically, they *only* ship the dynamic library versions of packages, but by default GHC uses static linking. Which leads it to complain about missing static libraries when used normally, since those are intentionally not installed
2020-12-13 21:12:17 +0100 <merijn> quarters: So the fix is (as I said initially) to not use any of the Arch Haskell packages
2020-12-13 21:12:40 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
2020-12-13 21:13:07 +0100 <merijn> I think you can get a non-broken GHC via ghc-static, but consult the Arch wiki for details
2020-12-13 21:13:37 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in)
2020-12-13 21:13:37 +0100Feuermagier(~Feuermagi@213.178.26.41)
2020-12-13 21:13:53 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2020-12-13 21:14:26 +0100 <geekosaur> that gets you the missing part of ghc itself but not of any other haskell libs installed via arch
2020-12-13 21:17:28 +0100juuandyy(~juuandyy@90.166.144.65)
2020-12-13 21:18:26 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-12-13 21:18:33 +0100 <merijn> Sure
2020-12-13 21:18:34 +0100ggole(~ggole@2001:8003:8119:7200:e9c3:d38f:e40d:d76e) (Quit: Leaving)
2020-12-13 21:19:12 +0100hiroaki(~hiroaki@2a02:908:4b1b:20a0::77a4)
2020-12-13 21:19:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-13 21:22:30 +0100bitmagie(~Thunderbi@200116b806b03000d4de5885499e1489.dip.versatel-1u1.de)
2020-12-13 21:23:38 +0100bitmagie(~Thunderbi@200116b806b03000d4de5885499e1489.dip.versatel-1u1.de) (Client Quit)
2020-12-13 21:23:40 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-vdkgorsbhzvcovdf)
2020-12-13 21:23:41 +0100 <quarters> merijn: gotcha. thanks. is running "cabal run" in the project directory doing it wrong? that is, do I need to specify the project name as an argument?
2020-12-13 21:24:14 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 21:24:45 +0100 <quarters> running cabal run sets off a long list of what looks like libraries/packages and it's been running for the past 10 minutes
2020-12-13 21:27:31 +0100 <merijn> quarters: It's installing all the dependencies needed to build your project so it can be run
2020-12-13 21:27:50 +0100 <merijn> Which, depending on the project and the number of dependencies can take a while, yes
2020-12-13 21:28:57 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 272 seconds)
2020-12-13 21:29:56 +0100 <quarters> merijn: ah. ok. I've only included base and scotty for this project. I'm guessing that the dependencies that are downloaded are globally installed rather than on a project by project basis?
2020-12-13 21:30:41 +0100 <merijn> They are globally installed and shared "as possible", yes
2020-12-13 21:31:51 +0100juuandyy(~juuandyy@90.166.144.65) (Quit: Konversation terminated!)
2020-12-13 21:32:32 +0100conal(~conal@66.115.176.144) (Quit: Computer has gone to sleep.)
2020-12-13 21:33:18 +0100conal(~conal@66.115.176.144)
2020-12-13 21:33:23 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 240 seconds)
2020-12-13 21:34:45 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Quit: vfaronov)
2020-12-13 21:35:02 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 21:35:56 +0100conal(~conal@66.115.176.144) (Client Quit)
2020-12-13 21:36:30 +0100 <quarters> awesome. thanks!
2020-12-13 21:37:49 +0100conal(~conal@66.115.176.144)
2020-12-13 21:37:49 +0100conal(~conal@66.115.176.144) (Client Quit)
2020-12-13 21:38:05 +0100 <aplainzetakind> My ~/.cabal is getting pretty huge from all the v2-installs of various projects and ghc versions. I can't break anything by manually removing things from ~/.cabal/packages/hackage.haskell.org/ right?
2020-12-13 21:38:10 +0100 <aplainzetakind> Like, everything.
2020-12-13 21:38:22 +0100 <aplainzetakind> They'd be rebuilt as needed?
2020-12-13 21:38:40 +0100 <sclv> the store holds the installs
2020-12-13 21:38:46 +0100 <sclv> that dir just caches downloaded tarballs
2020-12-13 21:39:00 +0100 <sclv> but if you delete from the store selectively it invalidates the index and _everything_ breaks
2020-12-13 21:39:07 +0100 <sclv> so you have to delete the store all at once or not at all
2020-12-13 21:39:15 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Client Quit)
2020-12-13 21:39:28 +0100 <monochrom> ~/.cabal/packages/hackage.haskell.org holds downloaded tarball and the result of "cabal update" only.
2020-12-13 21:39:33 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 21:39:56 +0100g4br13l(~g4br13l@191.96.4.51)
2020-12-13 21:40:03 +0100 <monochrom> If you no longer use GHC 8.6.3, for example, you can erase ~/.cabal/store/ghc-8.6.3
2020-12-13 21:40:47 +0100 <monochrom> If you're OK with scorched earth and rebuilding every lib you actually use today for the actual GHC version you use today, it's also OK to erase all of ~/.cabal/store
2020-12-13 21:40:52 +0100conal(~conal@66.115.176.144)
2020-12-13 21:41:06 +0100doct0rhu(~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net)
2020-12-13 21:41:29 +0100 <aplainzetakind> Alright, there are quite a few ghc folders there. Most can go probably.
2020-12-13 21:44:52 +0100OpenSorceress(~opensorce@rrcs-67-79-205-19.sw.biz.rr.com)
2020-12-13 21:44:52 +0100OpenSorceress(~opensorce@rrcs-67-79-205-19.sw.biz.rr.com) (Changing host)
2020-12-13 21:44:52 +0100OpenSorceress(~opensorce@unaffiliated/screamingbanshee)
2020-12-13 21:45:14 +0100 <monochrom> Actually you can also do precision surgical delete if you know how to use "ghc-pkg --package-db=$HOME/.cabal/store/ghc-<version> unregister" first.
2020-12-13 21:46:22 +0100 <monochrom> err, $HOME/.cabal/store/ghc-<version>/package.db
2020-12-13 21:46:25 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 21:46:54 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 21:47:11 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 21:47:31 +0100 <aplainzetakind> Well I didn't even know ghc-pkg was a thing.
2020-12-13 21:48:06 +0100 <merijn> aplainzetakind: ~/.cabal/store/ghc-X.Y can be safely nuked
2020-12-13 21:48:25 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 21:48:30 +0100SomeoneSerge(~someone-s@5.253.207.84) (Ping timeout: 265 seconds)
2020-12-13 21:48:38 +0100 <merijn> aplainzetakind: Of course your first few compiles after that will be *super* slow, but it's fine
2020-12-13 21:49:00 +0100conal(~conal@66.115.176.144) (Quit: Computer has gone to sleep.)
2020-12-13 21:49:14 +0100 <merijn> There's also some experimental tools for cleaning up the store, but tbh they're more bother than they're worth
2020-12-13 21:49:38 +0100conal(~conal@66.115.176.144)
2020-12-13 21:51:45 +0100conal(~conal@66.115.176.144) (Client Quit)
2020-12-13 21:54:03 +0100conal(~conal@66.115.176.144)
2020-12-13 21:54:03 +0100conal(~conal@66.115.176.144) (Client Quit)
2020-12-13 21:54:11 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net)
2020-12-13 21:55:58 +0100g4br13l(~g4br13l@191.96.4.51) (Ping timeout: 256 seconds)
2020-12-13 21:57:39 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 21:58:23 +0100 <alestane> Greetings; I am fairly new to Haskell and am taking my first crack at producing code that generates some output, asks the user if they want to continue, generates some more if they say yes, asks them again, and so on. I've looked at several examples and explanations so far. One solution appears to be to use a recursive function; however, I also had the notion to generate a lazily evaluated list of user inputs and feed it to a
2020-12-13 21:58:24 +0100 <alestane> takeWhile.
2020-12-13 21:59:00 +0100 <alestane> However, this approach seems to run into an issue where the linked exectuable seems to wait for me to type in all the input and hit CTRL-D before it processes anything.
2020-12-13 22:00:12 +0100 <alestane> Currently my user input funciton is returning a IO [Char]; I've wondered if maybe it should be returning [IO Char] instead.
2020-12-13 22:00:28 +0100 <lortabac> alestane: the problem is that IO is not lazy
2020-12-13 22:00:42 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-12-13 22:00:44 +0100 <monochrom> output is line-buffered if terminal
2020-12-13 22:00:59 +0100 <alestane> I am expecting to process it line-by-line.
2020-12-13 22:00:59 +0100 <monochrom> as in, held up until the next newline
2020-12-13 22:01:09 +0100 <alestane> Each input is one line, that's fine.
2020-12-13 22:01:18 +0100 <monochrom> output
2020-12-13 22:01:20 +0100 <lortabac> there are functions that do lazy IO, but it's kind of a hack
2020-12-13 22:01:27 +0100Tario(~Tario@201.192.165.173)
2020-12-13 22:01:48 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net)
2020-12-13 22:02:21 +0100 <monochrom> Well, actually, the correct thing to do is post your code. But I'm going away in a minute.
2020-12-13 22:02:21 +0100darjeeling_(~darjeelin@115.215.43.136) (Ping timeout: 258 seconds)
2020-12-13 22:02:30 +0100 <merijn> I think what both monochrom and lortabac are trying to say is "please put your code on a pastebin so we don't all have to guess what's going on" ;)
2020-12-13 22:02:38 +0100justsomeguy(~justsomeg@216.186.218.241)
2020-12-13 22:02:38 +0100justsomeguy(~justsomeg@216.186.218.241) (Changing host)
2020-12-13 22:02:38 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-12-13 22:02:38 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 272 seconds)
2020-12-13 22:02:51 +0100 <lortabac> :)
2020-12-13 22:02:52 +0100 <merijn> monochrom: Dammit, man...couldn't have waited 2 more seconds to write that? ;)
2020-12-13 22:03:34 +0100 <monochrom> relativity, there is no "before and after", etc
2020-12-13 22:04:06 +0100 <alestane> I've used enough command-line environments to understand line buffers.
2020-12-13 22:04:10 +0100monochromsees much red shift when observing merijn!
2020-12-13 22:04:11 +0100darjeeling_(~darjeelin@115.215.43.136)
2020-12-13 22:06:06 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 22:06:41 +0100mapperr(~mapperr@vmi389916.contaboserver.net) (Remote host closed the connection)
2020-12-13 22:06:43 +0100 <alestane> https://pastebin.com/c8Z2bQ7U is what compiled at the proof-of-concept stage.
2020-12-13 22:07:11 +0100 <alestane> It's supposed to get the first character of each line, echo it back with a Q after it, then get the next line.
2020-12-13 22:07:13 +0100knupfer(~Thunderbi@200116b82c21a800b1a58bfd9064fb73.dip.versatel-1u1.de)
2020-12-13 22:07:43 +0100 <merijn> alestane: Question: What do you think the stopping condition for the recursion in 'choices' is?
2020-12-13 22:07:58 +0100mapperr(~mapperr@vmi389916.contaboserver.net)
2020-12-13 22:08:00 +0100ridcully(~ridcully@p57b5259e.dip0.t-ipconnect.de) (Quit: update)
2020-12-13 22:08:06 +0100 <alestane> Well, I was intending to feed it to a takeWhile.
2020-12-13 22:08:14 +0100ridcully(~ridcully@p57b5259e.dip0.t-ipconnect.de)
2020-12-13 22:08:17 +0100 <merijn> alestane: That won't work, though
2020-12-13 22:08:53 +0100 <alestane> I was trying to build an "evaluate as needed" list akin to the "ones = 1 : ones" example
2020-12-13 22:08:57 +0100 <merijn> Because if you do, like "fmap (takeWhile foo)" the takeWhile won't run until *all* IO inside choices is done
2020-12-13 22:09:07 +0100 <alestane> Well, clearly it doesn't work, no.
2020-12-13 22:09:15 +0100 <merijn> alestane: Right, but you can't evaluate IO "as needed" (at least not safely)
2020-12-13 22:09:17 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net) (Ping timeout: 260 seconds)
2020-12-13 22:09:36 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Ping timeout: 272 seconds)
2020-12-13 22:09:38 +0100 <alestane> Can I lazily build a [IO Char]?
2020-12-13 22:09:39 +0100 <merijn> alestane: So the "mapM" on line 13 won't run until "choices" finishes, but that never finishes
2020-12-13 22:09:56 +0100 <alestane> Or is my entire approach just incorrect?
2020-12-13 22:10:22 +0100 <merijn> Can you? Yes. Does it do what you want? probably not
2020-12-13 22:10:27 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-13 22:10:49 +0100 <merijn> alestane: I would simply move the "putStrLn" into the recursion of choices (or something along those lines
2020-12-13 22:11:24 +0100 <merijn> Although it depends a bit on what you wanna actually do with said inpu
2020-12-13 22:11:38 +0100 <alestane> I'll see how it works as an experiment and keep in mind that it may not be ideal/
2020-12-13 22:12:11 +0100 <merijn> alestane: unrelatedly: let/in looks atrocious in 'choices' consider just using a where block instead :)
2020-12-13 22:12:25 +0100 <merijn> (In fact, let in almost always looks atrocious :p)
2020-12-13 22:13:01 +0100 <alestane> I tried writing it with where because that was the example I was working from, and it wouldn't compile. So clearly I was missing something.
2020-12-13 22:13:56 +0100 <merijn> alestane: This should work: https://paste.tomsmeding.com/LP1lbfZ4
2020-12-13 22:15:01 +0100 <alestane> I may also have made a hash of the Haskell whitespace rules (I know that ws is significant in certain constructs, but am still grokking the actual rules).
2020-12-13 22:15:27 +0100 <merijn> alestane: https://en.wikibooks.org/wiki/Haskell/Indentation
2020-12-13 22:15:40 +0100dax(dax@bitbot/dax) (Quit: brb)
2020-12-13 22:15:59 +0100 <alestane> I know it's basically a syntactic sugar for a braces syntax that isn't used much.
2020-12-13 22:16:47 +0100 <alestane> In any case, I appreciate the guidance.
2020-12-13 22:16:54 +0100 <merijn> alestane: also
2020-12-13 22:17:08 +0100 <merijn> alestane: I would personally probably write choices as something like: https://paste.tomsmeding.com/kdaTWbVH
2020-12-13 22:17:17 +0100 <merijn> alestane: (using an empty line as stop condition)
2020-12-13 22:17:24 +0100dax(dax@bitbot/dax)
2020-12-13 22:17:27 +0100 <alestane> I haven't really used functional programming since my first undergrad CS class in Scheme lo these many years ago.
2020-12-13 22:17:36 +0100 <merijn> And getting rid of the potential crash that your use of "head" on an empty line potentially has :)
2020-12-13 22:18:31 +0100 <alestane> I tried building the stop condition into the data collection in one of my first attempts. A lot of this has been exploring a curiosity.
2020-12-13 22:23:28 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-13 22:25:19 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-13 22:26:14 +0100 <alestane> merijn, what does the <$> in that example accomplish?
2020-12-13 22:26:53 +0100 <alestane> Just better management of expression grouping?
2020-12-13 22:27:09 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311) (Read error: Connection reset by peer)
2020-12-13 22:29:08 +0100 <dsal> :t (<$>)
2020-12-13 22:29:10 +0100 <lambdabot> Functor f => (a -> b) -> f a -> f b
2020-12-13 22:29:34 +0100 <solonarv> (<$>) = fmap -- it's the same thing, just as an infix operator
2020-12-13 22:31:02 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2020-12-13 22:31:16 +0100danso(~dan@69-165-210-185.cable.teksavvy.com)
2020-12-13 22:34:09 +0100geekosaur(ae68c070@cpe-174-104-192-112.neo.res.rr.com) (Remote host closed the connection)
2020-12-13 22:39:41 +0100aev_software(~aev@pool-108-5-152-94.nwrknj.fios.verizon.net)
2020-12-13 22:39:48 +0100 <monochrom> getLine is not lazy. [IO Char] would be an XY problem. KISS and implement a loop body that reads one line and prints one line right away.
2020-12-13 22:40:35 +0100 <monochrom> The current code stands as looping over reading more lines and never does anything else.
2020-12-13 22:41:06 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2020-12-13 22:41:15 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-13 22:41:22 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Client Quit)
2020-12-13 22:41:50 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-13 22:41:52 +0100kupi(uid212005@gateway/web/irccloud.com/x-mjbkiotsmhixgetl)
2020-12-13 22:44:30 +0100 <ski> alestane : if you want to `mapM' with a procedure like `putStrLn' that's not producing any interesting output / result value when invoked, it's better to use `mapM_' (since then you don't collect a list of useless `()' values)
2020-12-13 22:44:33 +0100z0(~z0@188.250.3.59)
2020-12-13 22:46:15 +0100 <z0> hmm... is the uppercase pi classified as a symbol? ghc is trying to treat it as an operator
2020-12-13 22:46:31 +0100 <alestane> Well, that was test code, but that might be the desirable case in the end.
2020-12-13 22:46:48 +0100 <merijn> z0: Depends which one :p
2020-12-13 22:47:02 +0100 <merijn> > generalCategory 'Π'
2020-12-13 22:47:05 +0100sigstuff(eclipsed@gateway/shell/gnu/x-jfqyakfbvgumyqie)
2020-12-13 22:47:07 +0100 <lambdabot> UppercaseLetter
2020-12-13 22:47:10 +0100GuerrillaMonkey(~Jeanne-Ka@66.115.189.209)
2020-12-13 22:47:34 +0100 <merijn> > generalCategory '∏'
2020-12-13 22:47:36 +0100 <monochrom> Yes depends on which one, there are two or more.
2020-12-13 22:47:38 +0100 <lambdabot> MathSymbol
2020-12-13 22:47:45 +0100 <ski> > map isUpper "Π∏"
2020-12-13 22:47:48 +0100 <lambdabot> [True,False]
2020-12-13 22:48:18 +0100sigstuff(eclipsed@gateway/shell/gnu/x-jfqyakfbvgumyqie) ()
2020-12-13 22:48:25 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Quit: mputz)
2020-12-13 22:48:32 +0100 <merijn> z0: Are you sure you have "uppercase pi" (my first example) or "N-ary product" (the second one) :p
2020-12-13 22:49:00 +0100 <z0> ah that might be it
2020-12-13 22:49:32 +0100 <z0> vim digraphs disappointing me again
2020-12-13 22:49:53 +0100Jeanne-Kamikaze(~Jeanne-Ka@66.115.189.167) (Ping timeout: 265 seconds)
2020-12-13 22:52:48 +0100SomeoneSerge(~someone-s@37.120.212.76)
2020-12-13 22:53:11 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2020-12-13 22:53:44 +0100 <dsal> I've seen a lot of people use ß for the letter B because they think they look cool and nobody understand how stupid they are.
2020-12-13 22:53:48 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-12-13 22:54:57 +0100 <z0> my bad. turns out i was using *P instead of P*
2020-12-13 22:55:08 +0100 <z0> vim is cool after all
2020-12-13 22:56:22 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...)
2020-12-13 22:56:39 +0100 <merijn> dsal: THe number of Greek restaurants I've seen in the US/UK that use capital sigma as E is frustrating >.>
2020-12-13 22:56:54 +0100 <dsal> Oh. Yeah, that is actually worse.
2020-12-13 22:57:05 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
2020-12-13 22:57:13 +0100 <ski> merijn : was just about to say ..
2020-12-13 22:57:40 +0100 <merijn> I'm like...the capital E in greek is just E >.<
2020-12-13 22:57:46 +0100 <ski> (well, not restaurants, but the common practice)
2020-12-13 22:58:01 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl)
2020-12-13 22:58:14 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-13 22:58:34 +0100 <z0> i have this convention i use for naming things in personal projects where i use greek letters for some accessors and very rarely for constructors. i cringe everytime i use Α instead of A
2020-12-13 22:58:36 +0100 <dsal> People just universally don't understand the family of s
2020-12-13 22:59:36 +0100 <pjb> merijn: And what about dayak? "DAЯK"
2020-12-13 22:59:57 +0100 <pjb> I can't stand it.
2020-12-13 23:00:17 +0100 <ski> or using an upper case lambda, in place of a `D'
2020-12-13 23:00:28 +0100Rudd0(~Rudd0@185.189.115.108)
2020-12-13 23:00:47 +0100 <z0> in my country grocery shop fridges are filled with GRΣΣK YOGURT
2020-12-13 23:00:59 +0100 <monochrom> And the move "My Big Fat Greek Wedding" spells "GRΣΣK".
2020-12-13 23:01:12 +0100skishudders
2020-12-13 23:01:16 +0100 <pjb> unbearable.
2020-12-13 23:01:27 +0100fendor(~fendor@178.115.130.118.wireless.dyn.drei.com) (Remote host closed the connection)
2020-12-13 23:01:47 +0100lambda-11235(~lambda-11@2600:1700:7c70:4600:bc15:16d3:5c9f:657f) (Ping timeout: 260 seconds)
2020-12-13 23:01:48 +0100 <z0> and those ridiculous programming langages that use backslash for a lambda. ugh
2020-12-13 23:01:54 +0100 <z0> wait...
2020-12-13 23:02:00 +0100 <ski> haha :)
2020-12-13 23:02:16 +0100GuerrillaMonkey(~Jeanne-Ka@66.115.189.209) (Ping timeout: 256 seconds)
2020-12-13 23:02:21 +0100 <monochrom> I gave up cringing because I came from getting used to people doing the following:
2020-12-13 23:02:42 +0100fendor(~fendor@178.115.130.118.wireless.dyn.drei.com)
2020-12-13 23:02:50 +0100 <monochrom> In math channels a beginner would write "x*x -> x^2 = 2x".
2020-12-13 23:03:01 +0100Entroacceptor(~mad@mad.unserver.de) (Remote host closed the connection)
2020-12-13 23:03:23 +0100 <monochrom> It means "x*x rewrites to x^2, the derivative equals 2x"
2020-12-13 23:03:42 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-12-13 23:03:47 +0100 <monochrom> In C, = means assignment, == means equal.
2020-12-13 23:03:50 +0100fendor(~fendor@178.115.130.118.wireless.dyn.drei.com) (Remote host closed the connection)
2020-12-13 23:04:07 +0100 <monochrom> It's human nature. They know the right way, and they must blow it.
2020-12-13 23:04:22 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 256 seconds)
2020-12-13 23:04:44 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Quit: vfaronov)
2020-12-13 23:04:52 +0100ski. o O ( "Equality" by Maria Kovalyova,Roman Cheplyaka in 2012-11-15 at <https://ro-che.info/ccc/18> )
2020-12-13 23:05:02 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 23:07:53 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net)
2020-12-13 23:08:42 +0100conal(~conal@66.115.176.144)
2020-12-13 23:09:15 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Client Quit)
2020-12-13 23:09:34 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-13 23:10:39 +0100urodna(~urodna@unaffiliated/urodna)
2020-12-13 23:11:03 +0100srk(~sorki@gateway/tor-sasl/sorki) (Ping timeout: 240 seconds)
2020-12-13 23:11:23 +0100hexo(~hexo@gateway/tor-sasl/hexo) (Ping timeout: 240 seconds)
2020-12-13 23:11:36 +0100urodna(~urodna@unaffiliated/urodna) (Client Quit)
2020-12-13 23:12:02 +0100srk(~sorki@gateway/tor-sasl/sorki)
2020-12-13 23:12:07 +0100hexo(~hexo@gateway/tor-sasl/hexo)
2020-12-13 23:13:05 +0100 <dminuoso> • Found type wildcard ‘_’ standing for ‘_’
2020-12-13 23:13:07 +0100dminuososighs
2020-12-13 23:13:15 +0100mounty(~mounty@2001:8000:2f59:0:400b:cdf8:4398:2a2e)
2020-12-13 23:14:53 +0100conal(~conal@66.115.176.144) (Quit: Computer has gone to sleep.)
2020-12-13 23:16:03 +0100conal(~conal@66.115.176.144)
2020-12-13 23:16:43 +0100knupfer(~Thunderbi@200116b82c21a800b1a58bfd9064fb73.dip.versatel-1u1.de) (Ping timeout: 258 seconds)
2020-12-13 23:18:14 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-12-13 23:18:45 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2020-12-13 23:18:46 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net) (Quit: alestane)
2020-12-13 23:19:05 +0100SomeoneSerge(~someone-s@37.120.212.76) (Ping timeout: 240 seconds)
2020-12-13 23:21:05 +0100quarters(~quarters@unaffiliated/quarters) (Ping timeout: 240 seconds)
2020-12-13 23:21:06 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl)
2020-12-13 23:21:28 +0100SomeoneSerge(~someone-s@89.46.223.79)
2020-12-13 23:22:16 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 265 seconds)
2020-12-13 23:22:39 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net)
2020-12-13 23:23:13 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
2020-12-13 23:23:44 +0100cosimone(~cosimone@2001:b07:ae5:db26:1fb3:ef3f:ece2:c6f8) (Quit: cosimone)
2020-12-13 23:23:52 +0100kenran(~kenran@mue-88-130-62-085.dsl.tropolys.de) (Quit: leaving)
2020-12-13 23:25:46 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl)
2020-12-13 23:25:52 +0100nek0(~nek0@mail.nek0.eu)
2020-12-13 23:26:32 +0100fuzzypixelz_(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2020-12-13 23:27:04 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 258 seconds)
2020-12-13 23:30:10 +0100fendor(~fendor@178.115.130.118.wireless.dyn.drei.com)
2020-12-13 23:30:13 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 264 seconds)
2020-12-13 23:30:13 +0100fuzzypixelz_fuzzypixelz
2020-12-13 23:32:25 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 246 seconds)
2020-12-13 23:33:27 +0100cyphase(~cyphase@unaffiliated/cyphase) (Read error: Connection reset by peer)
2020-12-13 23:34:20 +0100 <z0> maybe it's the cuneiform t and not the undersore symbol
2020-12-13 23:35:07 +0100MOSCOS(~MOSCOS@122.54.107.175) (Remote host closed the connection)
2020-12-13 23:35:32 +0100MOSCOS(~MOSCOS@122.54.107.175)
2020-12-13 23:35:47 +0100urodna(~urodna@unaffiliated/urodna)
2020-12-13 23:37:20 +0100cyphase(~cyphase@unaffiliated/cyphase)
2020-12-13 23:39:16 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net) (Quit: alestane)
2020-12-13 23:40:51 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-13 23:43:20 +0100wonko7(~wonko7@2a01:e35:2ffb:7040:14a1:46f4:68f7:2133)
2020-12-13 23:44:37 +0100hth313(~user@node-1w7jr9qio22jw89j5t7q3mryw.ipv6.telus.net) (Ping timeout: 260 seconds)
2020-12-13 23:45:13 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
2020-12-13 23:47:09 +0100lambda-11235(~lambda-11@2600:1700:7c70:4600:bcf8:5fc6:a3cf:8574)
2020-12-13 23:47:18 +0100dax(dax@bitbot/dax) (Quit: dax)
2020-12-13 23:48:31 +0100fendor(~fendor@178.115.130.118.wireless.dyn.drei.com) (Remote host closed the connection)
2020-12-13 23:51:36 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-12-13 23:53:00 +0100conal(~conal@66.115.176.144) (Quit: Computer has gone to sleep.)
2020-12-13 23:53:26 +0100quarters(~quarters@38-73-246-124.starry-inc.net)
2020-12-13 23:54:10 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net)
2020-12-13 23:58:22 +0100shons(~shons@182.1.111.32)
2020-12-13 23:58:43 +0100conal_(~conal@64.71.133.70)
2020-12-13 23:59:44 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)