2022/02/16

2022-02-16 00:00:06 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-3d94-4d23-dc7c-c228.res6.spectrum.com)
2022-02-16 00:08:48 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-02-16 00:09:05 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2022-02-16 00:13:48 +0100 <jackdk> zwro[m]: hello
2022-02-16 00:17:36 +0100coot_(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot_)
2022-02-16 00:19:11 +0100chenqisu12(~chenqisu1@183.217.200.249)
2022-02-16 00:19:51 +0100`2jt(~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Ping timeout: 272 seconds)
2022-02-16 00:21:28 +0100FernandoChu[m](~ryunaqmat@2001:470:69fc:105::1:4dc0) (*.net *.split)
2022-02-16 00:21:28 +0100acidjnk(~acidjnk@p200300d0c7057500a04355ceabfe8d47.dip0.t-ipconnect.de) (*.net *.split)
2022-02-16 00:21:28 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (*.net *.split)
2022-02-16 00:21:28 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (*.net *.split)
2022-02-16 00:21:28 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (*.net *.split)
2022-02-16 00:21:28 +0100econo(uid147250@user/econo) (*.net *.split)
2022-02-16 00:21:28 +0100polyphem(~rod@2a02:810d:840:8754:448e:47ff:4575:7cfb) (*.net *.split)
2022-02-16 00:21:28 +0100megeve(sid523379@id-523379.hampstead.irccloud.com) (*.net *.split)
2022-02-16 00:21:28 +0100foul_owl(~kerry@207.244.125.36) (*.net *.split)
2022-02-16 00:21:28 +0100myme(~myme@2a01:799:d5a:cd00:9ae3:d451:a989:e1e9) (*.net *.split)
2022-02-16 00:21:28 +0100img(~img@user/img) (*.net *.split)
2022-02-16 00:21:28 +0100kanin(~kanin@112.41.64.39) (*.net *.split)
2022-02-16 00:21:28 +0100edwtjo(~edwtjo@user/edwtjo) (*.net *.split)
2022-02-16 00:21:28 +0100hongminhee(sid295@2a03:5180:f::127) (*.net *.split)
2022-02-16 00:21:28 +0100bjs(sid190364@user/bjs) (*.net *.split)
2022-02-16 00:21:28 +0100cbarrett(sid192934@2a03:5180:f:1::2:f1a6) (*.net *.split)
2022-02-16 00:21:28 +0100Boarders_(sid425905@id-425905.lymington.irccloud.com) (*.net *.split)
2022-02-16 00:21:28 +0100ellie(~ellie@user/ellie) (*.net *.split)
2022-02-16 00:21:28 +0100Putonlalla(~sapekiis@it-cyan.it.jyu.fi) (*.net *.split)
2022-02-16 00:21:28 +0100fryguybob(~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (*.net *.split)
2022-02-16 00:21:28 +0100Hafydd(~Hafydd@user/hafydd) (*.net *.split)
2022-02-16 00:21:28 +0100drewr(~drew@user/drewr) (*.net *.split)
2022-02-16 00:21:28 +0100tv(~tv@user/tv) (*.net *.split)
2022-02-16 00:21:28 +0100elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (*.net *.split)
2022-02-16 00:21:28 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (*.net *.split)
2022-02-16 00:21:28 +0100Flow(~none@gentoo/developer/flow) (*.net *.split)
2022-02-16 00:21:28 +0100echoreply(~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d) (*.net *.split)
2022-02-16 00:21:28 +0100oats(~thomas@user/oats) (*.net *.split)
2022-02-16 00:21:28 +0100mixfix41(~sdenyninn@user/mixfix41) (*.net *.split)
2022-02-16 00:21:28 +0100NiKaN(sid385034@id-385034.helmsley.irccloud.com) (*.net *.split)
2022-02-16 00:21:28 +0100tinwood(~tinwood@canonical/tinwood) (*.net *.split)
2022-02-16 00:21:29 +0100Pent(sid313808@lymington.irccloud.com) (*.net *.split)
2022-02-16 00:21:29 +0100finsternis(~X@23.226.237.192) (*.net *.split)
2022-02-16 00:21:29 +0100dexterfoo(~dexter@li655-253.members.linode.com) (*.net *.split)
2022-02-16 00:21:29 +0100fluxit(~fluxit@techsmix.net) (*.net *.split)
2022-02-16 00:21:29 +0100lambdabot(~lambdabot@haskell/bot/lambdabot) (*.net *.split)
2022-02-16 00:21:29 +0100heath(~heath@user/heath) (*.net *.split)
2022-02-16 00:21:29 +0100lambdap(~lambdap@static.167.190.119.168.clients.your-server.de) (*.net *.split)
2022-02-16 00:21:29 +0100nurupo(~nurupo.ga@user/nurupo) (*.net *.split)
2022-02-16 00:21:29 +0100noctuks(7vrDyCK6LH@user/noctux) (*.net *.split)
2022-02-16 00:21:29 +0100cjay(cjay@nerdbox.nerd2nerd.org) (*.net *.split)
2022-02-16 00:21:29 +0100notabled1(~notabledu@ares.dbalan.in) (*.net *.split)
2022-02-16 00:21:29 +0100sshine(~simon@hubris.eta.solutions) (*.net *.split)
2022-02-16 00:21:29 +0100blades(~blades@204.48.29.163) (*.net *.split)
2022-02-16 00:21:29 +0100kosmikus(~kosmikus@nullzig.kosmikus.org) (*.net *.split)
2022-02-16 00:21:29 +0100Trattue(~Trattue@152.70.182.158) (*.net *.split)
2022-02-16 00:21:50 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 00:21:53 +0100nurupo(~nurupo.ga@user/nurupo)
2022-02-16 00:21:57 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 00:22:00 +0100gurkenglas(~gurkengla@dslb-188-096-121-068.188.096.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
2022-02-16 00:22:10 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 00:22:18 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 00:22:27 +0100img(~img@user/img)
2022-02-16 00:22:33 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 00:22:36 +0100Pickchea(~private@user/pickchea) (Ping timeout: 240 seconds)
2022-02-16 00:22:40 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 00:23:44 +0100Shiranai(~Shiranai@190.237.13.59)
2022-02-16 00:23:47 +0100FernandoChu[m](~ryunaqmat@2001:470:69fc:105::1:4dc0)
2022-02-16 00:23:47 +0100acidjnk(~acidjnk@p200300d0c7057500a04355ceabfe8d47.dip0.t-ipconnect.de)
2022-02-16 00:23:47 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2022-02-16 00:23:47 +0100fluxit(~fluxit@techsmix.net)
2022-02-16 00:23:47 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-02-16 00:23:47 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
2022-02-16 00:23:47 +0100econo(uid147250@user/econo)
2022-02-16 00:23:47 +0100polyphem(~rod@2a02:810d:840:8754:448e:47ff:4575:7cfb)
2022-02-16 00:23:47 +0100megeve(sid523379@id-523379.hampstead.irccloud.com)
2022-02-16 00:23:47 +0100foul_owl(~kerry@207.244.125.36)
2022-02-16 00:23:47 +0100myme(~myme@2a01:799:d5a:cd00:9ae3:d451:a989:e1e9)
2022-02-16 00:23:47 +0100kanin(~kanin@112.41.64.39)
2022-02-16 00:23:47 +0100edwtjo(~edwtjo@user/edwtjo)
2022-02-16 00:23:47 +0100bjs(sid190364@user/bjs)
2022-02-16 00:23:47 +0100hongminhee(sid295@2a03:5180:f::127)
2022-02-16 00:23:47 +0100cbarrett(sid192934@2a03:5180:f:1::2:f1a6)
2022-02-16 00:23:47 +0100Boarders_(sid425905@id-425905.lymington.irccloud.com)
2022-02-16 00:23:47 +0100ellie(~ellie@user/ellie)
2022-02-16 00:23:47 +0100Putonlalla(~sapekiis@it-cyan.it.jyu.fi)
2022-02-16 00:23:47 +0100fryguybob(~fryguybob@cpe-74-67-169-145.rochester.res.rr.com)
2022-02-16 00:23:47 +0100drewr(~drew@user/drewr)
2022-02-16 00:23:47 +0100Hafydd(~Hafydd@user/hafydd)
2022-02-16 00:23:47 +0100tv(~tv@user/tv)
2022-02-16 00:23:47 +0100elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru)
2022-02-16 00:23:47 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-02-16 00:23:47 +0100Flow(~none@gentoo/developer/flow)
2022-02-16 00:23:47 +0100echoreply(~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d)
2022-02-16 00:23:47 +0100oats(~thomas@user/oats)
2022-02-16 00:23:47 +0100mixfix41(~sdenyninn@user/mixfix41)
2022-02-16 00:23:47 +0100NiKaN(sid385034@id-385034.helmsley.irccloud.com)
2022-02-16 00:23:47 +0100tinwood(~tinwood@canonical/tinwood)
2022-02-16 00:23:47 +0100Pent(sid313808@lymington.irccloud.com)
2022-02-16 00:23:47 +0100finsternis(~X@23.226.237.192)
2022-02-16 00:23:47 +0100dexterfoo(~dexter@li655-253.members.linode.com)
2022-02-16 00:23:47 +0100lambdabot(~lambdabot@haskell/bot/lambdabot)
2022-02-16 00:23:47 +0100heath(~heath@user/heath)
2022-02-16 00:23:47 +0100lambdap(~lambdap@static.167.190.119.168.clients.your-server.de)
2022-02-16 00:23:47 +0100noctuks(7vrDyCK6LH@user/noctux)
2022-02-16 00:23:47 +0100notabled1(~notabledu@ares.dbalan.in)
2022-02-16 00:23:47 +0100cjay(cjay@nerdbox.nerd2nerd.org)
2022-02-16 00:23:47 +0100sshine(~simon@hubris.eta.solutions)
2022-02-16 00:23:47 +0100blades(~blades@204.48.29.163)
2022-02-16 00:23:47 +0100kosmikus(~kosmikus@nullzig.kosmikus.org)
2022-02-16 00:23:47 +0100Trattue(~Trattue@152.70.182.158)
2022-02-16 00:23:47 +0100mixfix41(~sdenyninn@user/mixfix41) (Max SendQ exceeded)
2022-02-16 00:23:47 +0100finsternis(~X@23.226.237.192) (Max SendQ exceeded)
2022-02-16 00:24:21 +0100finsternis(~X@23.226.237.192)
2022-02-16 00:25:24 +0100 <FernandoChu[m]> <zwro[m]> "test" <- hello x2
2022-02-16 00:26:57 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Ping timeout: 250 seconds)
2022-02-16 00:27:23 +0100NiKaN(sid385034@id-385034.helmsley.irccloud.com) (Ping timeout: 250 seconds)
2022-02-16 00:27:27 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 272 seconds)
2022-02-16 00:27:50 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-02-16 00:28:37 +0100burnsidesLlama(~burnsides@dhcp168-031.wadham.ox.ac.uk)
2022-02-16 00:29:31 +0100NiKaN(sid385034@id-385034.helmsley.irccloud.com)
2022-02-16 00:31:04 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-02-16 00:33:00 +0100burnsidesLlama(~burnsides@dhcp168-031.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-02-16 00:38:55 +0100chenqisu12(~chenqisu1@183.217.200.249) (Read error: Connection reset by peer)
2022-02-16 00:39:34 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Remote host closed the connection)
2022-02-16 00:39:49 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 00:40:26 +0100zeenk(~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!)
2022-02-16 00:44:08 +0100Tuplanolla(~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.)
2022-02-16 00:44:54 +0100burnsidesLlama(~burnsides@dhcp168-031.wadham.ox.ac.uk)
2022-02-16 00:45:00 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
2022-02-16 00:46:12 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds)
2022-02-16 00:47:00 +0100 <dibblego> koala_man: catMaybes = mapMaybe id
2022-02-16 00:47:10 +0100 <dibblego> oh wait no Map, nothing nothing
2022-02-16 00:47:16 +0100 <koala_man> dibblego!!
2022-02-16 00:47:25 +0100 <dibblego> koala_man!! I'm about to head out
2022-02-16 00:48:05 +0100 <koala_man> dibblego: I have some knot tying I can't finish that you may have some thoughts on later
2022-02-16 00:48:08 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-16 00:48:12 +0100 <dibblego> ok, about an hour
2022-02-16 00:48:16 +0100 <koala_man> \o/
2022-02-16 00:52:09 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 272 seconds)
2022-02-16 00:58:12 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-16 00:58:54 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-16 01:01:07 +0100meinside(uid24933@id-24933.helmsley.irccloud.com)
2022-02-16 01:10:27 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
2022-02-16 01:11:13 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Remote host closed the connection)
2022-02-16 01:12:26 +0100lbseale_(~ep1ctetus@user/ep1ctetus)
2022-02-16 01:12:55 +0100ft(~ft@shell.chaostreff-dortmund.de) (Ping timeout: 256 seconds)
2022-02-16 01:15:25 +0100ProfSimm(~ProfSimm@87.227.196.109)
2022-02-16 01:15:29 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds)
2022-02-16 01:15:30 +0100max22-(~maxime@2a01cb0883359800f7b27aee14b4b0ce.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-02-16 01:15:37 +0100 <EvanR> is there a name or blog post for this concept: an abstract data type which supports querying/summarizing/reading but also editing. And internally it has two interchangable forms which are more efficient for repeated reading or repeated editing respectively
2022-02-16 01:15:47 +0100cynomys(~cynomys@user/cynomys)
2022-02-16 01:16:13 +0100lbseale(~ep1ctetus@user/ep1ctetus) (Ping timeout: 272 seconds)
2022-02-16 01:17:29 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-16 01:17:34 +0100 <EvanR> and maybe policies for when to make the transformation one way or another
2022-02-16 01:17:35 +0100alp(~alp@user/alp)
2022-02-16 01:19:47 +0100kmein(~weechat@user/kmein) (Quit: ciao kakao)
2022-02-16 01:20:25 +0100shapr(~user@pool-173-73-44-186.washdc.fios.verizon.net) (Remote host closed the connection)
2022-02-16 01:20:38 +0100shapr(~user@pool-173-73-44-186.washdc.fios.verizon.net)
2022-02-16 01:21:33 +0100acidjnk(~acidjnk@p200300d0c7057500a04355ceabfe8d47.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-02-16 01:21:52 +0100kmein(~weechat@user/kmein)
2022-02-16 01:27:25 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net)
2022-02-16 01:28:00 +0100xff0x(~xff0x@2001:1a81:53dd:d400:b969:14d4:3062:a4) (Ping timeout: 252 seconds)
2022-02-16 01:28:59 +0100xff0x(~xff0x@2001:1a81:53dd:d400:cfc4:5e91:8963:f0f2)
2022-02-16 01:31:19 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-02-16 01:32:24 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
2022-02-16 01:33:11 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-02-16 01:35:13 +0100machinedgod(~machinedg@24.105.81.50)
2022-02-16 01:35:20 +0100 <Inst[m]> monochrom: is the Church-Turing hypothesis proven?
2022-02-16 01:35:45 +0100 <Inst[m]> in which case, ProfSimms is just reiterating something rather trivial
2022-02-16 01:36:06 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-02-16 01:40:28 +0100 <monochrom> EvanR: Does a relational database count? It may be a little bit weak on having two forms, but declaring primary keys and/or secondary keys and/or foreign keys may count as that, because the b-tree structure is built based on which fields you declare as keys.
2022-02-16 01:40:57 +0100 <EvanR> yeah a database is great example of 1 form at a tmie
2022-02-16 01:41:27 +0100cynomys(~cynomys@user/cynomys) (Quit: Lost terminal)
2022-02-16 01:41:48 +0100 <EvanR> do you want to read a lot or query a lot, both. (Ok, they have some configuration options to make one or the other faster, but you set this option once to inform the form)
2022-02-16 01:42:14 +0100 <monochrom> On the other extreme, perfect hashing is a hash table so optimized for lookups that it bans editing altogether.
2022-02-16 01:43:09 +0100 <EvanR> s/read/edit/
2022-02-16 01:44:20 +0100 <monochrom> I do not know of things that let you flip a switch and causes "OK now rebuild for optimal read-only".
2022-02-16 01:44:47 +0100 <EvanR> it doesn't need to be the size of a database
2022-02-16 01:45:41 +0100 <EvanR> ok maybe this is a subproblem of just have forms that make some queries cheaper to do than others, since in pure functional an edit is like a kind of read
2022-02-16 01:45:59 +0100 <EvanR> which has as an example the complex number in rectangular form or polar form
2022-02-16 01:47:09 +0100 <EvanR> you could use rectangular form everywhere like we do, and "just" convert to polar any time the radius or angle is requested
2022-02-16 01:47:38 +0100 <monochrom> Even within read-only, optimal-for-lookup and optimal-for-folds may already be in conflict.
2022-02-16 01:47:59 +0100 <EvanR> that's basically what I just said
2022-02-16 01:48:04 +0100 <monochrom> Ah OK.
2022-02-16 01:48:15 +0100 <EvanR> lookup and fold being two examples of queries
2022-02-16 01:48:23 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-02-16 01:48:40 +0100 <EvanR> and substitution, getting an updated picture, a third example
2022-02-16 01:49:14 +0100 <EvanR> the standard method is to use something that's generally ok at everything
2022-02-16 01:49:59 +0100 <monochrom> Yeah it's hard to predict what your users want to do in the far future. :)
2022-02-16 01:50:31 +0100 <EvanR> what if instead of a history of the future, you had a (possibly evolving) probability model for what they will want next
2022-02-16 01:51:18 +0100 <EvanR> and when
2022-02-16 01:51:58 +0100 <EvanR> I guess then it's a combination of too complicated and not worth it
2022-02-16 01:52:01 +0100 <monochrom> OK you can have that model based on the past. A keyword may be "adaptive data structures".
2022-02-16 01:53:03 +0100 <EvanR> i can imagine a smart engineer saying, no, why don't we just use actual knowledge of what we will actually do instead
2022-02-16 01:53:34 +0100 <monochrom> Don't worry about worth. There are always crazy computer scientists who think up crazy solutions. :)
2022-02-16 01:54:43 +0100little_mac(~little_ma@2601:410:4300:3ce0:c5cf:b717:584d:5dd3) (Remote host closed the connection)
2022-02-16 01:55:50 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 01:55:50 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 01:55:50 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 02:00:04 +0100lbseale_(~ep1ctetus@user/ep1ctetus) (Quit: Leaving)
2022-02-16 02:00:36 +0100jgeerds_(~jgeerds@55d4b9df.access.ecotel.net) (Read error: Connection reset by peer)
2022-02-16 02:00:59 +0100jgeerds_(~jgeerds@55d4b9df.access.ecotel.net)
2022-02-16 02:01:08 +0100ft(~ft@shell.chaostreff-dortmund.de)
2022-02-16 02:02:11 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 02:04:13 +0100justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
2022-02-16 02:04:14 +0100little_mac(~little_ma@2601:410:4300:3ce0:edbf:f48a:9927:9718)
2022-02-16 02:05:07 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-02-16 02:06:23 +0100little_mac(~little_ma@2601:410:4300:3ce0:edbf:f48a:9927:9718) (Client Quit)
2022-02-16 02:06:36 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-16 02:10:30 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-02-16 02:13:06 +0100jgeerds_(~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 252 seconds)
2022-02-16 02:16:37 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-02-16 02:20:05 +0100img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2022-02-16 02:31:27 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-02-16 02:32:34 +0100img(~img@user/img)
2022-02-16 02:33:01 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-02-16 02:35:02 +0100chenqisu1(~chenqisu1@183.217.200.249)
2022-02-16 02:36:13 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 02:37:24 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 02:38:17 +0100Cajun(~Cajun@user/cajun)
2022-02-16 02:38:57 +0100 <Inst[m]> fuck, what's the hanzi for Lai
2022-02-16 02:38:58 +0100 <Inst[m]> monochrom
2022-02-16 02:39:15 +0100 <Inst[m]> should be addressing you as Lai 老师
2022-02-16 02:40:36 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-16 02:42:21 +0100 <Inst[m]> 巴黎的黎
2022-02-16 02:42:28 +0100 <Inst[m]> 黎老师
2022-02-16 02:42:46 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
2022-02-16 02:43:16 +0100 <Inst[m]> was wondering, right now, my working definition of Haskell is "clusterfuck", i.e, it's ostensibly a "pure, functional programming language" where the language extensions and lib mean it technically has everything. Except Or-Patterns.
2022-02-16 02:43:49 +0100 <Inst[m]> i'm sure someone implemented objects via STRef / IORef somewhere in Hackage
2022-02-16 02:46:05 +0100 <Inst[m]> and yeah, OHaskell is a thing, so's Timber
2022-02-16 02:46:33 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
2022-02-16 02:50:04 +0100Merfont(~Kaiepi@156.34.47.253)
2022-02-16 02:50:10 +0100Kaipi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-02-16 02:54:31 +0100dsrt^(~dsrt@50.235.176.163)
2022-02-16 02:55:00 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
2022-02-16 03:00:12 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-02-16 03:00:16 +0100vysn(~vysn@user/vysn)
2022-02-16 03:04:48 +0100alp(~alp@user/alp) (Ping timeout: 252 seconds)
2022-02-16 03:08:38 +0100 <Axman6> :t M.fromList . mapMaybe traverse
2022-02-16 03:08:39 +0100 <lambdabot> error:
2022-02-16 03:08:39 +0100 <lambdabot> • Couldn't match type ‘t0 a -> f (t0 b)’ with ‘Maybe (k, a1)’
2022-02-16 03:08:39 +0100 <lambdabot> Expected type: (a -> f b) -> Maybe (k, a1)
2022-02-16 03:08:50 +0100 <Axman6> :t M.fromList . mapMaybe sequence
2022-02-16 03:08:51 +0100 <lambdabot> Ord k => [(k, Maybe a)] -> M.Map k a
2022-02-16 03:09:07 +0100 <Axman6> :t M.fromList . mapMaybe sequence . M.toList
2022-02-16 03:09:07 +0100 <lambdabot> Ord k => M.Map k (Maybe a) -> M.Map k a
2022-02-16 03:09:08 +0100jinsun__(~jinsun@user/jinsun)
2022-02-16 03:09:36 +0100 <Axman6> :t M.fromAscList . mapMaybe sequence . M.toList -- koala_man (sorry, it's been churning away in the back of my mind)
2022-02-16 03:09:37 +0100 <lambdabot> Eq k => M.Map k (Maybe a) -> M.Map k a
2022-02-16 03:09:57 +0100emf(~emf@2620:10d:c090:400::5:d01b) (Ping timeout: 240 seconds)
2022-02-16 03:11:45 +0100 <Axman6> :t M.traverseMaybeWithKey (\_k v -> Identity v)
2022-02-16 03:11:46 +0100 <lambdabot> M.Map k (Maybe b) -> Identity (M.Map k b)
2022-02-16 03:11:57 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds)
2022-02-16 03:11:57 +0100jinsun(~jinsun@user/jinsun) (Ping timeout: 252 seconds)
2022-02-16 03:12:20 +0100 <Axman6> that might be better, since it can reuse the structure of the tree
2022-02-16 03:13:08 +0100 <Axman6> > M.traverseMaybeWithKey (\_k v -> [Just v, Nothing]) (M.fromList $ zip [1,2,3] "abc")
2022-02-16 03:13:09 +0100 <lambdabot> [fromList [(1,'a'),(2,'b'),(3,'c')],fromList [(1,'a'),(2,'b')],fromList [(1,...
2022-02-16 03:13:56 +0100 <Axman6> oh, there's also just mapMaybe id
2022-02-16 03:14:28 +0100 <Axman6> :t M.mapMaybe id -- which.. is what dibblego already said and then retracted
2022-02-16 03:14:29 +0100 <lambdabot> M.Map k (Maybe b) -> M.Map k b
2022-02-16 03:14:47 +0100x_kuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2022-02-16 03:16:19 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-16 03:19:06 +0100 <jackdk> Axman6/koala_man : https://hackage.haskell.org/package/witherable-0.4.2/docs/Witherable.html#t:Filterable
2022-02-16 03:20:17 +0100xff0x(~xff0x@2001:1a81:53dd:d400:cfc4:5e91:8963:f0f2) (Ping timeout: 250 seconds)
2022-02-16 03:21:11 +0100xff0x(~xff0x@2001:1a81:53dd:d400:1a83:e659:64aa:a931)
2022-02-16 03:22:18 +0100alp(~alp@user/alp)
2022-02-16 03:23:15 +0100 <shapr> Is there a table for postgresql-simple that has "suggested postgresql column type for defined ToField instances" ?
2022-02-16 03:29:33 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 252 seconds)
2022-02-16 03:33:58 +0100gaff(~gaff@49.207.202.143)
2022-02-16 03:45:56 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds)
2022-02-16 03:50:54 +0100a6a45081-2b83(~aditya@2601:249:4380:4f10::fe26)
2022-02-16 03:51:06 +0100little_mac(~little_ma@2601:410:4300:3ce0:edbf:f48a:9927:9718)
2022-02-16 03:54:31 +0100xff0x(~xff0x@2001:1a81:53dd:d400:1a83:e659:64aa:a931) (Ping timeout: 250 seconds)
2022-02-16 03:55:00 +0100a6a45081-2b83(~aditya@2601:249:4380:4f10::fe26) (Ping timeout: 240 seconds)
2022-02-16 03:55:02 +0100f33f046c-a02e(~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507)
2022-02-16 03:56:23 +0100xff0x(~xff0x@2001:1a81:5217:d600:a1de:a304:ac28:4386)
2022-02-16 03:57:19 +0100zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-02-16 03:57:56 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 240 seconds)
2022-02-16 03:58:42 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-02-16 04:11:00 +0100gaff(~gaff@49.207.202.143) (Ping timeout: 272 seconds)
2022-02-16 04:11:08 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-16 04:14:13 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Client Quit)
2022-02-16 04:14:32 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-16 04:14:35 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Client Quit)
2022-02-16 04:14:54 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-16 04:15:05 +0100zaquest(~notzaques@5.130.79.72)
2022-02-16 04:16:16 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-02-16 04:17:05 +0100f33f046c-a02e(~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507) (Remote host closed the connection)
2022-02-16 04:17:24 +0100alp(~alp@user/alp) (Ping timeout: 252 seconds)
2022-02-16 04:23:29 +0100gaff(~gaff@49.207.202.143)
2022-02-16 04:27:51 +0100emf(~emf@2620:10d:c090:400::5:6a6c)
2022-02-16 04:29:30 +0100td_(~td@94.134.91.25) (Ping timeout: 252 seconds)
2022-02-16 04:31:33 +0100td_(~td@muedsl-82-207-238-242.citykom.de)
2022-02-16 04:44:55 +0100Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection)
2022-02-16 04:45:22 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 04:46:25 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!)
2022-02-16 04:47:15 +0100emf(~emf@2620:10d:c090:400::5:6a6c) (Quit: emf)
2022-02-16 04:48:36 +0100gaff(~gaff@49.207.202.143) (Ping timeout: 240 seconds)
2022-02-16 04:52:18 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-16 04:54:21 +0100mzan(~quassel@mail.asterisell.com) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-02-16 04:56:01 +0100deadmarshal(~deadmarsh@95.38.0.168)
2022-02-16 05:00:51 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2022-02-16 05:02:31 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-02-16 05:02:31 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-02-16 05:02:46 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-02-16 05:02:50 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-02-16 05:06:58 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!)
2022-02-16 05:09:55 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 272 seconds)
2022-02-16 05:10:38 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-16 05:12:12 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-16 05:15:53 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 05:16:15 +0100ralu(~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 272 seconds)
2022-02-16 05:16:47 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 05:20:40 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
2022-02-16 05:24:42 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Remote host closed the connection)
2022-02-16 05:29:19 +0100mbuf(~Shakthi@122.162.72.100)
2022-02-16 05:30:12 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-16 05:33:19 +0100deadmarshal_(~deadmarsh@95.38.231.90)
2022-02-16 05:33:48 +0100deadmarshal(~deadmarsh@95.38.0.168) (Ping timeout: 240 seconds)
2022-02-16 05:36:13 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 05:36:13 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 05:36:13 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 05:36:26 +0100texasmynsted(~texasmyns@99.96.221.112)
2022-02-16 05:37:48 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 240 seconds)
2022-02-16 05:39:48 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
2022-02-16 05:40:36 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-16 05:42:14 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-16 05:43:06 +0100cyphase_eviltwin(~cyphase@user/cyphase)
2022-02-16 05:44:09 +0100burnside_(~burnsides@client-8-91.eduroam.oxuni.org.uk)
2022-02-16 05:44:10 +0100burnsidesLlama(~burnsides@dhcp168-031.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-16 05:45:00 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 240 seconds)
2022-02-16 05:47:39 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-02-16 05:47:48 +0100notzmv(~zmv@user/notzmv)
2022-02-16 05:48:12 +0100burnside_(~burnsides@client-8-91.eduroam.oxuni.org.uk) (Ping timeout: 240 seconds)
2022-02-16 05:48:33 +0100deadmarshal_(~deadmarsh@95.38.231.90) (Ping timeout: 272 seconds)
2022-02-16 05:50:10 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 05:50:17 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 05:51:17 +0100capo_greco(~textual@60-241-161-167.static.tpgi.com.au)
2022-02-16 05:59:09 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 05:59:10 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
2022-02-16 06:00:02 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 06:00:10 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 06:02:27 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-02-16 06:04:36 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-16 06:04:39 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2022-02-16 06:07:15 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-02-16 06:08:09 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-02-16 06:09:00 +0100mvk(~mvk@2607:fea8:5cdc:bf00::99e7) (Ping timeout: 240 seconds)
2022-02-16 06:09:05 +0100modnar(~modnar@shell.sonic.net) (Quit: No Ping reply in 180 seconds.)
2022-02-16 06:10:18 +0100modnar(~modnar@shell.sonic.net)
2022-02-16 06:13:01 +0100yauhsien(~Yau-Hsien@61-231-32-166.dynamic-ip.hinet.net) (Quit: Leaving)
2022-02-16 06:13:41 +0100gaff(~gaff@49.207.201.232)
2022-02-16 06:22:15 +0100capo_greco(~textual@60-241-161-167.static.tpgi.com.au) (Ping timeout: 252 seconds)
2022-02-16 06:32:32 +0100deadmarshal(~deadmarsh@95.38.231.90)
2022-02-16 06:42:12 +0100yauhsien(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 06:44:19 +0100yuvi(~uv125@192.54.96.185)
2022-02-16 06:47:26 +0100yauhsien(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
2022-02-16 06:48:34 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 06:51:28 +0100gaff(~gaff@49.207.201.232) (Quit: Bye ...)
2022-02-16 06:52:36 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-02-16 06:58:49 +0100yuvi(~uv125@192.54.96.185) (Quit: WeeChat 2.8)
2022-02-16 07:00:37 +0100ralu(~ralu@static.211.245.203.116.clients.your-server.de)
2022-02-16 07:05:25 +0100_ht(~quassel@231-169-21-31.ftth.glasoperator.nl)
2022-02-16 07:06:34 +0100bliminse(~bliminse@host86-158-241-239.range86-158.btcentralplus.com) (Quit: leaving)
2022-02-16 07:08:28 +0100Sgeo_(~Sgeo@user/sgeo)
2022-02-16 07:09:36 +0100pavonia(~user@user/siracusa) (Read error: Connection reset by peer)
2022-02-16 07:09:48 +0100forell(~forell@user/forell) (Ping timeout: 240 seconds)
2022-02-16 07:09:52 +0100pavonia(~user@user/siracusa)
2022-02-16 07:09:58 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-02-16 07:10:05 +0100forell(~forell@user/forell)
2022-02-16 07:14:06 +0100 <ProfSimm> Why do we need map and filter when we have fold
2022-02-16 07:14:27 +0100 <Inst[m]> more specific
2022-02-16 07:14:35 +0100 <Inst[m]> haskell has the particular quality wherein there's like 20 different ways to do things
2022-02-16 07:14:43 +0100foul_owl(~kerry@207.244.125.36) (Ping timeout: 250 seconds)
2022-02-16 07:14:45 +0100 <Inst[m]> map, sometimes you want to preserve a structure
2022-02-16 07:14:48 +0100 <Inst[m]> map is just a specific form of fmap
2022-02-16 07:15:10 +0100 <Inst[m]> also, fold can generate performance issues
2022-02-16 07:15:24 +0100 <Inst[m]> also
2022-02-16 07:15:38 +0100 <Inst[m]> the point of map / filter is to make it so that readers can understand your code, i.e, see what you're aiming to do
2022-02-16 07:15:53 +0100 <Inst[m]> fold, you often end up with weird lambdas the reader doesn't understand
2022-02-16 07:16:11 +0100 <Inst[m]> hence why there's like 20 different ways to do things, choose the best combination of readability, concision, and performance
2022-02-16 07:16:35 +0100 <ProfSimm> all you say makes sense.
2022-02-16 07:16:40 +0100 <ProfSimm> Which is why I don't accept it.
2022-02-16 07:16:46 +0100 <ProfSimm> Gotta dig deeper :D
2022-02-16 07:16:50 +0100 <Inst[m]> ProfSimm: I met you on ##programing
2022-02-16 07:16:55 +0100 <Inst[m]> just now joining the Haskell club?
2022-02-16 07:17:03 +0100 <Inst[m]> also, in general
2022-02-16 07:17:06 +0100 <Inst[m]> Haskellers are fucking insane
2022-02-16 07:17:23 +0100 <Inst[m]> there's like 5 different ways to do a conditional in Haskell
2022-02-16 07:17:27 +0100 <ProfSimm> Inst[m]: let's say the more I think about programming from first principles, the more things start looking like Haskell and I'm being in a bit of denial right now
2022-02-16 07:17:28 +0100 <Inst[m]> within the prelude
2022-02-16 07:17:42 +0100 <Inst[m]> once you add libraries and language extensions
2022-02-16 07:17:46 +0100 <Inst[m]> there's probably like 10 different ways to do a conditional
2022-02-16 07:18:02 +0100 <Inst[m]> Haskell does not provide a unified style
2022-02-16 07:18:33 +0100 <Inst[m]> IMO it's an exceptionally good language for a beginner to struggle with the theory underlying programming languages because there's so many fucking different ways to do things and you have to think about how each way is "valid" or useful
2022-02-16 07:18:59 +0100 <Inst[m]> which is why i like it, but my ABC girlfriend needs me to help her with her Chinese, so I have to put Haskell aside for a bit
2022-02-16 07:19:13 +0100 <ProfSimm> Inst[m]: that thing that keeps me up at night is what's the most miminal core through which everything else can be represented as libraries
2022-02-16 07:19:27 +0100 <ProfSimm> Inst[m]: the problem with fold is that it's not paralellizable for ex.
2022-02-16 07:19:38 +0100 <Inst[m]> try {-# LANGUAGE NoImplicitPrelude #-}
2022-02-16 07:19:42 +0100 <ProfSimm> So while you can implement map via it, it sucks
2022-02-16 07:20:32 +0100 <Inst[m]> 黎老师,她是我的林黛玉。
2022-02-16 07:21:35 +0100 <Inst[m]> ProfSimm: what's your background?
2022-02-16 07:21:35 +0100 <Inst[m]> You seem to be an experienced programmer, possibly teaching comp sci at uni.
2022-02-16 07:21:38 +0100 <Inst[m]> I'm a Haskell-as-First-Language twit
2022-02-16 07:22:03 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-02-16 07:22:18 +0100 <ario> you learned haskell as your first language?
2022-02-16 07:22:24 +0100 <ario> that's hardcore!
2022-02-16 07:22:50 +0100 <dsal> It's probably easier to learn haskell as a first language than a third language.
2022-02-16 07:22:55 +0100 <ario> hah
2022-02-16 07:23:07 +0100 <ario> paradigm shift, i get that
2022-02-16 07:23:15 +0100 <ario> i had such a hard time with prolog
2022-02-16 07:23:32 +0100 <dsal> I've never built anything slightly useful in prolog.
2022-02-16 07:23:48 +0100 <dsal> ProfSimm: Are you sure you can't parallelize a fold?
2022-02-16 07:24:12 +0100 <ario> i built an interpreter
2022-02-16 07:24:27 +0100 <ario> this was for some theoretical college course
2022-02-16 07:24:59 +0100 <ario> took me two weeks of bashing my head against it lol
2022-02-16 07:25:39 +0100 <Yehoshua> dsal: Since in a fold, each step uses the output from the previous step, that makes sense.
2022-02-16 07:26:04 +0100 <dsal> :t fold
2022-02-16 07:26:05 +0100 <lambdabot> (Foldable t, Monoid m) => t m -> m
2022-02-16 07:26:28 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2022-02-16 07:26:29 +0100 <Yehoshua> :t foldl
2022-02-16 07:26:30 +0100 <lambdabot> Foldable t => (b -> a -> b) -> b -> t a -> b
2022-02-16 07:27:41 +0100 <dibblego> folds can be parallelised
2022-02-16 07:28:30 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2022-02-16 07:28:39 +0100 <Yehoshua> For only monoid, it seems some
2022-02-16 07:28:42 +0100 <Yehoshua> s/some/so./
2022-02-16 07:29:05 +0100 <Yehoshua> (since a(bc) = (ab)c)
2022-02-16 07:30:17 +0100 <Yehoshua> However, a foldl/foldr can use the accumulator in such a way as to disallow that.
2022-02-16 07:30:50 +0100 <Inst[m]> <ario> "you learned haskell as your..." <- working on it
2022-02-16 07:30:54 +0100 <Inst[m]> need to finish a few textbooks first
2022-02-16 07:31:10 +0100 <Inst[m]> I think Haskell is an excellent first language and should be taught as such
2022-02-16 07:31:25 +0100 <ProfSimm> Inst[m]: I've been programming since i was a kid, but I'm teaching nobody at uni. Honestly my work is mostly traditional OOP and data processing pipelines.
2022-02-16 07:31:44 +0100 <dsal> To ProfSimm's question, there are different things you'd do with data structures. Sometimes you want a structure-preserving transformation of values within it, so fmap is right. Sometimes you want a catamorphism (or to reuse various Foldable functions like `sum` and `length`). Sometimes you want an effectful transformation like traverse. When you think about what you want done vs. how it's done, it gets easier.
2022-02-16 07:31:45 +0100 <Inst[m]> oh, research professor
2022-02-16 07:31:48 +0100 <Inst[m]> congrats :)
2022-02-16 07:32:01 +0100 <dsal> For a good read: https://maartenfokkinga.github.io/utwente/mmf91m.pdf
2022-02-16 07:32:33 +0100 <Inst[m]> profSimm: TBH, we're focusing on the same goal
2022-02-16 07:32:39 +0100 <Inst[m]> I'd like to know what a minimal Haskell teaching course looks like
2022-02-16 07:32:54 +0100 <Inst[m]> someone mentioned before that Haskell Report core is actually shorter than Python specification
2022-02-16 07:33:10 +0100 <Inst[m]> and scanr is often not mentioned, no one knew what until was, etc
2022-02-16 07:33:17 +0100 <Inst[m]> i'd like to know what the hell a combinator is
2022-02-16 07:33:52 +0100 <dsal> Do you want a minimal Haskell teaching course (of which there are many) or a course that covers every function that anyone's written?
2022-02-16 07:35:24 +0100turlando(~turlando@user/turlando) (Ping timeout: 252 seconds)
2022-02-16 07:36:57 +0100 <Inst[m]> what's a minimal haskell teaching course, then?
2022-02-16 07:37:59 +0100 <dsal> Any one of the introductory courses is fairly minimal.
2022-02-16 07:39:49 +0100 <dsal> You might be assuming that your ideal minimal set is an accepted definition of minimal. If it includes `scanr` it is definitely not minimal by any definition. You could build scanr when you need it if you didn't know it existed from the base language.
2022-02-16 07:40:02 +0100 <dsal> @src scanr
2022-02-16 07:40:02 +0100 <lambdabot> scanr _ q0 [] = [q0]
2022-02-16 07:40:02 +0100 <lambdabot> scanr f q0 (x:xs) = f x q : qs
2022-02-16 07:40:02 +0100 <lambdabot> where qs@(q:_) = scanr f q0 xs
2022-02-16 07:43:20 +0100_ht(~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
2022-02-16 07:45:48 +0100vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2022-02-16 07:45:49 +0100Pickchea(~private@user/pickchea)
2022-02-16 07:45:52 +0100foul_owl(~kerry@23.105.36.232)
2022-02-16 07:47:16 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-02-16 07:48:58 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-02-16 07:57:27 +0100coot(~coot@213.134.190.95)
2022-02-16 08:09:35 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2022-02-16 08:11:31 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 08:11:32 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 08:11:32 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 08:16:45 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-16 08:18:01 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-16 08:18:24 +0100Vajb(~Vajb@2001:999:274:c862:3b86:e1e1:5bff:355e)
2022-02-16 08:18:52 +0100Natch(~natch@c-4db8e255.014-297-73746f25.bbcust.telenor.se) (Ping timeout: 250 seconds)
2022-02-16 08:19:18 +0100ubert1(~Thunderbi@p200300ecdf0994b46944f41320f0055f.dip0.t-ipconnect.de)
2022-02-16 08:19:18 +0100Vajb(~Vajb@2001:999:274:c862:3b86:e1e1:5bff:355e) (Read error: Connection reset by peer)
2022-02-16 08:19:45 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-16 08:23:27 +0100Natch(~natch@c-4db8e255.014-297-73746f25.bbcust.telenor.se)
2022-02-16 08:27:07 +0100fef(~thedawn@user/thedawn)
2022-02-16 08:28:57 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 256 seconds)
2022-02-16 08:29:40 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-16 08:33:03 +0100yauhsien(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 08:36:13 +0100alp(~alp@user/alp)
2022-02-16 08:37:04 +0100alp(~alp@user/alp) (Remote host closed the connection)
2022-02-16 08:37:25 +0100alp(~alp@user/alp)
2022-02-16 08:37:27 +0100yauhsien(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-02-16 08:38:18 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-02-16 08:38:34 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2022-02-16 08:41:57 +0100alp(~alp@user/alp) (Ping timeout: 252 seconds)
2022-02-16 08:42:47 +0100acidjnk(~acidjnk@pd9e0b668.dip0.t-ipconnect.de)
2022-02-16 08:43:21 +0100Natch(~natch@c-4db8e255.014-297-73746f25.bbcust.telenor.se) (Ping timeout: 272 seconds)
2022-02-16 08:44:09 +0100rusrushal13(~rusrushal@103.85.18.34)
2022-02-16 08:46:25 +0100Natch(~natch@c-4db8e255.014-297-73746f25.bbcust.telenor.se)
2022-02-16 08:47:47 +0100mzan(~quassel@mail.asterisell.com)
2022-02-16 08:48:32 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it)
2022-02-16 08:48:32 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
2022-02-16 08:48:32 +0100turlando(~turlando@user/turlando)
2022-02-16 08:50:03 +0100 <Inst[m]> i'd disagree, it's hard to tell what should be included and what shouldn't be included, some courses spend a lot of time teaching list manipulation, others skip monads, etc
2022-02-16 08:50:06 +0100 <Inst[m]> but i'm not sober and i'm going to bed
2022-02-16 08:51:45 +0100gehmehgeh(~user@user/gehmehgeh)
2022-02-16 08:58:35 +0100Ariakenom(~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se)
2022-02-16 08:58:46 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:5b51:ad88:49b8:7439)
2022-02-16 08:59:39 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-02-16 09:01:18 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-02-16 09:01:38 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-02-16 09:01:45 +0100little_mac(~little_ma@2601:410:4300:3ce0:edbf:f48a:9927:9718) (Quit: Leaving)
2022-02-16 09:02:15 +0100yauhsien(~Yau-Hsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 09:04:00 +0100shriekingnoise(~shrieking@201.231.16.156) (Quit: Quit)
2022-02-16 09:05:39 +0100lagash(lagash@lagash.shelltalk.net) (Quit: ZNC - https://znc.in)
2022-02-16 09:06:06 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
2022-02-16 09:06:25 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-02-16 09:07:05 +0100lagash(lagash@lagash.shelltalk.net)
2022-02-16 09:08:23 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-02-16 09:12:11 +0100alp(~alp@user/alp)
2022-02-16 09:12:11 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
2022-02-16 09:12:43 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-16 09:15:18 +0100zeenk(~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5)
2022-02-16 09:16:05 +0100fendor(~fendor@77.119.209.21.wireless.dyn.drei.com)
2022-02-16 09:20:03 +0100cfricke(~cfricke@user/cfricke)
2022-02-16 09:21:10 +0100cynomys(~cynomys@user/cynomys)
2022-02-16 09:25:17 +0100Sgeo_(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-02-16 09:27:18 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 09:27:18 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 09:27:18 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 09:27:22 +0100chele(~chele@user/chele)
2022-02-16 09:28:09 +0100rusrushal13(~rusrushal@103.85.18.34) (Quit: Client closed)
2022-02-16 09:30:15 +0100razetime(~quassel@49.207.198.36)
2022-02-16 09:30:55 +0100razetime(~quassel@49.207.198.36) (Client Quit)
2022-02-16 09:32:45 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-16 09:33:57 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-02-16 09:35:43 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-16 09:38:49 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
2022-02-16 09:39:48 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 240 seconds)
2022-02-16 09:40:41 +0100rembo10(~rembo10@remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2022-02-16 09:41:27 +0100mzan(~quassel@mail.asterisell.com) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-02-16 09:41:34 +0100rembo10(~rembo10@remulis.com)
2022-02-16 09:41:52 +0100cynomys(~cynomys@user/cynomys)
2022-02-16 09:44:03 +0100Cajun(~Cajun@user/cajun) (Ping timeout: 256 seconds)
2022-02-16 09:45:05 +0100mzan(~quassel@mail.asterisell.com)
2022-02-16 09:45:25 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
2022-02-16 09:46:22 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-16 09:48:36 +0100machinedgod(~machinedg@24.105.81.50)
2022-02-16 09:52:36 +0100deadmarshal(~deadmarsh@95.38.231.90) (Ping timeout: 240 seconds)
2022-02-16 09:55:24 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 240 seconds)
2022-02-16 09:55:25 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
2022-02-16 09:56:13 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-16 09:58:03 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 09:58:03 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 09:58:03 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 09:58:24 +0100zer0bitz(~zer0bitz@2001:2003:f74d:b800:c9dd:301:29f7:88f5)
2022-02-16 10:00:23 +0100michalz(~michalz@185.246.204.89)
2022-02-16 10:00:23 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
2022-02-16 10:00:35 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-16 10:02:17 +0100AlexZenon(~alzenon@178.34.150.24)
2022-02-16 10:02:37 +0100Alex_test(~al_test@178.34.150.24)
2022-02-16 10:03:01 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-16 10:05:42 +0100wootehfoot(~wootehfoo@user/wootehfoot)
2022-02-16 10:08:37 +0100cynomys(~cynomys@user/cynomys)
2022-02-16 10:11:29 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-02-16 10:16:37 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
2022-02-16 10:17:17 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-16 10:19:25 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
2022-02-16 10:20:05 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-16 10:20:19 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-02-16 10:22:26 +0100turlando(~turlando@user/turlando) (Quit: turlando)
2022-02-16 10:22:41 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it)
2022-02-16 10:22:41 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
2022-02-16 10:22:41 +0100turlando(~turlando@user/turlando)
2022-02-16 10:23:44 +0100turlando(~turlando@user/turlando) (Client Quit)
2022-02-16 10:24:13 +0100turlando(~turlando@user/turlando)
2022-02-16 10:25:29 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2022-02-16 10:27:03 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
2022-02-16 10:27:10 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-16 10:28:12 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2022-02-16 10:28:50 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 10:28:50 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 10:28:50 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 10:31:34 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-16 10:33:24 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-16 10:33:25 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
2022-02-16 10:34:32 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-16 10:35:48 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-02-16 10:35:56 +0100`2jt(~jtomas@130.red-88-22-46.staticip.rima-tde.net)
2022-02-16 10:37:27 +0100deadmarshal(~deadmarsh@95.38.231.90)
2022-02-16 10:37:47 +0100rusrushal13(~rusrushal@103.85.18.34)
2022-02-16 10:38:00 +0100MajorBiscuit(~MajorBisc@wlan-145-94-218-48.wlan.tudelft.nl)
2022-02-16 10:40:57 +0100AlexNoo(~AlexNoo@178.34.150.24)
2022-02-16 10:41:37 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-02-16 10:50:15 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 10:51:38 +0100 <joel135> :t scanr
2022-02-16 10:51:39 +0100 <lambdabot> (a -> b -> b) -> b -> [a] -> [b]
2022-02-16 10:52:57 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-02-16 10:53:24 +0100 <joel135> so it's like fold with a history, didn't know about that
2022-02-16 10:54:48 +0100 <tomsmeding> :t \f z -> foldr (\x (y:r) -> f x y : y : r) [z]
2022-02-16 10:54:49 +0100 <lambdabot> Foldable t1 => (t2 -> a -> a) -> a -> t1 t2 -> [a]
2022-02-16 10:55:02 +0100 <tomsmeding> % :t +d \f z -> foldr (\x (y:r) -> f x y : y : r) [z]
2022-02-16 10:55:03 +0100 <yahb> tomsmeding: (t -> a -> a) -> a -> [t] -> [a]
2022-02-16 10:55:05 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
2022-02-16 10:58:13 +0100vysn(~vysn@user/vysn)
2022-02-16 10:58:44 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-02-16 10:59:03 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-02-16 11:03:18 +0100acidjnk(~acidjnk@pd9e0b668.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2022-02-16 11:04:47 +0100jackson99(~bc8147f2@cerf.good1.com)
2022-02-16 11:04:51 +0100 <jackson99> hi
2022-02-16 11:05:12 +0100ystael(~ystael@user/ystael) (Ping timeout: 272 seconds)
2022-02-16 11:05:13 +0100 <jackson99> > Just 10 <|> undefined
2022-02-16 11:05:14 +0100 <lambdabot> Just 10
2022-02-16 11:05:31 +0100 <jackson99> this is done lazily. but this isn't. why?
2022-02-16 11:05:43 +0100 <jackson99> liftA2 (<|>) action1 action2
2022-02-16 11:06:28 +0100ystael(~ystael@user/ystael)
2022-02-16 11:07:42 +0100__monty__(~toonn@user/toonn)
2022-02-16 11:09:17 +0100 <jackson99> is this reasonable? it seems to work
2022-02-16 11:09:27 +0100 <jackson99> iftA2 (<|>) action1 (unsafeInterleaveIO action2)
2022-02-16 11:12:11 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 272 seconds)
2022-02-16 11:12:17 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-02-16 11:12:17 +0100 <lortabac> jackson99: can you give a little more context please?
2022-02-16 11:12:37 +0100 <jackson99> if action1 returns Nothing, and only then, I want to run action2
2022-02-16 11:12:55 +0100 <jackson99> action1 :: IO (Maybe a) action2 :: IO (Maybe a)
2022-02-16 11:12:59 +0100 <merijn> jackson99: Those are two very different things, though
2022-02-16 11:13:08 +0100 <jackson99> what two things?
2022-02-16 11:13:25 +0100 <merijn> liftA2 (<|>) and <|>
2022-02-16 11:13:36 +0100 <merijn> jackson99: You say "one is lazy, the other isn't" <- disagree
2022-02-16 11:13:58 +0100 <merijn> tbh, it sounds like you want MaybeT
2022-02-16 11:13:59 +0100 <jackson99> action2 is performed regardless of what action1 returns. so it isn't lazy enough
2022-02-16 11:14:20 +0100 <merijn> jackson99: because liftA2 is the applicative of IO and IO is *always* sequenced
2022-02-16 11:14:36 +0100 <merijn> anyway, what you want is "MaybeT IO"
2022-02-16 11:14:52 +0100 <jackson99> is this a good use of unsafeInterleaveIO?
2022-02-16 11:15:01 +0100 <Ariakenom> and to be clear this is entirely unrelated to laziness
2022-02-16 11:15:13 +0100 <Ariakenom> jackson99 no
2022-02-16 11:15:22 +0100 <merijn> jackson99: not really, because MaybeT is the right one and not unsafe
2022-02-16 11:15:24 +0100 <jackson99> why? I did some testing and it works as expected
2022-02-16 11:16:04 +0100 <merijn> jackson99: That's because anything unsafeX isn't required to be nicely predictable and you cannot generalise behaviour from one example to another
2022-02-16 11:16:25 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:49da:9bbf:6c0f:9f3d) (Remote host closed the connection)
2022-02-16 11:16:28 +0100 <merijn> jackson99: "it seems to work as expected" is what unsafeX always does, right before it stabs you in the back and ruins your code :p
2022-02-16 11:16:50 +0100 <jackson99> isn't unsafeInterleaveIO used by lazy IO in haskell base?
2022-02-16 11:17:17 +0100 <jackdk> there's a reason that for any nontrivial lazy IO, people reach for streaming libraries
2022-02-16 11:17:18 +0100 <merijn> lazy IO is 1) highly questionable and 2) there's only like, 3 or 4 functions using lazy IO in base
2022-02-16 11:17:27 +0100 <Ariakenom> "IO (Maybe a)" does not express "if action1 returns Nothing, and only then, I want to run action2". but "MaybeT IO" does.
2022-02-16 11:19:00 +0100 <jackson99> I don't want streaming. action1 and 2 perform some system C calls. action1 is faster, but may not always work. so if it worked, I don't want to call action2. I'm curious if, and how, could unsafeInterleaveIO fail in here
2022-02-16 11:19:49 +0100 <Ariakenom> ex: if you want to run the action but won't look at the result
2022-02-16 11:20:14 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 11:20:28 +0100mc47(~mc47@xmonad/TheMC47)
2022-02-16 11:20:38 +0100 <Ariakenom> you want to be explicit about what IO you run. not leave it to what values you look at
2022-02-16 11:21:39 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-02-16 11:22:54 +0100 <jackson99> so action2 may not run if I don't look at the value
2022-02-16 11:23:00 +0100 <jackson99> that's actually a reasonable behavior for this
2022-02-16 11:23:16 +0100 <Ariakenom> probably not. you'd want it to be consistent for action1
2022-02-16 11:23:40 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 11:23:44 +0100 <Ariakenom> (I mean that action1 also doesnt run if you dont look at the result)
2022-02-16 11:23:46 +0100 <jackson99> if I don't inspect the value, there's no reason to run more expensive action. I'm only calling it for the value
2022-02-16 11:24:22 +0100 <jackson99> that's fine too :)
2022-02-16 11:24:31 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-02-16 11:25:04 +0100 <jackson99> hmm, I did x <- f in ghci, I did not inspect x, but both actions were ran
2022-02-16 11:25:36 +0100 <jackson99> nevermind, I also called some functions that forced evaluation. so action1 is ran, but action2 isn't, until I inspect value
2022-02-16 11:26:11 +0100 <jackson99> but that is completely fine for what I'm doing. I'll still look at MaybeT just out of curiosity
2022-02-16 11:26:24 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:d5cb:a199:c5f8:d68d)
2022-02-16 11:27:00 +0100foul_owl(~kerry@23.105.36.232) (Ping timeout: 240 seconds)
2022-02-16 11:27:09 +0100 <Ariakenom> what action are you doing?
2022-02-16 11:28:12 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-02-16 11:28:36 +0100 <jackson99> I am searching for a window using FindWindow and EnumWindows winapi functions. EnumWindows is about 200 times slower, and I'm polling for the value in a loop with 20 or so ms delay. not a big deal, but it does mean CPU usage is a couple of % instead of 0%
2022-02-16 11:28:53 +0100mmhat(~mmh@55d4ce8c.access.ecotel.net)
2022-02-16 11:29:08 +0100mmhat(~mmh@55d4ce8c.access.ecotel.net) (Client Quit)
2022-02-16 11:30:36 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:d5cb:a199:c5f8:d68d) (Ping timeout: 240 seconds)
2022-02-16 11:31:16 +0100fef(~thedawn@user/thedawn) (Ping timeout: 240 seconds)
2022-02-16 11:32:25 +0100 <Ariakenom> so the result changes depending on when you run it. so leaving it up to when you evaluate a value is a ... muddy way to do it
2022-02-16 11:33:02 +0100 <jackson99> hmm, that is true
2022-02-16 11:35:29 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f)
2022-02-16 11:37:39 +0100ishutin(~ishutin@193-110-63-21.cable-modem.hdsnet.hu) (Ping timeout: 256 seconds)
2022-02-16 11:39:06 +0100ishutin(~ishutin@92-249-150-129.static.digikabel.hu)
2022-02-16 11:39:48 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f) (Ping timeout: 240 seconds)
2022-02-16 11:43:17 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-02-16 11:43:36 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-02-16 11:44:57 +0100foul_owl(~kerry@23.82.193.104)
2022-02-16 11:48:10 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
2022-02-16 11:53:28 +0100rusrushal13(~rusrushal@103.85.18.34) (Quit: Client closed)
2022-02-16 11:55:00 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-02-16 11:57:03 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-16 12:02:13 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
2022-02-16 12:02:59 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-16 12:05:15 +0100 <jackdk> are there thread-safety concerns with those winapi functions? I wonder if the stuff in Control.Concurrent.Async could help here
2022-02-16 12:07:24 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-02-16 12:07:59 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-16 12:12:22 +0100xff0x(~xff0x@2001:1a81:5217:d600:a1de:a304:ac28:4386) (Quit: xff0x)
2022-02-16 12:13:37 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
2022-02-16 12:14:17 +0100unyu(~pyon@user/pyon) (Ping timeout: 240 seconds)
2022-02-16 12:14:27 +0100 <jackson99> my program is single threaded, it just blocks, searches for windows, and then hides them if necessary. so I have no thread-safety concerns. but I think those functions are thread safe
2022-02-16 12:17:16 +0100fendor_(~fendor@91.141.40.92.wireless.dyn.drei.com)
2022-02-16 12:19:47 +0100fendor(~fendor@77.119.209.21.wireless.dyn.drei.com) (Ping timeout: 250 seconds)
2022-02-16 12:21:32 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-02-16 12:23:11 +0100 <jackson99> Async would allow me to run functions concurrently, but I don't think that would decrease CPU usage? if anything, it would increase it
2022-02-16 12:28:33 +0100xff0x(~xff0x@2001:1a81:5217:d600:8ce0:743c:22b0:b5ff)
2022-02-16 12:38:11 +0100Shiranai(~Shiranai@190.237.13.59) (Quit: Connection closed)
2022-02-16 12:38:16 +0100unyu(~pyon@user/pyon)
2022-02-16 12:39:00 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds)
2022-02-16 12:40:16 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-02-16 12:40:50 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-16 12:41:38 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-02-16 12:48:28 +0100acidjnk(~acidjnk@p200300d0c7057599445f812649320e47.dip0.t-ipconnect.de)
2022-02-16 12:51:24 +0100deadmarshal(~deadmarsh@95.38.231.90) (Ping timeout: 240 seconds)
2022-02-16 12:52:40 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt)
2022-02-16 12:53:05 +0100 <romesrf> hey everyone
2022-02-16 12:54:08 +0100 <romesrf> what's your preferred way to write fmap (fmap f) x
2022-02-16 12:54:31 +0100 <byorgey> I often write (fmap . fmap) f x
2022-02-16 12:55:20 +0100 <romesrf> AH nice
2022-02-16 12:55:21 +0100 <byorgey> inspired by http://conal.net/blog/posts/semantic-editor-combinators
2022-02-16 12:55:31 +0100sprout_(~quassel@2a02:a467:ccd6:1:3933:29:5fe1:cb6b)
2022-02-16 12:55:49 +0100 <romesrf> i'm convinced :)
2022-02-16 12:56:13 +0100 <byorgey> it generalizes nicely to things like (fmap . first . fmap) f x etc.
2022-02-16 12:56:48 +0100 <jackson99> I sometimes do fmap f <$> x
2022-02-16 12:57:26 +0100 <jackson99> nevermind, that does something different
2022-02-16 12:57:35 +0100 <byorgey> no, that's the same
2022-02-16 12:57:46 +0100 <jackson99> yeah it is :P
2022-02-16 12:59:16 +0100 <byorgey> I sometimes write that too. I think it depends on whether I'm mapping over something I'm thinking of as a nested data structure (in which case I would do (fmap . fmap)) or if it's like a functorial result from some kind of monadic action
2022-02-16 12:59:19 +0100sprout(~quassel@2a02:a467:ccd6:1:511a:5eb2:c96:106b) (Ping timeout: 256 seconds)
2022-02-16 12:59:37 +0100 <byorgey> like if x :: IO [String] I would probably write fmap read <$> x instead of (fmap . fmap) read x
2022-02-16 13:00:08 +0100 <romesrf> byorgey: i like the idiom in the post, nice :)
2022-02-16 13:00:36 +0100 <romesrf> and I agree, I also change syntax depending on the easiest way to visualize what i'm doing
2022-02-16 13:00:40 +0100ph88(~ph88@ip5f5af71f.dynamic.kabel-deutschland.de)
2022-02-16 13:09:22 +0100ProfSimm(~ProfSimm@87.227.196.109)
2022-02-16 13:11:01 +0100 <dminuoso> % :t getCompose . fmap (+1) . Compose
2022-02-16 13:11:01 +0100 <yahb> dminuoso: (Functor f, Functor g, Num a) => f (g a) -> f (g a)
2022-02-16 13:11:02 +0100dextaa_(~dextaa@user/dextaa)
2022-02-16 13:11:29 +0100 <dminuoso> Depending on the surrounding context, this can be quite nice as well
2022-02-16 13:13:05 +0100acidjnk(~acidjnk@p200300d0c7057599445f812649320e47.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-02-16 13:13:11 +0100neurocyte0917090(~neurocyte@IP-185117069029.dynamic.medianet-world.de)
2022-02-16 13:13:11 +0100neurocyte0917090(~neurocyte@IP-185117069029.dynamic.medianet-world.de) (Changing host)
2022-02-16 13:13:11 +0100neurocyte0917090(~neurocyte@user/neurocyte)
2022-02-16 13:13:14 +0100 <dminuoso> In a pinch I generally write `fmap f <$> x` though
2022-02-16 13:14:57 +0100rookie101(~rookie@165.232.121.13) (Quit: WeeChat 1.9.1)
2022-02-16 13:18:20 +0100 <jackdk> a number of prelude replacements provide `(<<$>>)`, which I like enough to sometimes define locally
2022-02-16 13:18:51 +0100neurocyte0917090(~neurocyte@user/neurocyte) (Ping timeout: 272 seconds)
2022-02-16 13:19:07 +0100acidjnk(~acidjnk@dynamic-046-114-170-094.46.114.pool.telefonica.de)
2022-02-16 13:19:12 +0100 <dminuoso> In one of my projects I locally defined `fmap1`, `fmap2`, `fmap3`, which is very similar I guess
2022-02-16 13:19:54 +0100jakalx(~jakalx@base.jakalx.net)
2022-02-16 13:21:22 +0100dhil(~dhil@cpc103052-sgyl39-2-0-cust260.18-2.cable.virginm.net)
2022-02-16 13:21:24 +0100 <hpc> do like what base does with tuples and define (<<<<<<<<<<<<<<<<<<<<$>>>>>>>>>>>>>>>>>>>>) all the way up to 63
2022-02-16 13:21:35 +0100 <hpc> see what ghc's upper limit on identifier length is
2022-02-16 13:23:42 +0100deadmarshal(~deadmarsh@95.38.231.90)
2022-02-16 13:24:07 +0100 <dminuoso> Was the memory corruption bug causing that artificial limit on tuple sizes ever found?
2022-02-16 13:24:49 +0100 <dminuoso> Recall some dark story about how the limit was the result of experimentation, but the underying bug was a mystery
2022-02-16 13:24:50 +0100 <merijn> No idea
2022-02-16 13:24:56 +0100PaulTheNeko(~u0_a287@public-gprs522838.centertel.pl)
2022-02-16 13:25:56 +0100acidjnk(~acidjnk@dynamic-046-114-170-094.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2022-02-16 13:25:58 +0100bliminse(~bliminse@host86-158-241-239.range86-158.btcentralplus.com)
2022-02-16 13:26:10 +0100acidjnk(~acidjnk@dynamic-046-114-170-094.46.114.pool.telefonica.de)
2022-02-16 13:27:21 +0100dextaa_(~dextaa@user/dextaa) (Remote host closed the connection)
2022-02-16 13:36:18 +0100jgeerds_(~jgeerds@55d4b9df.access.ecotel.net)
2022-02-16 13:37:00 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f)
2022-02-16 13:37:50 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 272 seconds)
2022-02-16 13:38:12 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 240 seconds)
2022-02-16 13:41:24 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f) (Ping timeout: 240 seconds)
2022-02-16 13:42:13 +0100Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net)
2022-02-16 13:42:25 +0100jgeerds_(~jgeerds@55d4b9df.access.ecotel.net) (Read error: Connection reset by peer)
2022-02-16 13:43:47 +0100jgeerds_(~jgeerds@55d4b9df.access.ecotel.net)
2022-02-16 13:44:33 +0100capo_greco(~textual@60-241-161-167.static.tpgi.com.au)
2022-02-16 13:45:53 +0100neurocyte0917090(~neurocyte@IP-185117069029.dynamic.medianet-world.de)
2022-02-16 13:45:53 +0100neurocyte0917090(~neurocyte@IP-185117069029.dynamic.medianet-world.de) (Changing host)
2022-02-16 13:45:53 +0100neurocyte0917090(~neurocyte@user/neurocyte)
2022-02-16 13:46:16 +0100nunggu_(~q@user/nunggu) (Ping timeout: 240 seconds)
2022-02-16 13:48:52 +0100 <romesrf> cool stuff!
2022-02-16 13:49:01 +0100 <AndreasK> dminuoso: In recent times (since I started working on GHC) no one tried to increase the limit. Until someone reworks GHC to allow infinite tuples the current limit seems reasonable so there was little motivation.
2022-02-16 13:49:59 +0100nunggu_(~q@user/nunggu)
2022-02-16 13:52:00 +0100 <ProfSimm> Can the whole Haskell runtime tail recurse on itself.
2022-02-16 13:52:55 +0100 <merijn> ProfSimm: Not sure what that means, tbh :)
2022-02-16 13:53:20 +0100 <geekosaur> pretty sure the ghc runtime only does jumps
2022-02-16 13:53:46 +0100 <geekosaur> so depending on howyou thinkof it,either nothing or everything is a tail recursion
2022-02-16 13:53:49 +0100 <AndreasK> It's jumps all the way down, to the bottom of the stack.
2022-02-16 13:55:38 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2022-02-16 13:55:52 +0100 <zzz> ProfSimm: do you mean `main = do { whatever; main }` ??
2022-02-16 14:07:05 +0100PaulTheNeko(~u0_a287@public-gprs522838.centertel.pl) (Read error: Connection reset by peer)
2022-02-16 14:07:25 +0100PaulTheNeko(~u0_a287@apn-31-0-26-69.dynamic.gprs.plus.pl)
2022-02-16 14:07:57 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-02-16 14:12:02 +0100PaulTheNeko(~u0_a287@apn-31-0-26-69.dynamic.gprs.plus.pl) (Ping timeout: 272 seconds)
2022-02-16 14:12:38 +0100PaulTheNeko(~u0_a287@apn-31-0-26-69.dynamic.gprs.plus.pl)
2022-02-16 14:12:43 +0100PaulTheNeko(~u0_a287@apn-31-0-26-69.dynamic.gprs.plus.pl) (Client Quit)
2022-02-16 14:13:53 +0100dextaa_(~dextaa@user/dextaa)
2022-02-16 14:14:35 +0100Merfont(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-02-16 14:14:59 +0100Merfont(~Kaiepi@156.34.47.253)
2022-02-16 14:17:48 +0100xff0x(~xff0x@2001:1a81:5217:d600:8ce0:743c:22b0:b5ff) (Ping timeout: 240 seconds)
2022-02-16 14:18:44 +0100xff0x(~xff0x@2001:1a81:5217:d600:567:b7a:e54:e078)
2022-02-16 14:21:43 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2022-02-16 14:24:19 +0100acidjnk(~acidjnk@dynamic-046-114-170-094.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2022-02-16 14:24:39 +0100acidjnk(~acidjnk@p200300d0c71d3b97a07e6bc3219efcf6.dip0.t-ipconnect.de)
2022-02-16 14:29:25 +0100to_gl(~to_gl@193.164.24.245)
2022-02-16 14:29:33 +0100to_gl(~to_gl@193.164.24.245) ()
2022-02-16 14:31:38 +0100Merfont(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-02-16 14:31:58 +0100Merfont(~Kaiepi@156.34.47.253)
2022-02-16 14:34:31 +0100cynomys(~cynomys@user/cynomys)
2022-02-16 14:34:54 +0100andreabedini(~andreabed@8s8kj680jt94n45xrsj1.ip6.superloop.com)
2022-02-16 14:35:56 +0100thyriaen(~thyriaen@simnet-nat-pool-185-130-54-167.stargrpns.pp.ua)
2022-02-16 14:40:58 +0100 <ephemient> https://ro-che.info/articles/2017-01-10-nested-loop-space-leak :(
2022-02-16 14:42:56 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2022-02-16 14:43:51 +0100jlamothe(~jlamothe@198.251.61.229) (Ping timeout: 252 seconds)
2022-02-16 14:45:23 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 14:49:47 +0100 <jackson99> how would this be done with TypeApplications? isNumber s = isJust (readMaybe s :: Maybe Int)
2022-02-16 14:50:12 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 240 seconds)
2022-02-16 14:50:18 +0100 <jackson99> I thought something like this would work, but I am getting errors: isNumber = isJust . readMaybe @ Maybe Int
2022-02-16 14:50:34 +0100 <Ariakenom> % :t readMaybe
2022-02-16 14:50:34 +0100 <yahb> Ariakenom: ; <interactive>:1:1: error: Variable not in scope: readMaybe
2022-02-16 14:50:49 +0100 <geekosaur> % import Text.Read
2022-02-16 14:50:49 +0100 <yahb> geekosaur:
2022-02-16 14:51:04 +0100 <geekosaur> % isNumber s = isJust (readMaybe @Int s)
2022-02-16 14:51:04 +0100 <yahb> geekosaur:
2022-02-16 14:51:12 +0100 <Ariakenom> % :t readMaybe
2022-02-16 14:51:13 +0100 <yahb> Ariakenom: Read a => String -> Maybe a
2022-02-16 14:51:24 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-02-16 14:51:31 +0100 <jackson99> % isNumber = isJust . readMaybe @Int
2022-02-16 14:51:31 +0100 <yahb> jackson99:
2022-02-16 14:51:37 +0100 <jackson99> nice
2022-02-16 14:51:39 +0100 <lortabac> jackson99: you have to look at the type variables
2022-02-16 14:51:58 +0100 <lortabac> in this case the first (and only) variable is 'a'
2022-02-16 14:51:58 +0100 <jackson99> yeah I get it now. it needs a, not Maybe a
2022-02-16 14:52:07 +0100 <romesrf> :)
2022-02-16 14:52:11 +0100 <geekosaur> the Maybe is fixed so it doesn'tget reflected in a typevariable. the a is obviously a typevariable, so go fir that
2022-02-16 14:52:27 +0100rusrushal13(~rusrushal@103.85.18.34)
2022-02-16 14:52:46 +0100 <lortabac> you can skip variables with @_
2022-02-16 14:52:46 +0100 <ephemient> also if you really did want Read (Maybe Int), you need to parenthesize it, as in readMaybe @(Maybe Int)
2022-02-16 14:53:03 +0100 <Ariakenom> how to see the type variables?
2022-02-16 14:53:22 +0100 <geekosaur> use :t
2022-02-16 14:53:37 +0100 <Ariakenom> I did but yahb didnt show me
2022-02-16 14:53:47 +0100 <geekosaur> > :t readMaybe
2022-02-16 14:53:49 +0100 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
2022-02-16 14:53:57 +0100 <geekosaur> wrong bot :(
2022-02-16 14:54:01 +0100 <geekosaur> % :t readMaybe
2022-02-16 14:54:02 +0100 <yahb> geekosaur: Read a => String -> Maybe a
2022-02-16 14:54:21 +0100 <Ariakenom> I think it needs some extension to always show type variables
2022-02-16 14:54:22 +0100 <geekosaur> there's only one typevariable, so it's obviously the one TypeApplications will apply to
2022-02-16 14:54:37 +0100 <Clint> :t readMaybe
2022-02-16 14:54:38 +0100 <lambdabot> error: Variable not in scope: readMaybe
2022-02-16 14:54:40 +0100 <geekosaur> % :set -fprint-explicit-foralls
2022-02-16 14:54:40 +0100 <yahb> geekosaur:
2022-02-16 14:54:43 +0100 <geekosaur> % :t readMaybe
2022-02-16 14:54:43 +0100 <yahb> geekosaur: forall {a}. Read a => String -> Maybe a
2022-02-16 14:54:49 +0100 <Ariakenom> yes but I want to show it anyway
2022-02-16 14:54:51 +0100 <Ariakenom> yay
2022-02-16 14:54:53 +0100merijnmumbles something about "TypeApplications considered harmful"
2022-02-16 14:56:27 +0100alt-romes(~romes@44.190.189.46.rev.vodafone.pt)
2022-02-16 14:56:30 +0100vysn(~vysn@user/vysn) (Ping timeout: 252 seconds)
2022-02-16 14:58:33 +0100capo_greco(~textual@60-241-161-167.static.tpgi.com.au) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
2022-02-16 14:59:15 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 252 seconds)
2022-02-16 15:00:53 +0100jlamothe(~jlamothe@198.251.61.229)
2022-02-16 15:01:24 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-16 15:04:58 +0100aehu6ce8(~aehu6ce8@31.187.110.131)
2022-02-16 15:05:32 +0100 <kuribas> merijn: we should be able to pass types to functions like in idris :)
2022-02-16 15:06:17 +0100 <kuribas> in idris you can pass implicit types by name.
2022-02-16 15:06:39 +0100 <geekosaur> next ghc version
2022-02-16 15:06:43 +0100 <kuribas> Which would solve the problems that haskell TypeApplications have, since they are positional.
2022-02-16 15:06:58 +0100 <geekosaur> forall t -> …
2022-02-16 15:07:07 +0100 <merijn> kuribas: positional *and* implicitly ordered
2022-02-16 15:07:16 +0100 <kuribas> yeah, that's pretty bad.
2022-02-16 15:07:34 +0100 <alt-romes> is there a name for: data Ex m a = Ex (m a), instance Functor f => (Ex f) where fmap f (Ex x) = Ex $ fmap f x, and then I'd like to have something that has signatures (f a -> g a) -> (Ex f a) -> (Ex g a)
2022-02-16 15:07:49 +0100 <jackson99> implicitly ordered?
2022-02-16 15:07:51 +0100 <alt-romes> it looks like the type is just lifted to Ex but
2022-02-16 15:08:03 +0100 <alt-romes> not really ahaha
2022-02-16 15:08:56 +0100 <alt-romes> so Ex is an instance of functor where I can alter `a` of Ex m a, and is an instance of ____ where i can alter `m` of Ex m a
2022-02-16 15:09:05 +0100wonko(~wjc@user/wonko)
2022-02-16 15:11:49 +0100xff0x(~xff0x@2001:1a81:5217:d600:567:b7a:e54:e078) (Ping timeout: 250 seconds)
2022-02-16 15:12:12 +0100andreabedini(~andreabed@8s8kj680jt94n45xrsj1.ip6.superloop.com) (Quit: WeeChat 3.3)
2022-02-16 15:12:16 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 15:12:22 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 15:13:40 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-16 15:14:28 +0100 <Ariakenom> you can implicitly order them. but you can also explicitly order them
2022-02-16 15:15:45 +0100Everything(~Everythin@37.115.210.35)
2022-02-16 15:16:16 +0100xff0x(~xff0x@2001:1a81:5217:d600:567:b7a:e54:e078)
2022-02-16 15:16:18 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-16 15:16:46 +0100 <kuribas> Ariakenom: which doesn't help if you didn't wrote the function you need to apply.
2022-02-16 15:17:10 +0100 <Ariakenom> it does not
2022-02-16 15:17:16 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
2022-02-16 15:18:10 +0100 <Ariakenom> I agree that ::-typing is better than @-typing
2022-02-16 15:18:38 +0100AlexNoo_(~AlexNoo@94.233.240.208)
2022-02-16 15:18:51 +0100wonko(~wjc@user/wonko) (Remote host closed the connection)
2022-02-16 15:19:42 +0100wonko(~wjc@user/wonko)
2022-02-16 15:19:55 +0100 <dminuoso> alt-romes: Such a transformation is called a natural transformation.
2022-02-16 15:21:05 +0100AlexZenon(~alzenon@178.34.150.24) (Ping timeout: 272 seconds)
2022-02-16 15:21:37 +0100 <dminuoso> Or rather, `forall a. f a -> g a` is called a natural transformation
2022-02-16 15:21:43 +0100Alex_test(~al_test@178.34.150.24) (Ping timeout: 272 seconds)
2022-02-16 15:21:51 +0100 <dminuoso> And the process of `(f a -> g a) -> (Ex f a) -> (Ex g a)` is usually called `hoisting` or `lifting`
2022-02-16 15:22:20 +0100AlexNoo(~AlexNoo@178.34.150.24) (Ping timeout: 272 seconds)
2022-02-16 15:22:52 +0100wonko(~wjc@user/wonko) (Remote host closed the connection)
2022-02-16 15:23:00 +0100cfricke(~cfricke@user/cfricke) (Ping timeout: 240 seconds)
2022-02-16 15:23:10 +0100wonko(~wjc@user/wonko)
2022-02-16 15:23:30 +0100xkuru(~xkuru@user/xkuru)
2022-02-16 15:23:48 +0100 <dminuoso> Since `Ex f a ~~~ f a`, that function `(f a -> g a) -> (Ex f a) -> (Ex g a)` is isomorphic to `(f a -> g a) -> f a -> g a`
2022-02-16 15:23:53 +0100wonko(~wjc@user/wonko) (Remote host closed the connection)
2022-02-16 15:24:04 +0100 <dminuoso> So it's just something isomorphic to `id`
2022-02-16 15:24:30 +0100Alex_test(~al_test@94.233.240.208)
2022-02-16 15:24:36 +0100Alex_test(~al_test@94.233.240.208) (Client Quit)
2022-02-16 15:24:43 +0100wonko(~wjc@user/wonko)
2022-02-16 15:25:07 +0100Everything(~Everythin@37.115.210.35) ()
2022-02-16 15:25:25 +0100 <alt-romes> dminuoso: interesting, but what if I had Ex s m a = Ex (s -> m a)
2022-02-16 15:25:31 +0100AlexZenon(~alzenon@94.233.240.208)
2022-02-16 15:25:31 +0100Alex_test(~al_test@94.233.240.208)
2022-02-16 15:25:34 +0100slack1256(~slack1256@191.125.99.202)
2022-02-16 15:25:51 +0100AlexZenon_2(~alzenon@94.233.240.208)
2022-02-16 15:25:59 +0100 <alt-romes> should I settle for a hoistEx = ...
2022-02-16 15:26:18 +0100 <dminuoso> alt-romes: And what type signature would you be looking for with that type?
2022-02-16 15:26:23 +0100 <alt-romes> or is Ex a Hoistable ahaha
2022-02-16 15:26:45 +0100AlexZenon_2(~alzenon@94.233.240.208) (Client Quit)
2022-02-16 15:27:08 +0100 <alt-romes> instance ___ Ex s where ____ :: (m a -> n a) -> Ex s m a -> Ex s n a
2022-02-16 15:27:46 +0100AlexNoo_AlexNoo
2022-02-16 15:27:51 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2022-02-16 15:28:48 +0100 <alt-romes> dminuoso: i'm doing things and I like abstractions, and was looking for a cool new shiny one
2022-02-16 15:29:26 +0100 <alt-romes> this seemed like the kind of thing that might fit some theory
2022-02-16 15:29:38 +0100 <dminuoso> So to make this "shiny" and more confusion, you can introduce `type f ~> g = forall a. f a -> g a`
2022-02-16 15:29:50 +0100 <alt-romes> right, the Natural Transformation
2022-02-16 15:29:57 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 272 seconds)
2022-02-16 15:30:01 +0100 <dminuoso> Right, but that changes your types slightly since we're moving a forall quantification in there
2022-02-16 15:30:03 +0100jgeerds_(~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 252 seconds)
2022-02-16 15:30:03 +0100 <dminuoso> So you have
2022-02-16 15:30:16 +0100 <alt-romes> :: (forall a. m a -> n a) -> ...
2022-02-16 15:30:25 +0100 <dminuoso> (m ~> n) -> Ex s m ~> Ex s n
2022-02-16 15:30:29 +0100 <alt-romes> oh!
2022-02-16 15:30:45 +0100 <dminuoso> Is that what you're after?
2022-02-16 15:30:49 +0100 <alt-romes> yes!
2022-02-16 15:31:20 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-02-16 15:31:39 +0100 <dminuoso> But yeah, I think the terms `hoist`, `lift` or `heave` come to mind.
2022-02-16 15:31:58 +0100 <alt-romes> thank you
2022-02-16 15:35:50 +0100zmt01(~zmt00@user/zmt00)
2022-02-16 15:35:50 +0100alt-romes(~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
2022-02-16 15:36:10 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt)
2022-02-16 15:37:00 +0100meinside(uid24933@id-24933.helmsley.irccloud.com) (Ping timeout: 240 seconds)
2022-02-16 15:37:24 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:5b51:ad88:49b8:7439) (Ping timeout: 240 seconds)
2022-02-16 15:37:40 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:5b51:ad88:49b8:7439)
2022-02-16 15:37:45 +0100gaff(~gaff@49.207.229.178)
2022-02-16 15:37:48 +0100Raito_Bezarius(~Raito@wireguard/tunneler/raito-bezarius) (Ping timeout: 240 seconds)
2022-02-16 15:38:12 +0100unyu(~pyon@user/pyon) (Ping timeout: 240 seconds)
2022-02-16 15:38:12 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Ping timeout: 240 seconds)
2022-02-16 15:38:12 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-3d94-4d23-dc7c-c228.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-02-16 15:38:12 +0100lottaquestions(~nick@2607:fa49:5041:a200:b555:2e8f:fe4f:2e3d) (Ping timeout: 240 seconds)
2022-02-16 15:38:12 +0100emergence(emergence@2607:5300:60:5910:dcad:beff:feef:5bc) (Ping timeout: 240 seconds)
2022-02-16 15:38:12 +0100Unhammer(~Unhammer@user/unhammer) (Ping timeout: 240 seconds)
2022-02-16 15:38:16 +0100Pickchea(~private@user/pickchea)
2022-02-16 15:38:28 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f)
2022-02-16 15:38:29 +0100lottaquestions(~nick@2607:fa49:5041:a200:c52d:7d43:3699:c92e)
2022-02-16 15:38:32 +0100Unhammer(~Unhammer@user/unhammer)
2022-02-16 15:38:36 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 240 seconds)
2022-02-16 15:39:58 +0100meinside(uid24933@id-24933.helmsley.irccloud.com)
2022-02-16 15:40:29 +0100unyu(~pyon@user/pyon)
2022-02-16 15:41:44 +0100shriekingnoise(~shrieking@201.231.16.156)
2022-02-16 15:42:07 +0100 <romesrf> made a `hoistBot` and am happy about it
2022-02-16 15:42:35 +0100 <gaff> this quickcheck code "gives up" if one of the functions f1 or f2 return `Nothing`: forAll (arbitrary :: Gen String) $ \x -> do; x1 :: String <- f1 x :: Maybe String; x2 :: String <- f2 x :: Maybe String; return $ x1 === x2. any idea why?
2022-02-16 15:42:41 +0100 <janus> romesrf: what does it do?
2022-02-16 15:43:01 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f) (Ping timeout: 250 seconds)
2022-02-16 15:43:19 +0100emergence(emergence@2607:5300:60:5910:dcad:beff:feef:5bc)
2022-02-16 15:44:17 +0100 <slack1256> gaff: Can you paste on pastebin?
2022-02-16 15:44:24 +0100 <gaff> ok
2022-02-16 15:44:25 +0100 <janus> gaff: shouldn't the do block be in the Gen monad? looks like it is in Maybe?
2022-02-16 15:44:34 +0100 <geekosaur> isn't that expected fro,m the Maybe monad?
2022-02-16 15:44:39 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-02-16 15:44:45 +0100 <romesrf> janus: oh just what we were discussing previously, i have a Bot m s i o = Bot (i -> s -> m o) and hoistBot :: (forall a. f a -> g a) -> Bot f s i o -> Bot g s i o
2022-02-16 15:45:08 +0100 <gaff> janus: Testable (Maybe Bool) works
2022-02-16 15:45:38 +0100 <gaff> geekosaur: why does it "give up" instead of just failing?
2022-02-16 15:45:56 +0100 <geekosaur> it *is* failing. but "giving up" is the definition of `fail` in Maybe
2022-02-16 15:46:07 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 15:46:13 +0100 <geekosaur> @src Maybe fail
2022-02-16 15:46:13 +0100 <lambdabot> fail _ = Nothing
2022-02-16 15:46:40 +0100 <geekosaur> so the whole do block produces Nothing at that point instead of continuing
2022-02-16 15:46:47 +0100 <gaff> yes, but quickcheck seems to give up generating test cases
2022-02-16 15:47:06 +0100 <gaff> soh i see
2022-02-16 15:48:03 +0100chenqisu1(~chenqisu1@183.217.200.249) (Remote host closed the connection)
2022-02-16 15:48:15 +0100 <gaff> geekosaur: i thought quickcheck "gave up" when it can not find enough test cases that staisy some condition when you use `===>`
2022-02-16 15:49:01 +0100 <gaff> which is why i am surprised to see it here in this code which does not use implication
2022-02-16 15:49:01 +0100 <geekosaur> in this case you're short-circuiting it because you inadvertently put it "under" Maybe
2022-02-16 15:49:10 +0100 <gaff> ah i see
2022-02-16 15:49:33 +0100 <gaff> thank you
2022-02-16 15:49:40 +0100 <dminuoso> romesrf: For reference, in servant you have: hoistServer :: HasServer api '[] => Proxy api -> (forall x . m x -> n x) -> ServerT api m -> ServerT api n
2022-02-16 15:49:56 +0100 <dminuoso> Which is quite similar to what you're doing
2022-02-16 15:50:00 +0100 <romesrf> dminuoso: yeah, ironicaly i was using it too hahaha
2022-02-16 15:50:37 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-16 15:50:48 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-4424-fc06-167e-bc32.res6.spectrum.com)
2022-02-16 15:51:46 +0100 <gaff> geekosaur: so this code i have pasted is just fine ... i just have to interpret quickcheck "gave up" as a fail.
2022-02-16 15:52:10 +0100Raito_Bezarius(~Raito@wireguard/tunneler/raito-bezarius)
2022-02-16 15:52:12 +0100 <dminuoso> romesrf: The quantification is very useful by the way, because it ensures whatever you're passing to it is an actual natural transformation (this results from a free theorem)
2022-02-16 15:52:16 +0100Guest|20(~Guest|20@dynamic-185-082-205-148.glattnet.ch)
2022-02-16 15:52:18 +0100 <geekosaur> or rearrange the types so that only that particular test "gives up"
2022-02-16 15:52:25 +0100 <romesrf> :)
2022-02-16 15:52:30 +0100 <dminuoso> Otherwise the argument can do funky stuff
2022-02-16 15:52:34 +0100 <geekosaur> or even that oit just treats Nothing as a normal value
2022-02-16 15:52:40 +0100 <romesrf> dminuoso: I've actually just run against it
2022-02-16 15:52:41 +0100Guest|20(~Guest|20@dynamic-185-082-205-148.glattnet.ch) (Client Quit)
2022-02-16 15:52:56 +0100 <romesrf> and was wondering what would be the name for the same thing without quantification
2022-02-16 15:53:05 +0100 <romesrf> because it would also be useful
2022-02-16 15:53:25 +0100 <gaff> rearrange the types?
2022-02-16 15:53:36 +0100 <dminuoso> Without it it would be just some elaborate form of ($)
2022-02-16 15:53:49 +0100 <romesrf> ic :)
2022-02-16 15:53:58 +0100 <dminuoso> Or well, I guess that's already the case mmm
2022-02-16 15:54:21 +0100 <dminuoso> romesrf: The key difference is that you can infer less knowledge from what its use does.
2022-02-16 15:54:46 +0100 <romesrf> right, but without the natural transformation i can't call it hoist :)
2022-02-16 15:54:51 +0100 <dminuoso> So `hoistServer` by interface guarantees that the argument only modifies the monad, but not the result
2022-02-16 15:54:52 +0100 <romesrf> naming things is hard ™
2022-02-16 15:54:54 +0100 <dminuoso> It cant because its universally quantified
2022-02-16 15:55:09 +0100 <romesrf> right, and that's pretty cool
2022-02-16 15:55:19 +0100 <dminuoso> When you see its use, you immediately know about what this can do, what it cant.
2022-02-16 15:56:11 +0100 <dminuoso> If you lack the quantification, then its just some "unwrapping/wrapping/rewrapping" thing that can do anything
2022-02-16 15:56:12 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-16 15:56:44 +0100 <dminuoso> You could think of it as equivalent as just handing someone the constructor to pattern match, mess with its internals, and rebuild
2022-02-16 15:56:50 +0100asdfsfdasdfw(~asdfsfdas@12.182.213.210)
2022-02-16 15:56:55 +0100 <romesrf> yea, that seems like it
2022-02-16 15:57:14 +0100asdfsfdasdfw(~asdfsfdas@12.182.213.210) ()
2022-02-16 15:57:19 +0100dextaa_(~dextaa@user/dextaa) (Remote host closed the connection)
2022-02-16 15:58:52 +0100Merfont(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-02-16 15:58:59 +0100Kaipi(~Kaiepi@156.34.47.253)
2022-02-16 16:01:26 +0100gaff(~gaff@49.207.229.178) ()
2022-02-16 16:01:37 +0100Pickchea(~private@user/pickchea) (Ping timeout: 272 seconds)
2022-02-16 16:02:24 +0100dextaa_(~dextaa@user/dextaa)
2022-02-16 16:07:21 +0100o-90(~o-90@gateway/tor-sasl/o-90)
2022-02-16 16:08:00 +0100wonko(~wjc@user/wonko) (Ping timeout: 252 seconds)
2022-02-16 16:09:25 +0100 <slack1256> Is there a package with a data structure for "buffer with at most 10 (or n) elements"?
2022-02-16 16:09:42 +0100 <slack1256> I know I could do this with n-tuples. Yet I want the wrapping/cycling semantics.
2022-02-16 16:10:30 +0100 <dminuoso> slack1256: Does it need to be generic over an arbitrary data type?
2022-02-16 16:11:07 +0100 <dminuoso> Or is an effective restriction on say Storable or Unbox reasonable?
2022-02-16 16:12:45 +0100 <pavonia> https://hackage.haskell.org/package/ring-buffers has different types
2022-02-16 16:13:21 +0100 <dminuoso> Ah that's neat
2022-02-16 16:15:54 +0100max22-(~maxime@2a01cb0883359800c7c4fab2785758f5.ipv6.abo.wanadoo.fr)
2022-02-16 16:16:54 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
2022-02-16 16:19:07 +0100vektor(~vektor@IP-094046083008.dynamic.medianet-world.de)
2022-02-16 16:19:13 +0100 <geekosaur> there's also a modified Chan somewhere
2022-02-16 16:19:56 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 16:21:07 +0100 <geekosaur> @hackage stm-chans
2022-02-16 16:21:07 +0100 <lambdabot> https://hackage.haskell.org/package/stm-chans
2022-02-16 16:23:54 +0100 <slack1256> dminuoso: If it holds ~Ints~ then I am good. Yet pavonia posted "ring-buffers" which seems to do what I want.
2022-02-16 16:24:04 +0100 <slack1256> Thanks guys!
2022-02-16 16:24:37 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-16 16:25:56 +0100o-90(~o-90@gateway/tor-sasl/o-90) (Ping timeout: 240 seconds)
2022-02-16 16:28:17 +0100Guest|7(~Guest|7@31.134.188.207)
2022-02-16 16:28:25 +0100Guest|7(~Guest|7@31.134.188.207) (Client Quit)
2022-02-16 16:29:25 +0100 <slack1256> What packages do you guys use for "auth/secret management" on google cloud? There is a bunch on hackage at different stages of development.
2022-02-16 16:32:45 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 16:32:45 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 16:32:45 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 16:34:52 +0100 <slack1256> Oh base package "gogol" has it. nvm!
2022-02-16 16:36:00 +0100thyriaen(~thyriaen@simnet-nat-pool-185-130-54-167.stargrpns.pp.ua) (Quit: Leaving)
2022-02-16 16:37:24 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-16 16:40:06 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-02-16 16:40:13 +0100rusrushal13(~rusrushal@103.85.18.34) (Quit: Client closed)
2022-02-16 16:42:22 +0100kritzefitz(~kritzefit@debian/kritzefitz) (Remote host closed the connection)
2022-02-16 16:42:57 +0100aehu6ce8(~aehu6ce8@31.187.110.131) (Quit: aehu6ce8)
2022-02-16 16:45:10 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-02-16 16:45:51 +0100neurocyte0917090(~neurocyte@user/neurocyte) (Ping timeout: 250 seconds)
2022-02-16 16:45:53 +0100kritzefitz_(~kritzefit@debian/kritzefitz)
2022-02-16 16:46:36 +0100k``(~user@152.1.137.158)
2022-02-16 16:47:41 +0100 <k``> As a rule of thumb, should handwritten `Ord` instances be strict to match derived instances? Or should they be as lazy as possible in the second parameter?
2022-02-16 16:53:48 +0100kritzefitz_kritzefitz
2022-02-16 16:53:56 +0100 <merijn> I don't think there's any real rules/expectations
2022-02-16 16:55:08 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 16:55:20 +0100zebrag(~chris@user/zebrag)
2022-02-16 16:55:26 +0100Pickchea(~private@user/pickchea)
2022-02-16 16:55:44 +0100 <geekosaur> but as it's hard to compare two values without forcing both, I don't see what "as lazy as possible" can get you
2022-02-16 16:56:18 +0100 <geekosaur> suppose you could force only part of it in some cases
2022-02-16 16:57:44 +0100lbseale(~ep1ctetus@user/ep1ctetus)
2022-02-16 16:57:55 +0100 <k``> Or for enumerations you can always check whether the first argument is `minBound` (or `maxBound`, depending on the comparison). `compare` is always going to be at least partially strict in any not trivial type.
2022-02-16 16:58:19 +0100 <vektor> Anyone familiar with works along the line of stephen diehl's Write You A Haskell? It covers many things I'm interested in, but leaves some questions open for me.
2022-02-16 16:58:45 +0100 <[exa]> vektor: likely. don't ask to ask. :]
2022-02-16 16:59:11 +0100 <geekosaur> sounded to me like they were asking *for* other such works
2022-02-16 16:59:22 +0100 <vektor> Indeed. I don't think that was a meta question.
2022-02-16 16:59:48 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-16 16:59:55 +0100 <[exa]> ah ok, I thought you have something specific in mind
2022-02-16 17:00:00 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b)
2022-02-16 17:01:11 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:5b51:ad88:49b8:7439) (Quit: WeeChat 2.8)
2022-02-16 17:01:45 +0100neurocyte0917090(~neurocyte@IP-185117069029.dynamic.medianet-world.de)
2022-02-16 17:01:45 +0100neurocyte0917090(~neurocyte@IP-185117069029.dynamic.medianet-world.de) (Changing host)
2022-02-16 17:01:45 +0100neurocyte0917090(~neurocyte@user/neurocyte)
2022-02-16 17:01:48 +0100 <maerwald> k``: the caller can force the values themselves before passing them to compare, but they can't "add laziness"
2022-02-16 17:01:51 +0100 <vektor> Yesno. I'd like to have another look at the topic of WYAH from another perspective generally. The thing that's currently bugging me specifically is quite deep in the woods of HM inference, but I'm not sure picking up a book on that topic will do me much good.
2022-02-16 17:02:53 +0100 <maerwald> you can basically just provide a `compareStrict` function
2022-02-16 17:03:27 +0100 <[exa]> vektor: HM-style inference is a quite general topic, TypingHaskellInHaskell is a pretty good reading material, and there's SPJ's youtube video from zurihac with an explanation of what is _actually_ happening there nowadays
2022-02-16 17:05:07 +0100 <vektor> Ohhh, that sounds promising. I'm sure they're not going to answer my research question for me, but will hopefully get me closer. Thanks!
2022-02-16 17:05:12 +0100Sgeo(~Sgeo@user/sgeo)
2022-02-16 17:05:18 +0100 <[exa]> vektor: perhaps try defining "deep in the woods"
2022-02-16 17:06:09 +0100 <geekosaur> that might be difficult if they're still kinda weak on H-M
2022-02-16 17:06:48 +0100dextaa_(~dextaa@user/dextaa) (Quit: The Lounge - https://thelounge.chat)
2022-02-16 17:06:57 +0100 <geekosaur> but unless you know Prolog THIH is probably the place to start
2022-02-16 17:07:04 +0100 <[exa]> honestly I wasn't able to fully grasp the wiki page on H-M before actually crunching through THIH
2022-02-16 17:07:43 +0100 <k``> maerwald: In this case I can either compare both parameters strictly and cheaply, or perform two comparisons to possibly short-circuit on the 1st parameter. I'm wondering whether the ability to short-circuit is worth baking in for the tiny added cost, or if the expectation is that comparisons will be strict and nothing that use `Ord` will benefit.
2022-02-16 17:07:59 +0100 <[exa]> true about Prolog though. :]
2022-02-16 17:08:12 +0100 <vektor> Well, if you must know: I've got me a language that is quite a bit like haskell superficially, but with way different semantics. Those semantics are only really valid in some cases. The boundary of that validity looks an awful lot like typing rules to me. The thing I'm not sure about is whether what Stephen Diehl describes as "Milner’s
2022-02-16 17:08:13 +0100 <vektor> observation was that since the typing rules map uniquely onto syntax, we can in effect run the
2022-02-16 17:08:13 +0100 <vektor> typing rules “backwards”" - whether that assumption of HM holds for my semantics.
2022-02-16 17:08:28 +0100 <vektor> I know a few bits about prolog, how can that help?
2022-02-16 17:08:45 +0100 <geekosaur> because H-M is something like 10 lines of Prolog
2022-02-16 17:08:53 +0100 <vektor> Oh wow. Hit me.
2022-02-16 17:08:54 +0100 <geekosaur> concise and elegant
2022-02-16 17:09:24 +0100 <[exa]> and with some care, you can run it in reverse there too. :]
2022-02-16 17:10:15 +0100coot(~coot@213.134.190.95) (Quit: coot)
2022-02-16 17:10:15 +0100 <geekosaur> https://wiki.haskell.org/BayHac2014/Prolog see also https://www.youtube.com/playlist?list=PLrsRTzxpFRaxw8-ioimlFmgJsOLf9kJmB
2022-02-16 17:10:23 +0100 <merijn> vektor: Has someone already made the obligatory TaPL comment?
2022-02-16 17:10:58 +0100 <geekosaur> waitr that's Haskell. the YT one should have the Prolog version
2022-02-16 17:11:02 +0100 <vektor> merijn Nope, what's that?
2022-02-16 17:13:34 +0100 <merijn> @where tapl
2022-02-16 17:13:34 +0100 <lambdabot> "Types and Programming Languages" by Benjamin C. Pierce in 2002-02-01 at <https://www.cis.upenn.edu/~bcpierce/tapl/>
2022-02-16 17:13:53 +0100 <merijn> vektor: The de facto standard book on type theory and how to implement your own stuff
2022-02-16 17:14:16 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-02-16 17:14:21 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-16 17:14:28 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-02-16 17:14:35 +0100 <merijn> I would consider it a mandatory read if you are trying to implement any form of type system that isn't absolutely trivial
2022-02-16 17:14:44 +0100 <vektor> Ohhh, I actually stumbled upon that myself. Sadly the Uni library doesn't have it, it seems.
2022-02-16 17:14:50 +0100 <merijn> (maybe not the whole book, but certainly, like, the first half)
2022-02-16 17:14:51 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-16 17:15:30 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-02-16 17:16:01 +0100 <vektor> Dang. Considering this whole type system is more of a side show, I'll have to see if I can dedicate as much time to it as you imply is required.
2022-02-16 17:16:22 +0100gaff(~gaff@49.207.229.178)
2022-02-16 17:18:25 +0100 <merijn> The amount of time depends on how fancy you wanna be
2022-02-16 17:18:35 +0100 <merijn> And how much you already know/understand
2022-02-16 17:18:46 +0100 <merijn> The first chapters you can just breeze through in a weekend
2022-02-16 17:20:08 +0100 <vektor> Not at all fancy. It's a research project. I understand, well, more or less a haskell user's understanding + some WYAH. I don't need much polymorphism or recursive types or stuff like that though, so that should help.
2022-02-16 17:20:10 +0100 <[exa]> vektor: one nice exercise with random new type systems&languages is to see whether you can prove some "good" properties about them, such as existence of principial types, decidability of inference and type inhabitation problems, some kind of soundness, etc.
2022-02-16 17:20:34 +0100 <merijn> vektor: Recursive types is where it gets really hairy, yeah
2022-02-16 17:20:45 +0100 <merijn> the bits before that are fairly easy
2022-02-16 17:21:49 +0100 <vektor> @[e
2022-02-16 17:21:49 +0100 <lambdabot> Maybe you meant: wn v rc pl let id do bf @ ? .
2022-02-16 17:22:00 +0100 <vektor> oops
2022-02-16 17:22:52 +0100 <vektor> [exa] , I see. Honestly, I'm not even sure how to ask these questions right now, let alone answer them. I suppose if I want to do this, I'll have to read some more. :D
2022-02-16 17:24:01 +0100 <vektor> For anyone interested who's just reading, the zurihac video is unlisted: https://www.youtube.com/watch?v=x3evzO8O9e8
2022-02-16 17:27:15 +0100bahamas(~lucian@84.232.140.52)
2022-02-16 17:27:48 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-02-16 17:28:27 +0100 <k``> Seems like a decent argument for making comparisons strict is so that `maxBound >= overflowError` is not `True`.
2022-02-16 17:28:30 +0100mbuf(~Shakthi@122.162.72.100) (Quit: Leaving)
2022-02-16 17:29:52 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b) (Remote host closed the connection)
2022-02-16 17:30:46 +0100lbseale(~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
2022-02-16 17:32:59 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Quit: CiaoSen)
2022-02-16 17:34:07 +0100wonko(~wjc@user/wonko)
2022-02-16 17:36:03 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-02-16 17:37:36 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-02-16 17:39:56 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-02-16 17:40:04 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-02-16 17:44:12 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2022-02-16 17:47:53 +0100 <vektor> [exa], looking at SPJ's talk for 15 minutes, he explains principal types and uniqueness of substitutions. I think this might be a challenge for my semantics.
2022-02-16 17:50:11 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 17:51:00 +0100lavaman(~lavaman@98.38.249.169) (Read error: Connection reset by peer)
2022-02-16 17:51:00 +0100awschnap(~lavaman@98.38.249.169)
2022-02-16 17:51:14 +0100zincy_(~zincy@host86-160-236-152.range86-160.btcentralplus.com)
2022-02-16 17:51:26 +0100 <jackson99> should I be using Network.HTTP.Conduit for downloading html files? and can it automatically follow redirects?
2022-02-16 17:52:11 +0100zincy_(~zincy@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection)
2022-02-16 17:52:55 +0100 <janus> jackson99: you could use curl/wget like ghcup: https://github.com/haskell/ghcup-hs/blob/c2a8d39fb423be7ed998f9169c57db87fa1e1cf8/lib/GHCup/Downlo…
2022-02-16 17:53:17 +0100 <janus> then you won't be depending on foundation/memory/cryptonite
2022-02-16 17:53:56 +0100 <maerwald> jackson99: those libraries depend on haskell-tls, which is a non-audited crypto implementation in a garbage collected language
2022-02-16 17:53:57 +0100awschnap(~lavaman@98.38.249.169) (Read error: Connection reset by peer)
2022-02-16 17:54:06 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 17:54:10 +0100 <jackson99> by fundation you mean Haskell Foundation? why is it problematic to depend on their libraries?
2022-02-16 17:54:31 +0100 <maerwald> no, foundation is a library
2022-02-16 17:55:51 +0100 <janus> jackson99: https://github.com/haskell-foundation
2022-02-16 17:56:24 +0100 <maerwald> there is https://hackage.haskell.org/package/http-client-openssl but no http-conduit that depends on it... you could write one though
2022-02-16 17:56:55 +0100acidjnk(~acidjnk@p200300d0c71d3b97a07e6bc3219efcf6.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-02-16 17:57:08 +0100gdown(~gavin@h69-11-150-165.kndrid.broadband.dynamic.tds.net)
2022-02-16 17:57:34 +0100 <maerwald> if you don't need very precise error handling, shelling out to curl is the gold standard (cabal does that too)
2022-02-16 17:57:51 +0100 <maerwald> and works with esoteric proxy configurations
2022-02-16 17:58:18 +0100 <jackson99> hmm ok. I didn't know Network.HTTP.Conduit was considered problematic. I'm still not sure why that is the case
2022-02-16 17:59:15 +0100 <jackson99> I don't care about cryptography, I am just scraping a website :P
2022-02-16 17:59:41 +0100 <maerwald> then you can use whatever you want I guess
2022-02-16 17:59:44 +0100 <jackson99> FWIW simpleHttp is supposed to follow 10 redirects, but for some reason, that isn't working
2022-02-16 17:59:44 +0100 <vektor> jackson99, I believe it boils down to "don't roll your own crypto"-ish. Basically, the guys who built that library built their own crypto. Don't depend on that crypto to do anything sensible, because no one's checked.
2022-02-16 17:59:54 +0100 <vektor> But for scraping, that should be fine.
2022-02-16 18:00:34 +0100 <vektor> @maerwald - I believe that's basically what you meant, right?
2022-02-16 18:00:34 +0100 <lambdabot> Unknown command, try @list
2022-02-16 18:00:45 +0100 <maerwald> yeah
2022-02-16 18:01:04 +0100 <maerwald> and that no one knows whether Haskell is even a good language for crypto
2022-02-16 18:02:04 +0100 <vektor> I've found it quite useful for some light cryptoanalysis. ;) I haven't done any cryptography in it though, and I can understand the doubts.
2022-02-16 18:02:04 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 18:02:44 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net)
2022-02-16 18:06:01 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 18:06:16 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 18:06:24 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 18:06:39 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 18:06:46 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 18:07:01 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 18:07:09 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 18:07:21 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2022-02-16 18:07:23 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 18:07:30 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 18:07:40 +0100ChanServ+o litharge
2022-02-16 18:07:41 +0100litharge+b *!*@98.38.249.169
2022-02-16 18:07:51 +0100litharge-o litharge
2022-02-16 18:09:05 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2022-02-16 18:12:29 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it)
2022-02-16 18:12:51 +0100Pickchea(~private@user/pickchea) (Ping timeout: 252 seconds)
2022-02-16 18:19:43 +0100Akiva(~Akiva@user/Akiva)
2022-02-16 18:21:36 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-02-16 18:22:12 +0100wonko(~wjc@user/wonko) (Ping timeout: 252 seconds)
2022-02-16 18:22:36 +0100Alex_test(~al_test@94.233.240.208) (Ping timeout: 240 seconds)
2022-02-16 18:22:49 +0100perohig(~user@85.255.234.173)
2022-02-16 18:22:50 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-16 18:23:00 +0100AlexNoo(~AlexNoo@94.233.240.208) (Ping timeout: 240 seconds)
2022-02-16 18:23:17 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-02-16 18:23:21 +0100AlexZenon(~alzenon@94.233.240.208) (Ping timeout: 250 seconds)
2022-02-16 18:24:15 +0100perohig(~user@85.255.234.173) (Remote host closed the connection)
2022-02-16 18:27:24 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-02-16 18:27:45 +0100 <dminuoso> 17:59:54 vektor | But for scraping, that should be fine.
2022-02-16 18:28:21 +0100 <dminuoso> That depends entirely. The direction of dataflow is usually irrelevant, it's a matter of attack scenarios you conceive.
2022-02-16 18:29:27 +0100 <dminuoso> In the sense of, do you worry about a) a third party breaking confidentialy of the dataflow, or b) breaking integrity (say manipulating values to either let you process incorrect data, or worse, inject intentionally malformed data to attack your client side components)
2022-02-16 18:29:44 +0100 <vektor> Of course. Hence "should". There's some scenarios you could imagine. Generally, the scraped data might be malicious, but when scraping you usually don't trust the data you gather that much anyway; you treat it as data. Don't run javascript you scraped off stackoverflow.
2022-02-16 18:29:47 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it) (Quit: i really have to scratch my right butt cheek this time, sorry)
2022-02-16 18:31:11 +0100 <dminuoso> For most TLS needs at least you can get by with just nginx at least. Say if you want to use `http-client-tls`, instead you can just use `http-client` against a locally running nginx offloading TLS to openssl or libressl.
2022-02-16 18:32:22 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f)
2022-02-16 18:32:27 +0100 <dminuoso> All our API authentication is offloaded onto `libsodium` which is just a thin FFI binding. For most needs I think there's simple and adequate solutions.
2022-02-16 18:34:19 +0100 <dminuoso> I find it a bit bizarre that this package in particular has so few users.
2022-02-16 18:35:05 +0100 <dminuoso> How do other folks verify credentials in public interfaces? Do they just do naive string comparisons? Rely on cryptonite? I dont know
2022-02-16 18:35:24 +0100bahamas(~lucian@84.232.140.52) (Ping timeout: 240 seconds)
2022-02-16 18:36:30 +0100alp(~alp@user/alp) (Ping timeout: 252 seconds)
2022-02-16 18:36:56 +0100zincy_(~zincy@host86-160-236-152.range86-160.btcentralplus.com)
2022-02-16 18:37:41 +0100ChanServ+o litharge
2022-02-16 18:37:42 +0100litharge-bo *!*@98.38.249.169 litharge
2022-02-16 18:38:29 +0100alp(~alp@user/alp)
2022-02-16 18:38:44 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-16 18:38:55 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Remote host closed the connection)
2022-02-16 18:40:42 +0100 <janus> dminuoso: we use happstack: https://hackage.haskell.org/package/happstack-server-7.7.1.2/docs/src/Happstack.Server.Auth.html#b…
2022-02-16 18:42:03 +0100 <janus> looks like it just uses naive string comparison :O
2022-02-16 18:42:43 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 18:42:53 +0100AlexZenon(~alzenon@94.233.240.208)
2022-02-16 18:43:43 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 18:43:43 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 18:43:43 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 18:45:15 +0100 <dminuoso> Uh yeah..
2022-02-16 18:45:17 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2022-02-16 18:46:23 +0100 <janus> hackage uses md5 for hashing passwords, too :)
2022-02-16 18:46:35 +0100gdown(~gavin@h69-11-150-165.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
2022-02-16 18:47:33 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
2022-02-16 18:48:38 +0100 <shapr> Anyone using Haskell at work? I'm trying to popularize #haskell-in-depth as roughly #haskell-at-work
2022-02-16 18:48:49 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-16 18:48:50 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it)
2022-02-16 18:48:51 +0100 <dminuoso> hackage is just dry-aged. people pay top dollar for this if its edible.
2022-02-16 18:48:53 +0100 <dsal> I'm using Haskell at Work™
2022-02-16 18:49:03 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it) (Remote host closed the connection)
2022-02-16 18:49:03 +0100 <dminuoso> shapr: Yes, we use haskell at work too.
2022-02-16 18:49:20 +0100 <dminuoso> A fair chunk of our ISP core services run on it now. :)
2022-02-16 18:49:24 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2022-02-16 18:49:34 +0100 <dsal> Lazy routers
2022-02-16 18:49:40 +0100 <shapr> I've been asking about postgresql-simple and postgresql-query and etc in #haskell-in-depth
2022-02-16 18:49:46 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it)
2022-02-16 18:49:47 +0100 <shapr> general every day production stuff
2022-02-16 18:49:53 +0100 <dsal> I didn't know about this.
2022-02-16 18:49:59 +0100 <shapr> COME ON OVER!
2022-02-16 18:49:59 +0100 <vektor> Does "I get paid to do the research I do, and I decided to write my code in haskell" count?
2022-02-16 18:50:16 +0100 <shapr> vektor: if you have questions like "how do I talk to this db?" then yes
2022-02-16 18:50:18 +0100 <dsal> I like postgresql-simple. Got to understand it pretty well at the last thing. New places uses persistent which I don't like very much, but don't dislike enough to fight about.
2022-02-16 18:50:53 +0100 <shapr> I have srs complaints about persistent
2022-02-16 18:50:55 +0100 <vektor> Oh F no. I had to work with DBs in python once and hated every second. I'm not touching a DB in haskell. :D
2022-02-16 18:51:08 +0100 <sm> seems not the best name shapr... people go plenty deep here also
2022-02-16 18:51:18 +0100 <shapr> sm: what would you suggest?
2022-02-16 18:51:22 +0100 <dminuoso> vektor: I find it's quite comfortable with postgresql-simple
2022-02-16 18:51:38 +0100 <dsal> shapr: we have the maintainer, so at least when something goes wrong, there's motivation to fix it. :)
2022-02-16 18:51:43 +0100 <dminuoso> You just have to accept that SQL is a really nice, referentially transparent, pure language that is really well suited to its specific domain
2022-02-16 18:51:59 +0100 <shapr> dsal: oh good!
2022-02-16 18:52:31 +0100 <dsal> If I figure out a SQL query, I have to figure out how to write it in esqueleto so it compiles. This is one of those things where I think the *idea* makes sense, but I'd rather write tests.
2022-02-16 18:54:16 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it) (Remote host closed the connection)
2022-02-16 18:54:31 +0100 <sm> also there's a book with that title. What about, hmm.. #haskell-production, #haskell-at-work, #haskell-practical, #haskell-real-world... ? Though I'm not sure how you'd distinguish it enough from here
2022-02-16 18:54:33 +0100 <shapr> We have the squeal author at work, I like squeal very much, but the packages I work on are using postgresql-simple and postgresql-query
2022-02-16 18:54:33 +0100 <dminuoso> dsal: I recently proposed an idea that we should perhaps solve at a hackathon
2022-02-16 18:54:40 +0100 <dsal> The terrible place I was working with terrible people wanted to use persistent and I decided against it because I could do better without out. They really liked the migrations as almost the most important part, but the docs said not to use them in production. Place I'm at now uses persistent but has never used the migrations because that's just an insane idea.
2022-02-16 18:54:48 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 18:55:02 +0100 <dminuoso> If we had an TH-time SQL parser that decodes into a relational algebra and fits it back into say opaleye or esqueleto, you could have the benefits of both worlds...
2022-02-16 18:55:05 +0100 <dminuoso> Or so I hope at least
2022-02-16 18:55:24 +0100 <dminuoso> That could be the missing link
2022-02-16 18:55:49 +0100 <dsal> That's kind of similar to that one postgres lib that compiles queries in TH (or QQ) right?
2022-02-16 18:55:51 +0100 <dminuoso> I dont think people really crave for esqueleto for the obscure type trickeries or absurd combinators - they just care for type system guarantees that everythign works out
2022-02-16 18:56:22 +0100 <dsal> Right, it makes sense. I'm going to eventually have to understand it, I fear.
2022-02-16 18:56:43 +0100 <dsal> I don't really have a desire to learn a language that is exactly the same as another language, but with different words.
2022-02-16 18:57:02 +0100shapr(~user@pool-173-73-44-186.washdc.fios.verizon.net) (Read error: Connection reset by peer)
2022-02-16 18:57:45 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-02-16 18:58:11 +0100 <dminuoso> dsal: Ive not heard of that library, which one are you thinking of?
2022-02-16 18:58:20 +0100shapr(~user@pool-173-73-44-186.washdc.fios.verizon.net)
2022-02-16 18:58:50 +0100 <dsal> https://hackage.haskell.org/package/postgresql-typed
2022-02-16 18:59:22 +0100 <dsal> It's a neat idea, until you need a postgres server running with the current schema in order for compilation to succeed.
2022-02-16 18:59:24 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-16 19:01:42 +0100 <dminuoso> Ah it talks to the database at compile time?
2022-02-16 19:01:48 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2022-02-16 19:01:55 +0100 <dsal> Yeah. It's a neat idea, for sure.
2022-02-16 19:01:57 +0100 <dminuoso> No I'd be fine with it using schema information, that's a compromise I'd be willing to make.
2022-02-16 19:02:02 +0100vicfred(~vicfred@user/vicfred)
2022-02-16 19:02:04 +0100 <dminuoso> But perhaps that library can be repurposed to that end
2022-02-16 19:02:15 +0100 <dminuoso> Thanks! Ill bookmark this
2022-02-16 19:02:29 +0100 <dminuoso> Ah but I have a theory how this works
2022-02-16 19:02:46 +0100 <dminuoso> Im guessing it doesnt just get the schema, but rather interrogate postgresql about the resulting types of that query
2022-02-16 19:03:20 +0100 <dsal> Yeah, that's what it implies in the docs. So it can verify if a value of a type that's passed in matches what can be coerced in the DB.
2022-02-16 19:03:35 +0100 <dminuoso> The coercion rules are an interesting topic
2022-02-16 19:04:15 +0100 <dminuoso> So if we did the type inference ourselves, we not only have to mimic all coercion rules that occur in the database, but there's some design decisions how that would work out with the Haskell type system
2022-02-16 19:04:46 +0100vicfred_(~vicfred@user/vicfred)
2022-02-16 19:05:18 +0100alx741(~alx741@181.199.42.143)
2022-02-16 19:07:35 +0100vicfred(~vicfred@user/vicfred) (Ping timeout: 256 seconds)
2022-02-16 19:07:53 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-02-16 19:09:05 +0100vicfred_(~vicfred@user/vicfred) (Client Quit)
2022-02-16 19:09:33 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-02-16 19:09:49 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-16 19:11:32 +0100zeenk(~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!)
2022-02-16 19:14:27 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 252 seconds)
2022-02-16 19:15:34 +0100econo(uid147250@user/econo)
2022-02-16 19:18:35 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f) (Remote host closed the connection)
2022-02-16 19:24:32 +0100chele(~chele@user/chele) (Remote host closed the connection)
2022-02-16 19:26:48 +0100alx741(~alx741@157.100.197.240)
2022-02-16 19:27:43 +0100cfricke(~cfricke@user/cfricke)
2022-02-16 19:29:51 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 252 seconds)
2022-02-16 19:30:37 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-16 19:34:56 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
2022-02-16 19:35:03 +0100gaff(~gaff@49.207.229.178) (Remote host closed the connection)
2022-02-16 19:37:25 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it)
2022-02-16 19:38:46 +0100vysn(~vysn@user/vysn)
2022-02-16 19:39:49 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f)
2022-02-16 19:41:47 +0100simendsjo(~user@84.211.91.241)
2022-02-16 19:43:00 +0100cfricke(~cfricke@user/cfricke) (Ping timeout: 240 seconds)
2022-02-16 19:45:49 +0100zaquest(~notzaques@5.130.79.72) (Read error: Connection reset by peer)
2022-02-16 19:46:15 +0100zaquest(~notzaques@5.130.79.72)
2022-02-16 19:48:25 +0100alx741(~alx741@157.100.197.240)
2022-02-16 19:48:39 +0100 <slack1256> On haskell-stack, the stack.yml can specify git repository. By default it downloads the whole repo, where something like `git clone --depth 1` sufice. Any way to instruct it to do that?
2022-02-16 19:48:42 +0100_ht(~quassel@231-169-21-31.ftth.glasoperator.nl)
2022-02-16 19:50:05 +0100 <sm> don't know slack1256, but the manual will say
2022-02-16 19:50:42 +0100bahamas(~lucian@84.232.140.52)
2022-02-16 19:51:44 +0100 <slack1256> Searched the manual, did not find it.
2022-02-16 19:52:11 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-02-16 19:53:38 +0100 <dminuoso> janus: https://github.com/Happstack/happstack-server/pull/73
2022-02-16 19:53:49 +0100 <dminuoso> Weird that Im fixing software I dont even use, but this just gives me allergies.
2022-02-16 19:54:13 +0100MajorBiscuit(~MajorBisc@wlan-145-94-218-48.wlan.tudelft.nl) (Ping timeout: 240 seconds)
2022-02-16 19:54:41 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-16 19:56:19 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 256 seconds)
2022-02-16 19:56:31 +0100 <sm> slack1256: not supported, then
2022-02-16 19:57:22 +0100 <slack1256> ;_; ok
2022-02-16 19:57:55 +0100simendsjo(~user@84.211.91.241) (Remote host closed the connection)
2022-02-16 19:58:32 +0100 <janus> dminuoso: you do use it though, because hackage uses happstack ;)
2022-02-16 19:58:43 +0100gaff(~gaff@49.207.229.178)
2022-02-16 19:58:52 +0100 <janus> dminuoso: thanks for the PR! let's see what stepcut says. but it may take a while
2022-02-16 19:59:04 +0100 <dminuoso> Dont care, I've done my duty. :P
2022-02-16 20:00:36 +0100Alex_test(~al_test@94.233.240.208)
2022-02-16 20:02:50 +0100doyougnu(~doyougnu@cpe-67-249-83-190.twcny.res.rr.com)
2022-02-16 20:03:36 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds)
2022-02-16 20:03:54 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it) (Remote host closed the connection)
2022-02-16 20:03:59 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 20:04:39 +0100simendsjo(~user@84.211.91.241)
2022-02-16 20:04:53 +0100 <EvanR> fire and forget pull request
2022-02-16 20:05:05 +0100 <EvanR> the best
2022-02-16 20:05:32 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-02-16 20:09:27 +0100max22-(~maxime@2a01cb0883359800c7c4fab2785758f5.ipv6.abo.wanadoo.fr) (Ping timeout: 252 seconds)
2022-02-16 20:10:00 +0100cynomys(~cynomys@user/cynomys)
2022-02-16 20:10:36 +0100deadmarshal(~deadmarsh@95.38.231.90) (Ping timeout: 240 seconds)
2022-02-16 20:12:59 +0100alx741(~alx741@157.100.197.240)
2022-02-16 20:14:57 +0100finsternis(~X@23.226.237.192) (Ping timeout: 252 seconds)
2022-02-16 20:15:53 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-16 20:15:54 +0100emf(~emf@c-73-97-137-43.hsd1.wa.comcast.net)
2022-02-16 20:16:09 +0100gaff(~gaff@49.207.229.178) (Ping timeout: 256 seconds)
2022-02-16 20:17:31 +0100notzmv(~zmv@user/notzmv)
2022-02-16 20:18:19 +0100Pickchea(~private@user/pickchea)
2022-02-16 20:19:04 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-16 20:27:54 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it)
2022-02-16 20:29:28 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-16 20:29:48 +0100vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2022-02-16 20:30:07 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Client Quit)
2022-02-16 20:30:42 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-16 20:30:43 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
2022-02-16 20:30:59 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net)
2022-02-16 20:32:43 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Client Quit)
2022-02-16 20:33:19 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-16 20:33:34 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Client Quit)
2022-02-16 20:34:09 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-16 20:35:24 +0100yauhsien_(~yauhsien@61-231-32-166.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-02-16 20:41:30 +0100 <sm> dminuoso++
2022-02-16 20:41:35 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 250 seconds)
2022-02-16 20:41:44 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-02-16 20:42:39 +0100 <geekosaur> slack1256, one reason it might not be supported is it complicates things if you decide to pin it to a different commit later
2022-02-16 20:44:28 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 20:44:28 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 20:44:28 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 20:44:29 +0100ec(~ec@gateway/tor-sasl/ec)
2022-02-16 20:44:32 +0100Lord_of_Life_Lord_of_Life
2022-02-16 20:46:25 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 20:47:33 +0100pgib(~textual@173.38.117.90)
2022-02-16 20:48:17 +0100ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2022-02-16 20:48:40 +0100ec(~ec@gateway/tor-sasl/ec)
2022-02-16 20:48:59 +0100max22-(~maxime@2a01cb088335980088882a515c4c342d.ipv6.abo.wanadoo.fr)
2022-02-16 20:49:36 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2022-02-16 20:51:03 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
2022-02-16 20:54:41 +0100emf(~emf@c-73-97-137-43.hsd1.wa.comcast.net) (Quit: emf)
2022-02-16 20:55:15 +0100coot(~coot@213.134.190.95)
2022-02-16 20:56:23 +0100slack1256(~slack1256@191.125.99.202) (Ping timeout: 256 seconds)
2022-02-16 20:56:50 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 20:59:00 +0100bahamas(~lucian@84.232.140.52) (Ping timeout: 240 seconds)
2022-02-16 21:02:43 +0100_ht(~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
2022-02-16 21:02:50 +0100zincy_(~zincy@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection)
2022-02-16 21:05:01 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 240 seconds)
2022-02-16 21:06:47 +0100juhp(~juhp@128.106.188.82)
2022-02-16 21:07:58 +0100pavonia(~user@user/siracusa)
2022-02-16 21:08:07 +0100sander(~sander@user/sander) (Quit: So long! :))
2022-02-16 21:15:43 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2022-02-16 21:16:23 +0100 <EvanR> pattern1, stack up a bunch of commands in a list (backwards), later reverse the list. pattern 2, stack up a bunch of DList appends, later flatten this to get a forward list. It's said 2nd one is more efficient, but is it really night and day?
2022-02-16 21:16:31 +0100 <EvanR> having trouble seeing the quantum jump in performance
2022-02-16 21:17:34 +0100 <EvanR> or is it a constant factor improvement
2022-02-16 21:17:35 +0100dextaa_(~dextaa@user/dextaa)
2022-02-16 21:18:21 +0100 <EvanR> how is the final application of DList not like reverse
2022-02-16 21:18:48 +0100 <monochrom> Certainly the only difference is a constant factor. But I don't know why either one is faster.
2022-02-16 21:19:08 +0100 <maerwald> why do I always understand 'filter' such that `filter (not . predicate)`?
2022-02-16 21:19:10 +0100 <geekosaur> seems to me like they should be equivalent; it's trying to build the list "right side around" that would be slower than either, because it has to traverse the list each time
2022-02-16 21:19:36 +0100 <EvanR> yeah that's bad
2022-02-16 21:19:48 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-16 21:20:08 +0100 <monochrom> It could also be super-sensitive to what the compiler does. Even though we only have one compiler. :)
2022-02-16 21:20:27 +0100 <geekosaur> my thought is it depends on how you use the list afterward
2022-02-16 21:20:51 +0100 <EvanR> so DList is really better when you have a mixture of associativities, not when it's just a bunch of appends
2022-02-16 21:22:11 +0100 <EvanR> or no one knows xD
2022-02-16 21:22:33 +0100 <EvanR> maerwald, me too
2022-02-16 21:22:35 +0100 <monochrom> It can be easily tested. But that still doesn't answer why. :)
2022-02-16 21:23:49 +0100 <maerwald> EvanR: pretty annoying, because boolean bugs are nasty anyway... I could never trust myself to get this one right :D
2022-02-16 21:24:03 +0100 <monochrom> Unless you just accept either "GHC super-optimizes list node allocation" or "GHC super-optimizes function composition" depending on the benchmark results.
2022-02-16 21:24:40 +0100 <EvanR> GHC, optimize my code from O(n) to O(1)
2022-02-16 21:25:08 +0100 <geekosaur> you joke. list fusion is more or less that
2022-02-16 21:25:11 +0100machinedgod(~machinedg@24.105.81.50) (Remote host closed the connection)
2022-02-16 21:25:19 +0100 <geekosaur> of course list fusion can itself be black magic
2022-02-16 21:26:54 +0100machinedgod(~machinedg@24.105.81.50)
2022-02-16 21:27:07 +0100 <EvanR> maerwald, burn upon your brain the rewrite rule "filter" => "keep"
2022-02-16 21:27:17 +0100 <EvanR> through all history
2022-02-16 21:27:24 +0100 <monochrom> I basically did that.
2022-02-16 21:27:36 +0100 <monochrom> I have long given up on "meaningful names".
2022-02-16 21:28:24 +0100 <monochrom> My philosophy on names is mnemonics and hamming distance.
2022-02-16 21:28:27 +0100AlexNoo(~AlexNoo@94.233.240.208)
2022-02-16 21:28:33 +0100lavaman(~lavaman@98.38.249.169)
2022-02-16 21:28:54 +0100 <monochrom> Mnemonics implies that insider jokes are OK. Yes.
2022-02-16 21:28:57 +0100 <EvanR> since all math is made out of sets of nameless atoms, makes sense
2022-02-16 21:29:13 +0100 <maerwald> EvanR: maybe it's a sign of negative thinking :p ...we don't keep stuff, we throw it away
2022-02-16 21:29:32 +0100 <monochrom> Negative thinking is valuable too. :)
2022-02-16 21:29:36 +0100 <maerwald> coding = deleting code
2022-02-16 21:29:44 +0100 <geekosaur> just name everything f, g', h'''
2022-02-16 21:29:48 +0100 <monochrom> filter your code >:)
2022-02-16 21:30:00 +0100 <xerox> decoding = let in code
2022-02-16 21:30:02 +0100 <EvanR> just juggling zillions of sets of • here
2022-02-16 21:30:05 +0100 <monochrom> Ah that is why I added the hamming distance part. :)
2022-02-16 21:30:55 +0100 <EvanR> when you start coding, you don't have a blank file, you have the set of all programs, and you do minus to narrow it down
2022-02-16 21:31:15 +0100 <EvanR> which is why it usually doesn't work
2022-02-16 21:31:44 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2022-02-16 21:32:03 +0100 <monochrom> Is that Schrödiger's cat programming? :)
2022-02-16 21:32:19 +0100ubert1(~Thunderbi@p200300ecdf0994b46944f41320f0055f.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-02-16 21:33:02 +0100 <EvanR> no... that would be limited to all programs whose norm is 1
2022-02-16 21:33:23 +0100 <EvanR> which I guess might be better
2022-02-16 21:33:23 +0100machinedgod(~machinedg@24.105.81.50) (Remote host closed the connection)
2022-02-16 21:33:32 +0100 <EvanR> linear logic for all of you
2022-02-16 21:34:20 +0100machinedgod(~machinedg@24.105.81.50)
2022-02-16 21:35:38 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-02-16 21:36:59 +0100 <monochrom> Every program can be renormalized to have norm 1. This is known as the Church-Feynman thesis.
2022-02-16 21:37:17 +0100 <monochrom> Step 1. Read the code very carefully.
2022-02-16 21:37:23 +0100 <monochrom> Step 2. Think very hard.
2022-02-16 21:37:43 +0100 <monochrom> Step 3. Write down "the norm is 1".
2022-02-16 21:37:44 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 21:37:57 +0100deadmarshal(~deadmarsh@95.38.231.90)
2022-02-16 21:38:12 +0100`2jt(~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Ping timeout: 240 seconds)
2022-02-16 21:38:33 +0100alp(~alp@user/alp) (Ping timeout: 252 seconds)
2022-02-16 21:42:42 +0100acidjnk(~acidjnk@p200300d0c7212778fd46ee7c5cdf4a6b.dip0.t-ipconnect.de)
2022-02-16 21:42:59 +0100deadmarshal(~deadmarsh@95.38.231.90) (Ping timeout: 272 seconds)
2022-02-16 21:43:34 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-16 21:47:02 +0100sander(~sander@user/sander)
2022-02-16 21:47:49 +0100zincy_(~zincy@host86-160-236-152.range86-160.btcentralplus.com)
2022-02-16 21:48:39 +0100finsternis(~X@23.226.237.192)
2022-02-16 21:48:49 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt)
2022-02-16 21:49:57 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 272 seconds)
2022-02-16 21:50:35 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 272 seconds)
2022-02-16 21:52:49 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-16 21:54:41 +0100zincy_(~zincy@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection)
2022-02-16 21:57:03 +0100 <jle`> hm, am i missing a thing that's simpler than liftA2 + sequence?
2022-02-16 21:57:20 +0100 <jle`> (a -> b -> m c) -> f a -> f b -> m (f c)
2022-02-16 21:58:19 +0100emf(~emf@2620:10d:c090:400::5:dcea)
2022-02-16 21:58:32 +0100 <[exa]> zipWithM ?
2022-02-16 21:58:54 +0100 <monochrom> I think liftA2+sequence is right. traverse is liftA1+sequence. :)
2022-02-16 21:59:11 +0100 <[exa]> also called `traverse2` in util
2022-02-16 22:00:58 +0100 <[exa]> other than that, I'd say liftA2 + sequence is probably the way to go, at least until traverse2 gets to base :]
2022-02-16 22:01:02 +0100vektor(~vektor@IP-094046083008.dynamic.medianet-world.de) (Quit: Client closed)
2022-02-16 22:01:26 +0100AlexNoo(~AlexNoo@94.233.240.208) (Quit: Leaving)
2022-02-16 22:02:18 +0100AlexNoo(~AlexNoo@94.233.240.208)
2022-02-16 22:04:48 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
2022-02-16 22:05:58 +0100 <jle`> thanks :)
2022-02-16 22:06:22 +0100 <jle`> i guess it happens non-often enough to not warrant having a name
2022-02-16 22:07:43 +0100 <EvanR> Data.Aviary.Birds would disagree
2022-02-16 22:08:00 +0100 <[exa]> O_o
2022-02-16 22:10:27 +0100 <jackson99> is this expected behavior? it seems like a bug to me, or at least a very peculiar behavior
2022-02-16 22:10:46 +0100 <jackson99> scrapHtmlWith (texts "span") "<body><span><span>test</span></span>"
2022-02-16 22:10:53 +0100 <jackson99> Just ["test","test"]
2022-02-16 22:11:14 +0100 <jackson99> this is scalpel package
2022-02-16 22:11:44 +0100 <EvanR> you gotta ask where there are "really" two spans there or not
2022-02-16 22:11:50 +0100 <EvanR> whether
2022-02-16 22:12:04 +0100 <jackson99> there are. it took me a while to figure out what was going on
2022-02-16 22:12:29 +0100 <juri_> hmm. is there a good way to have HSpec+QuickCheck generate lists for me of a given length? I've tried generating them in the 'Gen' monad in my property test, but when a test is falsified, hspec doesn't display the Gen'd list.
2022-02-16 22:13:09 +0100 <[exa]> jackson99: sounds like it is documented ("possibly nested" note here: https://hackage.haskell.org/package/scalpel-0.6.1/docs/Text-HTML-Scalpel.html#v:htmls )
2022-02-16 22:14:05 +0100ub(~Thunderbi@193.32.127.226)
2022-02-16 22:15:24 +0100ubert(~Thunderbi@p548c8cd6.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-02-16 22:15:24 +0100ububert
2022-02-16 22:15:40 +0100zeenk(~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5)
2022-02-16 22:16:06 +0100acidjnk_new(~acidjnk@p200300d0c721277849d4c4c73f702833.dip0.t-ipconnect.de)
2022-02-16 22:17:10 +0100doyougnu(~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 272 seconds)
2022-02-16 22:17:55 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-02-16 22:19:09 +0100jakalx(~jakalx@base.jakalx.net)
2022-02-16 22:19:10 +0100 <EvanR> iinm blaze uses something like DList to generate output. It's called blaze so it must be fast (ignoring the previous discussion of meaningless names)
2022-02-16 22:19:31 +0100acidjnk(~acidjnk@p200300d0c7212778fd46ee7c5cdf4a6b.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-02-16 22:20:03 +0100Guest82(~Guest82@h-5-150-236-164.A980.priv.bahnhof.se)
2022-02-16 22:20:07 +0100 <jackson99> I don't mind the nested behavior if elements are different, for example I like that it would get text from <span..><b>text</b></span>. but if the same element is nested multiple times, it does not seem useful to repeat same string multiple times
2022-02-16 22:20:33 +0100 <jackson99> not sure how to handle this. plain nub doesn't work, strings are different
2022-02-16 22:20:39 +0100 <[exa]> juri_: if you really need to generate lists of precise size, you might need to pass the size in the type parameter for Arbitrary. Other than that, you could generate non-empty lists of random size and use `take n $ repeat theList` as the value to be tested
2022-02-16 22:20:51 +0100 <jackson99> recursively get into span element by element, and get text (not texts)?
2022-02-16 22:24:38 +0100 <[exa]> juri_: re displaying, it normally uses the Show instance, right?
2022-02-16 22:25:23 +0100 <juri_> [exa]: i think it uses show, but it only tries to display the arguments to the property test, not the results of using generators in the test.
2022-02-16 22:30:53 +0100 <[exa]> hm, would you have a code sample?
2022-02-16 22:31:07 +0100ub(~Thunderbi@86.107.21.10)
2022-02-16 22:31:48 +0100ubert(~Thunderbi@193.32.127.226) (Ping timeout: 240 seconds)
2022-02-16 22:31:49 +0100ububert
2022-02-16 22:32:05 +0100 <juri_> https://github.com/Haskell-Things/HSlice/pull/61/files#diff-8bac62059346f8dc8b7487fd7cccc3d877486e…
2022-02-16 22:33:00 +0100 <juri_> radians and dists in that function are generated. if that function is falsified, it will only display the two arguments, centerX and centerY.
2022-02-16 22:33:44 +0100w1n5t0n(~w1n5t0n@cpc83645-brig20-2-0-cust528.3-3.cable.virginm.net)
2022-02-16 22:33:51 +0100 <[exa]> uuuh what line in that diff?
2022-02-16 22:34:39 +0100 <juri_> 641?
2022-02-16 22:35:03 +0100 <[exa]> none such there, you sure it's the right link?
2022-02-16 22:35:05 +0100 <w1n5t0n> Hey all, is it possible to compile a stack project so that it can be loaded on GHCi (not Stack GHCi) on other computers running the same OS?
2022-02-16 22:35:24 +0100 <w1n5t0n> I'm running a workshop on live coding music using a Haskell library, but I don't want to put participants through the process of having to build it on their machines
2022-02-16 22:35:27 +0100 <juri_> generally any of the prop_ functions that are actually using the Gen monad show what i'm talking about tho. radians and dists are not shown, but the arguments to the function are.
2022-02-16 22:35:56 +0100 <w1n5t0n> The library has to be loaded in a GHCi session, which is what we'll be using for the workshop
2022-02-16 22:36:04 +0100fendor_(~fendor@91.141.40.92.wireless.dyn.drei.com) (Remote host closed the connection)
2022-02-16 22:36:05 +0100 <juri_> [exa]: it's a large diff. github breaks stuff. *sigh*
2022-02-16 22:36:09 +0100 <[exa]> :(
2022-02-16 22:36:40 +0100 <[exa]> juri_: link a file in a tree if you can, that's less breaky
2022-02-16 22:38:59 +0100 <[exa]> w1n5t0n: if everything fails you may try packing it up in a docker
2022-02-16 22:40:09 +0100 <juri_> https://github.com/Haskell-Things/HSlice/pull/61/commits/6a315af1568d15ff4b2829f97af2e6e0f602cfa8#…
2022-02-16 22:40:25 +0100 <w1n5t0n> [exa] yeah I thought of that, but I'd like to avoid it if possible because it may complicate things with the realtime audio aspect of it
2022-02-16 22:40:27 +0100 <juri_> hmm. at what point do github links get long enough to be spam... ;)
2022-02-16 22:40:46 +0100mikoto-chan(~mikoto-ch@213.177.151.239)
2022-02-16 22:40:49 +0100 <w1n5t0n> To begin with I was just wondering if it's possible to take a bunch of .hi and .o files that have been compiled and load them to a GHCi session
2022-02-16 22:43:13 +0100 <[exa]> juri_: uuh yes I see the problem. perhaps `label` could help to get the info out? https://hackage.haskell.org/package/QuickCheck-2.14.2/docs/Test-QuickCheck.html#v:label
2022-02-16 22:44:45 +0100 <geekosaur> w1n5t0n, stack generally wants to keep tight control of those and in particular any libraries it needs will be hidden inside of stack
2022-02-16 22:46:14 +0100 <w1n5t0n> geekosaur I get that stack keeps everything under wraps behind the scenes, but after running `stack build` I can locate and extract the .hi and .o files that were built. Assuming that they were built for the right OS/architecture, shouldn't they be loadable by a bare instance of GHCi?
2022-02-16 22:46:21 +0100 <juri_> [exa]: but isn't this for reporting for successful cases? i just want things to show when i have a fail.
2022-02-16 22:46:35 +0100 <[exa]> w1n5t0n: hm. perhaps "podman" (less isolation than docker) or the "singularity" containers would do?
2022-02-16 22:46:54 +0100 <geekosaur> w1n5t0n, again, only if they don't have any dependencies
2022-02-16 22:47:03 +0100 <sm> w1n5t0n: I think you'd be fighting the tools and it wouldn't be worth it. stack's raison d'etre is to ensure things like stack ghci are repeatable
2022-02-16 22:47:13 +0100 <juri_> [exa]: maybe counterexample is more correct?
2022-02-16 22:47:18 +0100 <jackson99> I am going insane trying to parse this. ^_^
2022-02-16 22:47:30 +0100 <geekosaur> well, you could dig those out too but you'd have to re-package them to use them and build your own package database so ghc can find them
2022-02-16 22:47:45 +0100 <geekosaur> major pain and almost certainly not worth it
2022-02-16 22:48:28 +0100 <w1n5t0n> Yes I see what you mean, in my particular case there's also a dependency on an external C library so that would complicate things even more
2022-02-16 22:48:37 +0100 <w1n5t0n> Ugh this is turning out to be a bigger problem than I thought it would
2022-02-16 22:48:40 +0100alp(~alp@user/alp)
2022-02-16 22:48:42 +0100 <jackson99> scrapHtmlWith (texts "span") "<span class= \"one-click-content css-nnyc96 e1q3nk1v1\"><span class= \"luna-label italic\">Slang</span>.</span> <span class= \"one-click-content css-nnyc96 e1q3nk1v1\">to complain; gripe: <span class=\"luna-example italic\">They complained about the service, then about the bill.</span></span>"
2022-02-16 22:48:44 +0100 <jackson99> Just ["Slang.","to complain; gripe: They complained about the service, then about the bill.","They complained about the service, then about the bill.","Slang"]
2022-02-16 22:49:31 +0100ubert(~Thunderbi@86.107.21.10) (Quit: ubert)
2022-02-16 22:49:38 +0100 <w1n5t0n> It's also tricky asking people to install Docker because, at least if they're on Windows, they may have to tinker with BIOS settings
2022-02-16 22:49:45 +0100 <sm> w1n5t0n: would having them run in a cloud-based image be an option ? there are some tools like that
2022-02-16 22:50:30 +0100 <[exa]> juri_: you can attach label only if it comes out false, right?
2022-02-16 22:51:25 +0100 <w1n5t0n> sm the way the system works is that 1) emacs sends some code to GHCi as a string -> 2) GHCi runs that code and uses it to write some .wav files to disk -> 3) it then sends a message through UDP to another local process (SuperCollider) with the path of those files -> 4) it waits for a UDP response
2022-02-16 22:52:06 +0100 <sm> cool but kind of the nightmare scenario for a just-works deployment to new users :)
2022-02-16 22:52:14 +0100 <w1n5t0n> Exactly :(
2022-02-16 22:52:25 +0100 <sm> I think a cloud image could work, it will require some fancy setup on your part though
2022-02-16 22:52:38 +0100 <sm> there's something built in to vs code, but I'm not familiar
2022-02-16 22:53:05 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:e573:86f9:f0cd:7c1f) (Remote host closed the connection)
2022-02-16 22:53:06 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-16 22:53:06 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-16 22:53:06 +0100wroathe(~wroathe@user/wroathe)
2022-02-16 22:53:17 +0100 <w1n5t0n> How could it work if the files that GHCi produces need to be availably locally and at minimum delay?
2022-02-16 22:53:22 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-16 22:53:31 +0100 <w1n5t0n> i.e. downloading them every time wouldn't be an option
2022-02-16 22:53:50 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-02-16 22:54:00 +0100 <sm> hmm.. indeed you'd need the cloud image to send sound output to local machine somehow, which is an added wrinkle
2022-02-16 22:54:26 +0100 <sm> I bet it's doable, but not simple
2022-02-16 22:54:43 +0100 <sm> what can you assume about users' expertise / machines ?
2022-02-16 22:54:48 +0100 <w1n5t0n> Would it be realistic to prepare a folder for each major OS that contains a GHCi binary, all the dependencies required, and a little boot script to set everything up and point GHCi to the right locations?
2022-02-16 22:55:27 +0100 <[exa]> how long does it take for stack to build the thing?
2022-02-16 22:55:49 +0100 <w1n5t0n> I need to assume they're complete beginners and may be running any of Windows, Mac, Linux
2022-02-16 22:55:53 +0100 <sm> yes, I think that might be the best option. Perhaps prepared for each platform with github CI
2022-02-16 22:56:04 +0100 <w1n5t0n> Not too long, but downloading everything required takes quite a while
2022-02-16 22:56:31 +0100 <sm> or.. docker. Doesn't it work on windows yet ?
2022-02-16 22:56:32 +0100 <w1n5t0n> And if I have 10+ people downloading it at the same time on the same wifi connection I can only assume it will take much longer
2022-02-16 22:56:53 +0100 <[exa]> sm: the last time I checked, docker on windows just spawned linux VM in the background
2022-02-16 22:57:10 +0100 <w1n5t0n> Docker may work but I think it'll take some significant setting up as well
2022-02-16 22:57:16 +0100 <davean> w1n5t0n: Realtime streaming is low latency.
2022-02-16 22:57:23 +0100 <sm> multipass is much more lightweight, might be an alternative (installs ubuntu vms, easy to use)
2022-02-16 22:57:46 +0100 <[exa]> +1 ^
2022-02-16 22:57:52 +0100 <juri_> [exa]: hmm. no idea how no do that. i'm now working with Property, but Expectation.
2022-02-16 22:58:21 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-16 22:58:59 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk) (Ping timeout: 272 seconds)
2022-02-16 22:59:43 +0100 <w1n5t0n> davean unfortunately not low enough for my purposes, there's a tight loop where every half a second or so a few tens of wav files need to be ready and loaded
2022-02-16 22:59:52 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
2022-02-16 23:00:04 +0100 <w1n5t0n> I.e. it's not a case of streaming one audio file and playing it out the speakers
2022-02-16 23:00:14 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-02-16 23:00:23 +0100 <w1n5t0n> sm thanks for the suggestion, looking at it now
2022-02-16 23:00:33 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:fd00:8e82:1c4b:4222)
2022-02-16 23:00:34 +0100 <davean> Half a second is far longer than streaming
2022-02-16 23:00:41 +0100 <davean> w1n5t0n: theres a reason you can stream FPS games
2022-02-16 23:01:02 +0100 <davean> Streaming latency is often < 60ms
2022-02-16 23:01:26 +0100 <sm> I think you want some kind of standard vm you can rely on, otherwise you'll be debugging weird failures on half the machines at the start of every class
2022-02-16 23:01:38 +0100 <sm> vm/image
2022-02-16 23:02:00 +0100 <davean> Why produce waves instead of feed it directly into the audio out buffer?
2022-02-16 23:02:32 +0100 <w1n5t0n> davean this particular case is a bit more complex than video games, the resulting wavs don't hold audio that's meant to be played out the speakers but instead control signals that are meant to be indexed by SuperCollider's own synth engine
2022-02-16 23:02:33 +0100 <jackson99> sorry for flooding the channel earlier. here's the issue I am having on paste. I am thinking about filtering every element that is subset of some other element, but that isn't ideal, and could give me incorrect string for some other html. hopefully there's a way to handle this in Scalpel. https://paste.tomsmeding.com/1vCO1ZjN
2022-02-16 23:02:59 +0100 <davean> w1n5t0n: Ok, but it still produces an audio stream out
2022-02-16 23:03:20 +0100 <davean> And unlike video games, its open loop, not closed
2022-02-16 23:03:23 +0100 <davean> so I think its a LOT simpler
2022-02-16 23:03:31 +0100 <w1n5t0n> SuperCollider does, yes, so in theory I could stream that output
2022-02-16 23:03:48 +0100mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds)
2022-02-16 23:04:02 +0100 <w1n5t0n> Unfortunately I don't personally know how to set any of that up in time for the workshop which is in 3 days
2022-02-16 23:04:26 +0100 <[exa]> juri_: I guess you'd need to make a labeled version of the (-/>)
2022-02-16 23:04:36 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:fd00:8e82:1c4b:4222) (Ping timeout: 240 seconds)
2022-02-16 23:04:53 +0100 <sm> ha, 3 days you say
2022-02-16 23:05:01 +0100acidjnk_new(~acidjnk@p200300d0c721277849d4c4c73f702833.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-02-16 23:05:03 +0100 <[exa]> like, manually check the equality, label if false, finally run the `shouldNotBe`
2022-02-16 23:05:40 +0100 <[exa]> w1n5t0n: ask everyone to install vmware or virtualbox or something and throw around a small ubuntu VM, that must work :D
2022-02-16 23:06:55 +0100 <monochrom> Yikes, that's kinda last resort, it's much more stuff to download and much longer installation time...
2022-02-16 23:06:56 +0100 <w1n5t0n> sm it seems that multipass needs to use VirtualBox on Windows 10 Home edition, in that case how is it different than using just VirtualBox straight?
2022-02-16 23:07:16 +0100 <w1n5t0n> I could distribute the image around on a USB drive, hopefully that may speed things up
2022-02-16 23:07:29 +0100 <sm> w1n5t0n: under the hood I have no idea, but the main thing it's an easy and standard install page for all three platforms
2022-02-16 23:07:50 +0100 <w1n5t0n> My initial thinking was to get everyone to boot of a live USB running some Ubuntu or something, but I found out that macbooks don't allow that apparently
2022-02-16 23:08:54 +0100acidjnk(~acidjnk@p200300d0c724284749d4c4c73f702833.dip0.t-ipconnect.de)
2022-02-16 23:09:28 +0100 <sm> if they all install that, you can be pretty sure to get them all running the same ubuntu environment. Now you can (quickest) write a standard bash setup script that will run in that, or (harder, saves build time for them) find out how to make and publish a custom image they can pull
2022-02-16 23:10:18 +0100 <sm> with the 3 day deadline, I'd pursue the bash script first
2022-02-16 23:11:11 +0100 <w1n5t0n> Yes that's probably what I'll do, my only concern is that I've heard it can be tricky to get realtime audio to work well inside VirtualBox VMs when on a Linux host
2022-02-16 23:11:43 +0100 <w1n5t0n> So if that's a problem I might need to have them install and run SuperCollider locally and then get the VM to talk to that
2022-02-16 23:12:04 +0100 <sm> yes, try it on your own machine, set up your app in the vm, make sure it plays sound. My experience with multipass makes me think it might just work
2022-02-16 23:12:55 +0100 <w1n5t0n> It just finished installing so I'll try it now, thanks!
2022-02-16 23:13:00 +0100 <sm> (I'm on a mac)
2022-02-16 23:13:08 +0100 <sm> let us know how it goes
2022-02-16 23:16:46 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Remote host closed the connection)
2022-02-16 23:16:51 +0100acidjnk_new(~acidjnk@pd9e0bb2f.dip0.t-ipconnect.de)
2022-02-16 23:17:09 +0100acidjnk(~acidjnk@p200300d0c724284749d4c4c73f702833.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-02-16 23:17:58 +0100burnsidesLlama(~burnsides@dhcp168-021.wadham.ox.ac.uk)
2022-02-16 23:19:13 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:fd00:8e82:1c4b:4222)
2022-02-16 23:24:14 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-16 23:24:28 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Remote host closed the connection)
2022-02-16 23:24:43 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-16 23:25:25 +0100wolfshappen(~waff@irc.furworks.de) (Ping timeout: 256 seconds)
2022-02-16 23:29:27 +0100Guest82(~Guest82@h-5-150-236-164.A980.priv.bahnhof.se) (Quit: Client closed)
2022-02-16 23:29:35 +0100 <juri_> [exa]: yuck, that means i'd need to use different ones in different situations. :/
2022-02-16 23:30:39 +0100BrokenClutch(~pioneer@2804:d41:c291:0:6129:66a9:49aa:83e7)
2022-02-16 23:30:52 +0100 <BrokenClutch> I remembered my password!!!!!
2022-02-16 23:31:03 +0100 <juri_> Oh no!
2022-02-16 23:31:24 +0100w1n5t0n(~w1n5t0n@cpc83645-brig20-2-0-cust528.3-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-02-16 23:31:27 +0100 <BrokenClutch> me back to ask dumb questions :D
2022-02-16 23:33:42 +0100 <monochrom> You should write down your password and hide it in a framed photo.
2022-02-16 23:34:36 +0100 <monochrom> (That was a plot device in a TV show I just watched. The person hid an important signed contract there decades ago, then forgot that it was hid there.)
2022-02-16 23:34:46 +0100 <monochrom> err, was hidden! Damn English.
2022-02-16 23:35:29 +0100 <davean> Why would you hide a signed contract? That seems weird.
2022-02-16 23:36:11 +0100 <davean> contrived really
2022-02-16 23:36:58 +0100 <monochrom> Haha I don't know. And the person didn't think in terms of hiding, he was actually thinking "this is a prominent place! I will never forget! It's the family portrait, right? RIGHT?"
2022-02-16 23:37:49 +0100cosimone(~user@93-47-229-224.ip115.fastwebnet.it) (Remote host closed the connection)
2022-02-16 23:38:51 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-02-16 23:41:40 +0100 <texasmynsted> There are many options... "https://github.com/psibi/shell-conduit" looks like what I am looking for but it says it is _experimental_. . .
2022-02-16 23:42:22 +0100vicfred(~vicfred@user/vicfred)
2022-02-16 23:42:27 +0100 <texasmynsted> I want to replace some of my shell scripts with Haskell. I would like to take advantage of streams. I see things like Streamly...
2022-02-16 23:43:46 +0100 <texasmynsted> What would you recommend? Shell conduit? Streamly and just find a way to work with the shell from it?
2022-02-16 23:44:14 +0100k8yun(~k8yun@user/k8yun)
2022-02-16 23:44:37 +0100 <texasmynsted> Streamly has an example that seems to work with the shell -> https://github.com/composewell/streamly-examples/blob/master/examples/CoreUtils.hs
2022-02-16 23:48:17 +0100emf(~emf@2620:10d:c090:400::5:dcea) (Ping timeout: 240 seconds)
2022-02-16 23:48:44 +0100 <sm> texasmynsted: I'm quite fond of the Cmd system that's part of Shake. You have to build Shake to use it, but then you also have a dependency engine available for your scripts.
2022-02-16 23:49:23 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-02-16 23:49:47 +0100 <sm> there's nothing as usable as https://github.com/CZ-NIC/pz AFAIK (someone should try to clone that I think)
2022-02-16 23:53:56 +0100 <texasmynsted> I like shake for making build systems
2022-02-16 23:54:18 +0100Ariakenom(~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) (Read error: Connection reset by peer)
2022-02-16 23:54:27 +0100 <davean> I dislike making build systems
2022-02-16 23:54:32 +0100 <texasmynsted> right.
2022-02-16 23:54:56 +0100 <texasmynsted> I did not consider using shake to make _shell script_ replacements
2022-02-16 23:54:58 +0100emf(~emf@c-73-97-137-43.hsd1.wa.comcast.net)
2022-02-16 23:55:11 +0100 <EvanR> build systems to build the build systems to ...
2022-02-16 23:55:21 +0100michalz(~michalz@185.246.204.89) (Remote host closed the connection)
2022-02-16 23:55:23 +0100 <texasmynsted> python in bash? No thank you.
2022-02-16 23:55:54 +0100 <monochrom> Do you prefer making build systems? >:)
2022-02-16 23:56:08 +0100 <monochrom> Err sorry! building make systems!
2022-02-16 23:56:26 +0100w1n5t0n(~w1n5t0n@cpc83645-brig20-2-0-cust528.3-3.cable.virginm.net)
2022-02-16 23:56:31 +0100thyriaen(~thyriaen@simnet-nat-pool-185-130-54-167.stargrpns.pp.ua)
2022-02-16 23:57:23 +0100 <texasmynsted> I find in most cases existing build systems work find and are understandable by others.
2022-02-16 23:57:33 +0100 <texasmynsted> s/find/fine/
2022-02-16 23:57:50 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-02-16 23:59:02 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Remote host closed the connection)
2022-02-16 23:59:32 +0100 <juri_> [exa]: well, i figgured out how to do what i needed, but it's ugly. I defined a newtype ListOfThree, and gave it an arbitrary instance of fmap ListOfThree $ vector 3
2022-02-16 23:59:43 +0100 <juri_> [exa]: now i want to throw up a little.
2022-02-16 23:59:53 +0100 <maerwald> texasmynsted: yes, I also think using less powerful build systems is generally better
2022-02-16 23:59:59 +0100thyriaen(~thyriaen@simnet-nat-pool-185-130-54-167.stargrpns.pp.ua) (Client Quit)