2021/11/05

2021-11-05 00:00:29 +0100xff0x(~xff0x@2001:1a81:5236:1e00:dda8:eac2:4d01:562e)
2021-11-05 00:06:50 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-11-05 00:09:45 +0100michalz(~michalz@185.246.204.58) (Remote host closed the connection)
2021-11-05 00:17:49 +0100unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 268 seconds)
2021-11-05 00:20:26 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds)
2021-11-05 00:28:39 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 00:31:38 +0100onion(~z@user/zero)
2021-11-05 00:32:04 +0100onion(~z@user/zero) ()
2021-11-05 00:32:08 +0100onion(~z@user/zero)
2021-11-05 00:32:52 +0100onion(~z@user/zero) ()
2021-11-05 00:37:11 +0100nvmd(~nvmd@user/nvmd)
2021-11-05 00:39:20 +0100brainfreeze(~brainfree@2a03:1b20:4:f011::20d)
2021-11-05 00:40:09 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-11-05 00:41:55 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-05 00:41:55 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Client Quit)
2021-11-05 00:41:55 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-05 00:41:55 +0100wroathe(~wroathe@user/wroathe)
2021-11-05 00:45:12 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2021-11-05 00:50:54 +0100emf(~emf@2620:10d:c090:400::5:ba1c) (Quit: emf)
2021-11-05 00:51:33 +0100burnsidesLlama(~burnsides@dhcp168-032.wadham.ox.ac.uk) (Remote host closed the connection)
2021-11-05 01:00:02 +0100euandreh(~euandreh@2804:14c:33:9fe5:25ae:baa7:4680:70ca) (Ping timeout: 260 seconds)
2021-11-05 01:08:52 +0100aegon(~mike@174.127.249.180) (Remote host closed the connection)
2021-11-05 01:13:41 +0100[_][itchyjunk]
2021-11-05 01:13:56 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Ping timeout: 268 seconds)
2021-11-05 01:14:11 +0100Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (Ping timeout: 264 seconds)
2021-11-05 01:15:09 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
2021-11-05 01:16:35 +0100Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net)
2021-11-05 01:17:43 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-11-05 01:19:23 +0100fryguybob(~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (Quit: leaving)
2021-11-05 01:22:02 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
2021-11-05 01:23:25 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-11-05 01:27:54 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 01:28:54 +0100jespada(~jespada@190.7.36.46)
2021-11-05 01:32:35 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
2021-11-05 01:33:12 +0100euandreh(~euandreh@2804:14c:33:9fe5:90d0:563b:3279:f95b)
2021-11-05 01:47:55 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-11-05 01:48:28 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 01:54:02 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-11-05 02:02:42 +0100ub(~Thunderbi@p548c9652.dip0.t-ipconnect.de)
2021-11-05 02:03:53 +0100ubert(~Thunderbi@p200300ecdf4fca7ce019fddc82d0353e.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2021-11-05 02:03:54 +0100ububert
2021-11-05 02:03:57 +0100mestre(~mestre@191.177.175.57)
2021-11-05 02:08:49 +0100acidjnk_new(~acidjnk@p200300d0c726704784feaa35b47dd204.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2021-11-05 02:13:09 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2021-11-05 02:14:03 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
2021-11-05 02:14:26 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2021-11-05 02:17:06 +0100 <awpr> anybody already making a `type-ord-compat` library? one exists as part of `numeric-kinds`, but it looks like I need to split it out into a standalone library to avoid a cycle, and I want to double-check before I duplicate effort
2021-11-05 02:17:13 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-11-05 02:18:06 +0100 <awpr> (https://github.com/google/hs-dependent-literals/commit/65c553447d3c6d083b2886feb44bd3817f121ece turns my previous implementation into a compatibility layer for the one in `base`)
2021-11-05 02:19:11 +0100 <awpr> there's `type-ord`, which is similar, but currently broken, unmodified since 2013, and has no repo link, so... probably not that one
2021-11-05 02:22:19 +0100Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-11-05 02:22:40 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-05 02:29:44 +0100abrantesasf(abrantesas@gateway/vpn/protonvpn/abrantesasf) (Remote host closed the connection)
2021-11-05 02:29:55 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-05 02:29:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-05 02:29:56 +0100wroathe(~wroathe@user/wroathe)
2021-11-05 02:32:44 +0100Psybur(~Psybur@mobile-166-170-30-165.mycingular.net) (Remote host closed the connection)
2021-11-05 02:34:34 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-11-05 02:40:30 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-11-05 02:46:21 +0100jespada(~jespada@190.7.36.46) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-11-05 02:51:18 +0100slack1256(~slack1256@191.125.227.82)
2021-11-05 02:52:31 +0100dsamperi(~dsamperi@2603-7000-3b42-5400-218f-2d4f-d1df-c673.res6.spectrum.com)
2021-11-05 02:58:10 +0100vysn(~vysn@user/vysn) (Ping timeout: 268 seconds)
2021-11-05 03:01:05 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:43da:65d:86ef:94ff)
2021-11-05 03:01:59 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-11-05 03:05:01 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:43da:65d:86ef:94ff) ()
2021-11-05 03:05:07 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:43da:65d:86ef:94ff)
2021-11-05 03:05:50 +0100gzj(~GZJ0X@199.193.127.57.16clouds.com)
2021-11-05 03:10:25 +0100gzj(~GZJ0X@199.193.127.57.16clouds.com) (Client Quit)
2021-11-05 03:11:13 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-11-05 03:11:13 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-11-05 03:11:13 +0100wroathe(~wroathe@user/wroathe)
2021-11-05 03:15:15 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-11-05 03:15:42 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:43da:65d:86ef:94ff) (Quit: SeungheonOh)
2021-11-05 03:16:03 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:43da:65d:86ef:94ff)
2021-11-05 03:16:10 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:43da:65d:86ef:94ff) (Client Quit)
2021-11-05 03:21:30 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Read error: Connection reset by peer)
2021-11-05 03:21:42 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-11-05 03:26:08 +0100Inst_(~Inst@2601:6c4:4080:3f80:1d49:739d:9075:d5df) (Remote host closed the connection)
2021-11-05 03:26:15 +0100nitrix(~nitrix@user/nitrix) (Quit: Genius is one percent inspiration and ninety-nine percent perspiration)
2021-11-05 03:26:24 +0100Inst_(~Inst@2601:6c4:4080:3f80:1d49:739d:9075:d5df)
2021-11-05 03:26:29 +0100nitrix_(~nitrix@user/nitrix)
2021-11-05 03:26:53 +0100nitrix_nitrix
2021-11-05 03:27:34 +0100Athas(athas@sigkill.dk) (Ping timeout: 260 seconds)
2021-11-05 03:27:36 +0100Athas_(athas@2a01:7c8:aaac:1cf:431c:d49e:2f86:91cc)
2021-11-05 03:29:18 +0100deni_(~deni@user/deni)
2021-11-05 03:29:39 +0100deni(~deni@user/deni) (Read error: Connection reset by peer)
2021-11-05 03:29:54 +0100kilolympus(~kilolympu@185.65.135.177) (Ping timeout: 260 seconds)
2021-11-05 03:29:58 +0100alphabeta(~kilolympu@185.65.135.177)
2021-11-05 03:30:57 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-11-05 03:35:02 +0100micro(~micro@user/micro) (Ping timeout: 260 seconds)
2021-11-05 03:35:37 +0100fizzsegfaultbuzz(~segfaultf@135-180-0-138.static.sonic.net) (Remote host closed the connection)
2021-11-05 03:35:39 +0100res0nat0r8(~Fletch@dia.whatbox.ca) (Quit: Ping timeout (120 seconds))
2021-11-05 03:35:48 +0100micro(~micro@user/micro)
2021-11-05 03:35:56 +0100fizzsegfaultbuzz(~segfaultf@135-180-0-138.static.sonic.net)
2021-11-05 03:35:58 +0100tomjaguarpaw(~tom@li367-225.members.linode.com) (Ping timeout: 260 seconds)
2021-11-05 03:36:12 +0100res0nat0r8(~Fletch@dia.whatbox.ca)
2021-11-05 03:36:21 +0100nshepperd24(~nshepperd@li364-218.members.linode.com)
2021-11-05 03:37:14 +0100erisco_(~erisco@d24-57-249-233.home.cgocable.net)
2021-11-05 03:37:22 +0100nshepperd2(~nshepperd@li364-218.members.linode.com) (Ping timeout: 260 seconds)
2021-11-05 03:37:22 +0100nshepperd24nshepperd2
2021-11-05 03:37:26 +0100segfaultbuzzfizz(~segfaultf@135-180-0-138.static.sonic.net)
2021-11-05 03:38:18 +0100energizer(~energizer@user/energizer) (Ping timeout: 260 seconds)
2021-11-05 03:39:26 +0100yinghua_(~yinghua@2800:2121:1400:900:c56e:96f4:75cd:50ac) (Quit: Leaving)
2021-11-05 03:39:49 +0100res0nat0r8(~Fletch@dia.whatbox.ca) (Client Quit)
2021-11-05 03:40:01 +0100res0nat0r8(~Fletch@dia.whatbox.ca)
2021-11-05 03:41:05 +0100tomjaguarpaw(~tom@li367-225.members.linode.com)
2021-11-05 03:41:06 +0100erisco(~erisco@d24-57-249-233.home.cgocable.net) (Ping timeout: 260 seconds)
2021-11-05 03:41:06 +0100erisco_erisco
2021-11-05 03:41:20 +0100fizzsegfaultbuzz(~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 268 seconds)
2021-11-05 03:41:26 +0100slack1256(~slack1256@191.125.227.82) (Ping timeout: 256 seconds)
2021-11-05 03:42:57 +0100energizer(~energizer@user/energizer)
2021-11-05 03:46:52 +0100xff0x(~xff0x@2001:1a81:5236:1e00:dda8:eac2:4d01:562e) (Ping timeout: 268 seconds)
2021-11-05 03:48:40 +0100xff0x(~xff0x@2001:1a81:5273:3700:28cd:42fe:3b9:2637)
2021-11-05 03:52:35 +0100Guest4193(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
2021-11-05 03:52:47 +0100NieDzejkob(~quassel@212.87.13.106) (Quit: No Ping reply in 180 seconds.)
2021-11-05 03:53:25 +0100justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-11-05 03:54:48 +0100mmhat(~mmh@55d4a8dc.access.ecotel.net) (Quit: WeeChat 3.3)
2021-11-05 03:58:52 +0100yrlnry(~mjd@pool-74-109-22-90.phlapa.fios.verizon.net)
2021-11-05 04:00:08 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
2021-11-05 04:16:32 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 04:19:06 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 04:21:50 +0100Guest41(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-11-05 04:35:48 +0100alx741(~alx741@181.196.68.55) (Quit: alx741)
2021-11-05 04:39:14 +0100 <dsal> I just tried using Control.Monad.Trans.List and found out it doesn't work. That seems bad.
2021-11-05 04:39:48 +0100segfaultbuzzfizz(~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 256 seconds)
2021-11-05 04:40:08 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-11-05 04:40:08 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2021-11-05 04:40:08 +0100finn_elijaFinnElija
2021-11-05 04:40:11 +0100mbuf(~Shakthi@136.185.75.83)
2021-11-05 04:41:51 +0100 <Axman6> it's that basically the domain of pipes, conduit, streaming etc.?
2021-11-05 04:44:56 +0100wroathe(~wroathe@user/wroathe) (Quit: Lost terminal)
2021-11-05 04:47:50 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2021-11-05 04:48:08 +0100ozzloy_(~ozzloy@ozzloy.lifeafterking.org)
2021-11-05 04:48:15 +0100lbseale(~lbseale@user/ep1ctetus) (Quit: Leaving)
2021-11-05 04:48:32 +0100pgib(~textual@173.38.117.89)
2021-11-05 04:48:45 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-11-05 04:49:42 +0100 <ozzloy_> hi
2021-11-05 04:50:07 +0100 <Axman6> Hello!
2021-11-05 04:50:37 +0100 <ozzloy_> i am learning haskell and am stuck on a homework
2021-11-05 04:50:52 +0100 <Axman6> great, what's the problem, and what have you tried?
2021-11-05 04:51:13 +0100 <Axman6> Given that it's homework, we won't give you the answers, but we'll help you find them yourself
2021-11-05 04:51:46 +0100 <Axman6> also, if you have code to share, please use...
2021-11-05 04:51:53 +0100 <Axman6> @where paste
2021-11-05 04:51:53 +0100 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2021-11-05 04:53:01 +0100Guest99(~Guest99@pool-100-8-45-127.nwrknj.fios.verizon.net)
2021-11-05 04:53:29 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-11-05 04:54:27 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2021-11-05 04:54:36 +0100 <ozzloy_> here https://paste.tomsmeding.com/3nengedR line 66 - 85 show the error for listTree, which starts on line 88
2021-11-05 04:54:58 +0100 <ozzloy_> i'm not sure why the type is mismatched
2021-11-05 04:56:22 +0100 <ozzloy_> why are j and l Tree a type?
2021-11-05 04:56:51 +0100 <ozzloy_> am i reading that correctly? are they tree types on line 91?
2021-11-05 04:57:27 +0100dsamperi(~dsamperi@2603-7000-3b42-5400-218f-2d4f-d1df-c673.res6.spectrum.com) (Quit: Konversation terminated!)
2021-11-05 04:57:44 +0100 <Axman6> so, you have the type foldTree :: (b -> a -> b -> b) -> b -> Tree a -> b
2021-11-05 04:58:02 +0100 <Axman6> you want your result to be [a], which means that b must be [a]
2021-11-05 04:58:11 +0100 <ozzloy_> yes
2021-11-05 04:58:15 +0100 <ozzloy_> so far so good?
2021-11-05 04:58:26 +0100 <Axman6> so that gives us: foldTree :: ([a] -> a -> [a] -> [a]) -> [a] -> Tree a -> [a]
2021-11-05 04:58:51 +0100 <ozzloy_> yeah, that makes sense
2021-11-05 04:58:58 +0100 <Axman6> so that means the function you give to foldTree needs to have the type ([a] -> a -> [a] -> [a])
2021-11-05 04:59:29 +0100 <Axman6> but you have applied listTree to the first and third arguments, which means l and r must be Tree a
2021-11-05 04:59:32 +0100 <Axman6> which is not [a]
2021-11-05 04:59:35 +0100 <ozzloy_> oooh
2021-11-05 04:59:45 +0100 <ozzloy_> right
2021-11-05 04:59:49 +0100 <ozzloy_> ok, so then...
2021-11-05 04:59:55 +0100 <Axman6> you should be able to sort it out from there I hope :)
2021-11-05 05:00:56 +0100 <ozzloy_> lol, maybe?
2021-11-05 05:01:09 +0100 <ozzloy_> i will have to come back to this, shoot. thanks for your help so far
2021-11-05 05:01:47 +0100 <Axman6> basically, your f is trying to do more than it needs to
2021-11-05 05:01:52 +0100 <monochrom> If you use foldTree you are not supposed to use your own recursion on Tree anymore.
2021-11-05 05:02:11 +0100 <Axman6> yeah foldTree abstracts recursion for you
2021-11-05 05:06:12 +0100 <Axman6> ozzloy_: for minTree, can you assume that the tree is ordered?
2021-11-05 05:08:28 +0100 <monochrom> I think no.
2021-11-05 05:10:19 +0100 <Axman6> that makes me sad
2021-11-05 05:10:30 +0100 <Axman6> ... this isn't your course by any chance is it monochrom? :P
2021-11-05 05:10:41 +0100 <monochrom> Nah.
2021-11-05 05:11:33 +0100 <Axman6> I forgot to give me usual warning about whoever runs the course likely being in here...
2021-11-05 05:11:34 +0100 <monochrom> minTree would be no fun and a poor exercise for foldTree if a binary search tree were guaranteed. :)
2021-11-05 05:14:16 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-11-05 05:18:12 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
2021-11-05 05:19:22 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2021-11-05 05:26:12 +0100kupi(uid212005@id-212005.hampstead.irccloud.com)
2021-11-05 05:27:06 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
2021-11-05 05:29:01 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-11-05 05:34:58 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-11-05 05:38:44 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 256 seconds)
2021-11-05 05:39:35 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-11-05 05:55:50 +0100Inst_Inst
2021-11-05 05:55:58 +0100segfaultbuzzfizz(~segfaultf@135-180-0-138.static.sonic.net)
2021-11-05 06:08:42 +0100shidima(~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl)
2021-11-05 06:09:42 +0100betelgeuse(~betelgeus@94-225-47-8.access.telenet.be) (Quit: The Lounge - https://thelounge.chat)
2021-11-05 06:11:22 +0100betelgeuse(~betelgeus@94-225-47-8.access.telenet.be)
2021-11-05 06:11:30 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 06:13:38 +0100danso(~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 268 seconds)
2021-11-05 06:13:54 +0100 <ozzloy_> so f x y z = f x ++ y ++ f z ?
2021-11-05 06:14:01 +0100 <ozzloy_> i'm back
2021-11-05 06:14:25 +0100 <ozzloy_> or ...
2021-11-05 06:15:49 +0100 <ozzloy_> no
2021-11-05 06:15:59 +0100 <ozzloy_> f j k l = j ++ [k] ++ l
2021-11-05 06:16:24 +0100 <ozzloy_> yep
2021-11-05 06:16:33 +0100 <ozzloy_> monochrom, no, tree1 is not sorted
2021-11-05 06:17:52 +0100 <ozzloy_> yeah, that works. ok so now the rose
2021-11-05 06:18:02 +0100 <ozzloy_> something thorny something something
2021-11-05 06:20:19 +0100 <ozzloy_> what does this notation mean:
2021-11-05 06:20:34 +0100 <ozzloy_> data Rose a = Node a [Rose a]
2021-11-05 06:20:34 +0100 <ozzloy_> ?
2021-11-05 06:21:12 +0100 <ozzloy_> it looks like typedef from c or type from ocaml
2021-11-05 06:22:47 +0100 <pavonia> It's the definition of a new type Rose that takes one type parameter a, and has one value constructor Node :: a -> [Rose a] -> Rose a
2021-11-05 06:22:57 +0100 <ozzloy_> there's a type called Rose which consists of a Node with 2 things in it. the two things are a thing of type a and a list of things of type "Rose a"?
2021-11-05 06:23:20 +0100 <ozzloy_> pavonia, thanks
2021-11-05 06:24:00 +0100 <ozzloy_> is "deriving (Show, Eq)" something like mixins in ruby, or implementing interfaces in java?
2021-11-05 06:24:40 +0100 <ozzloy_> oh, so Node is more like a function?
2021-11-05 06:24:46 +0100 <ozzloy_> that takes 2 arguments?
2021-11-05 06:25:58 +0100Adran(adran@botters/adran) (Ping timeout: 252 seconds)
2021-11-05 06:26:06 +0100 <pavonia> Yes, but it can also be used in patterns to decompose values
2021-11-05 06:28:01 +0100Adran(~adran@botters/adran)
2021-11-05 06:36:55 +0100segfaultbuzzfizz(~segfaultf@135-180-0-138.static.sonic.net) (Remote host closed the connection)
2021-11-05 06:41:27 +0100Guest41(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
2021-11-05 06:43:14 +0100 <ozzloy_> i see
2021-11-05 06:43:20 +0100 <ozzloy_> thanks
2021-11-05 06:47:45 +0100 <ozzloy_> what about the syntax: minTree :: (Ord a) => Tree a -> Maybe a
2021-11-05 06:48:58 +0100 <ozzloy_> the "(Ord a)" part. does that mean a is some type that is orderable?
2021-11-05 06:49:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 06:59:41 +0100 <c_wraith> ozzloy_: yes, that's exactly what it means.
2021-11-05 07:01:33 +0100 <ozzloy_> c_wraith, thanks
2021-11-05 07:06:08 +0100 <ski> <ozzloy_> is "deriving (Show, Eq)" something like mixins in ruby, or implementing interfaces in java?
2021-11-05 07:06:11 +0100 <ski> neither, really
2021-11-05 07:06:24 +0100 <ozzloy_> ski, oh?
2021-11-05 07:06:26 +0100 <energizer> `newtype Fix f = Fix (f (Fix f))` looks kinda magical. can that be written in a less powerful language than haskell?
2021-11-05 07:07:00 +0100 <energizer> i'm still trying to wrap my head around it, maybe porting to a dumber language i know better will help
2021-11-05 07:07:00 +0100 <ski> `deriving' auto-generates instances for type classes (only for a few select, built-in, type classes)
2021-11-05 07:07:36 +0100 <ski> writing an instance of a type for a type class can be more closely compared to implementing an interface in Java .. but there's still important differences
2021-11-05 07:07:51 +0100aleator(~aleator@188-67-216-232.bb.dnainternet.fi)
2021-11-05 07:08:09 +0100 <c_wraith> energizer: doing exactly what Fix does requires higher-kinded types. So you could do it in Scala, but I can't imagine that makes it easier to understand.
2021-11-05 07:08:13 +0100 <ski> methods of a type class are not bundled with values of the type in question. they're "freestanding"
2021-11-05 07:08:59 +0100 <c_wraith> energizer: but essentially, Fix nests a type infinitely. Fix Maybe is roughly Maybe (Maybe (Maybe (Maybe (Maybe ...
2021-11-05 07:09:25 +0100 <c_wraith> Except with some extra wrappers that prevent the type from being visibly infinite
2021-11-05 07:09:30 +0100 <ski> this means that you can easily do e.g. "binary" methods (like `compare :: a -> a -> Ordering' in `Ord a') or "clone" methods. and that you can have type class methods that don't take an input value of the type in question, at all ! (like `minBound,maxBound :: a' in `Bounded a')
2021-11-05 07:10:06 +0100 <energizer> c_wraith: is `unfix Fix Maybe` the same as `Fix Maybe`?
2021-11-05 07:10:20 +0100 <remexre> is it just me, or does it seem like parsing the . in haskell is really hard at this point?
2021-11-05 07:10:31 +0100 <ski> energizer : `unfix' ?
2021-11-05 07:10:51 +0100 <c_wraith> remexre: it's not just you. RecordDotSyntax took something ridiculous and made it even worse
2021-11-05 07:10:56 +0100 <energizer> nfix :: Fix f -> f (Fix f)
2021-11-05 07:10:56 +0100 <energizer> unfix (Fix f) = f
2021-11-05 07:11:15 +0100 <remexre> at least they didn't do the worst proposal of all worlds,
2021-11-05 07:11:25 +0100 <remexre> foo<<<bar ==> getField @"bar" foo
2021-11-05 07:11:49 +0100 <energizer> s/nfix/unfix/
2021-11-05 07:12:01 +0100 <c_wraith> energizer: you're mixing type and value levels
2021-11-05 07:12:13 +0100 <ski> ozzloy_ : i suppose you could perhaps liken a parametric instance like e.g. `instance Eq a => Eq [a] where ...' to a mixin .. automatically deriving an instance of `Eq' for `[a]', as soon as you have an instance of `Eq' for `a'. so, since we know `Eq Integer' holds, we also know `Eq [Integer]',`Eq [[Integer]]',&c. holds
2021-11-05 07:12:27 +0100 <ski> (s/parametric/parametric and conditional/)
2021-11-05 07:12:43 +0100 <c_wraith> energizer: unfix operates at the value level. Maybe operates at the type level. Fix is punned to be the name of a value and type
2021-11-05 07:12:54 +0100 <energizer> oh
2021-11-05 07:13:06 +0100 <ski> energizer : do you mean `unfix x', where `x :: Fix Maybe' ?
2021-11-05 07:13:14 +0100 <energizer> ski: yes
2021-11-05 07:13:23 +0100 <energizer> er
2021-11-05 07:13:31 +0100 <ski> well, then `unfix x :: Maybe (Fix Maybe)'
2021-11-05 07:13:46 +0100 <energizer> ok
2021-11-05 07:13:51 +0100 <ski> so `x' and `unfix x' doesn't even have the same type
2021-11-05 07:14:17 +0100 <ski> (and so it doesn't make sense to ask whether they are the same. your question was ill-typed)
2021-11-05 07:14:50 +0100 <ski> energizer : would you like to submit a patch to your question, perhaps ?
2021-11-05 07:14:58 +0100 <c_wraith> energizer: it's worth looking at some values of type Fix Maybe. You've got (Fix Nothing), (Fix (Just (Fix Nothing))), (Fix (Just (Fix (Just (Fix Nothing))))), etc
2021-11-05 07:15:40 +0100 <c_wraith> infinite type doesn't imply infinite value!
2021-11-05 07:17:23 +0100 <ski> % :t fix (Fix . Just)
2021-11-05 07:17:23 +0100 <yahb> ski: Fix Maybe
2021-11-05 07:17:37 +0100 <c_wraith> that one is infinite, yes. :)
2021-11-05 07:18:38 +0100skiglances at ozzloy_
2021-11-05 07:22:42 +0100Guest41(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-11-05 07:23:54 +0100 <Guest41> I'm wondering if GHC is a single-pass compiler, my guess is no because it wouldn't know the function arity for example so it can't tell how many arguments to parse for each function?
2021-11-05 07:23:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-11-05 07:25:14 +0100 <c_wraith> The only languages anyone cares about that use single-pass compilers are C and C++.
2021-11-05 07:26:25 +0100 <Guest41> oh, I was writing a parser for a toy language of mine and I thought "omg I need more than one pass, my grammar must be too complicated" x)
2021-11-05 07:27:37 +0100brainfreeze(~brainfree@2a03:1b20:4:f011::20d) (Remote host closed the connection)
2021-11-05 07:28:17 +0100zaquest(~notzaques@5.128.210.178) (Quit: Leaving)
2021-11-05 07:30:34 +0100 <Axman6> > iterate (Fix . Just) (Fix Nothing)
2021-11-05 07:30:35 +0100 <lambdabot> error:
2021-11-05 07:30:35 +0100 <lambdabot> • Data constructor not in scope: Fix :: Maybe a -> a
2021-11-05 07:30:35 +0100 <lambdabot> • Perhaps you meant one of these:
2021-11-05 07:30:39 +0100 <ski> Guest41 : the language has no notion of arity. every function takes exactly one argument
2021-11-05 07:30:58 +0100 <ski> try yahb
2021-11-05 07:31:03 +0100 <c_wraith> still, there are fixity declarations, which make Haskell's grammar fully context-sensitive...
2021-11-05 07:31:13 +0100 <Axman6> c_wraith: well, it's also one of the selling points of Go. not worth a whole lot though
2021-11-05 07:31:23 +0100 <Axman6> % iterate (Fix . Just) (Fix Nothing)
2021-11-05 07:31:28 +0100 <yahb> Axman6: [Fix Nothing,Fix (Just (Fix Nothing)),Fix (Just (Fix (Just (Fix Nothing)))),Fix (Just (Fix (Just (Fix (Just (Fix Nothing)))))),Fix (Just (Fix (Just (Fix (Just (Fix (Just (Fix Nothing)))))))),Fix (Just (Fix (Just (Fix (Just (Fix (Just (Fix (Just (Fix Nothing)))))))))),Fix (Just (Fix (Just (Fix (Just (Fix (Just (Fix (Just (Fix (Just (Fix Nothing)))))))))))),Fix (Just (Fix (Just (Fix (Just (Fix (Just
2021-11-05 07:31:59 +0100 <Axman6> ^^^ good software maintenence advice, that gets worse as you go on. Fix Nothing
2021-11-05 07:32:19 +0100zaquest(~notzaques@5.128.210.178)
2021-11-05 07:33:10 +0100 <Guest41> ski: so how do know how many applications to expect? do you just rely on the type system?
2021-11-05 07:33:21 +0100 <ski> huh ?
2021-11-05 07:33:39 +0100 <ski> what do you mean, "how many applications to expect?" ?
2021-11-05 07:33:47 +0100 <Guest41> no no I'm not making sense, nevermind! I'm better of reading the grammar haha
2021-11-05 07:33:51 +0100 <Axman6> all functions take exactly one argument Guest41
2021-11-05 07:34:00 +0100 <awpr> > True 4
2021-11-05 07:34:02 +0100 <lambdabot> error:
2021-11-05 07:34:02 +0100 <lambdabot> • Couldn't match expected type ‘t0 -> t’ with actual type ‘Bool’
2021-11-05 07:34:02 +0100 <lambdabot> • The function ‘True’ is applied to one argument,
2021-11-05 07:34:03 +0100 <Axman6> this is always true
2021-11-05 07:34:05 +0100 <awpr> this is valid syntax.
2021-11-05 07:34:09 +0100 <ski> you get as many as you get. then you (the type checker) check that it wasn't too many
2021-11-05 07:34:47 +0100 <Guest41> yes but they can return functions that take more arguments and you need to know when you stop taking arguments either because you reached an `a` or there are no more arguments
2021-11-05 07:34:49 +0100 <Axman6> so figuring out the arity of Haskell functions is very east, in fact it can be implemented as const 1
2021-11-05 07:34:50 +0100 <awpr> the parser doesn't care whether the thing you applied is a function; it's unambiguously a function application either way, and it's up to the type-checker to say whether it makes sense to apply that
2021-11-05 07:35:18 +0100 <Axman6> that's exactly what the type of a value tells you
2021-11-05 07:35:21 +0100 <ski> Guest41 : you only need to know whether each particular application is valid or not. the type checker checks that
2021-11-05 07:35:43 +0100 <ski> none of this "you need to know when you stop taking arguments" nonsense
2021-11-05 07:35:45 +0100Inst(~Inst@2601:6c4:4080:3f80:1d49:739d:9075:d5df) (Remote host closed the connection)
2021-11-05 07:35:52 +0100kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-05 07:36:03 +0100Inst(~Inst@2601:6c4:4080:3f80:1d49:739d:9075:d5df)
2021-11-05 07:36:38 +0100 <Axman6> > 7 "Hello" True -- Valid syntax, but the type system doesn't know how to make a function from 7 (but that is also possible)
2021-11-05 07:36:39 +0100 <lambdabot> error:
2021-11-05 07:36:39 +0100 <lambdabot> • No instance for (Num ([Char] -> Bool -> ()))
2021-11-05 07:36:39 +0100 <lambdabot> arising from a use of ‘e_177’
2021-11-05 07:36:50 +0100 <Guest41> aha, so I'm approaching this the wrong way
2021-11-05 07:37:41 +0100 <Axman6> in fact, you cannot know how many arguments something will ultimately take until you type check it.
2021-11-05 07:37:51 +0100 <Guest41> ski: where can I find haskell's (or any lambda calculus for that matter) grammar, alongside an AST. I'm too scared to open GHC code
2021-11-05 07:38:00 +0100 <Axman6> > printf "A string %s" "Hello"
2021-11-05 07:38:02 +0100 <lambdabot> error:
2021-11-05 07:38:02 +0100 <lambdabot> • Ambiguous type variable ‘a0’ arising from a use of ‘show_M625737254890...
2021-11-05 07:38:02 +0100 <lambdabot> prevents the constraint ‘(Show a0)’ from being solved.
2021-11-05 07:38:10 +0100 <Axman6> > printf "A string %s" "Hello" :: String
2021-11-05 07:38:12 +0100 <lambdabot> "A string Hello"
2021-11-05 07:38:38 +0100 <Axman6> > printf "A string %s, an integer %i" "Hello" (7 :: Integer) :: String
2021-11-05 07:38:39 +0100 <lambdabot> "A string Hello, an integer 7"
2021-11-05 07:38:58 +0100 <Axman6> :t printf
2021-11-05 07:38:59 +0100 <lambdabot> PrintfType r => String -> r
2021-11-05 07:39:18 +0100 <ski> @let instance Num a => Num (rho -> a) where (f + g) r = f r + g r; (f - g) r = f r - g r; (f * g) r = f r * g r; negate f r = negate (f r); abs f r = abs (f r); signum f r = signum (f r); fromInteger n r = fromInteger n
2021-11-05 07:39:20 +0100 <lambdabot> Defined.
2021-11-05 07:39:22 +0100 <ski> @let instance Fractional a => Fractional (rho -> a) where (f / g) r = f r / g r; recip f r = recip (f r); fromRational x r = fromRational x
2021-11-05 07:39:23 +0100 <lambdabot> Defined.
2021-11-05 07:39:30 +0100 <Axman6> what the compiler _does_ know is how many arguments something has been _applied_ to
2021-11-05 07:39:39 +0100 <ski> > 7 "Hello" True -- now the type system accepts it
2021-11-05 07:39:40 +0100 <lambdabot> 7
2021-11-05 07:41:02 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-11-05 07:41:26 +0100 <Guest41> so your code can influence the type system's decision too ...
2021-11-05 07:41:43 +0100 <ski> M ∷= x
2021-11-05 07:41:46 +0100 <ski> │ λ x . M
2021-11-05 07:41:47 +0100 <Axman6> well of course, you can define new types
2021-11-05 07:41:48 +0100 <ski> │ M M
2021-11-05 07:41:56 +0100 <ski> Guest41 : lambda-calculus grammar ^
2021-11-05 07:42:21 +0100 <Axman6> Haskell is just sexy syntax for that
2021-11-05 07:42:29 +0100 <ski> (abstract syntax, so no production for brackets. add that, if you want concrete syntax)
2021-11-05 07:45:25 +0100 <ski> > [(id^2 - id + 1) n | n <- [-3 .. 3]]
2021-11-05 07:45:26 +0100 <lambdabot> [13,7,3,1,1,3,7]
2021-11-05 07:45:59 +0100Inst(~Inst@2601:6c4:4080:3f80:1d49:739d:9075:d5df) (Ping timeout: 264 seconds)
2021-11-05 07:46:06 +0100 <ski> > [[(fst^2 - fst*snd + snd^2) (m,n) | n <- [-2 .. 2]] | m <- [-2 .. 2]]
2021-11-05 07:46:08 +0100 <lambdabot> [[4,3,4,7,12],[3,1,1,3,7],[4,1,0,1,4],[7,3,1,1,3],[12,7,4,3,4]]
2021-11-05 07:46:56 +0100 <int-e> . o O ( not confusing at all )
2021-11-05 07:47:39 +0100 <ski> > [(cos^2 + sin^2) (n*pi/4) | n <- [-2 .. 2]]
2021-11-05 07:47:41 +0100 <lambdabot> [1.0,1.0,1.0,1.0,1.0]
2021-11-05 07:48:21 +0100 <int-e> > let _1 = const; _2 = flip const in (_1^2 - _1*_2 + _2^2) <$> [-2..2] <*> [-2..2]
2021-11-05 07:48:22 +0100 <lambdabot> [4,3,4,7,12,3,1,1,3,7,4,1,0,1,4,7,3,1,1,3,12,7,4,3,4]
2021-11-05 07:48:43 +0100 <ski> yeap :)
2021-11-05 07:50:10 +0100 <ski> anyway, this is "just" "pointwise definition" of the arithmetical operations, in terms of the corresponding arithmetical operations on the result of the functions
2021-11-05 07:50:44 +0100 <ski> a more amusing example of something similar may be
2021-11-05 07:51:21 +0100 <ski> > sortBy (comparing length <> compare) (words "The quick brown fox jumps over the lazy dog")
2021-11-05 07:51:23 +0100 <lambdabot> ["The","dog","fox","the","lazy","over","brown","jumps","quick"]
2021-11-05 07:51:49 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
2021-11-05 07:51:52 +0100 <ski> (primarily sort by length, secondarily by ordinary (lexicographic) order on the words (of the same length))
2021-11-05 07:52:02 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2021-11-05 07:53:59 +0100 <ski> this is using the "pointwise" definition of `(<>)', like `(f <> g) r = f r <> g r'. this way, `comparing length <> compare' amounts to `\x y -> comparing length x y <> compare x y'. so now we're down to `<>' on `Ordering' .. which happens to be defined in the correct way to pull off this lexicographic ordering ("primarly order by this, secondarily by that")
2021-11-05 07:54:57 +0100 <ski> @where monoids
2021-11-05 07:54:57 +0100 <lambdabot> comment on "Monoids? In my programming language?" by Cale in 2008 (or 2009 ?) at <http://www.reddit.com/r/programming/comments/7cf4r/monoids_in_my_programming_language/c06adnx> about a use of `
2021-11-05 07:54:57 +0100 <lambdabot> instance Monoid a => Monoid (rho -> a)'
2021-11-05 07:55:32 +0100 <ozzloy_> ski, thanks!
2021-11-05 07:55:39 +0100Guest41(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
2021-11-05 07:56:01 +0100shidima(~shidima@84-104-108-90.cable.dynamic.v4.ziggo.nl) (Ping timeout: 268 seconds)
2021-11-05 07:56:10 +0100 <ski> (although, nowadays `(<>)' is in `Semigroup', which is a (new) superclass of `Monoid'. also, that post uses the name `(++)', rather than `(<>)'/`mappend')
2021-11-05 07:57:06 +0100 <ski> anyway, the definition here would be
2021-11-05 07:57:25 +0100 <ski> (<>) :: Ordering -> Ordering -> Ordering
2021-11-05 07:57:37 +0100 <ski> LT <> _ = LT
2021-11-05 07:57:42 +0100 <ski> GT <> _ = GT
2021-11-05 07:57:51 +0100 <ski> EQ <> o = o
2021-11-05 07:58:18 +0100 <ski> so, only in case the comparision to the left turned out to be equal, do we look at (force) the comparision to the right
2021-11-05 08:00:29 +0100 <ozzloy_> i am now stuck on sumRose https://paste.tomsmeding.com/caDJTMZT and maybe on foldRose
2021-11-05 08:00:43 +0100 <ozzloy_> line 88 gives the error starting at line 93
2021-11-05 08:01:23 +0100 <int-e> :t (+)
2021-11-05 08:01:24 +0100 <lambdabot> Num a => a -> a -> a
2021-11-05 08:01:57 +0100 <int-e> ozzloy_: you need to use (+) instead of + there
2021-11-05 08:02:18 +0100 <int-e> :t foldr + ?n ?r
2021-11-05 08:02:19 +0100 <lambdabot> (Num b, Foldable t1, ?n::t2 -> (a -> b -> b) -> b -> t1 a -> b, ?r::t2) => (a -> b -> b) -> b -> t1 a -> b
2021-11-05 08:02:32 +0100 <ozzloy_> oh
2021-11-05 08:02:33 +0100 <int-e> :t foldr (+) ?n ?r
2021-11-05 08:02:34 +0100 <lambdabot> (Foldable t, Num b, ?n::b, ?r::t b) => b
2021-11-05 08:02:37 +0100 <ozzloy_> oooh
2021-11-05 08:02:49 +0100 <ski> `foldr + n r' parses as `foldr + (n r)'
2021-11-05 08:02:50 +0100 <int-e> unfortunately the former has a type so the error is attributed to line 88 instead
2021-11-05 08:03:08 +0100 <ozzloy_> got it
2021-11-05 08:03:17 +0100 <ozzloy_> so my definition of foldRose is good?
2021-11-05 08:03:29 +0100 <ozzloy_> line 84
2021-11-05 08:03:32 +0100 <ski> yes
2021-11-05 08:03:33 +0100 <int-e> @undef
2021-11-05 08:03:33 +0100 <lambdabot> Undefined.
2021-11-05 08:03:36 +0100 <int-e> :t foldr + ?n ?r
2021-11-05 08:03:37 +0100 <lambdabot> (Num ((a -> b -> b) -> b -> t1 a -> b), Foldable t1, ?n::t2 -> (a -> b -> b) -> b -> t1 a -> b, ?r::t2) => (a -> b -> b) -> b -> t1 a -> b
2021-11-05 08:03:40 +0100 <ozzloy_> thanks
2021-11-05 08:06:01 +0100ubert(~Thunderbi@p548c9652.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2021-11-05 08:07:20 +0100Athas_Athas
2021-11-05 08:08:21 +0100pony(sid524992@smol/hors)
2021-11-05 08:12:15 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-05 08:12:52 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 08:12:54 +0100michalz(~michalz@185.246.204.40)
2021-11-05 08:17:58 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-05 08:19:23 +0100typedfern_(~Typedfern@171.red-83-51-60.dynamicip.rima-tde.net) (Remote host closed the connection)
2021-11-05 08:27:11 +0100fendor(~fendor@178.115.33.172.wireless.dyn.drei.com)
2021-11-05 08:28:37 +0100kenran(~kenran@b2b-37-24-119-190.unitymedia.biz)
2021-11-05 08:32:06 +0100mbuf(~Shakthi@136.185.75.83) (Quit: Leaving)
2021-11-05 08:32:33 +0100 <sshine> I'm trying to write a servant-client type for an API that has one endpoint that lets me search for two different kinds of things (company names, company details). if this were req/wreq, I made a data SearchQuery = SearchX X | SearchY Y, and made it a ToJSON instance.
2021-11-05 08:34:23 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:76a9:f65d:22e8:2e7b)
2021-11-05 08:34:59 +0100 <sshine> but so far I've just had the search function return an IO Value. I'm not sure if I should create a union type for the kinds of things that it can find... I guess I'll just have to disambiguate later, depending on the context.
2021-11-05 08:35:49 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 08:36:04 +0100danso(~danso@23-233-111-52.cpe.pppoe.ca)
2021-11-05 08:36:58 +0100son0p-(~ff@181.136.122.143) (Ping timeout: 260 seconds)
2021-11-05 08:37:09 +0100chomwitt(~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374)
2021-11-05 08:37:21 +0100trcc(~trcc@2-104-60-169-cable.dk.customer.tdc.net)
2021-11-05 08:42:20 +0100gehmehgeh(~user@user/gehmehgeh)
2021-11-05 08:42:30 +0100trcc(~trcc@2-104-60-169-cable.dk.customer.tdc.net) (Ping timeout: 260 seconds)
2021-11-05 08:43:08 +0100trcc(~trcc@2-104-60-169-cable.dk.customer.tdc.net)
2021-11-05 08:47:39 +0100 <sshine> type MyApi = "blah" :> ReqBody '[JSON] SearchQuery :> Post '[JSON] [SearchResult] -- it becomes a little generic, but at least symmetric.
2021-11-05 08:49:55 +0100vysn(~vysn@user/vysn)
2021-11-05 08:53:16 +0100shidima(~shidima@46.44.183.25)
2021-11-05 08:57:12 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
2021-11-05 09:00:27 +0100shidima(~shidima@46.44.183.25) (Remote host closed the connection)
2021-11-05 09:05:14 +0100hendursa1(~weechat@user/hendursaga)
2021-11-05 09:08:45 +0100hendursaga(~weechat@user/hendursaga) (Ping timeout: 276 seconds)
2021-11-05 09:11:57 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-11-05 09:12:45 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-11-05 09:15:56 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 09:16:19 +0100chele(~chele@user/chele)
2021-11-05 09:17:27 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-11-05 09:17:52 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2021-11-05 09:19:30 +0100hendursa1(~weechat@user/hendursaga) (Remote host closed the connection)
2021-11-05 09:19:59 +0100hendursa1(~weechat@user/hendursaga)
2021-11-05 09:20:14 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 09:21:05 +0100vpan(~0@212.117.1.172)
2021-11-05 09:25:32 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-11-05 09:30:11 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-11-05 09:37:07 +0100kuribas(~user@ptr-25vy0i9zmp0qcl8wvlj.18120a2.ip6.access.telenet.be)
2021-11-05 09:41:28 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-11-05 09:42:16 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 09:42:53 +0100MoC(~moc@user/moc)
2021-11-05 09:43:53 +0100pop3(~pop3@user/pop3) (Remote host closed the connection)
2021-11-05 09:45:01 +0100pop3(~pop3@user/pop3)
2021-11-05 09:45:50 +0100phma(~phma@host-67-44-209-61.hnremote.net) (Read error: Connection reset by peer)
2021-11-05 09:46:09 +0100mc47(~mc47@xmonad/TheMC47)
2021-11-05 09:46:17 +0100phma(~phma@host-67-44-209-61.hnremote.net)
2021-11-05 09:47:50 +0100Kaipi(~Kaiepi@156.34.44.192)
2021-11-05 09:48:18 +0100hongminhee(sid295@id-295.tinside.irccloud.com) (Ping timeout: 260 seconds)
2021-11-05 09:48:28 +0100hongminhee(sid295@id-295.tinside.irccloud.com)
2021-11-05 09:49:07 +0100alzgh(~alzgh@user/alzgh)
2021-11-05 09:50:38 +0100Kaiepi(~Kaiepi@156.34.44.192) (Ping timeout: 260 seconds)
2021-11-05 09:52:30 +0100cosimone(~user@93-44-186-19.ip98.fastwebnet.it)
2021-11-05 09:53:19 +0100Guest4382(~cat@h-98-128-128-173.A351.priv.bahnhof.se) (Remote host closed the connection)
2021-11-05 09:54:22 +0100Guest99(~Guest99@pool-100-8-45-127.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
2021-11-05 09:55:01 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-11-05 09:55:46 +0100acidjnk_new(~acidjnk@p200300d0c726704784feaa35b47dd204.dip0.t-ipconnect.de)
2021-11-05 09:57:45 +0100__monty__(~toonn@user/toonn)
2021-11-05 09:58:33 +0100Kaipi(~Kaiepi@156.34.44.192) (Quit: Leaving)
2021-11-05 09:58:58 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-05 10:00:06 +0100shiraeeshi[m](~shiraeesh@2001:470:69fc:105::1:77) (Quit: You have been kicked for being idle)
2021-11-05 10:00:14 +0100hsek[m](~hsekmatri@2001:470:69fc:105::d18f) (Quit: You have been kicked for being idle)
2021-11-05 10:00:42 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 10:09:53 +0100polux(~polux@51.15.169.172) (Quit: The Lounge - https://thelounge.github.io)
2021-11-05 10:10:22 +0100polux(~polux@51.15.169.172)
2021-11-05 10:12:27 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 10:14:11 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 264 seconds)
2021-11-05 10:16:14 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-05 10:17:00 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 10:17:14 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2021-11-05 10:17:42 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 10:20:18 +0100hightower2(~hightower@213.147.110.20) (Ping timeout: 268 seconds)
2021-11-05 10:22:07 +0100Kaiepi(~Kaiepi@156.34.44.192) (Read error: Connection reset by peer)
2021-11-05 10:22:10 +0100_xor(~xor@72.49.199.147) (Ping timeout: 268 seconds)
2021-11-05 10:22:19 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-05 10:22:30 +0100juhp(~juhp@128.106.188.220) (Remote host closed the connection)
2021-11-05 10:22:46 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2021-11-05 10:23:50 +0100ski(~ski@remote12.chalmers.se) (Ping timeout: 260 seconds)
2021-11-05 10:24:03 +0100ski(~ski@remote12.chalmers.se)
2021-11-05 10:24:05 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 264 seconds)
2021-11-05 10:25:46 +0100notzmv(~zmv@user/notzmv)
2021-11-05 10:26:15 +0100shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-11-05 10:27:56 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 10:28:11 +0100df(~ben@justworks.xyz) (Ping timeout: 246 seconds)
2021-11-05 10:28:19 +0100ubert(~Thunderbi@p200300ecdf4fcafee019fddc82d0353e.dip0.t-ipconnect.de)
2021-11-05 10:28:28 +0100df(~ben@justworks.xyz)
2021-11-05 10:28:41 +0100cfricke(~cfricke@user/cfricke)
2021-11-05 10:33:39 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2021-11-05 10:34:16 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-11-05 10:35:26 +0100ubert(~Thunderbi@p200300ecdf4fcafee019fddc82d0353e.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2021-11-05 10:41:30 +0100mestre(~mestre@191.177.175.57) (Quit: Lost terminal)
2021-11-05 10:44:44 +0100fendor(~fendor@178.115.33.172.wireless.dyn.drei.com) (Remote host closed the connection)
2021-11-05 10:45:18 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-05 10:46:50 +0100Codaraxis(~Codaraxis@user/codaraxis) (Ping timeout: 268 seconds)
2021-11-05 10:52:01 +0100ubert(~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
2021-11-05 11:00:43 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2021-11-05 11:01:08 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-11-05 11:05:47 +0100_xor(~xor@72.49.199.147)
2021-11-05 11:06:30 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
2021-11-05 11:11:39 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-11-05 11:12:00 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-05 11:12:39 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 11:13:37 +0100dsrt^(~dsrt@wsip-98-188-242-6.mc.at.cox.net) (Remote host closed the connection)
2021-11-05 11:14:02 +0100nschoe(~quassel@2a01:e0a:8e:a190:161c:6858:2d6b:fc1f)
2021-11-05 11:15:42 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-05 11:16:01 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 11:16:16 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 11:19:46 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-11-05 11:20:42 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 260 seconds)
2021-11-05 11:21:23 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
2021-11-05 11:24:16 +0100mmhat(~mmh@55d4b909.access.ecotel.net)
2021-11-05 11:24:25 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 256 seconds)
2021-11-05 11:28:08 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-11-05 11:28:39 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-11-05 11:29:31 +0100desantra(~skykanin@user/skykanin)
2021-11-05 11:33:37 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net)
2021-11-05 11:36:29 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-11-05 11:37:10 +0100DNH(~DNH@2a02:8108:1100:16d8:e9ee:3bd5:4988:8148)
2021-11-05 11:41:51 +0100phma(~phma@host-67-44-209-61.hnremote.net) (Read error: Connection reset by peer)
2021-11-05 11:42:31 +0100phma(~phma@host-67-44-208-102.hnremote.net)
2021-11-05 11:43:11 +0100timCF(~timCF@200-149-20-81.sta.estpak.ee)
2021-11-05 11:45:55 +0100 <timCF> Hello! In my program I do need Generic instance of UTCTime (to derive Generic for my own types which are using UTCTime), but seems like standard UTCTime does not export all constructors, and GHC refuses to stock derive Generic
2021-11-05 11:46:03 +0100 <timCF> What's the best option there?
2021-11-05 11:46:18 +0100 <timCF> Write orphan Generic instance for UTCTime by hand?
2021-11-05 11:47:09 +0100 <timCF> Not sure it's also possible because of missing constructors in scope
2021-11-05 11:47:50 +0100msmhnd^(~msmhnd@wsip-98-188-242-6.mc.at.cox.net)
2021-11-05 11:48:19 +0100pop3(~pop3@user/pop3) (Remote host closed the connection)
2021-11-05 11:49:59 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-05 11:50:25 +0100pop3(~pop3@user/pop3)
2021-11-05 11:52:13 +0100 <[exa]> timCF: can you derive from Data ? both DiffTime and Day (in UTCTime) seem to have Data
2021-11-05 11:52:49 +0100 <timCF> [exa]: you mean it's possible to use Data to manually write orphan Generic instance?
2021-11-05 11:53:00 +0100 <maerwald> timCF: duplicate the type internally and then unsafeCoerce to make sure your functions always take the original UTCTime only
2021-11-05 11:54:09 +0100 <maerwald> that's the only way to really get around non-exported constructors
2021-11-05 11:55:16 +0100 <timCF> maerwald: ouch
2021-11-05 11:55:25 +0100 <timCF> maerwald: but thanks for reply!
2021-11-05 11:55:33 +0100Cajun(~Cajun@user/cajun)
2021-11-05 11:57:13 +0100 <Hecate> hi
2021-11-05 11:57:22 +0100 <geekosaur> œ
2021-11-05 11:59:36 +0100chomwitt(~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Ping timeout: 268 seconds)
2021-11-05 12:00:53 +0100alx741(~alx741@181.196.68.55)
2021-11-05 12:02:04 +0100jumper149(~jumper149@80.240.31.34)
2021-11-05 12:02:46 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 12:07:56 +0100johnny_sitar(~artur@ip-89-161-55-249.tel.tkb.net.pl)
2021-11-05 12:08:03 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-05 12:12:23 +0100johnny_sitar(~artur@ip-89-161-55-249.tel.tkb.net.pl) (Ping timeout: 264 seconds)
2021-11-05 12:16:38 +0100pop3(~pop3@user/pop3) (Remote host closed the connection)
2021-11-05 12:17:26 +0100pop3(~pop3@user/pop3)
2021-11-05 12:23:15 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
2021-11-05 12:25:11 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 12:28:34 +0100johnny_sitar(~artur@user-5-173-132-197.play-internet.pl)
2021-11-05 12:29:57 +0100waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-11-05 12:40:23 +0100Lycurgus(~juan@98.4.112.204)
2021-11-05 12:40:33 +0100boxscape_(~boxscape_@134.171.69.87)
2021-11-05 12:40:45 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-05 12:41:22 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 12:41:46 +0100waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Quit: WeeChat 3.3)
2021-11-05 12:42:38 +0100kammao(~kammao@188.27.128.253)
2021-11-05 12:43:52 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 12:44:10 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Client Quit)
2021-11-05 12:44:42 +0100 <kammao> Hello! Any of you guys used Heroku with a haskell app? I'm having quite a bit of trouble with the Procfile.. Heroku does not find the directory that I give it therefore the app crashes even if it's deployed
2021-11-05 12:44:54 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 12:45:21 +0100desantra(~skykanin@user/skykanin) (Quit: WeeChat 3.3)
2021-11-05 12:45:43 +0100 <Lycurgus> you are not the first person to come here with that complaint
2021-11-05 12:46:25 +0100mmhat(~mmh@55d4b909.access.ecotel.net) (Quit: WeeChat 3.3)
2021-11-05 12:46:30 +0100 <Lycurgus> and this would not be the first time I responded that heroku doesn't really do hs, but that may have changed by now, your complaint notwithstanding
2021-11-05 12:48:10 +0100 <kammao> Ahh..That's encouraging!! I used the Yesod Framework and followed their guide to deploy this so  I thought It would be a clear process and maybe I was missing something
2021-11-05 12:48:19 +0100nschoe(~quassel@2a01:e0a:8e:a190:161c:6858:2d6b:fc1f) (Ping timeout: 268 seconds)
2021-11-05 12:48:59 +0100whez(sid470288@id-470288.lymington.irccloud.com)
2021-11-05 12:50:47 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 268 seconds)
2021-11-05 12:50:54 +0100 <Lycurgus> prolly snippets and toy apps will work
2021-11-05 12:54:27 +0100 <kammao> It's just a simple blog.. I couldn't really figure out  in the Procfile `web: ./dist/bin/{app}/{app} -p $PORT` how I should approach the path differently? Or how can I check that I'm using a wrong path since most of the websites that I've seen use that specific location..
2021-11-05 12:54:29 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-05 12:57:14 +0100sudden(~cat@h-98-128-128-173.A351.priv.bahnhof.se)
2021-11-05 12:57:35 +0100sudden(~cat@h-98-128-128-173.A351.priv.bahnhof.se) (Changing host)
2021-11-05 12:57:35 +0100sudden(~cat@user/sudden)
2021-11-05 12:57:35 +0100gentauro(~gentauro@user/gentauro) (Read error: Connection reset by peer)
2021-11-05 12:58:52 +0100 <Lycurgus> by coming to know what path the stuff ur using requires
2021-11-05 13:03:21 +0100gentauro(~gentauro@user/gentauro)
2021-11-05 13:06:06 +0100Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-11-05 13:10:47 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-11-05 13:12:27 +0100aleator(~aleator@188-67-216-232.bb.dnainternet.fi) (Ping timeout: 260 seconds)
2021-11-05 13:13:05 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-11-05 13:14:53 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 13:15:34 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4)
2021-11-05 13:19:42 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2021-11-05 13:19:48 +0100kenran(~kenran@b2b-37-24-119-190.unitymedia.biz) (Quit: WeeChat info:version)
2021-11-05 13:20:38 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4) (Ping timeout: 260 seconds)
2021-11-05 13:23:16 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2021-11-05 13:23:34 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2021-11-05 13:23:35 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2021-11-05 13:23:54 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 13:24:32 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2021-11-05 13:27:11 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-11-05 13:28:05 +0100werner100(~werner100@2601:2c2:400:4440:dc41:dccb:7773:558f)
2021-11-05 13:30:13 +0100yrlnry(~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 256 seconds)
2021-11-05 13:30:14 +0100xsperry(~xs@user/xsperry) ()
2021-11-05 13:30:20 +0100 <werner100> Hi everyone, yesterday I was reviewing the libraries available for handling command line options and arguments. I have experimented with cmdargs and it seems to do what I need. Which library are you guys using?
2021-11-05 13:30:38 +0100kammao(~kammao@188.27.128.253) (Quit: Client closed)
2021-11-05 13:30:47 +0100 <geekosaur> optparse=applicative is common
2021-11-05 13:30:58 +0100 <geekosaur> s/=/-/
2021-11-05 13:33:21 +0100chomwitt(~chomwitt@ppp-2-85-245-90.home.otenet.gr)
2021-11-05 13:35:00 +0100shriekingnoise(~shrieking@186.137.144.80)
2021-11-05 13:36:16 +0100 <maerwald> I just started using cmdargs too
2021-11-05 13:36:25 +0100 <maerwald> optparse-applicative is powerful, but not very declarative
2021-11-05 13:36:33 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
2021-11-05 13:37:50 +0100 <maerwald> but cmdargs has oddities: invalid configuration crashes at runtime instead of raising a type error
2021-11-05 13:38:11 +0100 <maerwald> not hard to test, but yeah
2021-11-05 13:39:03 +0100 <maerwald> exampe https://paste.tomsmeding.com/qf6oVZZP
2021-11-05 13:42:08 +0100 <maerwald> you also can't have mandatory flags
2021-11-05 13:43:15 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 256 seconds)
2021-11-05 13:43:21 +0100 <werner100> I found it handy but was looking for hooks to connect custom argument handling functions. It does a nice job for help, version, and when options are missing or incomplete. But it seems for processing other options and particularly commands/modes you need to tool your own parser.
2021-11-05 13:44:07 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2021-11-05 13:44:13 +0100 <werner100> Today, I'm going to look at System.Console.ArgParser.
2021-11-05 13:44:14 +0100Lycurgus(~juan@98.4.112.204)
2021-11-05 13:45:14 +0100 <Lycurgus> shouldn't the topic be adjusted?
2021-11-05 13:45:50 +0100 <geekosaur> for the logs being down? I hope that'll be fixed soon, the kerfuffle seems to be over
2021-11-05 13:46:02 +0100 <Lycurgus> "Archived" added before Public would do it
2021-11-05 13:46:09 +0100 <Lycurgus> they're not down
2021-11-05 13:46:47 +0100 <Lycurgus> they are turned off
2021-11-05 13:46:55 +0100 <geekosaur> right
2021-11-05 13:47:12 +0100 <Lycurgus> who are the parties?
2021-11-05 13:47:51 +0100zincy(~tom@2a00:23c8:970c:4801:e02d:7bbd:5337:7d58)
2021-11-05 13:48:17 +0100 <Lycurgus> (contend in the GDPR issue)
2021-11-05 13:48:19 +0100 <zincy> Why do so many coders love regular expressions for validation?
2021-11-05 13:48:21 +0100 <Lycurgus> *contending
2021-11-05 13:48:49 +0100 <geekosaur> zincy, because it's what they know about
2021-11-05 13:48:54 +0100 <Lycurgus> zincy because of the power as a solution to string recognition and processing?
2021-11-05 13:48:58 +0100sudden(~cat@user/sudden) (Quit: leaving)
2021-11-05 13:49:01 +0100 <geekosaur> (not necessarily know, just know about)
2021-11-05 13:49:17 +0100 <geekosaur> and they're afraid of parsers
2021-11-05 13:49:19 +0100 <maerwald> zincy: because they are to be prefeerred over parsers whenever possible
2021-11-05 13:49:21 +0100 <maerwald> geekosaur: no
2021-11-05 13:49:33 +0100 <maerwald> parsers carry more semantic power
2021-11-05 13:49:47 +0100 <Lycurgus> also the ubiquity of use for that purpose
2021-11-05 13:49:54 +0100 <werner100> ...and regex have been around for long time.
2021-11-05 13:50:29 +0100 <zincy> I just can't imagine when a regex is the right approach
2021-11-05 13:50:49 +0100 <Lycurgus> how long have you been programming?
2021-11-05 13:50:57 +0100 <[exa]> zincy: regexes can't be easily decompiled and validated -> they get away with pretty much anything
2021-11-05 13:51:04 +0100 <werner100> I think for string handling it's simple enough. Been programming since the seventies...
2021-11-05 13:51:11 +0100 <[exa]> s/decompiled/read humanely/
2021-11-05 13:51:20 +0100 <zincy> Lycurgus: 7 years
2021-11-05 13:51:33 +0100geekosaurwishes more regex engines supported, and more people used, /x
2021-11-05 13:51:41 +0100 <werner100> Machine language -> Basic -> Pascal -> C -> Scheme -> Java -> Haskell
2021-11-05 13:52:05 +0100 <maerwald> zincy: when your input is a regular language, then you use a regex
2021-11-05 13:52:20 +0100 <zincy> So its okay to use regexes to say validate this text is uppercase?
2021-11-05 13:52:28 +0100 <zincy> I just assumed regex = evil
2021-11-05 13:52:37 +0100 <maerwald> that's just an odd narrative sometimes spread here
2021-11-05 13:52:40 +0100 <zincy> But maybe in that case parsing would be too heavyweight
2021-11-05 13:52:42 +0100rokoe(~roskoe@79-68-160-163.dynamic.dsl.as9105.com)
2021-11-05 13:52:44 +0100 <[exa]> one thing on the regexes that's uncanny is how people assume that matching is going to be roughly O(1) in the size of the input because "it can be compiled to a DFA right?" [padme_meme_the_dfa_is_small_right.jpg]
2021-11-05 13:52:47 +0100 <Lycurgus> right i don't think people today appreciate the extent to which assembly was used for systems and even applications before the 80s
2021-11-05 13:53:02 +0100 <[exa]> there have been literal DoSes exploiting that
2021-11-05 13:53:09 +0100 <maerwald> the problem is people using regexes for input that a regex can't possibly correctly validate
2021-11-05 13:53:12 +0100 <maerwald> that depends on the input
2021-11-05 13:53:42 +0100 <zincy> But modern implementations of regex can parse non-regular stuff
2021-11-05 13:53:43 +0100 <werner100> Correct
2021-11-05 13:53:45 +0100 <maerwald> if you use monadic parser combinators for everything, you're doing something wrong too (in terms of containing complexity)
2021-11-05 13:53:54 +0100 <zincy> oh ok
2021-11-05 13:54:01 +0100 <maerwald> zincy: yeah, those I avoid
2021-11-05 13:54:22 +0100yrlnry(~mjd@pool-100-11-2-80.phlapa.fios.verizon.net)
2021-11-05 13:55:03 +0100 <zincy> So the rule is regex is fine when it comes to regular languages because it gets nasty on non-regular with recursive regex
2021-11-05 13:55:38 +0100 <Lycurgus> so 1 solution to the GDPR issue would be to just block the log in the EU or where the GDPR is in effect
2021-11-05 13:56:31 +0100 <maerwald> Lycurgus: uhm..
2021-11-05 13:56:39 +0100 <maerwald> I don't think so
2021-11-05 13:56:49 +0100 <geekosaur> one problem there being that it's hosted in the EU
2021-11-05 13:56:52 +0100 <Lycurgus> scrubbing nicks would address the specific issue
2021-11-05 13:57:04 +0100 <Lycurgus> why is that a problem?
2021-11-05 13:57:35 +0100 <maerwald> as per GDPR I even need the ability to email an advertisement company and tell them I want all my cookies deleted from all their backends, not just my incoming ads
2021-11-05 13:57:56 +0100 <maerwald> no one knows how to enforce that
2021-11-05 13:57:58 +0100 <maerwald> but yeah
2021-11-05 13:58:02 +0100 <Lycurgus> that can only be true for ops in the GDPR jurisdiction
2021-11-05 13:58:37 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2021-11-05 13:58:56 +0100 <Lycurgus> stuff being done from yurope but not allowed there is fairly well established in tradition
2021-11-05 14:00:15 +0100 <lortabac> my main problem with regexes is the obfuscated and error-prone syntax
2021-11-05 14:00:28 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 268 seconds)
2021-11-05 14:01:10 +0100 <Lycurgus> they front the sound and proven automata
2021-11-05 14:02:45 +0100 <zincy> lortabac: So would you avoid regexes entirely?
2021-11-05 14:02:47 +0100 <maerwald> lortabac: I've probably written more bugs with monadic parser combinators
2021-11-05 14:03:32 +0100 <lortabac> I use regexes when I need them, but I wish they had a more human-friendly syntax
2021-11-05 14:03:56 +0100 <geekosaur> lortabac, there are regex extensions that help with the syntax. /x is one of them. raku extends the syntax to make a reasonable — and reasonably readable — parser syntax
2021-11-05 14:04:25 +0100 <geekosaur> (/x allows whitespace and comments, which helps a lot with readability)
2021-11-05 14:04:57 +0100 <boxscape_> Lycurgus rather than not offering the logs in the EU, I think you'd have to not log any user from the EU, no?
2021-11-05 14:05:32 +0100 <Lycurgus> right that might be easier too
2021-11-05 14:05:49 +0100 <boxscape_> it sounds harder to me, but also necessary
2021-11-05 14:06:09 +0100 <boxscape_> (that is if logging like this is subject to GDPR to begin with)
2021-11-05 14:06:30 +0100 <zincy> Doesnt the "rule of least power" imply that one should use regexes for trivial cases of parsing and validation vs a monadic parser
2021-11-05 14:06:31 +0100 <zincy> https://en.wikipedia.org/wiki/Rule_of_least_power
2021-11-05 14:06:41 +0100sprout_(~quassel@2a02:a467:ccd6:1:49b2:5c3a:dea0:5ca1)
2021-11-05 14:06:44 +0100 <lortabac> geekosaur: it still looks needlessly obfuscated to me, even in raku
2021-11-05 14:07:01 +0100 <lortabac> I'd prefer something like regex-applicative
2021-11-05 14:08:51 +0100sudden(~cat@h-98-128-128-173.A351.priv.bahnhof.se)
2021-11-05 14:09:00 +0100sudden(~cat@h-98-128-128-173.A351.priv.bahnhof.se) (Changing host)
2021-11-05 14:09:00 +0100sudden(~cat@user/sudden)
2021-11-05 14:09:56 +0100 <lortabac> zincy: sounds reasonable
2021-11-05 14:10:20 +0100sprout(~quassel@2a02:a467:ccd6:1:5495:68b3:d03c:732e) (Ping timeout: 268 seconds)
2021-11-05 14:11:56 +0100nschoe(~quassel@2a01:e0a:8e:a190:c6dc:21f9:bc16:feb3)
2021-11-05 14:13:26 +0100 <Lycurgus> the power of regexes seems well matched to the complexity of the target ops to me
2021-11-05 14:14:30 +0100Lycurgusbut I'm just an ol fart, don't pay me no mind
2021-11-05 14:14:38 +0100Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-11-05 14:16:09 +0100kupi(uid212005@id-212005.hampstead.irccloud.com)
2021-11-05 14:16:10 +0100werner100(~werner100@2601:2c2:400:4440:dc41:dccb:7773:558f) (Ping timeout: 256 seconds)
2021-11-05 14:23:20 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-11-05 14:25:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-11-05 14:27:43 +0100 <zincy> So in a dynamic language is can it be a good idea to first parse a JSON request body and then validate individual fields which are strings with regexes?
2021-11-05 14:27:45 +0100phma(~phma@host-67-44-208-102.hnremote.net) (Read error: Connection reset by peer)
2021-11-05 14:28:21 +0100 <zincy> I've mostly used Haskell so don't know how parsing/validation is best done in mainstream languages?
2021-11-05 14:29:09 +0100slack1256(~slack1256@191.126.227.82)
2021-11-05 14:31:01 +0100 <maerwald> you can do the same in haskell
2021-11-05 14:31:29 +0100jess(~jess@libera/staff/jess) ()
2021-11-05 14:34:06 +0100bastelfreak(~bastelfre@basteles-bastelknecht.bastelfreak.org) (Quit: WeeChat 3.3)
2021-11-05 14:36:42 +0100johnny_sitar(~artur@user-5-173-132-197.play-internet.pl) (Ping timeout: 260 seconds)
2021-11-05 14:38:13 +0100yrlnry(~mjd@pool-100-11-2-80.phlapa.fios.verizon.net) (Ping timeout: 256 seconds)
2021-11-05 14:40:08 +0100bastelfreak(~bastelfre@basteles-bastelknecht.bastelfreak.org)
2021-11-05 14:41:22 +0100acidjnk_new(~acidjnk@p200300d0c726704784feaa35b47dd204.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2021-11-05 14:41:38 +0100fryguybob(~fryguybob@cpe-74-67-169-145.rochester.res.rr.com)
2021-11-05 14:45:59 +0100juhp(~juhp@128.106.188.220)
2021-11-05 14:47:16 +0100jespada(~jespada@190.7.36.46)
2021-11-05 14:47:56 +0100Sgeo(~Sgeo@user/sgeo)
2021-11-05 14:52:28 +0100syd(~syd@cpc91646-hart11-2-0-cust432.11-3.cable.virginm.net)
2021-11-05 14:54:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 14:55:16 +0100 <zincy> maewald: So no fundamental difference between langauges?
2021-11-05 14:56:26 +0100 <geekosaur> there are several ways to do parsing, they're all language-agnostic
2021-11-05 14:57:11 +0100 <geekosaur> some of them may be easier in some languages than others, but parsing is parsing regardless of implementation language
2021-11-05 14:57:13 +0100brschkv(~jbrusch@185.223.145.18)
2021-11-05 14:57:30 +0100 <zincy> Ah ok, need to do more reading then
2021-11-05 14:58:22 +0100 <zincy> I guess I am confused because the parsing and validation is usually done in one step with in Haskell
2021-11-05 14:59:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-05 14:59:25 +0100 <geekosaur> that's more or less because parser combinators come more naturally in Haskell. but we still have happy which implements a yacc-like LALR(1) (or more recently GLR) parser for Haskell
2021-11-05 15:00:01 +0100 <geekosaur> and parser combinators make it easier to combine the parsing and validation. they do not require it, however
2021-11-05 15:01:23 +0100yrlnry(~mjd@2603:301d:775:0:3569:8496:7f44:52c9)
2021-11-05 15:01:29 +0100pera(~pera@user/pera)
2021-11-05 15:05:05 +0100 <maerwald> there are parser combinators for C
2021-11-05 15:05:10 +0100 <maerwald> it's nothing unique to haskell anymore
2021-11-05 15:05:49 +0100 <maerwald> zincy: you can parse json strings into Aeson Value and then do the validation/extraction manually
2021-11-05 15:06:20 +0100 <syd> there's a blog article "Parse, don't validate" which you might find interesting in that regard.
2021-11-05 15:06:48 +0100 <Hecate> yes it's lovely :p
2021-11-05 15:06:59 +0100yrlnry(~mjd@2603:301d:775:0:3569:8496:7f44:52c9) (Ping timeout: 264 seconds)
2021-11-05 15:07:41 +0100 <maerwald> zincy: one advantage might be that it's easier to support multiple schemas ad-hoc that way
2021-11-05 15:09:02 +0100 <maerwald> here's a real-world example where the aeson parser just produces Value and then you have a manual extraction: https://github.com/input-output-hk/cardano-node/blob/d95ef21062a50acf8f35f1f5d94f8a8a70f7510b/card…
2021-11-05 15:12:08 +0100 <zincy> Thanks syd and Maerwald
2021-11-05 15:13:11 +0100 <zincy> I guess there is nothing magical about combining parsing and validation in one step
2021-11-05 15:13:43 +0100 <zincy> And sometimes you will definitely want to separate them if you have semantic validation which cannot be easily expressed in a type
2021-11-05 15:14:02 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 15:15:34 +0100max22-(~maxime@2a01cb088335980058acad91096e7c9d.ipv6.abo.wanadoo.fr)
2021-11-05 15:17:10 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 15:17:35 +0100 <zincy> Getting past the intermediate stage of coding seems to be more about unlearning than learning
2021-11-05 15:17:51 +0100 <zincy> Going from absolutes to it depends
2021-11-05 15:18:06 +0100 <maerwald> zincy: well, if you parse unrestricted into `Value`, then I think that's a DoS angle in fact
2021-11-05 15:18:12 +0100 <geekosaur> it's about learning flexibility instead of expecting strict rules
2021-11-05 15:18:24 +0100 <zincy> yeah
2021-11-05 15:20:10 +0100 <maerwald> but I think most derived aeson parsers are DoS prone
2021-11-05 15:20:26 +0100 <zincy> Denial of service?
2021-11-05 15:21:51 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2021-11-05 15:23:36 +0100vpan(~0@212.117.1.172) (Quit: Leaving.)
2021-11-05 15:26:10 +0100yrlnry(~mjd@pool-74-109-22-90.phlapa.fios.verizon.net)
2021-11-05 15:30:33 +0100jumper149(~jumper149@80.240.31.34) (Quit: WeeChat 3.3)
2021-11-05 15:39:22 +0100 <merijn> zincy: In the sense that malicious input can take down your parser
2021-11-05 15:41:34 +0100v01d4lph4(~v01d4lph4@106.215.93.204)
2021-11-05 15:41:34 +0100v01d4lph4(~v01d4lph4@106.215.93.204) (Changing host)
2021-11-05 15:41:34 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4)
2021-11-05 15:44:01 +0100 <zincy> ah right
2021-11-05 15:44:02 +0100jespada(~jespada@190.7.36.46) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-11-05 15:48:56 +0100Guest99(~Guest99@pool-100-8-45-127.nwrknj.fios.verizon.net)
2021-11-05 15:49:44 +0100pgib(~textual@173.38.117.89) (Quit: 00 PC LOAD LETTER)
2021-11-05 15:53:47 +0100trcc(~trcc@2-104-60-169-cable.dk.customer.tdc.net) ()
2021-11-05 15:54:33 +0100chomwitt(~chomwitt@ppp-2-85-245-90.home.otenet.gr) (Ping timeout: 268 seconds)
2021-11-05 15:54:46 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:76a9:f65d:22e8:2e7b) (Quit: WeeChat 2.8)
2021-11-05 15:56:20 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2021-11-05 15:58:22 +0100slack1256(~slack1256@191.126.227.82) (Ping timeout: 260 seconds)
2021-11-05 16:01:06 +0100slack1256(~slack1256@191.125.227.82)
2021-11-05 16:01:39 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2021-11-05 16:01:47 +0100zincy_(~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c)
2021-11-05 16:02:56 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-11-05 16:07:33 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
2021-11-05 16:10:28 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2021-11-05 16:10:54 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:2f4a:5df3:56f6:843a)
2021-11-05 16:10:54 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-11-05 16:11:03 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 16:15:51 +0100chomwitt(~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374)
2021-11-05 16:17:28 +0100f-a(f2a@f2a.jujube.ircnow.org)
2021-11-05 16:19:40 +0100 <f-a> hello. I am writing a simple «select language» menu. As now I am keeping all langs in a list and rotate it when the user presses ← →, and pick _head on ⏎. It works, but I wonder: is there a more appropriate data type?
2021-11-05 16:20:01 +0100 <merijn> Sounds like a Zipper :>
2021-11-05 16:20:09 +0100 <yrlnry> I was going to say sounds like a zipper.
2021-11-05 16:20:11 +0100 <f-a> mhh let us see if microlens packs it
2021-11-05 16:21:09 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 16:21:33 +0100 <yrlnry> The original (1997) Huet paper discusses list zippers specifically, and wikipedia has that as an example: https://en.wikipedia.org/wiki/Zipper_(data_structure)#Example:_Bidirectional_list_traversal
2021-11-05 16:22:39 +0100 <f-a> thansk
2021-11-05 16:22:40 +0100 <f-a> *thanks
2021-11-05 16:25:48 +0100kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-05 16:26:38 +0100zincy_(~zincy@2a00:23c8:970c:4801:8d15:54ac:ed5f:296c) (Remote host closed the connection)
2021-11-05 16:27:28 +0100MoC(~moc@user/moc) (Quit: Konversation terminated!)
2021-11-05 16:30:02 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-11-05 16:31:33 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 268 seconds)
2021-11-05 16:31:35 +0100boxscape_(~boxscape_@134.171.69.87) (Ping timeout: 264 seconds)
2021-11-05 16:31:43 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2021-11-05 16:31:54 +0100timCF(~timCF@200-149-20-81.sta.estpak.ee) (Quit: leaving)
2021-11-05 16:34:00 +0100msmhnd^(~msmhnd@wsip-98-188-242-6.mc.at.cox.net) (Ping timeout: 268 seconds)
2021-11-05 16:34:26 +0100lbseale(~lbseale@user/ep1ctetus)
2021-11-05 16:37:22 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:2f4a:5df3:56f6:843a) (Quit: SeungheonOh)
2021-11-05 16:37:41 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:2f4a:5df3:56f6:843a)
2021-11-05 16:38:40 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-11-05 16:39:23 +0100jakalx(~jakalx@base.jakalx.net) ()
2021-11-05 16:40:43 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:2f4a:5df3:56f6:843a) (Client Quit)
2021-11-05 16:41:06 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:2f4a:5df3:56f6:843a)
2021-11-05 16:43:52 +0100SeungheonOh(~Thunderbi@2600:1700:5168:1400:2f4a:5df3:56f6:843a) (Client Quit)
2021-11-05 16:44:26 +0100 <remexre> if I have some variable foo of concrete type Foo, why does DuplicateRecordFields not like (foo { bar = 1 }) when there are two types with a bar::Int field in scope?
2021-11-05 16:44:38 +0100 <remexre> shouldn't it be able to disambiguate based on the type of foo?
2021-11-05 16:44:57 +0100 <remexre> (the error message even indicates that it knows the type!)
2021-11-05 16:45:24 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl)
2021-11-05 16:46:29 +0100Sgeo_(~Sgeo@user/sgeo)
2021-11-05 16:46:30 +0100 <geekosaur> https://downloads.haskell.org/ghc/latest/docs/html/users_guide/exts/duplicate_record_fields.html#r…
2021-11-05 16:47:23 +0100 <geekosaur> it's not real smart about the ambiguity check even if it knows the type (I'm not even sure it knows the type fully until it prints the error message, tbh)
2021-11-05 16:47:27 +0100moerlitz(d9eb32b7ed@knopi.disroot.org)
2021-11-05 16:47:55 +0100 <remexre> I think the h x = (x :: T) { foo = 3 } case applies to my situation
2021-11-05 16:48:12 +0100 <remexre> but even when I give an explicit type for the thing being updated, no joy
2021-11-05 16:49:07 +0100Sgeo(~Sgeo@user/sgeo) (Ping timeout: 256 seconds)
2021-11-05 16:51:20 +0100 <geekosaur> mrr. wonder if they broke it at some point. I think I'm quoting the 9.0.1 manual, what version of ghc are you using?
2021-11-05 16:51:48 +0100 <remexre> 9.2.1
2021-11-05 16:52:15 +0100 <remexre> annoying that "latest" isn't updated for it...
2021-11-05 16:52:29 +0100 <geekosaur> hm. could imagine something broke while adding RecordDotSyntax
2021-11-05 16:52:46 +0100 <remexre> oh, I think the error might actually be from -Werror with the new warning they mention there?
2021-11-05 16:53:06 +0100 <remexre> maybe they're afraid it will in the future?
2021-11-05 16:54:14 +0100 <syd> does DisambiguateRecordFields help?
2021-11-05 16:54:56 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2021-11-05 16:54:56 +0100 <remexre> nope, have that on as well
2021-11-05 16:55:25 +0100 <remexre> both of the ambiguous fields are of the same... dunno the term; are both F a for different concrete a
2021-11-05 16:55:55 +0100 <merijn> I just blindly assume that any RecordFields extension will just make everything worse and has no determinism :p
2021-11-05 16:56:58 +0100 <remexre> and I think deep down I just want {-# LANGUAGE PureScript #-} for all that :P
2021-11-05 16:57:02 +0100 <syd> hmm, I think it might qualify as ambiguous. what should the type of h be generally?
2021-11-05 16:57:22 +0100 <remexre> ABunchOfMonadConstraints m => ... -> m Foo
2021-11-05 16:57:23 +0100 <syd> I think it might be this case from DisambiguateRecordFields: "bad1 k = k { x = 3 } -- Ambiguous"
2021-11-05 16:57:30 +0100 <remexre> ah
2021-11-05 16:57:38 +0100 <remexre> yeah, that could do it, where k=pure
2021-11-05 16:58:08 +0100 <syd> I was thinking more as in, k being a value of either of the types with the field x.
2021-11-05 16:58:11 +0100 <remexre> I qualified the name (foo { Foo.bar = ... }) and it works, so I'm gonna call it that
2021-11-05 16:58:19 +0100 <remexre> oh whooops misread that
2021-11-05 16:58:37 +0100 <remexre> no, it's a do-block ending with (pure $ foo { ... })
2021-11-05 16:58:44 +0100 <syd> there's a blog post about how to import and use them ergonomically, let me see if I can find it
2021-11-05 17:00:08 +0100ftzm[m](~ftzmmatri@2001:470:69fc:105::1:dfc) (Quit: You have been kicked for being idle)
2021-11-05 17:00:08 +0100reddishblue[m](~reddishbl@2001:470:69fc:105::21eb) (Quit: You have been kicked for being idle)
2021-11-05 17:00:24 +0100 <syd> https://chrisdone.com/posts/import-aliases-field-names/
2021-11-05 17:00:27 +0100reddishblue[m](~reddishbl@2001:470:69fc:105::21eb)
2021-11-05 17:00:31 +0100reddishblue[m](~reddishbl@2001:470:69fc:105::21eb) ()
2021-11-05 17:00:35 +0100jakalx(~jakalx@base.jakalx.net)
2021-11-05 17:01:08 +0100 <remexre> ooh, I hadn't seen that before
2021-11-05 17:01:39 +0100 <remexre> I'm already importing the module qualified (and the module only defines this type), so I'm probably gonna stick with that; thanks for showing me the different technique though!
2021-11-05 17:01:49 +0100 <remexre> and thanks to everyone for helping debug!
2021-11-05 17:04:01 +0100 <syd> np, I just use personName/companyName prefixes, ergonomics be damned lol. Lenses can work how you initially wanted I believe, makeClassy is the thing to google iirc.
2021-11-05 17:04:42 +0100 <np> picking `np` as my nick was a mistake
2021-11-05 17:05:16 +0100 <geekosaur> we used to have someone with the nick "so". imagine *that* one
2021-11-05 17:05:19 +0100 <syd> haha, np np ;)
2021-11-05 17:06:10 +0100_________(~nobody@user/noodly) (Ping timeout: 252 seconds)
2021-11-05 17:06:24 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
2021-11-05 17:08:03 +0100 <syd> regarding future stuff, if/when HasField gets setField, I believe it'll be possible to write row-polymorphic-esque get/set functions for any record with a type-level literal field name; right now I'm pretty sure it's possible to write get functions that way.
2021-11-05 17:08:41 +0100rokoe(~roskoe@79-68-160-163.dynamic.dsl.as9105.com) (Quit: Konversation terminated!)
2021-11-05 17:10:37 +0100 <syd> getName :: HasField "name" r String -> String (or something like that)
2021-11-05 17:11:07 +0100_________(~nobody@user/noodly)
2021-11-05 17:11:09 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-11-05 17:11:10 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
2021-11-05 17:13:35 +0100 <yushyin> syd: ah yes :D I found this by chance the other day https://github.com/ElderEphemera/instance-impl
2021-11-05 17:17:05 +0100 <remexre> yeah, I was using labelled optics, but their TH stuff doesn't support 9.2.1 at the moment
2021-11-05 17:17:11 +0100 <remexre> (or didn't on monday at least!)
2021-11-05 17:17:30 +0100 <remexre> I expect in a few weeks I'll be able to use it again
2021-11-05 17:17:43 +0100 <remexre> but I was basically just using it to disambiguate fields
2021-11-05 17:20:04 +0100 <syd> yushyin: nice, that blog post is what alerted me to the existence of HasField. Awesome blog in general, "Invert Your Mocks" and "The Trouble With Typed Errors" come to mind.
2021-11-05 17:21:21 +0100v01d4lph4(~v01d4lph4@106.215.93.204)
2021-11-05 17:21:21 +0100v01d4lph4(~v01d4lph4@106.215.93.204) (Changing host)
2021-11-05 17:21:21 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4)
2021-11-05 17:23:41 +0100f-a(f2a@f2a.jujube.ircnow.org) ()
2021-11-05 17:23:54 +0100Athas(athas@2a01:7c8:aaac:1cf:431c:d49e:2f86:91cc) (Quit: ZNC 1.8.2 - https://znc.in)
2021-11-05 17:24:04 +0100Athas(athas@2a01:7c8:aaac:1cf:a0d4:8908:cfdb:b9c0)
2021-11-05 17:26:41 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-11-05 17:27:29 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-11-05 17:28:20 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-11-05 17:33:19 +0100brschkv(~jbrusch@185.223.145.18) (Ping timeout: 256 seconds)
2021-11-05 17:34:49 +0100jjhoo(jahakala@user/jjhoo) (Remote host closed the connection)
2021-11-05 17:40:08 +0100alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-11-05 17:40:28 +0100alzgh(~alzgh@user/alzgh)
2021-11-05 17:43:14 +0100aegon(~mike@174.127.249.180)
2021-11-05 17:44:37 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4) (Read error: No route to host)
2021-11-05 17:44:57 +0100v01d4lph4(~v01d4lph4@106.215.93.204)
2021-11-05 17:44:57 +0100v01d4lph4(~v01d4lph4@106.215.93.204) (Changing host)
2021-11-05 17:44:57 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4)
2021-11-05 17:45:35 +0100Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-11-05 17:45:59 +0100Sgeo(~Sgeo@user/sgeo)
2021-11-05 17:48:23 +0100Sgeo_(~Sgeo@user/sgeo) (Ping timeout: 264 seconds)
2021-11-05 17:49:37 +0100zebrag(~chris@user/zebrag)
2021-11-05 17:49:48 +0100Guest99(~Guest99@pool-100-8-45-127.nwrknj.fios.verizon.net) (Quit: Client closed)
2021-11-05 17:49:49 +0100jjhoo(~jahakala@user/jjhoo)
2021-11-05 17:55:09 +0100emf(~emf@2620:10d:c090:400::5:38d)
2021-11-05 17:55:42 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-11-05 17:55:58 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
2021-11-05 18:03:07 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-11-05 18:06:07 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Quit: WeeChat 3.1)
2021-11-05 18:11:46 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 18:12:51 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
2021-11-05 18:15:34 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-11-05 18:15:54 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 18:17:46 +0100Lycurgus(~juan@98.4.112.204)
2021-11-05 18:18:14 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2021-11-05 18:21:43 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-11-05 18:22:30 +0100chele(~chele@user/chele) (Remote host closed the connection)
2021-11-05 18:24:26 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2021-11-05 18:24:38 +0100 <awpr> timCF: you don't need an instance of Generic for UTCTime to derive Generic for types that have UTCTime fields
2021-11-05 18:25:00 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-11-05 18:25:10 +0100 <awpr> oh, not online :/
2021-11-05 18:25:49 +0100Vajb(~Vajb@2001:999:66:281c:27a0:1549:39e5:8b1a)
2021-11-05 18:26:01 +0100ubert(~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Quit: ubert)
2021-11-05 18:28:33 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-11-05 18:34:37 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 18:35:30 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 268 seconds)
2021-11-05 18:36:03 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-11-05 18:36:38 +0100aweinstock(~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com) (Ping timeout: 260 seconds)
2021-11-05 18:38:08 +0100aweinstock(~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com)
2021-11-05 18:38:26 +0100econo(uid147250@user/econo)
2021-11-05 18:40:12 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-11-05 18:41:13 +0100pop3(~pop3@user/pop3) (Remote host closed the connection)
2021-11-05 18:41:20 +0100 <dsal> I used a ContT for the first time along with These to replace a fairly simple list monad and my program is slower.
2021-11-05 18:41:44 +0100pop3(~pop3@user/pop3)
2021-11-05 18:44:04 +0100 <dsal> Also, I feel like callCC has the wrong signature. I had to do something gross to get a thing to typecheck because I was calling the exit function in a context that wanted an `a` but it was returning something else. `exit Whatever *> undefined` works, but seems a little wrong.
2021-11-05 18:44:27 +0100 <c_wraith> dsal: yes, it does
2021-11-05 18:44:35 +0100 <c_wraith> it should be higher-rank
2021-11-05 18:45:21 +0100 <dsal> Overall, I didn't find it too weird. I was expecting it to be confusing and scary or something.
2021-11-05 18:47:36 +0100 <dolio> dsal: https://okmij.org/ftp/continuations/against-callcc.html#performance-hit
2021-11-05 18:49:21 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-11-05 18:50:06 +0100 <dsal> Heh. Yeah. I'm not too surprised. I was using the list monad originally which was pretty great. I might be able to just use These directly, though the monad looks slightly strange to me.
2021-11-05 18:50:24 +0100 <dolio> I.E. don't confuse 'conceptual beauty' arguments about how call/cc can technically implement everything for actual practicality.
2021-11-05 18:50:48 +0100kuribas(~user@ptr-25vy0i9zmp0qcl8wvlj.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2021-11-05 18:51:09 +0100 <dolio> (Although it can't actually implement everything, as that page also argues.)
2021-11-05 18:51:10 +0100zincy_(~zincy@2a00:23c8:970c:4801:350f:7ee:191a:6f65)
2021-11-05 18:52:04 +0100brschkv(~jbrusch@dynamic-095-116-017-025.95.116.pool.telefonica.de)
2021-11-05 18:53:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 18:54:55 +0100syd(~syd@cpc91646-hart11-2-0-cust432.11-3.cable.virginm.net) (Ping timeout: 256 seconds)
2021-11-05 18:56:11 +0100Vajb(~Vajb@2001:999:66:281c:27a0:1549:39e5:8b1a) (Read error: Connection reset by peer)
2021-11-05 18:56:16 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 18:56:27 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 268 seconds)
2021-11-05 18:58:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-11-05 18:59:10 +0100ubert(~Thunderbi@p200300ecdf4fcafee019fddc82d0353e.dip0.t-ipconnect.de)
2021-11-05 19:00:16 +0100nurupo(~nurupo.ga@user/nurupo) (Quit: nurupo.ga)
2021-11-05 19:00:30 +0100nurupo(~nurupo.ga@user/nurupo)
2021-11-05 19:01:12 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2021-11-05 19:01:48 +0100Kaiepi(~Kaiepi@156.34.44.192) (Read error: Connection reset by peer)
2021-11-05 19:01:52 +0100fef(~thedawn@user/thedawn)
2021-11-05 19:02:02 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-05 19:04:40 +0100pera(~pera@user/pera) (Quit: leaving)
2021-11-05 19:04:51 +0100slac76440(~slack1256@191.125.99.211)
2021-11-05 19:05:07 +0100syd(~syd@cpc91646-hart11-2-0-cust432.11-3.cable.virginm.net)
2021-11-05 19:05:20 +0100 <syd> dsal: not sure what your use case is, but does the Logic Monad suit your needs perchance?
2021-11-05 19:05:37 +0100 <syd> (you mentioned List, so I figured it might involve backtracking or something)
2021-11-05 19:07:02 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 19:07:34 +0100slack1256(~slack1256@191.125.227.82) (Ping timeout: 268 seconds)
2021-11-05 19:09:30 +0100 <dsal> Thanks. I'll take a look at that later -- might help. There's nothing serious here. Just doodling on some old AoC things that are varying grossness. I have an initial state and then a few child states may fall out of it that need to be recursed. It's one of these things where I'm trying to figure out what is expressive and not hard to read.
2021-11-05 19:11:55 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-11-05 19:13:56 +0100vladl(~vladl@174.127.234.115)
2021-11-05 19:14:53 +0100v01d4lph4(~v01d4lph4@106.215.93.204)
2021-11-05 19:14:53 +0100v01d4lph4(~v01d4lph4@106.215.93.204) (Changing host)
2021-11-05 19:14:53 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4)
2021-11-05 19:15:54 +0100 <Lycurgus> ocaml at least has delimited continuations
2021-11-05 19:16:31 +0100 <c_wraith> eh? delimited continuations are just... functions. that's what Cont/ContT are, too
2021-11-05 19:18:06 +0100 <Lycurgus> ah, from callCC i thought it was like the scheme thing
2021-11-05 19:18:36 +0100pop3(~pop3@user/pop3) (Remote host closed the connection)
2021-11-05 19:19:40 +0100pop3(~pop3@user/pop3)
2021-11-05 19:21:53 +0100 <dolio> It is, sort of.
2021-11-05 19:22:24 +0100alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-11-05 19:22:36 +0100 <dolio> It's undelimited inside of a single call to runContT, obviously, but the runContT delimits the scope in a way.
2021-11-05 19:22:45 +0100alzgh(~alzgh@user/alzgh)
2021-11-05 19:23:44 +0100 <dolio> Which is also how many Scheme implementations really work. The REPL delimits your call/cc.
2021-11-05 19:24:42 +0100 <c_wraith> Well, it's clearly delimited in terms of only being able to jump to a point inside Cont/ContT
2021-11-05 19:25:00 +0100 <c_wraith> unlike scheme, which doesn't provide that clean separation
2021-11-05 19:25:46 +0100 <dolio> My "obviously" was probably not ideally placed. I meant it's obvious that you can't capture continuations that go beyond the `runContT`.
2021-11-05 19:27:33 +0100fef(~thedawn@user/thedawn) (Ping timeout: 276 seconds)
2021-11-05 19:30:32 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-11-05 19:31:00 +0100euandreh(~euandreh@2804:14c:33:9fe5:90d0:563b:3279:f95b) (Ping timeout: 268 seconds)
2021-11-05 19:33:30 +0100 <vladl> Hi, I'm a C++ dev learning haskell and I'm trying to solve a design problem. I have no idea what the Haskelly way of doing what I want to do is. I have a short file and a problem description in the comments here http://dpaste.com//CFTUNYCJC
2021-11-05 19:36:35 +0100Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-11-05 19:37:14 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-11-05 19:37:52 +0100 <gentauro> vladl: you don't, that's the beauty of Haskell and a `sound typesystem` :)
2021-11-05 19:38:13 +0100gentauroperhaps there are some PRAGMAS and some HaskellTemplate …
2021-11-05 19:38:22 +0100 <c_wraith> vladl: how silly are you willing to get? Because there are answers that are very concise but require really sophisticated tools. Like uniplate, or the lensy versions thereof
2021-11-05 19:38:56 +0100 <vladl> gentauro: yes I figured I couldn't get away with adhoc polymorphism... I don't want to get too silly, I'd rather do this in a canonical way than bend haskell to look like C++
2021-11-05 19:39:23 +0100 <gentauro> vladl: btw, your 3 last statements point to variables that don't exisit?
2021-11-05 19:39:34 +0100 <vladl> yes, its psuedocode
2021-11-05 19:39:38 +0100 <gentauro> ahhh
2021-11-05 19:39:41 +0100 <gentauro> fair enough
2021-11-05 19:40:16 +0100 <vladl> c_wraith: i'll totally change my design, i figured there's a good chance this is an XY problem or whatever its called
2021-11-05 19:40:42 +0100 <vladl> where the asker asks how to do X when they actually wanna accomplish Y but are missing the forest for the trees
2021-11-05 19:41:20 +0100 <vladl> I'm trying to make it so i can request a layout and then any contained widgets, if they have a notion of time, or tags, then they will apply those rules to their filters
2021-11-05 19:41:59 +0100 <gentauro> vladl: why are all types of widgets in the same (sum) `type`?
2021-11-05 19:42:37 +0100 <vladl> gentauro: I wanted to make a layout tree that i could throw together in ghci repl
2021-11-05 19:43:03 +0100 <vladl> so a widget might just be a container of other widgets
2021-11-05 19:43:06 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-11-05 19:43:21 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2021-11-05 19:43:31 +0100 <vladl> but i basically want properties set at a node to affect the subtree
2021-11-05 19:43:36 +0100 <gentauro> vladl: got it
2021-11-05 19:44:02 +0100euandreh(~euandreh@2804:14c:33:9fe5:90d0:563b:3279:f95b)
2021-11-05 19:46:27 +0100 <dsal> https://xyproblem.info
2021-11-05 19:46:56 +0100 <dsal> It's particularly funny when someone is doing 2D graphics and has an XY problem. heh
2021-11-05 19:47:21 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-11-05 19:48:21 +0100alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-11-05 19:48:41 +0100alzgh(~alzgh@user/alzgh)
2021-11-05 19:49:40 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 19:55:06 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-11-05 19:58:08 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-11-05 19:58:46 +0100zer0bitz(~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi) (Ping timeout: 260 seconds)
2021-11-05 20:00:12 +0100v01d4lph4(~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
2021-11-05 20:03:04 +0100max22-(~maxime@2a01cb088335980058acad91096e7c9d.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2021-11-05 20:03:43 +0100 <janus> why don't people mention XY problem and SSCCE together? Are they in opposition to each other? SSCCE says "Minimise bandwidth for the example, do not bore the audience.". That could be interpreted as omitting the context. Both of their goals is to convince the asker to provide the right context. But both of them use simplistic terms, in one case 'minimal' in other case 'solution vs problem'. In fact it's
2021-11-05 20:03:49 +0100 <janus> just about learning how to ask well.
2021-11-05 20:04:36 +0100 <ski> ("SSCCE" standing for ?)
2021-11-05 20:05:21 +0100 <vladl> single self-contained compiling example.
2021-11-05 20:05:55 +0100 <vladl> i generally agree but in more boilerplatey languages sometimes psuedocode gets the point across more efficiently
2021-11-05 20:05:55 +0100 <ski> ty
2021-11-05 20:06:59 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2021-11-05 20:08:22 +0100toreiussd(uid469671@id-469671.lymington.irccloud.com)
2021-11-05 20:08:27 +0100 <vladl> sscce's are useful for more concrete questions, like bughunting where a repro is required
2021-11-05 20:10:02 +0100brschkv(~jbrusch@dynamic-095-116-017-025.95.116.pool.telefonica.de) (Quit: Leaving)
2021-11-05 20:11:07 +0100 <toreiussd> Obtaining min element using a foldtree function https://www.irccloud.com/pastebin/nqt2N6lQ/Haskell_message_1
2021-11-05 20:15:30 +0100 <ski> toreiussd : check whether you get `Nothing', in `f' ?
2021-11-05 20:16:05 +0100 <ski> > min Nothing (Just 2)
2021-11-05 20:16:07 +0100 <lambdabot> Nothing
2021-11-05 20:16:46 +0100 <ski> since every tree has at least one leaf, you'll always, with current code, have at least one `Nothing', that you're passing to `minimum'. which causes the result of all `minimum' calls to be `Nothing'
2021-11-05 20:18:05 +0100 <ski> instead, you only want to give `Nothing' as result, in case you have the an empty tree (so a single `Tip', and no element)
2021-11-05 20:18:50 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-11-05 20:18:58 +0100 <toreiussd> copy
2021-11-05 20:19:22 +0100 <ski> (you could have four cases .. or, maybe there could be a way of expressing it more succinctly)
2021-11-05 20:19:56 +0100 <toreiussd> the issue is how would have multiple cases for the z value
2021-11-05 20:20:11 +0100 <toreiussd> Nothing is one yes only if the tree is empty
2021-11-05 20:20:18 +0100 <toreiussd> but how would I add another case
2021-11-05 20:21:06 +0100barrucadu(~barrucadu@carcosa.barrucadu.co.uk) (Ping timeout: 260 seconds)
2021-11-05 20:21:21 +0100barrucadu(~barrucadu@carcosa.barrucadu.co.uk)
2021-11-05 20:21:58 +0100 <ski> `z' is just a single case
2021-11-05 20:22:12 +0100 <ski> for a `Tip', there is no minimum, since there's no elements
2021-11-05 20:22:14 +0100hexagoxel(~hexagoxel@2a01:4f8:c0c:e::2) (Ping timeout: 265 seconds)
2021-11-05 20:22:43 +0100fiddlerwoaroof(~fiddlerwo@user/fiddlerwoaroof) (Ping timeout: 265 seconds)
2021-11-05 20:22:43 +0100 <ski> `f' handles `Bin' nodes
2021-11-05 20:23:08 +0100 <ski> toreiussd : you agree that if you have at least one element, then you should not get `Nothing' as result, yes ?
2021-11-05 20:23:14 +0100hiato(~op_4@user/op-4/x-9116473)
2021-11-05 20:23:18 +0100 <toreiussd> correct
2021-11-05 20:23:35 +0100op_4(~op_4@user/op-4/x-9116473) (Ping timeout: 260 seconds)
2021-11-05 20:23:39 +0100unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-11-05 20:24:02 +0100canta(~canta@user/canta) (Ping timeout: 268 seconds)
2021-11-05 20:24:08 +0100hexagoxel(~hexagoxel@hexagoxel.de)
2021-11-05 20:24:14 +0100 <toreiussd> I just don't know what to use to express multiple cases
2021-11-05 20:24:28 +0100 <ski> so, for the recursive/inductive case, the case handling `Bin' (which is `f', in your case, since you're using a fold/catamorphism), you're now allowed to *assume* ("trust", if you prefer), that it'll only get passed `Nothing' as first/last argument, in case the corresponding subtree was empty (was a `Tip')
2021-11-05 20:24:51 +0100 <ski> toreiussd : use pattern-matching, just like you already did, for `foldTree'
2021-11-05 20:25:43 +0100fiddlerwoaroof(~fiddlerwo@user/fiddlerwoaroof)
2021-11-05 20:25:58 +0100canta(~canta@user/canta)
2021-11-05 20:26:03 +0100 <ski> so, `f' ought to check whether it gets `Nothing's or `Just's (with a minimum element of the subtree). then, it should take the minimum of all the elements it's got : which are (a) (possibly) a minimum element, for each subtree; (b) the element in the `Bin' node itself
2021-11-05 20:27:52 +0100 <toreiussd> mmmh confused but only because of the formatting of the text
2021-11-05 20:28:48 +0100 <monochrom> janus: I mention "XY" and "I can't reproduce your error" all the time :)
2021-11-05 20:29:04 +0100 <monochrom> The only problem is that I am not here all the time.
2021-11-05 20:30:11 +0100zer0bitz(~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi)
2021-11-05 20:30:43 +0100 <monochrom> But generally I champion for "do your due dilegence", "ask high-quality informative questions" when I'm around.
2021-11-05 20:31:26 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 268 seconds)
2021-11-05 20:32:05 +0100max22-(~maxime@2a01cb08833598006eec136a4e6fc13b.ipv6.abo.wanadoo.fr)
2021-11-05 20:32:23 +0100 <monochrom> "Worse", I fight against "qurents are entitled to conceal information, answerers are obliged to spew out lectures after lectures"
2021-11-05 20:33:17 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2021-11-05 20:35:00 +0100Sgeo_(~Sgeo@user/sgeo)
2021-11-05 20:35:23 +0100 <monochrom> Oh, you asked about whether they oppose each other.
2021-11-05 20:35:48 +0100 <monochrom> Nah, they happen hand-in-hand all the time.
2021-11-05 20:36:10 +0100 <monochrom> For example, suppose someone runs into a type error.
2021-11-05 20:36:55 +0100tremon(~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl)
2021-11-05 20:37:01 +0100 <monochrom> They decide to conceal their code and just say "hi, how do I trouble-shoot type errors?" So, it is an XY problem and a refusal to show any code at all at the same time. They feed each other.
2021-11-05 20:37:10 +0100 <toreiussd> https://www.irccloud.com/pastebin/3lMua9X3/
2021-11-05 20:37:58 +0100Sgeo(~Sgeo@user/sgeo) (Ping timeout: 260 seconds)
2021-11-05 20:38:44 +0100 <toreiussd> https://www.irccloud.com/pastebin/oAoHVf9x/
2021-11-05 20:39:07 +0100 <maerwald> monochrom: XY is the reason I'm making money. Shh
2021-11-05 20:39:20 +0100trriplex(~trriplex@user/trriplex)
2021-11-05 20:39:28 +0100 <maerwald> most of programming is XY
2021-11-05 20:39:37 +0100ec(~ec@gateway/tor-sasl/ec)
2021-11-05 20:39:42 +0100 <maerwald> "we need a web app"
2021-11-05 20:39:44 +0100 <maerwald> ok, yeah... sure
2021-11-05 20:39:54 +0100 <monochrom> Don't worry maerwald. People won't change their ways even after I point out what's wrong. :)
2021-11-05 20:40:32 +0100 <maerwald> now someone needs to put their money onto a blockchain... why? Hell, Idc!
2021-11-05 20:41:00 +0100 <vladl> oh i misread your question as well janus. my mistake. I think in the case of a lot of XY errors (at least the XY errors I experience), its usually a design issue, like an issue with the fundamental approach to the problem, and in these cases trying to obtain an SSCCE is going to waste everyone's time when the answer winds up containing "throw out your current approach"
2021-11-05 20:41:25 +0100max22-(~maxime@2a01cb08833598006eec136a4e6fc13b.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-11-05 20:42:05 +0100 <maerwald> or a CTO who accidentially read a blog post about functional programming starts to hire haskellers, because "zomg, such academic"
2021-11-05 20:42:12 +0100dumptruckman(~dumptruck@45-79-175-133.ip.linodeusercontent.com) (Quit: ZNC - https://znc.in)
2021-11-05 20:42:20 +0100 <monochrom> toreiussd, it is not true that every function needs pattern matching.
2021-11-05 20:43:19 +0100 <ski> toreiussd : yea, `listTree' doesn't need it, because it's producing a list (which is actually pattern-matched by `(++)'). however, `minTree' wants to produce a value of the same type as the elements. but if the tree is empty, it can't, and so it needs to `Maybe' produce such a value. and therefore the fold needs to handle the `Maybe's coming from the folding of the subtrees, in the `Bin' case (being your `f')
2021-11-05 20:44:07 +0100 <monochrom> Well, a CTO who respects academics is still good news.
2021-11-05 20:45:25 +0100 <monochrom> Better than a CTO reading a blog post about PHP and going "zomg such anti-academic"
2021-11-05 20:46:03 +0100 <toreiussd> so Id need another case for the f
2021-11-05 20:46:21 +0100 <ski> you need to split cases, yea
2021-11-05 20:46:38 +0100 <monochrom> Seriously Java was successful because, only because, CTOs read magazine articles (remember those? blogs didn't exist back then, but hey, same difference) about Java and went "zomg, such enterprise"
2021-11-05 20:46:39 +0100wrengr(~wrengr@150.12.83.34.bc.googleusercontent.com) (Quit: leaving)
2021-11-05 20:46:41 +0100 <toreiussd> what would I use for that. Im new to haskell that's why
2021-11-05 20:47:08 +0100 <ski> `l' and `r' are `Maybe a's. you need to handle the possible cases for those, separately, rather than trying to have a single defining equation handling all
2021-11-05 20:47:17 +0100 <ski> toreiussd : pattern-matching
2021-11-05 20:47:52 +0100dumptruckman(~dumptruck@45-79-175-133.ip.linodeusercontent.com)
2021-11-05 20:48:01 +0100 <ski> toreiussd : note how `foldTree' pattern-matches on the `Tree a' argument, doing case analysis, doing different things, depending on whether it got a `Tip' or a `Node' ?
2021-11-05 20:48:10 +0100 <maerwald> that's the thing, there are no average CTOs... either they rule or no one knows how they got where they are
2021-11-05 20:48:31 +0100 <ski> do the same thing, for `f', except you're now pattern-matching on the possible shapes of `Maybe a', rather than `Tree a'
2021-11-05 20:48:47 +0100 <monochrom> Actually the CTO title didn't exist back then either, heh. But you know who they were.
2021-11-05 20:49:38 +0100isovector1(~isovector@172.103.216.166)
2021-11-05 20:49:47 +0100 <monochrom> OK how about one sample line of code? You can go "f Nothing x Nothing = Just x" for the 1st case.
2021-11-05 20:49:50 +0100 <isovector1> does anyone have a working stack config for ghc 9.2.1?
2021-11-05 20:49:54 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-11-05 20:49:55 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
2021-11-05 20:50:11 +0100 <monochrom> There are like 3 more cases.
2021-11-05 20:50:31 +0100 <toreiussd> thx for that
2021-11-05 20:50:36 +0100msmhnd^(~msmhnd@h50.174.139.63.static.ip.windstream.net)
2021-11-05 20:50:56 +0100 <awpr> best I've managed is to use ghcup to get a system GHC-9.2.1, then use `stack --system-ghc --resolver nightly --compiler ghc-9.2.1`
2021-11-05 20:51:47 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 20:51:53 +0100 <awpr> plus making a custom resolver to get newer versions that support 9.2, and even get a few packages from GitHub where needed
2021-11-05 20:51:55 +0100 <ski> toreiussd : that's the case in which both subtrees were empty (and so `foldTree' gave `z', that is `Nothing', for those. remember, you're assuming that you'll only get `Nothing' when the tree is empty. (but you'll then also need to ensure that `f' satisfies this condition))
2021-11-05 20:52:37 +0100 <isovector1> awpr: yeesh. maybe it's time to swithc back to cabal?
2021-11-05 20:52:53 +0100 <isovector1> :(
2021-11-05 20:52:57 +0100 <aegon> aaaaa, my dev cycle lately is spec-delta, haskell-prototype-components-delta, haskell-prototype-lib-delta, c-lib-delta. The haskell-prototype -> c-library path is the worst. Way more source lines of code and way more tedium within that code
2021-11-05 20:53:14 +0100 <aegon> awpr: so is stack pretty laggy with releases compared to cabal-v2?
2021-11-05 20:53:21 +0100DNH(~DNH@2a02:8108:1100:16d8:e9ee:3bd5:4988:8148) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-11-05 20:53:25 +0100 <awpr> because Stackage hasn't made GHC-9.2 available in 4 days? idk, I don't mind so much
2021-11-05 20:53:29 +0100 <aegon> i thought 9.3 was just released
2021-11-05 20:53:55 +0100 <awpr> aggressive curation of dependency versions is always going to come with a cost of taking time to incorporate updates
2021-11-05 20:54:07 +0100 <monochrom> Nah, x.(odd number) is never released.
2021-11-05 20:54:30 +0100 <toreiussd> i think for that one I now understand thx. however im still attempting to build a definition for a fold over RoseTree.
2021-11-05 20:54:38 +0100 <toreiussd> thx nonetheless guys
2021-11-05 20:55:11 +0100 <geekosaur> aegon, stack is curated so they are unlikely to move immediately to 9.2.1
2021-11-05 20:55:35 +0100 <geekosaur> and given how things have gone they make a 9.0.1 lts before a 9.2.1 nightly
2021-11-05 20:55:35 +0100 <aegon> monochrom: wierd, so x.(odd) releases are kinda tech previews for the next even release?
2021-11-05 20:55:42 +0100 <ski> toreiussd : look at the definition of `RoseTree'. `foldTree n t' is supposed to replace all the `Node's in `t' by `n'
2021-11-05 20:55:45 +0100 <geekosaur> they're development versions
2021-11-05 20:55:52 +0100 <isovector1> oh i didn't realize how fresh ghc 9.2.1 was
2021-11-05 20:55:58 +0100 <geekosaur> 9.3.date
2021-11-05 20:56:03 +0100 <ski> er, `foldRose', rather
2021-11-05 20:56:04 +0100 <isovector1> tho there's still not an lts for 9.0
2021-11-05 20:56:05 +0100 <monochrom> Not released at all.
2021-11-05 20:56:10 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 260 seconds)
2021-11-05 20:56:35 +0100 <geekosaur> right, that's why I said they might hold off until they can make a 9.0.1 lts before they consider 9.2.1 as nightly
2021-11-05 20:56:36 +0100 <ski> just like `foldTree f z t' is replacing all the `Tip's in `t' with `z', and all the `Bin's in `t' with `f'
2021-11-05 20:56:39 +0100dumptruckman(~dumptruck@45-79-175-133.ip.linodeusercontent.com) (Quit: ZNC - https://znc.in)
2021-11-05 20:56:43 +0100 <monochrom> And I don't think GHC has a "tech preview" notion.
2021-11-05 20:57:06 +0100waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-11-05 20:57:45 +0100nosewings(~ngpc@2603-8081-3e05-e2d0-91fa-0be4-4222-fe4b.res6.spectrum.com)
2021-11-05 20:58:07 +0100 <ski> so `foldTree f z (Bin (Bin Tip 0 Tip) 1 (Bin (Bin Tip 2 Tip) 3 Tip))' is going to be `f (f z 0 z) 1 (f (f z 2 z) 3 z)'
2021-11-05 20:58:58 +0100 <unit73e> afaik GHC only has a stable release notion
2021-11-05 20:59:07 +0100 <unit73e> and it has been like that since forever
2021-11-05 20:59:19 +0100 <unit73e> also hi
2021-11-05 20:59:24 +0100 <geekosaur> there are release candidates, although they too can be iffy
2021-11-05 20:59:26 +0100 <toreiussd> Im also trying to optimize the listTree function to be in linear time however i think i should pass a function parameter
2021-11-05 20:59:32 +0100 <geekosaur> like 9.2 has been a cursed release
2021-11-05 20:59:47 +0100 <ski> similarly, `foldRose n (Node 0 [Node 1 [Node 2 [],Node 3 []],Node 4 [],Node 5 [Node 6 [Node 7 []]]])' is supposed to be `n 0 [n 1 [n 2 [],n 3 []],n 4 [],n 5 [n 6 [n 7 []]]]'
2021-11-05 21:00:13 +0100 <geekosaur> (and continues to be cursed; I gather a 9.2.2 may be appearing sooner rather than later)
2021-11-05 21:00:25 +0100madjestic(~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 268 seconds)
2021-11-05 21:00:36 +0100 <unit73e> I see that GHC still has that ugly site :P but the documentation has the pretty theme
2021-11-05 21:00:51 +0100 <geekosaur> sadly the docs are still for 9.0.1
2021-11-05 21:00:56 +0100 <awpr> hmm, if they're looking at a new release, I should probably rush to report the `type (<)` bug
2021-11-05 21:01:05 +0100 <ski> toreiussd : yes, left-nestedness of `++' (like `(((as ++ bs) ++ cs) ++ ds) ++ es', which results from the "left-recursion" `20:44 < monochrom> Well, a CTO who respects academics is still good news.
2021-11-05 21:01:09 +0100 <ski> 20:45 < monochrom> Better than a CTO reading a blog post about PHP and going "zomg such anti-academic"
2021-11-05 21:01:15 +0100 <ski> er, sorry
2021-11-05 21:01:22 +0100 <aegon> i was just reading thorugh the 9.3 users guide last night... I guess i got excited for non releasable features until 9.4 :X. The record dot syntax seems cool but between that and record punning and wild cards etc.. modifying records is turning into a wild world. Is the distaste for lens the compile time only or is there some overhead to the way its formed? I notice since workign with lenses there are a
2021-11-05 21:01:28 +0100 <aegon> bunch of micro / mini alternatives.
2021-11-05 21:01:29 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com)
2021-11-05 21:01:29 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer)
2021-11-05 21:01:38 +0100waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds)
2021-11-05 21:01:58 +0100 <geekosaur> lenses only have compile time overhead if you use TH to construct them
2021-11-05 21:02:20 +0100dumptruckman(~dumptruck@45-79-173-88.ip.linodeusercontent.com)
2021-11-05 21:02:21 +0100 <maerwald> hmm... I'm starting to think big modules are advantegous... they allow to see unfactored code sharing. When you jump across many modules, it's harder to notice similarities
2021-11-05 21:02:26 +0100 <toreiussd> so should i make it rightnestedness similar to the gains for foldr vs foldl
2021-11-05 21:02:33 +0100 <geekosaur> the main reason for micro and mini versions is that full lens provides lenses for half the ecosystem, meaning it has half the ecosystem as dependencies
2021-11-05 21:02:40 +0100 <ski> toreiussd : yes, left-nestedness of `++' (like `(((as ++ bs) ++ cs) ++ ds) ++ es', which results from the "left-recursion" `f l x r = l ++ ..', where `l' here represents a recursive call to `foldTree') is going to be less efficient than one can reasonably expect
2021-11-05 21:02:56 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com)
2021-11-05 21:03:26 +0100 <toreiussd> how would I change the calls type
2021-11-05 21:03:30 +0100ralu3(~ralu@static.211.245.203.116.clients.your-server.de)
2021-11-05 21:03:33 +0100 <toreiussd> from left recursive
2021-11-05 21:03:48 +0100hexagoxel(~hexagoxel@hexagoxel.de) (Ping timeout: 260 seconds)
2021-11-05 21:03:57 +0100 <ski> you could introduce an extra argument, an accumulator
2021-11-05 21:04:00 +0100isovector1(~isovector@172.103.216.166) (Quit: Leaving)
2021-11-05 21:04:03 +0100ralu(~ralu@static.211.245.203.116.clients.your-server.de) (Read error: Connection reset by peer)
2021-11-05 21:04:03 +0100ralu3ralu
2021-11-05 21:04:27 +0100 <toreiussd> what would it accumulate though
2021-11-05 21:04:32 +0100 <ski> it might be easier to see how this works, if you write `listTree' using direct recursion, rather than using `foldTree'
2021-11-05 21:04:57 +0100 <ski> it would accumulate the list of all the elements of the tree, traversed in-order
2021-11-05 21:05:58 +0100juhp(~juhp@128.106.188.220) (Ping timeout: 268 seconds)
2021-11-05 21:06:33 +0100hexagoxel(~hexagoxel@2a01:4f8:c0c:e::2)
2021-11-05 21:06:36 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer)
2021-11-05 21:07:35 +0100 <toreiussd> hey stefan do you know where I can learn more about this, there seems to be multiple holes as evidenced here and Im new to this coming from imperative
2021-11-05 21:07:49 +0100juhp(~juhp@128.106.188.220)
2021-11-05 21:09:46 +0100DNH(~DNH@2a02:8108:1100:16d8:e9ee:3bd5:4988:8148)
2021-11-05 21:10:22 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com)
2021-11-05 21:11:20 +0100 <aegon> geekosaur: interesting, should I be using microlens-platform then as opposed to lens or is it the same outside of dependencies and lenses for other types
2021-11-05 21:11:26 +0100 <aegon> it looks like minilens is no longer kept up
2021-11-05 21:11:39 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer)
2021-11-05 21:11:59 +0100 <geekosaur> it's basically the same, just lets you pick and choose what extra dependencies you want to pull in / what you want to use lenses for
2021-11-05 21:12:07 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com)
2021-11-05 21:12:34 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
2021-11-05 21:12:58 +0100skiglances over shoulder at stefan-_
2021-11-05 21:13:03 +0100 <geekosaur> the lenses themmselves are very simple and can even be built without a lens framework, but you probably want the basic lens "combinators" provided by microlens
2021-11-05 21:13:29 +0100 <geekosaur> and microlens and lens are therefore inter-compatible
2021-11-05 21:13:50 +0100 <geekosaur> you can start with microlens and then upgrade to lens more or less transparently
2021-11-05 21:14:16 +0100 <davean> Why wouldn't you just start with 'lens'?
2021-11-05 21:14:39 +0100 <geekosaur> dependencies on half the ecosystem
2021-11-05 21:14:49 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-11-05 21:15:06 +0100bjobjo(~bjobjo@user/bjobjo) (Quit: leaving)
2021-11-05 21:15:11 +0100 <geekosaur> since lens aims to be complete, it has *lots* of deps on things it makes "canned" lenses for
2021-11-05 21:15:25 +0100 <davean> Right?
2021-11-05 21:15:29 +0100 <geekosaur> microlens leaves that part off, but has ancillary packages providing various of them
2021-11-05 21:15:35 +0100 <aegon> iterative builds locally dont bug me with lens but i have a fairly small service and it takes ~5 minutes to build in a container at this point
2021-11-05 21:16:02 +0100 <davean> IMO builds are cached and you'll need half of hackage anyway
2021-11-05 21:16:09 +0100 <aegon> i bet thats way low compared to what some of you are all dealing with daily
2021-11-05 21:16:12 +0100 <davean> Managing more packages seems like a much larger pain
2021-11-05 21:16:44 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer)
2021-11-05 21:18:07 +0100 <davean> aegon: do you clear the cache every time or something?
2021-11-05 21:18:23 +0100 <aegon> docker does :P
2021-11-05 21:18:31 +0100 <aegon> its just an issue when i'm packaging it up for integration testing or whatnot
2021-11-05 21:18:40 +0100 <aegon> i use local dev with caching while working on a component
2021-11-05 21:18:53 +0100 <aegon> but when it comes time for the final unit and integration i shove it into the to be released container
2021-11-05 21:18:59 +0100 <davean> I mean keeping cache across systems even was standard in 2000
2021-11-05 21:20:22 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com)
2021-11-05 21:20:46 +0100chomwitt(~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Ping timeout: 268 seconds)
2021-11-05 21:21:27 +0100 <davean> aegon: So why does your container start with an empty cache?
2021-11-05 21:21:47 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer)
2021-11-05 21:22:15 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com)
2021-11-05 21:24:46 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 21:25:00 +0100 <aegon> i feel like its best practice, i don't want any released service to have a dependency on container state that it doesn't specify within it's dockerfile. This means outside of some container wide stuff that is done and making sure ghc / systemtools are on the thing. I don't know how I would cache anything else without violating that
2021-11-05 21:25:28 +0100 <aegon> if you keep intermediate stuff in the container your container gets to be multiple gigerbytes for a 300k executable
2021-11-05 21:25:44 +0100 <aegon> and removing a layer of the image before pushing it also seems evil to me
2021-11-05 21:26:24 +0100 <davean> I mean I'd think you'd build the executable into a final image - having the build tools for it on the image seems senseless unless it'll use those tools while running
2021-11-05 21:26:52 +0100 <aegon> yeah, buti want to make sure the image has the right version of any libs linked against and that the unit / integration tests run using those libs
2021-11-05 21:26:52 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer)
2021-11-05 21:27:18 +0100 <davean> Right? You can still run the tests on the final image as an overlay
2021-11-05 21:27:30 +0100bjobjo(~bjobjo@user/bjobjo)
2021-11-05 21:27:32 +0100 <davean> but your lib versions can't really different if build on the same base
2021-11-05 21:27:41 +0100 <aegon> if your not building on the image how do you do continous integration without relying on development machine configuration states
2021-11-05 21:28:19 +0100 <aegon> maybe i'm being overly guarded against state but the more self contained your code -> bits running on the box is the less of a headache digging into any odd behavior is
2021-11-05 21:28:37 +0100 <davean> make the base image, make an overlay with the build tools, build it, put the produced files ontop of the origional image, put the tests on top, run them, push the one below the tests - or just tell nixos to build you an image with the executable
2021-11-05 21:29:04 +0100 <davean> s/nixos/nix
2021-11-05 21:29:47 +0100 <davean> none of that in any way talks about the developement machine state
2021-11-05 21:30:00 +0100haskl(~haskl@user/haskl) (Ping timeout: 268 seconds)
2021-11-05 21:30:05 +0100 <davean> and you don't need to even if you build on the system - you can unpack your distro into a folder
2021-11-05 21:30:21 +0100 <davean> chroots a very standard *nix thing
2021-11-05 21:30:39 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com)
2021-11-05 21:30:46 +0100 <davean> but you can use containers to not think about that like above
2021-11-05 21:32:01 +0100 <aegon> i haven't piled on the nix wagon yet, i'm trying to put it off till next year. If you have any recommended guides or intro's to nix i def want to start reading up on it
2021-11-05 21:32:25 +0100 <davean> I made sure to give you the way following your current strategy first
2021-11-05 21:33:24 +0100 <aegon> yeah, i'm not trying to be combative. I think i'm missing something about that way. So you build an executable first outside the image, then as part of the docker file you copy that bin into the image?
2021-11-05 21:33:53 +0100 <aegon> then you unit and run integration tests on the packaged image to catch any missing or differing librarie
2021-11-05 21:33:56 +0100 <davean> No, I didn't use that approach because I wanted to satisfy your fears
2021-11-05 21:33:56 +0100 <aegon> *s
2021-11-05 21:33:59 +0100 <davean> So
2021-11-05 21:34:14 +0100 <davean> start with creatinage base_image, which is the base you want your executable to run on
2021-11-05 21:34:28 +0100 <davean> create overlay on _base_image of build_tools with ghc/cabal
2021-11-05 21:34:40 +0100 <davean> in build_tools, build your executable
2021-11-05 21:34:59 +0100 <davean> now, export your executable package and inject it ontop of base_image to make final_image
2021-11-05 21:35:13 +0100 <davean> now overlay test_package on final_image to make verification_image
2021-11-05 21:35:17 +0100 <davean> in verification_image run tests
2021-11-05 21:35:25 +0100 <davean> now when tests pass, push final_image
2021-11-05 21:36:49 +0100 <aegon> i see, so then you can use the build_tools version to keep a cache of past binary builds, thats a neat trick. I've been starting from scratch and just doing the dev tools setup / removal all in one step to avoid the intermediary junk from staying in history
2021-11-05 21:36:55 +0100 <davean> so you get your container image, with the same libraries the executable was built with, guarrentteed, and tested as it is pushed
2021-11-05 21:36:58 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Remote host closed the connection)
2021-11-05 21:37:13 +0100 <davean> Yep!
2021-11-05 21:37:22 +0100 <davean> it does caching inherently! :)
2021-11-05 21:37:34 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net)
2021-11-05 21:37:45 +0100 <davean> now, nix manages a nicer way of doing this FOR you but I certaintly wasn't pushing nix - I have a love hate relationship with it
2021-11-05 21:38:00 +0100 <davean> I wanted to show you how you could solve your problems by using the way you were doing it better
2021-11-05 21:40:19 +0100 <aegon> yeah thats neat, i'll try setting it up next server-ish pass. I'm on client side libary stuff now so I can sit on these images for a little. How do you extract the built bin from the build image at the end. Do you do that as part of a build script using the docker cli or is there a slicker way from within the dockerfile
2021-11-05 21:40:52 +0100wootehfoot(~wootehfoo@user/wootehfoot)
2021-11-05 21:41:19 +0100wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2021-11-05 21:41:32 +0100 <aegon> oh i guess you could mount a host folder and target that for the bins
2021-11-05 21:41:37 +0100 <davean> yah
2021-11-05 21:41:43 +0100 <davean> thats what I was startign to type
2021-11-05 21:41:59 +0100 <davean> you just have an output directory
2021-11-05 21:42:13 +0100 <davean> can you tell cabal to build to there (for executables)
2021-11-05 21:42:20 +0100yauhsien(~yauhsien@118-167-41-229.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2021-11-05 21:43:21 +0100pop3(~pop3@user/pop3) (Remote host closed the connection)
2021-11-05 21:44:15 +0100hololeap(~hololeap@user/hololeap)
2021-11-05 21:44:48 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 21:44:49 +0100 <aegon> thats cool, thanks for sharing. If every dev has that build image locally thats a much better sanity check before pushing than waiting for some ci pipeline to tell you a lib is off after you've context switched
2021-11-05 21:45:03 +0100 <davean> hell yes
2021-11-05 21:45:42 +0100 <davean> Its always my instinct when people complain about build times in Haskell to look closer
2021-11-05 21:48:10 +0100 <maerwald> go builds faster than haskell
2021-11-05 21:48:17 +0100 <davean> maerwald: lol
2021-11-05 21:50:39 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com)
2021-11-05 21:50:56 +0100Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-11-05 21:52:19 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer)
2021-11-05 21:52:49 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com)
2021-11-05 21:54:55 +0100 <syd> are First and Last valid Semigroups when implemented for any old a rather than Maybe a?
2021-11-05 21:54:59 +0100 <syd> that is, (<>) for First a is const, and for Last a is const id.
2021-11-05 21:55:17 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-11-05 21:55:24 +0100 <fuzzypixelz> hello!
2021-11-05 21:55:30 +0100 <dolio> syd: Yes.
2021-11-05 21:55:47 +0100 <syd> dolio: much appreciated, thank you :)
2021-11-05 21:55:50 +0100trriplex(~trriplex@user/trriplex) (Remote host closed the connection)
2021-11-05 21:57:08 +0100 <dolio> Also if you make `Maybe a` a Monoid whenever `a` is a semigroup by using `Nothing` to adjoin an identity element, you get back the possibly empty version.
2021-11-05 21:57:24 +0100a6a45081-2b83(~aditya@2603-6080-0800-8e4a-0000-0000-0000-01a8.res6.spectrum.com) (Read error: Connection reset by peer)
2021-11-05 21:58:42 +0100 <dolio> But is also works for any other semigroup.
2021-11-05 22:00:14 +0100yrlnry(~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 268 seconds)
2021-11-05 22:00:28 +0100 <syd> I'm trying to write a Monoid for custom type isomorphic (I think) to (Maybe Bool), with (Red | Blue) taking place of Bool.
2021-11-05 22:00:40 +0100 <syd> I'd like are to parameterize over the Maybe Monoid part as thought it was like either And/Or, and the Colour part as though it was either First/Last.
2021-11-05 22:01:01 +0100 <syd> https://pastebin.com/JLpAhA2u excuse my bad Haskell, this is my first time trying to write a Semigroup.
2021-11-05 22:01:25 +0100 <syd> (though i've used most of the stdlib ones in the past to varying degrees)
2021-11-05 22:02:10 +0100 <c_wraith> do you need to define your own First and Last? the ones in Data.SemiGroup are equivalent
2021-11-05 22:02:37 +0100 <c_wraith> errr. Data.Semigroup
2021-11-05 22:02:48 +0100pop3(~pop3@user/pop3)
2021-11-05 22:03:20 +0100nschoe(~quassel@2a01:e0a:8e:a190:c6dc:21f9:bc16:feb3) (Remote host closed the connection)
2021-11-05 22:04:01 +0100 <syd> in honesty, I kept tripping myself up with the extra Maybe wrapper due to the one already used for the And/Or bit..
2021-11-05 22:04:33 +0100nschoe(~quassel@2a01:e0a:8e:a190:a0c8:bcb7:cb64:d44d)
2021-11-05 22:04:33 +0100nschoe(~quassel@2a01:e0a:8e:a190:a0c8:bcb7:cb64:d44d) (Client Quit)
2021-11-05 22:05:04 +0100 <monochrom> OK, where, in that paste, can I find "custom type isomorphic (I think) to (Maybe Bool), with (Red | Blue) taking place of Bool"?
2021-11-05 22:05:52 +0100 <syd> argh sorry, the actual type I want to work with is (Maybe Colour), with Colour being Red | Blue
2021-11-05 22:06:11 +0100 <syd> but using those newtype wrappers and instances to mix-and-match how the layers are combined Semigroup..ally?
2021-11-05 22:07:02 +0100 <monochrom> The Colour part is like Bool, therefore First and Last are not very relevant.
2021-11-05 22:11:27 +0100 <syd> Howso? When trying to combine the Red | Blue layer monoidally, I'd like to parameterize whether the first is preferred or the second independent of how the Maybe layers are combined.
2021-11-05 22:11:45 +0100 <monochrom> That describes the Maybe level.
2021-11-05 22:11:57 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2021-11-05 22:12:13 +0100 <ski> how's "first vs. second" related to `Red | Blue' ?
2021-11-05 22:12:27 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2021-11-05 22:12:34 +0100 <monochrom> Unrelated. That's what I said.
2021-11-05 22:12:35 +0100 <syd> Hmm, what about choosing whether the Maybe layer is combined in And/Or (with Nothing being like False)
2021-11-05 22:13:01 +0100 <monochrom> Ah OK sorry ski I misread your nick.
2021-11-05 22:13:20 +0100skigrins
2021-11-05 22:13:53 +0100 <monochrom> Sure, you can prove that AnyMay and AllMay satisfy the laws.
2021-11-05 22:14:24 +0100ski's still not sure what the question is
2021-11-05 22:14:42 +0100 <syd> for context, I got carried away implementing this: http://www.mmhp.net/Passwords/PassCrack3.html
2021-11-05 22:14:44 +0100 <monochrom> It is an extremely unclear question.
2021-11-05 22:15:51 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-11-05 22:15:57 +0100 <syd> yeah I need to think about it more, should have stopped at the "is First/Last a" a Semigroup. I'll think on it more, thanks for the help!
2021-11-05 22:17:29 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
2021-11-05 22:17:51 +0100cheater1__(~Username@user/cheater)
2021-11-05 22:18:07 +0100cheater(~Username@user/cheater) (Ping timeout: 268 seconds)
2021-11-05 22:18:08 +0100lavaman(~lavaman@98.38.249.169)
2021-11-05 22:18:15 +0100cheater1__cheater
2021-11-05 22:23:28 +0100lbseale_(~lbseale@user/ep1ctetus)
2021-11-05 22:24:27 +0100haskl(~haskl@user/haskl)
2021-11-05 22:24:30 +0100bollu1(~bollu@139.59.46.74)
2021-11-05 22:24:35 +0100ridcully_(~ridcully@p57b523cc.dip0.t-ipconnect.de)
2021-11-05 22:25:18 +0100cfebs_(~cfebs@user/cfebs)
2021-11-05 22:25:19 +0100thaumavorio_(~thaumavor@thaumavor.io)
2021-11-05 22:25:28 +0100Papa_(~papa@user/papa)
2021-11-05 22:25:34 +0100adamCS_(~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com)
2021-11-05 22:25:49 +0100peutri_(~peutri@ns317027.ip-94-23-46.eu)
2021-11-05 22:25:51 +0100ian_(~ian@matrix.chaos.earth.li)
2021-11-05 22:25:56 +0100shanemikel_(~shanemike@desk.roadwar.net)
2021-11-05 22:26:08 +0100xacktm_(xacktm@user/xacktm)
2021-11-05 22:26:12 +0100_koolazer(~koo@user/koolazer)
2021-11-05 22:26:14 +0100zer0bitz(~zer0bitz@dsl-hkibng31-54fae3-116.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-11-05 22:26:34 +0100dka_(~code-is-a@ns3059207.ip-193-70-33.eu)
2021-11-05 22:26:38 +0100lbseale(~lbseale@user/ep1ctetus) (Ping timeout: 260 seconds)
2021-11-05 22:26:41 +0100jlamothe_(~jlamothe@198.251.61.229)
2021-11-05 22:26:43 +0100nf__(~n@monade.li)
2021-11-05 22:26:43 +0100papa(~papa@user/papa) (Ping timeout: 246 seconds)
2021-11-05 22:26:43 +0100cfebs(~cfebs@user/cfebs) (Ping timeout: 246 seconds)
2021-11-05 22:26:43 +0100alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba) (Ping timeout: 246 seconds)
2021-11-05 22:26:43 +0100kevin[m]1(~pnotequal@2001:470:69fc:105::a54) (Ping timeout: 246 seconds)
2021-11-05 22:26:43 +0100cfebs_cfebs
2021-11-05 22:26:48 +0100alex[m]123(~alexchete@2001:470:69fc:105::1:1001) (Ping timeout: 246 seconds)
2021-11-05 22:26:48 +0100PotatoHatsue(~berberman@2001:470:69fc:105::b488) (Ping timeout: 246 seconds)
2021-11-05 22:26:48 +0100peutri(~peutri@ns317027.ip-94-23-46.eu) (Ping timeout: 246 seconds)
2021-11-05 22:26:48 +0100Igloo(~ian@matrix.chaos.earth.li) (Ping timeout: 246 seconds)
2021-11-05 22:26:48 +0100denbrahe[m](~denbrahem@2001:470:69fc:105::19c0) (Ping timeout: 246 seconds)
2021-11-05 22:26:48 +0100bitonic(~bitonic@2001:470:69fc:105::1812) (Ping timeout: 246 seconds)
2021-11-05 22:26:48 +0100kadoban(~kadoban@user/kadoban) (Ping timeout: 246 seconds)
2021-11-05 22:26:49 +0100fr33domlover1(~fr33domlo@angeley.es)
2021-11-05 22:26:54 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-11-05 22:26:54 +0100jmtd(jon@dow.land)
2021-11-05 22:27:03 +0100cocreatu1(~moritz@2a03:b0c0:3:d0::c8:f001)
2021-11-05 22:27:07 +0100bollu(~bollu@139.59.46.74) (Read error: Connection reset by peer)
2021-11-05 22:27:07 +0100ridcully(~ridcully@p57b523cc.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2021-11-05 22:27:07 +0100thaumavorio(~thaumavor@thaumavor.io) (Ping timeout: 268 seconds)
2021-11-05 22:27:07 +0100shanemikel(~shanemike@desk.roadwar.net) (Ping timeout: 268 seconds)
2021-11-05 22:27:07 +0100xacktm(xacktm@user/xacktm) (Ping timeout: 268 seconds)
2021-11-05 22:27:07 +0100Domino[m](~dominothe@2001:470:69fc:105::1:271b) (Ping timeout: 268 seconds)
2021-11-05 22:27:07 +0100bollu1bollu
2021-11-05 22:27:15 +0100moats(~oats@user/oats) (Ping timeout: 268 seconds)
2021-11-05 22:27:15 +0100ilkecan[m](~ilkecanma@2001:470:69fc:105::1:79b) (Ping timeout: 268 seconds)
2021-11-05 22:27:16 +0100afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b) (Ping timeout: 268 seconds)
2021-11-05 22:27:16 +0100thomasjm[m](~thomasjmm@2001:470:69fc:105::c6d9) (Ping timeout: 268 seconds)
2021-11-05 22:27:16 +0100ericson2314(~ericson23@2001:470:69fc:105::70c) (Ping timeout: 268 seconds)
2021-11-05 22:27:16 +0100cdsmith(~cdsmithma@2001:470:69fc:105::284) (Ping timeout: 268 seconds)
2021-11-05 22:27:16 +0100Arathorn(~arathorn@2001:470:69fc:105::1f) (Ping timeout: 268 seconds)
2021-11-05 22:27:16 +0100jneira[m](~jneiramat@2001:470:69fc:105::d729) (Ping timeout: 268 seconds)
2021-11-05 22:27:16 +0100st(~ts@46.101.20.9) (Ping timeout: 268 seconds)
2021-11-05 22:27:18 +0100ts1(~ts@46.101.20.9)
2021-11-05 22:27:24 +0100yushyin2(rzPUwQNnp2@karif.server-speed.net)
2021-11-05 22:27:25 +0100alex[m]1231(~alexchete@2001:470:69fc:105::1:1001)
2021-11-05 22:27:39 +0100nf(~n@monade.li) (Killed (NickServ (GHOST command used by nf__)))
2021-11-05 22:27:42 +0100nf__nf
2021-11-05 22:27:46 +0100dka(~code-is-a@ns3059207.ip-193-70-33.eu) (Ping timeout: 246 seconds)
2021-11-05 22:27:46 +0100gdhffd[m](~gdhffdmat@2001:470:69fc:105::1:799) (Ping timeout: 246 seconds)
2021-11-05 22:27:46 +0100fendor[m](~fendormat@2001:470:69fc:105::fcbd) (Ping timeout: 246 seconds)
2021-11-05 22:27:46 +0100orzo(~joe@lasker.childrenofmay.org) (Ping timeout: 246 seconds)
2021-11-05 22:27:47 +0100conphiz[m](~conphizma@2001:470:69fc:105::c052) (Ping timeout: 246 seconds)
2021-11-05 22:27:47 +0100Jon(jon@dow.land) (Ping timeout: 246 seconds)
2021-11-05 22:27:47 +0100cocreature(~moritz@2a03:b0c0:3:d0::c8:f001) (Ping timeout: 246 seconds)
2021-11-05 22:28:08 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-11-05 22:28:13 +0100PotatoHatsue(~berberman@2001:470:69fc:105::b488)
2021-11-05 22:28:19 +0100 <aegon> server hiccup or did an astroid hit the earth
2021-11-05 22:28:22 +0100adamCS(~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100koolazer(~koo@user/koolazer) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100leah2(~leah@vuxu.org) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100adamCS_adamCS
2021-11-05 22:28:23 +0100unclechu(~unclechu@2001:470:69fc:105::354) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100fakehacker[m](~fakehacke@2001:470:69fc:105::b5f0) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100fcortesi(~fcortesi@2001:470:69fc:105::f3a9) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100the-coot[m](~the-cootm@2001:470:69fc:105::95f) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100jlamothe(~jlamothe@198.251.61.229) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100fgaz(~fgaz@2001:470:69fc:105::842) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100MatrixTravelerbo(~voyagert2@2001:470:69fc:105::22) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100kosmikus[m](~andresloe@2001:470:69fc:105::95d) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100jesser[m](~jessermat@2001:470:69fc:105::d5ae) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100craige[m](~craigemcw@2001:470:69fc:105::35f1) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100mekeor[m](~mekeormat@2001:470:69fc:105::17e4) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100glider_(~glider@user/glider) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100fr33domlover(~fr33domlo@angeley.es) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100yushyin(vmwyqzEgOc@karif.server-speed.net) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100Square(~a@178.62.91.8) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100TomasJakl[m](~jaklttchn@2001:470:69fc:105::a42) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100bb010g(~bb010g@2001:470:69fc:105::9a5) (Ping timeout: 264 seconds)
2021-11-05 22:28:23 +0100Topik[m](~topikmatr@2001:470:69fc:105::a082) (Ping timeout: 264 seconds)
2021-11-05 22:28:53 +0100xsarnik(xsarnik@lounge.fi.muni.cz) (Ping timeout: 264 seconds)
2021-11-05 22:29:01 +0100leah2(~leah@vuxu.org)
2021-11-05 22:29:05 +0100xsarnik(xsarnik@lounge.fi.muni.cz)
2021-11-05 22:29:14 +0100 <geekosaur> looks like someone kicked the matrix
2021-11-05 22:29:18 +0100yushyin2yushyin
2021-11-05 22:29:18 +0100 <ski> matrix bridge, maybe ?
2021-11-05 22:29:22 +0100 <ski> mm
2021-11-05 22:29:50 +0100alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba)
2021-11-05 22:29:54 +0100 <monochrom> The matrix bridge quantum-tunneled to Jupiter :)
2021-11-05 22:29:55 +0100Square(~a@178.62.91.8)
2021-11-05 22:30:02 +0100kevin[m]1(~pnotequal@2001:470:69fc:105::a54)
2021-11-05 22:31:46 +0100kadoban(~kadoban@user/kadoban)
2021-11-05 22:32:19 +0100bitonic(~bitonic@2001:470:69fc:105::1812)
2021-11-05 22:32:30 +0100denbrahe[m](~denbrahem@2001:470:69fc:105::19c0)
2021-11-05 22:32:31 +0100haskl(~haskl@user/haskl) (Ping timeout: 256 seconds)
2021-11-05 22:32:38 +0100haskl[error](~haskl@user/haskl)
2021-11-05 22:33:10 +0100Arathorn(~arathorn@2001:470:69fc:105::1f)
2021-11-05 22:33:26 +0100ericson2314(~ericson23@2001:470:69fc:105::70c)
2021-11-05 22:33:29 +0100glider(~glider@user/glider)
2021-11-05 22:33:33 +0100MoC(~moc@user/moc)
2021-11-05 22:33:38 +0100moats(~oats@user/oats)
2021-11-05 22:34:46 +0100Domino[m](~dominothe@2001:470:69fc:105::1:271b)
2021-11-05 22:34:50 +0100ilkecan[m](~ilkecanma@2001:470:69fc:105::1:79b)
2021-11-05 22:34:51 +0100thomasjm[m](~thomasjmm@2001:470:69fc:105::c6d9)
2021-11-05 22:34:51 +0100afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b)
2021-11-05 22:34:53 +0100cdsmith(~cdsmithma@2001:470:69fc:105::284)
2021-11-05 22:34:58 +0100marinelli[m](~marinelli@2001:470:69fc:105::2d8) (Quit: Reconnecting)
2021-11-05 22:36:54 +0100 <aegon> for any hls contributers out there, first, thank you for your service, second is there a reason go to definition doesn't work for package dependencies?
2021-11-05 22:37:53 +0100 <aegon> i've been using a local hackage but its pretty great to be able to hope around in editor to stuff
2021-11-05 22:37:59 +0100 <geekosaur> would this be a queston for #haskell-language-server ?
2021-11-05 22:38:47 +0100gdhffd[m](~gdhffdmat@2001:470:69fc:105::1:799)
2021-11-05 22:38:48 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-11-05 22:38:51 +0100fendor[m](~fendormat@2001:470:69fc:105::fcbd)
2021-11-05 22:38:58 +0100 <aegon> oh snap, it would be, headed over there
2021-11-05 22:39:42 +0100waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-11-05 22:40:41 +0100unclechu(~unclechu@2001:470:69fc:105::354)
2021-11-05 22:41:01 +0100slac76440(~slack1256@191.125.99.211) (Ping timeout: 256 seconds)
2021-11-05 22:41:08 +0100mekeor[m](~mekeormat@2001:470:69fc:105::17e4)
2021-11-05 22:41:49 +0100fgaz(~fgaz@2001:470:69fc:105::842)
2021-11-05 22:42:53 +0100kosmikus[m](~andresloe@2001:470:69fc:105::95d)
2021-11-05 22:42:54 +0100craige[m](~craigemcw@2001:470:69fc:105::35f1)
2021-11-05 22:42:54 +0100fcortesi(~fcortesi@2001:470:69fc:105::f3a9)
2021-11-05 22:42:56 +0100the-coot[m](~the-cootm@2001:470:69fc:105::95f)
2021-11-05 22:43:31 +0100jesser[m](~jessermat@2001:470:69fc:105::d5ae)
2021-11-05 22:43:32 +0100fakehacker[m](~fakehacke@2001:470:69fc:105::b5f0)
2021-11-05 22:46:29 +0100waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds)
2021-11-05 22:46:50 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2021-11-05 22:46:53 +0100jneira[m](~jneiramat@2001:470:69fc:105::d729)
2021-11-05 22:47:27 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2021-11-05 22:48:59 +0100jespada(~jespada@190.7.36.46)
2021-11-05 22:49:29 +0100bb010g(~bb010g@2001:470:69fc:105::9a5)
2021-11-05 22:50:09 +0100TomasJakl[m](~jaklttchn@2001:470:69fc:105::a42)
2021-11-05 22:50:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-11-05 22:50:39 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3)
2021-11-05 22:51:35 +0100MatrixTravelerbo(~voyagert2@2001:470:69fc:105::22)
2021-11-05 22:51:45 +0100Topik[m](~topikmatr@2001:470:69fc:105::a082)
2021-11-05 22:51:57 +0100random-jellyfish(~random-je@user/random-jellyfish)
2021-11-05 22:52:52 +0100conphiz[m](~conphizma@2001:470:69fc:105::c052)
2021-11-05 22:52:52 +0100marinelli[m](~marinelli@2001:470:69fc:105::2d8)
2021-11-05 22:56:21 +0100haskl[error](~haskl@user/haskl) (Ping timeout: 245 seconds)
2021-11-05 22:56:24 +0100pavonia(~user@user/siracusa)
2021-11-05 23:00:21 +0100pgib(~textual@173.38.117.89)
2021-11-05 23:00:28 +0100joel135(sid136450@hampstead.irccloud.com)
2021-11-05 23:02:36 +0100 <joel135> could you help me get this to compile? https://paste.tomsmeding.com/C86kwGkO
2021-11-05 23:03:42 +0100 <joel135> i thought i had learned how to handle this situation, namely by making my `Poly` type into a datatype, but alas no
2021-11-05 23:05:29 +0100 <joel135> i thought the constructor would hide the `forall` business from the typechecker and make it happy
2021-11-05 23:06:25 +0100 <fuzzypixelz> I wrote this a couple weeks ago: https://github.com/fuzzypixelz/Hustle
2021-11-05 23:06:55 +0100 <fuzzypixelz> I'd like your opinions on how it can improved
2021-11-05 23:08:13 +0100 <fuzzypixelz> I'm afraid I've made some irrecoverable decisions from the start (like using Megaparsec instead of attoparsec ... only after I was done did I notice all parsing libs use atto)
2021-11-05 23:09:33 +0100 <geekosaur> joel135, what sticks out to me immediately is that the foldr already produces a Poly, so you shouldn't need to wrap it in another one
2021-11-05 23:09:53 +0100 <joel135> ah thanks
2021-11-05 23:10:01 +0100 <joel135> silly mistake :)
2021-11-05 23:16:16 +0100haasn`(~nand@haasn.dev)
2021-11-05 23:16:23 +0100LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
2021-11-05 23:16:41 +0100jespada(~jespada@190.7.36.46) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-11-05 23:16:46 +0100hololeap(~hololeap@user/hololeap) (Read error: Connection reset by peer)
2021-11-05 23:16:52 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2021-11-05 23:17:08 +0100aforemny(~aforemny@static.248.158.34.188.clients.your-server.de) (Quit: ZNC 1.8.2 - https://znc.in)
2021-11-05 23:17:18 +0100LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao)
2021-11-05 23:17:20 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
2021-11-05 23:17:20 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2021-11-05 23:17:24 +0100haasn(~nand@haasn.dev) (Ping timeout: 268 seconds)
2021-11-05 23:17:25 +0100tired(~tired@user/tired) (Quit: /)
2021-11-05 23:17:27 +0100aforemny(~aforemny@static.248.158.34.188.clients.your-server.de)
2021-11-05 23:17:29 +0100V(~v@anomalous.eu) (Ping timeout: 264 seconds)
2021-11-05 23:17:30 +0100xnbya(~xnbya@2a01:4f8:c17:cbdd::1) (Ping timeout: 260 seconds)
2021-11-05 23:17:40 +0100haasn`haasn
2021-11-05 23:17:42 +0100xnbya(~xnbya@2a01:4f8:c17:cbdd::1)
2021-11-05 23:17:43 +0100tired(~tired@user/tired)
2021-11-05 23:17:47 +0100V(~v@anomalous.eu)
2021-11-05 23:18:02 +0100hololeap(~hololeap@user/hololeap)
2021-11-05 23:19:11 +0100jpds1(~jpds@gateway/tor-sasl/jpds)
2021-11-05 23:19:27 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2021-11-05 23:19:30 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-11-05 23:19:30 +0100finn_elijaFinnElija
2021-11-05 23:20:32 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-11-05 23:22:33 +0100EvanR(~evan@user/evanr)
2021-11-05 23:22:56 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-11-05 23:23:52 +0100vladl(~vladl@174.127.234.115) (Quit: Lost terminal)
2021-11-05 23:24:23 +0100johnny_sitar(~artur@078088015209.bialystok.vectranet.pl) (Ping timeout: 264 seconds)
2021-11-05 23:27:20 +0100JSharp(sid4580@id-4580.lymington.irccloud.com) (Ping timeout: 260 seconds)
2021-11-05 23:28:21 +0100waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
2021-11-05 23:28:25 +0100max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Quit: Leaving)
2021-11-05 23:28:39 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 23:28:49 +0100JSharp(sid4580@id-4580.lymington.irccloud.com)
2021-11-05 23:30:08 +0100Kaiepi(~Kaiepi@156.34.44.192) (Remote host closed the connection)
2021-11-05 23:32:32 +0100Kaiepi(~Kaiepi@156.34.44.192)
2021-11-05 23:33:26 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2021-11-05 23:38:40 +0100 <joel135> now i finished the file i was working on https://github.com/JoelSjogren/diff-poly/blob/main/DiffPoly.hs
2021-11-05 23:41:02 +0100haskl(~haskl@user/haskl)
2021-11-05 23:41:26 +0100michalz(~michalz@185.246.204.40) (Remote host closed the connection)
2021-11-05 23:41:29 +0100dolio(~dolio@130.44.130.54) (Quit: ZNC 1.8.2 - https://znc.in)
2021-11-05 23:43:21 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2021-11-05 23:44:02 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-11-05 23:45:55 +0100alphabeta(~kilolympu@185.65.135.177) (Quit: Quitting IRC :()
2021-11-05 23:46:32 +0100toreiussd(uid469671@id-469671.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2021-11-05 23:47:34 +0100dolio(~dolio@130.44.130.54)
2021-11-05 23:48:22 +0100haskl(~haskl@user/haskl) (Ping timeout: 260 seconds)
2021-11-05 23:48:34 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-11-05 23:50:03 +0100 <ski> joel135 : "next step" after naturals ?
2021-11-05 23:50:12 +0100 <joel135> yes!!
2021-11-05 23:50:15 +0100 <joel135> hej stefan
2021-11-05 23:50:28 +0100 <ski> hejs :)
2021-11-05 23:51:10 +0100 <ski> this reminds me of some investigation i did recently, comparing church numerals to logic programming
2021-11-05 23:51:29 +0100haskl(~haskl@user/haskl)
2021-11-05 23:51:39 +0100 <joel135> let me write out the induction hypothesis for https://github.com/JoelSjogren/diff-poly/blob/main/DiffPoly.hs#L85
2021-11-05 23:51:49 +0100 <joel135> (in unerased form)
2021-11-05 23:53:12 +0100 <joel135> "whenever k : Poly is such that for all f : Poly differentiability of f implies that of f+k (= g), then for all h : Poly differentiability of h implies that of h+xg"
2021-11-05 23:53:51 +0100 <ski> (and, to a prototype i did, years ago, that implemented goal implications (with the possibility of arbitrary left-nesting) on top of basic logic programming, by employing a stack of `ContT's, nested as deep as you with (left-nesting implication increases depth by one), and then some mutation at the bottom, for logic variables. using this, you can "backtrack backtracking",&c. .. also an interesting "duality"
2021-11-05 23:53:57 +0100 <ski> of sorts between logic variables and skolems/atoms emerged)
2021-11-05 23:54:26 +0100 <joel135> (there may be some subtle error in what i just wrote)
2021-11-05 23:54:59 +0100 <joel135> hmm, let me switch gears and start to take in what you are writing
2021-11-05 23:55:51 +0100 <ski> imagine something like `forall o. Fix (ContT o) a' .. although not quite that
2021-11-05 23:57:13 +0100 <joel135> oh yes, that left-nesting is actually how i sketched `level_2` out on paper first, namely `((f, f') ↦ (g, g')) ↦ ((h, h') ↦ (l, l'))`
2021-11-05 23:59:02 +0100 <ski> addition and multiplication can be done with plain `ContT' (iow the same global "answer type" `o'), but exponentiation seems to require `Codensity' (iow, you pass around `forall o.'-ed stuff, rank-2)
2021-11-05 23:59:22 +0100 <ski> (addition = disjunction, multiplication = conjunction, exponentiation = implication)