Home freenode/#haskell: Logs Calendar

Logs on 2020-12-10 (freenode/#haskell)

00:01:06 × Tops2 quits (~Tobias@dyndsl-095-033-092-168.ewe-ip-backbone.de) (Ping timeout: 260 seconds)
00:01:10 da39a3ee5e6b4b0d joins (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th)
00:02:00 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 256 seconds)
00:02:36 <Axman6> so combing back to the question I had yesterday, I'm running into problems with multi param type classes; class Foo a b c | a -> b; class Foo a b c => Bar a b | a -> b - I get errors about a being not in scope (I think, waiting for a recompile after a rebase). Sadly this is DAML, so the usual fix of using type families instead of class params isn't available to me. There doesn't seem to be a way to ignore those type params in Foo
00:02:39 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
00:03:27 <Axman6> other things I have tried are adding those type params to Bar but that causes other issues with overlapping instances (seems GHC is pretty dumb about its use of fundeps, or I don't understand them well enough)
00:03:34 conal joins (~conal@64.71.133.70)
00:04:10 × cosimone quits (~cosimone@93-47-228-249.ip115.fastwebnet.it) (Ping timeout: 246 seconds)
00:05:55 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
00:06:23 <Axman6> ultimatly I then want to make instances like: instance Foo a BazV1 c => Bar a BazV1 ... instance Foo a BazV2 c => Bar a BazV2 ... but I get overlapping instances for those, even though the fundeps ensure they are distinct
00:07:21 rcdilorenzo parts (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) ()
00:07:45 × dqd quits (id@wikipedia/dqd) (Ping timeout: 265 seconds)
00:08:40 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
00:09:21 <Axman6> one "fix" I did come up with is adding default instances, so class Foo a b c | a -> b, a -> c; class Foo a b c => Bar a b | a -> b where doThing :: a -> Bool; default doThing :: Foo a BarV1 c => a -> Bool; doThing = ...; instance Foo a BazV2 c => Bar a BazV2 where ..., which works, but means we can only have two instances of this class, we can't later add BarV3 without getting overlapping instances
00:09:44 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
00:10:50 × kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection)
00:12:09 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:12:26 × jespada quits (~jespada@90.254.245.49) (Ping timeout: 256 seconds)
00:12:39 × chkno quits (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer)
00:13:07 christo joins (~chris@81.96.113.213)
00:13:09 chkno joins (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net)
00:13:43 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
00:14:13 jespada joins (~jespada@90.254.245.49)
00:16:48 × grdvnl quits (~gdrvnl@cpe-76-94-36-134.socal.res.rr.com) (Ping timeout: 256 seconds)
00:17:11 <iqubic> What is a Bazaar? Should I learn more about these exotic comonands?
00:17:22 <Axman6> no
00:17:30 × christo quits (~chris@81.96.113.213) (Ping timeout: 258 seconds)
00:17:30 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
00:17:44 <iqubic> Why not?
00:18:02 <koz_> iqubic: Are you planning on contributing to lens?
00:18:05 <Axman6> why do you think you need to?
00:18:19 <iqubic> koz_: I'm not going to do that.
00:18:29 <koz_> iqubic: Then I can safely say you don't need to know them.
00:18:35 <Axman6> @hoogle Bazaar
00:18:35 <lambdabot> Control.Lens.Combinators newtype Bazaar p a b t
00:18:36 <lambdabot> Control.Lens.Combinators Bazaar :: (forall f . Applicative f => p a (f b) -> f t) -> Bazaar p a b t
00:18:36 <lambdabot> module Control.Lens.Internal.Bazaar
00:18:40 <koz_> A Bazaar is just 'multiple Stores'.
00:18:40 <iqubic> Axman6: I think I might be able to write more efficient code,
00:18:43 <jle`> it probably won't help you in any sort of every day haskell capacity
00:19:04 dqd joins (id@wikipedia/dqd)
00:19:06 <jle`> it might be funsies though
00:19:18 <jle`> so it depends on what you mean by "should"
00:19:27 <koz_> I think it was jle` who clued me onto the whole 'multiple Stores' thing.
00:19:45 <Axman6> my "no" was in response to the should in the original question
00:19:49 <jle`> from a practical perspective? probably not. from an ethical/moral perspective? probably no reason either way. from a curiosity perspective? maybe
00:19:51 <iqubic> jle`: you used holesOf in a cool way.
00:20:19 <Axman6> typical jle`, using things in cool ways
00:20:39 <koz_> *insert some kind of 'into every possible hole' joke I am too non-strict to make*
00:20:46 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
00:21:00 <iqubic> I love the perterbationsOf function, and I love it, and I love that I can understand it.
00:21:30 grdvnl joins (~gdrvnl@cpe-76-94-36-134.socal.res.rr.com)
00:21:42 <Axman6> koz_: you just need to apply yourself
00:21:58 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
00:21:58 <koz_> Axman6: Nah, too lazy. :P
00:22:03 <iqubic> <*> ???
00:22:18 <koz_> iqubic: fix ($)
00:22:27 <iqubic> What does that do?
00:22:34 <koz_> :t fix ($)
00:22:34 <Axman6> yeah, fuck the banking system
00:22:36 <lambdabot> a -> b
00:25:07 <solonarv> it's bottom
00:25:19 <solonarv> fix ($) = fix id = <<loops forever>>
00:25:54 <jle`> > let myfunc = fix ($) in myfunc `seq` "hello"
00:25:57 <lambdabot> "hello"
00:26:04 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
00:26:10 <jle`> not quite bottom, but one step away :)
00:26:17 × zebrag quits (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr) (Quit: Konversation terminated!)
00:26:17 <hpc> it's const bottom
00:26:22 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
00:26:36 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 256 seconds)
00:27:49 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
00:28:21 <hpc> one could argue that bottom and const bottom are the same because it's sometimes useful to assume seq doesn't exist
00:28:31 <hpc> i don't know if it ever got settled if that perspective was useful or not
00:28:43 <nshepperd> impending bottom
00:29:36 × solonarv quits (~solonarv@astrasbourg-552-1-28-212.w90-13.abo.wanadoo.fr) (Ping timeout: 240 seconds)
00:29:38 zebrag joins (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr)
00:29:49 <jle`> i'm sorry D:
00:30:02 × danvet quits (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 264 seconds)
00:30:20 <Axman6> one step away from bottom sounds like an imminent sexual harrassment suit
00:30:32 <koz_> Racy Haskell.
00:30:41 <koz_> (with 100% less MVar)
00:31:03 <Axman6> M'Var
00:31:03 × jneira quits (501e6453@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.100.83) (Quit: Connection closed)
00:31:10 <koz_> LOOOOOOL
00:31:16 <jle`> heh
00:31:45 <koz_> How does that saying go? "Haskellers make it a point not to inspect other people's bottoms?".
00:32:12 <Axman6> I am of the opinion that we don't use enough apostrophies in the middle of identifier names
00:32:14 <jle`> hpc: maybe in practice it'd be useful to distinguish the two so bang patterns don't blow up inadvertenly. but yeah, without seq i'm not sure how to distinguish
00:33:28 shatriff_ joins (~vitaliish@176.52.219.10)
00:33:35 <nshepperd> i invoked zip`ap`tail in aoc the other day, that's a start
00:33:49 <Axman6> praise be
00:34:16 × shatriff quits (~vitaliish@176.52.219.10) (Ping timeout: 246 seconds)
00:35:03 × Cthalupa quits (~cthulhu@47.186.47.75) (Ping timeout: 260 seconds)
00:36:04 Cthalupa joins (~cthulhu@47.186.47.75)
00:36:22 × lep-delete quits (~lep@94.31.83.149) (Ping timeout: 246 seconds)
00:36:48 × drincruz_ quits (~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 256 seconds)
00:37:48 <hpc> if you combine zip`ap`tail with https://wiki.haskell.org/Tying_the_Knot you get a pretzelcoatl
00:37:54 <koz_> Lol.
00:37:56 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
00:38:02 <nshepperd> hahaha
00:38:02 <monochrom> haha
00:38:54 <Axman6> I'm struggling to parse that - pretzel-coatl? pretzel-co-atl?
00:39:11 <koz_> Axman6: So what is an 'atl' then?
00:39:25 <Axman6> what's a coatl
00:39:40 <koz_> The categorical dual to an atl, naturally.
00:39:58 × carlomagno quits (~cararell@148.87.23.11) (Ping timeout: 256 seconds)
00:43:04 cosimone joins (~cosimone@5.170.241.99)
00:43:51 falafel_ joins (~falafel@pool-108-31-243-192.washdc.fios.verizon.net)
00:43:57 <monochrom> I just took it for a combination of "pretzel" and some Aztec word.
00:45:28 jumper149 joins (~jumper149@ip4d1622a9.dynamic.kabel-deutschland.de)
00:46:03 × gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
00:46:25 × falafel quits (~falafel@pool-108-31-243-192.washdc.fios.verizon.net) (Ping timeout: 264 seconds)
00:47:32 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:49:48 Axman6 needs to learn more Aztec
00:50:18 <Clint> you mean Nahuatl
00:50:52 <iqubic> Any time I see someone talk about coaxial cables, I always wonder if there are axial cables, and if there are the dual of the coaxial cables.
00:51:15 <monochrom> Oh, don't worry, all I know about Aztec names I learned from AOE2 and AOE3. Namely, have "tl" somewhere. :)
00:53:05 slack1256 joins (~slack1256@45.4.2.119)
00:56:51 <slack1256> https://imgur.com/a/Eb2yVgn does anyone know what the * means as a type descriptor?
00:57:48 <iqubic> Yeah, It means that the given value can have any type at all.
00:58:10 <iqubic> Although, I'm not sure how that relates your plot.
00:58:19 <iqubic> I don't even know what your plot is showing.
00:58:53 <Axman6> then why answer so authoritatively
00:59:14 <iqubic> No clue.
00:59:16 × cosimone quits (~cosimone@5.170.241.99) (Quit: cosimone)
00:59:17 <slack1256> don't worry, I just wanted to know about the * .
00:59:20 × amerigo quits (uid331857@gateway/web/irccloud.com/x-egprymtqwwmmkfhc) (Quit: Connection closed for inactivity)
01:00:03 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
01:02:01 × elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
01:03:27 × nickr quits (~nickr@185.204.1.185) (Remote host closed the connection)
01:05:59 × columbarius quits (~columbari@94.134.93.27) (Ping timeout: 260 seconds)
01:06:10 hexfive joins (~hexfive@50-47-142-195.evrt.wa.frontiernet.net)
01:07:30 × plutoniix quits (~q@node-uss.pool-125-24.dynamic.totinternet.net) (Quit: Leaving)
01:08:07 columbarius joins (~columbari@94.134.93.77)
01:10:44 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
01:12:11 jamm_ joins (~jamm@unaffiliated/jamm)
01:15:00 × Rudd0 quits (~Rudd0@185.189.115.108) (Ping timeout: 258 seconds)
01:16:02 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
01:17:56 × jumper149 quits (~jumper149@ip4d1622a9.dynamic.kabel-deutschland.de) (Quit: WeeChat 2.9)
01:20:15 conal joins (~conal@64.71.133.70)
01:20:37 danso joins (~dan@69-165-210-185.cable.teksavvy.com)
01:20:37 × brisbin quits (~patrick@pool-173-49-158-4.phlapa.fios.verizon.net) (Ping timeout: 264 seconds)
01:21:22 × DirefulSalt quits (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection)
01:21:31 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
01:23:55 SysRun joins (~SysRun@84.39.117.57)
01:24:35 × jamm_ quits (~jamm@unaffiliated/jamm) (Remote host closed the connection)
01:30:24 × seanparsons quits (~sean@cpc145088-gill21-2-0-cust281.20-1.cable.virginm.net) (Ping timeout: 256 seconds)
01:32:40 × dnlkrgr quits (~dnlkrgr@HSI-KBW-046-005-005-080.hsi8.kabel-badenwuerttemberg.de) (Ping timeout: 256 seconds)
01:32:48 ransom joins (~c4264035@2601:285:201:6720:b4dc:e74f:d48a:6f26)
01:37:05 seanparsons joins (~sean@cpc145088-gill21-2-0-cust281.20-1.cable.virginm.net)
01:39:42 tsrt^ joins (~hph@ip98-184-89-2.mc.at.cox.net)
01:40:22 × tsrt^ quits (~hph@ip98-184-89-2.mc.at.cox.net) (Client Quit)
01:40:30 × m0rphism quits (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 260 seconds)
01:41:03 guest1210 joins (~user@49.5.6.87)
01:41:45 shah^ joins (irt@ip98-184-89-2.mc.at.cox.net)
01:42:11 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:44:28 × Wuzzy quits (~Wuzzy@p549c9bc8.dip0.t-ipconnect.de) (Quit: Wuzzy)
01:45:36 Lord_of_Life joins (~Lord@46.217.217.151)
01:46:49 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:47:58 × Lord_of_Life_ quits (~Lord@46.217.220.39) (Ping timeout: 258 seconds)
01:48:38 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
01:49:53 × lassulus quits (~lassulus@NixOS/user/lassulus) (Ping timeout: 258 seconds)
01:50:03 × tomboy64 quits (~tomboy64@gateway/tor-sasl/tomboy64) (Ping timeout: 240 seconds)
01:51:16 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
01:51:29 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
01:51:52 conal joins (~conal@64.71.133.70)
01:52:07 lassulus joins (~lassulus@NixOS/user/lassulus)
01:52:50 lep-delete joins (~lep@94.31.80.94)
01:53:31 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 2.8)
01:53:56 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Ping timeout: 240 seconds)
01:54:49 × jmchael quits (~jmchael@87.112.60.168) (Ping timeout: 264 seconds)
01:55:56 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:56:58 skiold joins (~skiold@gateway/tor-sasl/skiold)
01:59:23 × skiold_ quits (~skiold@gateway/tor-sasl/skiold) (Ping timeout: 240 seconds)
01:59:51 × Akisy quits (~Akisy@4e69b241.skybroadband.com) (Ping timeout: 258 seconds)
02:00:58 tomboy64 joins (~tomboy64@gateway/tor-sasl/tomboy64)
02:01:04 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
02:01:50 <jle`> what's the language that lets me do 1e6 :: Int again?
02:02:06 × ransom quits (~c4264035@2601:285:201:6720:b4dc:e74f:d48a:6f26) (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:03:20 <Axman6> > 1e6 :: Int
02:03:23 <lambdabot> error:
02:03:24 <lambdabot> • No instance for (Fractional Int) arising from the literal ‘1e6’
02:03:24 <lambdabot> • In the expression: 1e6 :: Int
02:03:30 <jle`> er, the language extension
02:03:32 <jle`> sorry
02:03:41 <Axman6> damn, thought that might include the extension in the error
02:05:04 <monochrom> NumDecimals
02:05:05 × conal quits (~conal@64.71.133.70) (Ping timeout: 240 seconds)
02:06:01 <monochrom> and looking into the GHC user's guide for that led me to HexFloatLiterals
02:06:08 bitmagie joins (~Thunderbi@200116b806aa1d00a8f08c7e91bcab3b.dip.versatel-1u1.de)
02:06:20 <monochrom> Yikes, the exponent is still in base ten
02:06:27 <jle`> thanks :)
02:06:59 <Axman6> 0xa.bc07e0x2a
02:07:15 <Axman6> I see a small problem with this syntax...
02:07:17 <monochrom> err, I misread, it's more complicated
02:07:18 × Sheilong quits (uid293653@gateway/web/irccloud.com/x-pjysrbvdonubrfni) (Quit: Connection closed for inactivity)
02:07:23 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
02:08:14 dansho joins (~dansho@ec2-18-183-209-184.ap-northeast-1.compute.amazonaws.com)
02:08:32 drincruz_ joins (~adriancru@ool-44c748be.dyn.optonline.net)
02:09:28 conal joins (~conal@107.181.166.111)
02:10:15 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
02:11:25 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds)
02:14:48 × conal quits (~conal@107.181.166.111) (Quit: Computer has gone to sleep.)
02:15:05 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 240 seconds)
02:17:52 × xff0x quits (~fox@2001:1a81:52d1:1000:31d2:4099:6990:f516) (Ping timeout: 258 seconds)
02:18:33 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
02:18:35 conal joins (~conal@107.181.166.111)
02:18:44 × conal quits (~conal@107.181.166.111) (Client Quit)
02:19:05 <iqubic> jle`: What are you planning on doing with 1e6 as an integer literal?
02:19:37 jedws joins (~jedws@121.209.189.201)
02:19:43 xff0x joins (~fox@2001:1a81:530c:8200:25e6:7886:7059:40de)
02:19:50 × zebrag quits (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr) (Quit: Konversation terminated!)
02:22:58 zebrag joins (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr)
02:24:01 <monochrom> Ah OK, the exponent is written in base 10, and it is a power of two. So 1p14 means one * two^fourteen
02:24:17 × MOSCOS quits (~MOSCOS@122.54.107.175) (Remote host closed the connection)
02:24:37 <monochrom> So the mantissa is base 16, but the exponent is two^(base ten notation)
02:24:43 MOSCOS joins (~MOSCOS@122.54.107.175)
02:25:01 <monochrom> You see why I avoid "base 10"? :)
02:25:26 <Axman6> I'm surprised it's using ^
02:26:04 <c_wraith> iqubic: 1e6 is a very common thing to pass to threadSleep
02:26:12 <monochrom> Well, ^ is my notation
02:26:27 <iqubic> c_wraith: How long does that make it sleep for?
02:26:32 <c_wraith> 1 second
02:26:37 × st8less quits (~st8less@2603:a060:11fd:0:7c8c:847e:4223:c614) (Ping timeout: 272 seconds)
02:26:39 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
02:27:28 <glguy> % :set -XNumDecimals
02:27:29 <yahb> glguy:
02:27:31 <monochrom> This is why Lt. Cmdr. Data says, "believe me, to an android, 4.5 seconds feels like eternity"
02:27:37 <glguy> % 1e6 :: Int
02:27:37 <yahb> glguy: 1000000
02:27:55 <Axman6> That's what she said?
02:27:59 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:28:00 st8less joins (~st8less@inet-167-224-197-181.isp.ozarksgo.net)
02:28:49 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
02:29:40 <glguy> % :set -XNumericUnderscores -XHexFloatLiterals -XBinaryLiterals
02:29:40 <yahb> glguy:
02:29:58 <glguy> Full-power number literals
02:30:34 <c_wraith> fully armed and operational numeric parser
02:30:40 <monochrom> over-powered :)
02:31:18 <glguy> Technically we could turn on NegativeLiterals, but I'm not so sure that's an improvement
02:32:12 <monochrom> {-# LANGUAGE OverloadedString, OverpoweredNumLiterals #-}
02:32:27 <monochrom> Oh even better:
02:32:35 <monochrom> {-# LANGUAGE OverloadedString, OverpoweredNumLiterals, OverflowableInt #-}
02:33:00 <glguy> % 0x_1_p2
02:33:00 <yahb> glguy: 4
02:33:03 <monochrom> "it's all over the place" >:)
02:34:41 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
02:35:22 × skiold quits (~skiold@gateway/tor-sasl/skiold) (Remote host closed the connection)
02:35:41 skiold joins (~skiold@gateway/tor-sasl/skiold)
02:36:49 <dsal> OverblownExtensions
02:37:33 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
02:37:35 <monochrom> :)
02:41:14 olligobber joins (~olligobbe@unaffiliated/olligobber)
02:42:14 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Ping timeout: 260 seconds)
02:44:42 × olligobber quits (~olligobbe@unaffiliated/olligobber) (Remote host closed the connection)
02:44:43 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
02:44:45 cgfuh joins (~cgfuh@181.167.191.58)
02:45:09 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
02:45:33 Tario joins (~Tario@201.192.165.173)
02:46:09 × zebrag quits (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr) (Quit: Konversation terminated!)
02:46:19 × cgfuh quits (~cgfuh@181.167.191.58) (Client Quit)
02:49:53 zebrag joins (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr)
02:52:03 Stanley00 joins (~stanley00@unaffiliated/stanley00)
02:53:49 <z0_> in the context of queues what direction would right be (as in foldr)?
02:56:03 steven2 joins (~steven@pool-100-6-89-242.pitbpa.fios.verizon.net)
02:56:48 <koz_> z0_: How is the queue implemented?
02:57:02 <z0_> in other words, is the head of a queue the last element in or the next out?
02:57:05 <Axman6> generally I thnk of queues having elements added on the right and removed on the left
02:57:15 <z0_> koz_: two lists, inbos and outbox
02:57:21 <z0_> *inbox
02:57:22 <steven2> hello, how can I time the execution of a program that I'm running with stack? Stack run seems to take extra time compared to just running the exe
02:57:41 <Axman6> stack exec -- time foo-exe?
02:57:46 <koz_> z0_: Then foldr would be the same as for its equivalent list. At least that'd be the easiest.
02:58:16 <Axman6> with the two list implementation one list would usually be reversed
02:58:20 <z0_> well my doubt stems from the fact that one of the lists is reversed
02:58:31 <z0_> right
02:58:40 <z0_> is there a convention?
02:58:44 <koz_> Yeah, but there is a canonical list conversion - you reverse the 'tail' list and then append them to each other.
02:58:51 <koz_> So you just do that, then foldr the result.
02:58:56 <koz_> Ditto foldl'.
02:59:08 <Axman6> foldr f z (out,in) = foldr f (foldr f z (reverse in) out
02:59:08 <steven2> Axman6: that kind of works, but the output is a little mangled
02:59:10 <steven2> no newlines
02:59:44 <steven2> is there a stack command to get the path to the exe? otherwise I guess I can look for it when I need it
02:59:56 <Axman6> stack exec which foo-exe works
02:59:58 <koz_> stack exec -- which foo-exe
03:00:02 <koz_> Dammit ninja'd.
03:00:20 <Axman6> you're two hours ahead and I still beat you!
03:00:28 <koz_> Axman6: I know, I am terrible.
03:02:13 drbean joins (~drbean@TC210-63-209-45.static.apol.com.tw)
03:02:26 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
03:05:10 Aleyna joins (~Aleyna@4e69b241.skybroadband.com)
03:05:18 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
03:07:50 doct0rhu joins (~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net)
03:08:08 macrover joins (~macrover@ip68-108-126-211.lv.lv.cox.net)
03:08:41 <doct0rhu> @where paste
03:08:41 <lambdabot> Help us help you: please paste full code, input and/or output at eg https://paste.tomsmeding.com
03:10:18 <doct0rhu> https://paste.tomsmeding.com/n0lYCn6L
03:10:33 <doct0rhu> needs some help on stack.yaml syntax..
03:12:50 tensorpudding joins (~michael@unaffiliated/tensorpudding)
03:12:51 × mbomba quits (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0)
03:12:52 × falafel_ quits (~falafel@pool-108-31-243-192.washdc.fios.verizon.net) (Ping timeout: 265 seconds)
03:15:53 <koz_> doct0rhu: https://paste.tomsmeding.com/BhqsXPiX
03:16:14 <koz_> Mashing deps into the packages section is inadvisable.
03:16:44 × bitmagie quits (~Thunderbi@200116b806aa1d00a8f08c7e91bcab3b.dip.versatel-1u1.de) (Quit: bitmagie)
03:18:06 × ezzieyguywuf quits (~Unknown@unaffiliated/ezzieyguywuf) (Remote host closed the connection)
03:18:33 <doct0rhu> oh yes... that's the legacy behaviour..
03:18:35 <doct0rhu> thanks
03:18:50 <doct0rhu> they haven't updated this stack.yaml file for a long time
03:19:11 × urek quits (~urek@2804:7f1:e10a:4c43:c16d:b553:6dc5:9c45) (Ping timeout: 272 seconds)
03:19:25 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Ping timeout: 264 seconds)
03:20:29 ezzieyguywuf joins (~Unknown@unaffiliated/ezzieyguywuf)
03:21:20 × ezzieyguywuf quits (~Unknown@unaffiliated/ezzieyguywuf) (Remote host closed the connection)
03:23:45 Saukk joins (~Saukk@2001:998:ec:944:a00f:6382:4f0:3e7e)
03:28:01 × theDon quits (~td@muedsl-82-207-238-168.citykom.de) (Ping timeout: 258 seconds)
03:28:31 ezzieyguywuf joins (~Unknown@unaffiliated/ezzieyguywuf)
03:29:26 xirhtogal joins (~lagothrix@unaffiliated/lagothrix)
03:29:26 × lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (card.freenode.net (Nickname regained by services)))
03:29:26 xirhtogal is now known as lagothrix
03:29:58 theDon joins (~td@muedsl-82-207-238-079.citykom.de)
03:31:23 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
03:33:49 × columbarius quits (~columbari@94.134.93.77) (Ping timeout: 264 seconds)
03:35:28 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:38:45 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 258 seconds)
03:40:16 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
03:40:24 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
03:40:36 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
03:40:51 × Tops21 quits (~Tobias@dyndsl-095-033-092-168.ewe-ip-backbone.de) (Read error: Connection reset by peer)
03:44:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
03:45:08 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
03:48:51 × hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 260 seconds)
03:52:02 × revprez_anzio quits (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Quit: Lost terminal)
03:52:16 revprez_anzio joins (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
03:53:54 hyperisco joins (~hyperisco@d192-186-117-226.static.comm.cgocable.net)
03:55:44 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c9fa:63a9:d772:b19c) (Remote host closed the connection)
03:55:50 × doct0rhu quits (~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net) (Ping timeout: 260 seconds)
03:58:23 conal joins (~conal@172.255.125.158)
03:58:25 × conal quits (~conal@172.255.125.158) (Client Quit)
03:58:32 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
04:00:02 × alexelcu quits (~alexelcu@142.93.180.198) (Quit: ZNC 1.8.2 - https://znc.in)
04:00:58 alexelcu joins (~alexelcu@142.93.180.198)
04:03:06 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c9fa:63a9:d772:b19c)
04:03:17 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 258 seconds)
04:03:18 × slack1256 quits (~slack1256@45.4.2.119) (Ping timeout: 260 seconds)
04:04:17 Rudd0 joins (~Rudd0@185.189.115.103)
04:10:26 × natechan quits (~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Quit: WeeChat 2.9)
04:10:28 × zebrag quits (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr) (Quit: Konversation terminated!)
04:10:50 zebrag joins (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr)
04:13:44 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:17:01 sofabian joins (d995a8dc@217-149-168-220.nat.highway.telekom.at)
04:19:45 × ddellacosta quits (dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 240 seconds)
04:20:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
04:20:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
04:24:54 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
04:25:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
04:25:33 plutoniix joins (~q@184.82.204.178)
04:27:25 SanchayanMaity joins (~Sanchayan@171.61.82.143)
04:27:38 × SanchayanMaity quits (~Sanchayan@171.61.82.143) (Client Quit)
04:28:09 SanchayanMaity joins (~Sanchayan@171.61.82.143)
04:28:39 × SanchayanMaity quits (~Sanchayan@171.61.82.143) (Client Quit)
04:29:20 SanchayanMaity joins (~Sanchayan@171.61.82.143)
04:29:43 × SanchayanMaity quits (~Sanchayan@171.61.82.143) (Client Quit)
04:30:01 mbomba joins (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca)
04:30:39 SanchayanMaity joins (~Sanchayan@171.61.82.143)
04:30:59 × SanchayanMaity quits (~Sanchayan@171.61.82.143) (Client Quit)
04:32:05 SanchayanMaity joins (~Sanchayan@171.61.82.143)
04:32:37 × drincruz_ quits (~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 246 seconds)
04:33:09 × SanchayanMaity quits (~Sanchayan@171.61.82.143) (Remote host closed the connection)
04:33:24 SanchayanMaity joins (~Sanchayan@171.61.82.143)
04:33:54 × SanchayanMaity quits (~Sanchayan@171.61.82.143) (Client Quit)
04:34:41 drincruz_ joins (~adriancru@ool-44c748be.dyn.optonline.net)
04:34:43 × drbean quits (~drbean@TC210-63-209-45.static.apol.com.tw) (Ping timeout: 246 seconds)
04:38:43 × sparsity quits (5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) (Quit: Connection closed)
04:39:39 Feuermagier_ joins (~Feuermagi@213.178.26.41)
04:41:20 natechan joins (~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
04:42:44 argento joins (~argent0@168.227.97.29)
04:44:07 × Feuermagier quits (~Feuermagi@213.178.26.41) (Read error: Connection reset by peer)
04:44:07 × Feuermagier_ quits (~Feuermagi@213.178.26.41) (Read error: Connection reset by peer)
04:44:14 Feuermagier__ joins (~Feuermagi@213.178.26.41)
04:45:00 × drincruz_ quits (~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 256 seconds)
04:45:40 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 265 seconds)
04:46:12 phaul joins (~phaul@ruby/staff/phaul)
04:47:14 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
04:48:06 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
04:48:36 × Tario quits (~Tario@201.192.165.173) (Ping timeout: 240 seconds)
04:51:44 × steven2 quits (~steven@pool-100-6-89-242.pitbpa.fios.verizon.net) (Quit: WeeChat 2.8)
04:52:56 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 240 seconds)
04:53:17 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
04:54:47 phaul joins (~phaul@ruby/staff/phaul)
04:56:48 polyphem joins (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889)
04:59:09 × mbomba quits (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0)
05:00:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
05:00:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
05:04:05 × dansho quits (~dansho@ec2-18-183-209-184.ap-northeast-1.compute.amazonaws.com) (Remote host closed the connection)
05:04:19 × Feuermagier__ quits (~Feuermagi@213.178.26.41) (Remote host closed the connection)
05:04:51 Feuermagier joins (~Feuermagi@213.178.26.41)
05:05:04 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
05:05:18 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
05:07:13 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c9fa:63a9:d772:b19c) (Remote host closed the connection)
05:07:38 × sofabian quits (d995a8dc@217-149-168-220.nat.highway.telekom.at) (Remote host closed the connection)
05:08:35 × macrover quits (~macrover@ip68-108-126-211.lv.lv.cox.net) (Remote host closed the connection)
05:09:04 × hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Read error: Connection reset by peer)
05:10:54 × shatriff_ quits (~vitaliish@176.52.219.10) (Remote host closed the connection)
05:11:28 shatriff joins (~vitaliish@176.52.219.10)
05:16:26 × da39a3ee5e6b4b0d quits (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:17:06 × urodna quits (~urodna@unaffiliated/urodna) (Quit: urodna)
05:19:21 × vicfred quits (~vicfred@unaffiliated/vicfred) (Quit: Leaving)
05:22:49 da39a3ee5e6b4b0d joins (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th)
05:23:10 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:24:08 × jrm quits (~jrm@freebsd/developer/jrm) (Quit: ciao)
05:26:41 × da39a3ee5e6b4b0d quits (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th) (Client Quit)
05:27:56 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
05:28:05 essem joins (essem@gateway/vpn/privateinternetaccess/essem)
05:29:21 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
05:38:29 jrm joins (~jrm@freebsd/developer/jrm)
05:39:24 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 256 seconds)
05:40:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
05:40:39 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
05:43:24 tessier joins (~treed@mail.copilotco.com)
05:43:24 × tessier quits (~treed@mail.copilotco.com) (Changing host)
05:43:24 tessier joins (~treed@kernel-panic/copilotco)
05:43:56 × argento quits (~argent0@168.227.97.29) (Ping timeout: 256 seconds)
05:44:44 × xensky quits (~xensky@xengarden.xen.prgmr.com) (Quit: i quit)
05:44:54 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
05:45:02 <olligobber> :exf (a -> a -> b) -> a -> b
05:45:04 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c9fa:63a9:d772:b19c)
05:45:06 <olligobber> no?
05:45:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
05:45:27 <olligobber> :help
05:45:37 <olligobber> :?
05:45:39 <olligobber> k
05:46:26 boxscape joins (54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8)
05:46:54 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
05:47:45 × chkno quits (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Quit: leaving)
05:48:02 xensky joins (~xensky@xengarden.xen.prgmr.com)
05:49:27 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c9fa:63a9:d772:b19c) (Ping timeout: 260 seconds)
05:52:02 rayyyy joins (~nanoz@gateway/tor-sasl/nanoz)
05:52:03 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 260 seconds)
05:53:04 doct0rhu joins (~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net)
05:54:38 w28715 joins (~root@47.245.54.240)
05:58:45 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:59:24 × w28715 quits (~root@47.245.54.240) (Quit: leaving)
06:00:21 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
06:00:36 <olligobber> wait, is it just join?
06:00:38 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
06:03:17 <keltono> olligobber: what are you looking for?
06:03:51 <olligobber> join :: (a->a->b)->a->b
06:03:58 <olligobber> I found it
06:04:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
06:05:07 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
06:05:41 cfricke joins (~cfricke@unaffiliated/cfricke)
06:05:57 <olligobber> turns out I didn't actually need it though
06:07:52 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 258 seconds)
06:08:52 × dwt quits (~dwt@c-98-200-58-177.hsd1.tx.comcast.net) (Ping timeout: 256 seconds)
06:09:05 <iqubic> What does liftA2 (+) do?
06:09:11 <iqubic> :t liftA2 (+)
06:09:14 <lambdabot> (Applicative f, Num c) => f c -> f c -> f c
06:09:49 <iqubic> I see.
06:10:54 × m-renaud quits (sid333785@gateway/web/irccloud.com/x-juxddenpfgpoeigc) (Read error: Connection reset by peer)
06:10:54 × rslima_____ quits (sid26145@gateway/web/irccloud.com/x-txddsksmhveehsrq) (Read error: Connection reset by peer)
06:10:55 × whez quits (sid470288@gateway/web/irccloud.com/x-izvwsjinqbiccect) (Read error: Connection reset by peer)
06:10:59 × mankyKitty quits (sid31287@gateway/web/irccloud.com/x-hipdokcciegrtmbw) (Read error: Connection reset by peer)
06:11:02 whez joins (sid470288@gateway/web/irccloud.com/x-bovdnbstucgyrclj)
06:11:04 m-renaud joins (sid333785@gateway/web/irccloud.com/x-bvdukrsbucqgcnqd)
06:11:09 mankyKitty joins (sid31287@gateway/web/irccloud.com/x-sisdzlgwpycrovxr)
06:11:22 × kristjansson quits (sid126207@gateway/web/irccloud.com/x-rtjbrjzhlcogpoxy) (Ping timeout: 268 seconds)
06:11:22 × glowcoil quits (sid3405@gateway/web/irccloud.com/x-ywtzdmwgkfgphlzr) (Ping timeout: 268 seconds)
06:11:39 × amatecha__ quits (sid10006@gateway/web/irccloud.com/x-kzvefycrrmalzbls) (Read error: Connection reset by peer)
06:11:40 × bitonic quits (sid61915@gateway/web/irccloud.com/x-nurphsregtkooaez) (Read error: Connection reset by peer)
06:11:42 × JSharp quits (sid4580@wikia/JSharp) (Read error: Connection reset by peer)
06:11:42 glowcoil joins (sid3405@gateway/web/irccloud.com/x-lqqmqvcnwcqvjpmg)
06:11:46 rslima_____ joins (sid26145@gateway/web/irccloud.com/x-ulbqzbetuoeoivoe)
06:12:03 kristjansson joins (sid126207@gateway/web/irccloud.com/x-zemoiiyajxcgmkny)
06:12:07 × shatriff quits (~vitaliish@176.52.219.10) (Ping timeout: 260 seconds)
06:12:09 JSharp joins (sid4580@wikia/JSharp)
06:12:15 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
06:12:16 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 256 seconds)
06:12:30 amatecha__ joins (sid10006@gateway/web/irccloud.com/x-jdqgbwrgwdnkyeme)
06:12:36 bitonic joins (sid61915@gateway/web/irccloud.com/x-oenzzwnusihqnkjo)
06:15:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
06:15:27 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:15:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
06:16:00 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 272 seconds)
06:16:23 invaser joins (~Thunderbi@128-124-177-94.mobile.vf-ua.net)
06:16:52 × mounty quits (~mounty@2001:8000:2f59:0:955e:b3d4:6deb:61b5) (Ping timeout: 260 seconds)
06:17:37 × elliott__ quits (~elliott@pool-108-45-178-3.washdc.fios.verizon.net) (Ping timeout: 264 seconds)
06:18:47 da39a3ee5e6b4b0d joins (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th)
06:19:41 × polyphem quits (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Ping timeout: 272 seconds)
06:23:36 × da39a3ee5e6b4b0d quits (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th) (Ping timeout: 272 seconds)
06:23:46 × Saukk quits (~Saukk@2001:998:ec:944:a00f:6382:4f0:3e7e) (Remote host closed the connection)
06:24:05 × sim590 quits (~sim590@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 240 seconds)
06:24:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
06:25:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
06:25:47 fissureman joins (~quassel@c-73-163-84-25.hsd1.dc.comcast.net)
06:26:26 sim590 joins (~sim590@modemcable090.207-203-24.mc.videotron.ca)
06:27:08 × Feuermagier quits (~Feuermagi@213.178.26.41) (Remote host closed the connection)
06:27:25 × invaser quits (~Thunderbi@128-124-177-94.mobile.vf-ua.net) (Ping timeout: 258 seconds)
06:28:16 dwt joins (~dwt@c-98-200-58-177.hsd1.tx.comcast.net)
06:28:33 da39a3ee5e6b4b0d joins (~da39a3ee5@171.5.29.209)
06:30:26 × bitmapper quits (uid464869@gateway/web/irccloud.com/x-vhcgctdtktfskqbh) (Quit: Connection closed for inactivity)
06:33:04 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
06:35:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
06:35:23 × dwt quits (~dwt@c-98-200-58-177.hsd1.tx.comcast.net) (Ping timeout: 265 seconds)
06:35:25 × dolio quits (~dolio@haskell/developer/dolio) (Read error: Connection reset by peer)
06:35:38 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
06:36:05 dwt joins (~dwt@c-98-200-58-177.hsd1.tx.comcast.net)
06:36:25 Feuermagier joins (~Feuermagi@213.178.26.41)
06:36:39 dolio joins (~dolio@haskell/developer/dolio)
06:39:44 × centril quits (~centril@213-66-146-92-no250.tbcn.telia.com) (Ping timeout: 265 seconds)
06:39:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
06:40:10 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
06:41:45 acidjnk_new joins (~acidjnk@p200300d0c719ff6609235681fd8d59d5.dip0.t-ipconnect.de)
06:43:57 × Foritus quits (~buggery@cpc91316-watf11-2-0-cust68.15-2.cable.virginm.net) (Quit: ლ(ಠ益ಠლ) .:. <Ashley> my porn is hidden in a folder called "BBC Micro Emulator")
06:44:53 coot joins (~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl)
06:45:27 Foritus joins (~buggery@cpc91316-watf11-2-0-cust68.15-2.cable.virginm.net)
06:46:54 Vulfe joins (~vulfe@2600:1702:31b0:34e0:c9fa:63a9:d772:b19c)
06:47:34 actuallybatman joins (~sam@S010664777dafd303.cg.shawcable.net)
06:51:40 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
06:51:59 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:c9fa:63a9:d772:b19c) (Ping timeout: 272 seconds)
06:59:09 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
07:00:12 bitmagie joins (~Thunderbi@200116b806fa5f00c900c61d068f287f.dip.versatel-1u1.de)
07:00:23 × phasespace quits (~sar@89-162-33-21.fiber.signal.no) (Ping timeout: 258 seconds)
07:00:26 × bitmagie quits (~Thunderbi@200116b806fa5f00c900c61d068f287f.dip.versatel-1u1.de) (Client Quit)
07:00:39 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:02:20 × MOSCOS quits (~MOSCOS@122.54.107.175) (Remote host closed the connection)
07:02:48 MOSCOS joins (~MOSCOS@122.54.107.175)
07:03:54 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 265 seconds)
07:04:23 centril joins (~centril@213-66-146-92-no250.tbcn.telia.com)
07:04:50 × MOSCOS quits (~MOSCOS@122.54.107.175) (Remote host closed the connection)
07:05:20 MOSCOS joins (~MOSCOS@122.54.107.175)
07:05:44 × MOSCOS quits (~MOSCOS@122.54.107.175) (Max SendQ exceeded)
07:05:45 × sim590 quits (~sim590@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 258 seconds)
07:06:13 MOSCOS joins (~MOSCOS@122.54.107.175)
07:06:19 × MOSCOS quits (~MOSCOS@122.54.107.175) (Max SendQ exceeded)
07:06:48 MOSCOS joins (~MOSCOS@122.54.107.175)
07:08:40 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:10:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
07:10:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
07:12:57 sim590 joins (~sim590@modemcable090.207-203-24.mc.videotron.ca)
07:13:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
07:14:30 nolrai joins (4c1bcada@c-76-27-202-218.hsd1.or.comcast.net)
07:14:43 × ChaiTRex quits (~ChaiTRex@gateway/tor-sasl/chaitrex) (Ping timeout: 240 seconds)
07:15:54 jamm_ joins (~jamm@unaffiliated/jamm)
07:16:25 × echoreply quits (~echoreply@unaffiliated/echoreply) (Ping timeout: 264 seconds)
07:18:27 knupfer joins (~Thunderbi@200116b82c005200fc12cafffee282c5.dip.versatel-1u1.de)
07:18:30 × knupfer quits (~Thunderbi@200116b82c005200fc12cafffee282c5.dip.versatel-1u1.de) (Client Quit)
07:18:41 knupfer joins (~Thunderbi@i5E86B451.versanet.de)
07:19:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
07:20:04 phasespace joins (~sar@80-89-47-117.inet.signal.no)
07:20:07 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
07:21:08 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
07:22:26 chele joins (~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
07:22:58 solonarv joins (~solonarv@astrasbourg-552-1-28-212.w90-13.abo.wanadoo.fr)
07:23:06 wonko7 joins (~wonko7@2a01:e35:2ffb:7040:14a1:46f4:68f7:2133)
07:24:19 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:24:58 mbomba joins (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca)
07:25:54 × Sgeo quits (~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
07:28:57 × jamm_ quits (~jamm@unaffiliated/jamm) (Remote host closed the connection)
07:30:58 × xff0x quits (~fox@2001:1a81:530c:8200:25e6:7886:7059:40de) (Quit: xff0x)
07:31:19 dhouthoo joins (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be)
07:31:39 danvet joins (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
07:32:11 aqd joins (~aqd@87-92-163-238.rev.dnainternet.fi)
07:32:20 christo joins (~chris@81.96.113.213)
07:34:12 × Sonolin quits (~Sonolin@184.103.179.49) (Ping timeout: 256 seconds)
07:35:13 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
07:35:50 × mbomba quits (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0)
07:37:22 jamm_ joins (~jamm@unaffiliated/jamm)
07:38:23 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
07:39:16 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 240 seconds)
07:39:50 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
07:40:06 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 256 seconds)
07:40:16 xff0x joins (~fox@2001:1a81:530c:8200:84b2:75ac:f6ea:70c4)
07:40:19 × tput quits (~tput@S0106a84e3fe54613.ed.shawcable.net) (Ping timeout: 260 seconds)
07:41:18 phaul joins (~phaul@ruby/staff/phaul)
07:42:56 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
07:43:26 ChaiTRex joins (~ChaiTRex@gateway/tor-sasl/chaitrex)
07:44:12 knupfer1 joins (~Thunderbi@200116b82c005200315614b81f17bc89.dip.versatel-1u1.de)
07:44:17 × knupfer quits (~Thunderbi@i5E86B451.versanet.de) (Quit: knupfer)
07:44:17 knupfer1 is now known as knupfer
07:44:26 × knupfer quits (~Thunderbi@200116b82c005200315614b81f17bc89.dip.versatel-1u1.de) (Client Quit)
07:44:38 knupfer joins (~Thunderbi@200116b82c005200415d44ff72400032.dip.versatel-1u1.de)
07:45:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
07:45:35 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
07:46:07 × essem quits (essem@gateway/vpn/privateinternetaccess/essem) (Ping timeout: 256 seconds)
07:47:03 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:49:44 <siraben> @unmtl ReaderT u (StateT s (ContT r m)) a
07:49:45 <lambdabot> u -> s -> (a -> s -> m r) -> m r
07:49:52 × heatsink quits (~heatsink@2600:1700:bef1:5e10:deb:313c:b080:2641) (Remote host closed the connection)
07:49:54 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
07:50:04 <siraben> I like me a good `a -> s -> m r` video
07:50:11 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
07:51:25 × boxscape quits (54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8) (Ping timeout: 240 seconds)
07:51:27 × SysRun quits (~SysRun@84.39.117.57) (Remote host closed the connection)
07:54:38 × pjb quits (~t@2a01cb04063ec500548477681310a8e6.ipv6.abo.wanadoo.fr) (Ping timeout: 264 seconds)
07:55:57 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
07:56:12 × knupfer quits (~Thunderbi@200116b82c005200415d44ff72400032.dip.versatel-1u1.de) (Ping timeout: 268 seconds)
07:59:27 × amiri quits (~amiri@cpe-76-91-154-9.socal.res.rr.com) (Ping timeout: 260 seconds)
08:00:00 oish joins (~charlie@228.25.169.217.in-addr.arpa)
08:00:16 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Client Quit)
08:00:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
08:00:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
08:01:48 echoreply joins (~echoreply@unaffiliated/echoreply)
08:03:58 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
08:04:01 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
08:04:42 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
08:05:17 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
08:05:33 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
08:06:00 boxscape joins (54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8)
08:07:13 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 265 seconds)
08:13:02 mbomba joins (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca)
08:13:56 Varis joins (~Tadas@unaffiliated/varis)
08:14:29 christo joins (~chris@81.96.113.213)
08:14:48 × mbomba quits (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Client Quit)
08:18:58 × christo quits (~chris@81.96.113.213) (Ping timeout: 256 seconds)
08:22:10 × danso quits (~dan@69-165-210-185.cable.teksavvy.com) (Quit: WeeChat 2.9)
08:23:23 dnlkrgr joins (~dnlkrgr@HSI-KBW-046-005-005-080.hsi8.kabel-badenwuerttemberg.de)
08:25:20 × MOSCOS quits (~MOSCOS@122.54.107.175) (Remote host closed the connection)
08:25:46 MOSCOS joins (~MOSCOS@122.54.107.175)
08:25:50 Aquazi joins (uid312403@gateway/web/irccloud.com/x-juroagyriejbnvke)
08:26:12 raichoo joins (~raichoo@dslb-188-100-001-158.188.100.pools.vodafone-ip.de)
08:26:58 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 260 seconds)
08:29:32 invaser joins (~Thunderbi@31.148.23.125)
08:30:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
08:30:39 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
08:34:14 × invaser quits (~Thunderbi@31.148.23.125) (Read error: Connection reset by peer)
08:35:00 invaser joins (~Thunderbi@31.148.23.125)
08:37:42 × invaser quits (~Thunderbi@31.148.23.125) (Client Quit)
08:39:56 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
08:40:11 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
08:42:08 alorente joins (~alorente@s91904426.blix.com)
08:45:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
08:45:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
08:46:04 gproto23 joins (~gproto23@unaffiliated/gproto23)
08:47:18 <koz_> siraben: Ba-doom-psh.
08:49:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
08:50:10 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
08:50:23 heatsink joins (~heatsink@2600:1700:bef1:5e10:cc2f:8781:f0e6:fcfe)
08:51:18 m0rphism joins (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
08:54:52 × gproto23 quits (~gproto23@unaffiliated/gproto23) (Quit: Leaving)
08:55:50 × heatsink quits (~heatsink@2600:1700:bef1:5e10:cc2f:8781:f0e6:fcfe) (Ping timeout: 264 seconds)
08:59:13 <pavonia> Is there a way to make the handle opened by openTempFile read-access-only afterwards? I have to pass it to an external library that tries to gain write-access again
08:59:55 gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh)
09:00:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
09:00:36 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
09:03:01 rdd joins (~rdd@c-2983e555.012-81-73746f39.cust.ownit.se)
09:04:28 argento joins (~argent0@168.227.97.29)
09:04:48 SanchayanMaity joins (~Sanchayan@122.181.205.6)
09:04:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
09:05:11 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
09:06:30 × doct0rhu quits (~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net) (Quit: Leaving)
09:06:48 doct0rhu joins (~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net)
09:07:25 <pavonia> Never mind, I can just close the handle
09:10:58 × hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-xgwlefwsyyfjewad) (Quit: Connection closed for inactivity)
09:13:34 Yumasi joins (~guillaume@2a01:e0a:5cb:4430:5178:619c:fc92:5a85)
09:14:10 phaul joins (~phaul@ruby/staff/phaul)
09:14:35 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
09:14:51 × pavonia quits (~user@unaffiliated/siracusa) (Quit: Bye!)
09:15:21 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
09:15:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
09:16:30 columbarius joins (~columbari@87.123.198.202)
09:19:59 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
09:20:15 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
09:20:56 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 272 seconds)
09:22:28 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
09:23:06 pavonia joins (~user@unaffiliated/siracusa)
09:26:42 kuribas joins (~user@ptr-25vy0i7q16oj3vk3ynd.18120a2.ip6.access.telenet.be)
09:27:08 <tomsmeding> koz_: mashing deps into the packages section might be inadvisable, but what if I want to put a flag on a dependency?
09:27:19 × rdd quits (~rdd@c-2983e555.012-81-73746f39.cust.ownit.se) (Ping timeout: 246 seconds)
09:27:59 <merijn> tomsmeding: You can't put flags on dependencies in .cabal
09:29:07 <tomsmeding> also not in cabal without the . ?
09:29:26 <tomsmeding> that would explain my trouble :p
09:29:50 <tomsmeding> flags are really a niche feature then
09:29:58 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
09:30:20 Amras joins (~Amras@unaffiliated/amras)
09:31:45 <merijn> tomsmeding: Flags are intended to help toggle between multiple possible build configurations, *not* enabling/disabling features, which is why you cannot explicitly set them
09:32:10 <merijn> Of course people ignore what the docs say they're supposed to be used for and use them to control features *anyway*
09:32:28 <tomsmeding> so in layman's speak, flags are for the developers of a package, not for its users
09:32:34 <merijn> And then you're hosed, because you can't reliably depend on those features/flags
09:32:42 × datajerk quits (~datajerk@sense.net) (Ping timeout: 256 seconds)
09:33:04 × jamm_ quits (~jamm@unaffiliated/jamm) (Remote host closed the connection)
09:34:05 <maerwald> merijn: that's what happens if you give people too many tools
09:34:09 <merijn> tomsmeding: look at, for example, the text package which has flags for depending on bytestring-builder and integer-simple
09:34:28 <merijn> tomsmeding: The idea is that cabal tries toggling flags to see if enabling those lets it solve the build plan
09:34:34 jamm_ joins (~jamm@unaffiliated/jamm)
09:34:37 <tomsmeding> does cabal?
09:34:42 <tomsmeding> that's horrifying
09:34:57 <maerwald> I agree, it's a misfeature
09:34:59 <merijn> tomsmeding: Flags by default are automatic and cabal will try toggling automatic flags, yes
09:35:06 <tomsmeding> docs?
09:35:15 <tomsmeding> I want to make some people regret their decisions with this information
09:35:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
09:35:28 <merijn> https://cabal.readthedocs.io/en/latest/cabal-package.html#resolution-of-conditions-and-flags
09:35:36 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
09:35:48 <tomsmeding> "If the user does not fix the value of a flag" -- so they can?
09:35:49 <maerwald> if you're concerned about that, freeze files also pin the flags
09:35:58 <tomsmeding> right freeze files
09:37:10 <tomsmeding> does stack inherit this behaviour or does the snapshot-oriented structure make that unnecessary?
09:37:15 thc202 joins (~thc202@unaffiliated/thc202)
09:37:23 <merijn> tomsmeding: Relying on flags for features is broken even if cabal doesn't toggle flags, because, well, you can't specify flags of dependencies
09:37:35 <tomsmeding> except in a freeze file?
09:37:56 <merijn> a freeze file is simply "a fully specified build plan, serialised to disk"
09:38:16 <merijn> tomsmeding: a library can't really sensibly have a freeze file/build plan, that only works for executables
09:38:16 <tomsmeding> right so an adventurous user can change it and hence attain their goals of specifying flags
09:38:23 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 240 seconds)
09:38:26 <tomsmeding> good point
09:38:32 <merijn> tomsmeding: imo, that's the biggest problem
09:38:42 <tomsmeding> luckily the case I'm thinking about does have an executable as the end-user
09:38:43 <merijn> Should've just not given users *any* tools for specifying flags
09:38:52 <merijn> That would've discouraged people from using them like this
09:38:58 <maerwald> merijn: or breaking API :p
09:39:02 × jamm_ quits (~jamm@unaffiliated/jamm) (Ping timeout: 264 seconds)
09:39:41 <merijn> maerwald: hmm?
09:39:56 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
09:40:07 <maerwald> was just trying to go on a tangent why PVP is a similar problem :p
09:40:10 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
09:40:27 datajerk joins (~datajerk@sense.net)
09:40:34 sord937 joins (~sord937@gateway/tor-sasl/sord937)
09:40:36 × Cthalupa quits (~cthulhu@47.186.47.75) (Ping timeout: 240 seconds)
09:40:51 <maerwald> but then again, it's kind of the purpose there
09:41:11 × fissureman quits (~quassel@c-73-163-84-25.hsd1.dc.comcast.net) (Ping timeout: 260 seconds)
09:41:44 × rayyyy quits (~nanoz@gateway/tor-sasl/nanoz) (Quit: Leaving)
09:41:50 Cthalupa joins (~cthulhu@47.186.47.75)
09:42:00 fissureman joins (~quassel@c-73-163-84-25.hsd1.dc.comcast.net)
09:42:05 × Lord_of_Life quits (~Lord@46.217.217.151) (Changing host)
09:42:05 Lord_of_Life joins (~Lord@unaffiliated/lord-of-life/x-0885362)
09:42:27 <tomsmeding> people are slightly more used to versions meaning something, though
09:42:34 Vulfe joins (~vulfe@2600:1702:31b0:34e0:6541:1b91:3fbc:465)
09:42:45 <tomsmeding> they're not used to flags not being for, well, configuration
09:43:05 <maerwald> *API* configuration
09:43:10 <maerwald> implementation configuration yes
09:43:42 <tomsmeding> I'm in particular thinking of a package that has a 'debug' flag that enables some extra stuff at runtime
09:44:02 <tomsmeding> is that a valid use of a flag? the API doesn't change code-wise, but that may be behaviour that a _user_ wants to toggle
09:44:07 <maerwald> but that's an easy one to solve: just create a package with a different name and the same API. Globablly unique module names is nonsense anyway
09:44:25 <merijn> tomsmeding: If both behaviours are reasonable the API should let you select them at runtime
09:44:29 <maerwald> that's what most distros do as well, only very few have actual flags... and those that do regret it
09:45:13 <merijn> tomsmeding: Instead of having 1 package supporting two variants, just implement a core package that gets wrapped by 2 independent packages for the specialisation
09:45:30 __monty__ joins (~toonn@unaffiliated/toonn)
09:45:40 <maerwald> but then you ned || dependencies
09:46:00 <merijn> maerwald: did you have a stroke there? :p
09:46:15 <maerwald> ...
09:46:27 <merijn> tomsmeding: i.e. what persistent does via "persistent" and "persistent-sqlite", "persistent-postgres"
09:46:37 <merijn> maerwald: that sentence doesn't parse
09:46:51 <maerwald> try a different parser!
09:46:56 <tomsmeding> 'but then you need disjunctive dependencies'?
09:47:17 kritzefitz joins (~kritzefit@fw-front.credativ.com)
09:47:20 <merijn> Why wouldn't you be able to use both?
09:47:21 <tomsmeding> but I see merijn
09:47:26 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:6541:1b91:3fbc:465) (Ping timeout: 264 seconds)
09:47:30 × da39a3ee5e6b4b0d quits (~da39a3ee5@171.5.29.209) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:47:31 <merijn> I can mix persistent-sqlite and persistent-postgres just fine
09:47:48 <merijn> tomsmeding: Similarly, I have this (unusable for mere mortals) module https://hackage.haskell.org/package/broadcast-chan-0.2.1.1/docs/BroadcastChan-Extra.html
09:47:55 <tomsmeding> then again the debug flag here toggles whether the relevant functionality is available _at all_; it can still be turned on/off
09:48:04 <tomsmeding> so I assume it's for performance
09:48:07 <merijn> tomsmeding: Which I then use to have separate versions for conduit/pipes
09:48:23 <maerwald> merijn: no, I mean if you remove flags entirely and opt for creating a new package per flag, then you must be able to say || ( openssl libressl )
09:48:30 pbgc joins (~pbgc@a89-152-145-91.cpe.netcabo.pt)
09:48:48 <tomsmeding> merijn: some neat type signatures in that module
09:48:58 × coot quits (~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
09:49:16 <merijn> maerwald: I'm not saying "remove flags", I just meant that "the people who use flags to control API should invert their selection by having a separate package per choice"
09:49:33 <maerwald> I said "remove flags" :p
09:49:48 <maerwald> but I'm not sure that's a good thing
09:50:00 <merijn> maerwald: your || notation is literally what flags were added for, though :p
09:50:07 <maerwald> || deps are a wart for package implementation dependencies
09:50:17 <merijn> maerwald: We should just remove the CLI interface letting users control them :p
09:50:21 <maerwald> merijn: yes, that's what I said and they're still different
09:50:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
09:50:30 <maerwald> hmm
09:50:38 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
09:50:41 <tomsmeding> I tentatively agree with merijn
09:50:54 <merijn> tomsmeding: The more usable versions are in another module: https://hackage.haskell.org/package/broadcast-chan-0.2.1.1/docs/BroadcastChan.html#v:parMapM_
09:50:56 LKoen joins (~LKoen@243.169.9.109.rev.sfr.net)
09:51:17 <merijn> tomsmeding: Or the conduit version: https://hackage.haskell.org/package/broadcast-chan-conduit-0.2.1.1/docs/BroadcastChan-Conduit.html#v:parMapM
09:51:17 <tomsmeding> or make it available to users, but under a conspicuous name like --override-build-flag kaas=true
09:51:45 da39a3ee5e6b4b0d joins (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th)
09:51:53 heatsink joins (~heatsink@2600:1700:bef1:5e10:e85f:7c7d:b6c9:7820)
09:52:09 × quinn quits (~quinn@c-73-223-224-163.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
09:52:53 <tomsmeding> merijn: side note, if anyone ever comes asking about controlling flags again, please pass that docs section to them; that will be cleansing enough
09:54:56 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
09:54:58 <tomsmeding> salient detail: that docs has the sentence "If a package descriptions specifies configuration flags the package user can [control these in several ways]." -- where the [] is a dead link
09:55:12 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
09:56:27 jamm_ joins (~jamm@unaffiliated/jamm)
09:56:45 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
09:57:02 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e85f:7c7d:b6c9:7820) (Ping timeout: 264 seconds)
09:57:49 quinn joins (~quinn@c-73-223-224-163.hsd1.ca.comcast.net)
10:00:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
10:00:36 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:01:36 × oish quits (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 256 seconds)
10:03:17 <boxscape> % type family Undefined :: k where
10:03:18 <yahb> boxscape:
10:03:29 <boxscape> % :k Undefined :: (forall k . k)
10:03:29 <yahb> boxscape: ; <interactive>:1:1: error:; * Expected kind `forall k. k', but `Undefined' has kind `k0'; * In the type `Undefined :: (forall k. k)'
10:03:34 <boxscape> % type family Undefined :: forall k . k where
10:03:34 <yahb> boxscape:
10:03:36 <boxscape> % :k Undefined :: (forall k . k)
10:03:36 <yahb> boxscape: k
10:03:42 <boxscape> why are these type families different?
10:04:17 oish joins (~charlie@228.25.169.217.in-addr.arpa)
10:04:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
10:05:07 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:06:25 <siraben> Is it possible to write this function? `foo :: (u -> (a -> s -> r) -> s -> r) -> (u -> (a -> s -> Maybe r) -> s -> Maybe r)`
10:07:17 <boxscape> @djinn (u -> (a -> s -> r) -> s -> r) -> (u -> (a -> s -> Maybe r) -> s -> Maybe r)
10:07:18 <lambdabot> f _ _ _ _ = Nothing
10:07:54 <tomsmeding> technically correct
10:08:43 × howdoi quits (uid224@gateway/web/irccloud.com/x-cazclqzweogdjlbq) (Quit: Connection closed for inactivity)
10:10:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
10:10:39 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:11:04 <siraben> @type \f u k s -> Just (f u (\a s -> fromJust (k a s)) s)
10:11:08 <lambdabot> (t1 -> (t2 -> t3 -> a1) -> t4 -> a2) -> t1 -> (t2 -> t3 -> Maybe a1) -> t4 -> Maybe a2
10:11:10 <siraben> i have this right now but is it possible to avoid fromJust?
10:11:35 <siraben> using applicatives don't seem to help since it's inside one of the args to f
10:11:58 <tomsmeding> I think you can't, precisely because f doesn't allow any kind of functor-like behaviour in its a->s->r argument
10:12:42 <tomsmeding> you'd be able to do it if 'f' instead had type 'Functor f => u -> (a -> s -> f r) -> f (s -> r))', but then you wouldn't be writing this function in the first place
10:12:43 son0p joins (~son0p@181.58.39.182)
10:13:07 <siraben> context: https://github.com/siraben/r5rs-denot/blob/c04fddb4d72e753d5bf65c7eb04b498704edf85b/src/SchemeEval.hs#L51
10:13:24 <siraben> Looks like I'd need to take `(u -> (a -> s -> m r) -> s -> m r)` as an argument instead
10:13:34 <tomsmeding> indeed
10:14:30 <siraben> Is there a library that will generate the reflect and reify functions for me?
10:14:34 <dminuoso> Is there a kind of `encodeAscii :: Text -> Either String ByteString` type of function somewhere?
10:14:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
10:15:11 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:15:13 <tomsmeding> dminuoso: https://hackage.haskell.org/package/text-1.2.4.0/docs/Data-Text-Encoding.html
10:15:16 neiluj joins (~jco@91-167-203-101.subs.proxad.net)
10:15:16 × neiluj quits (~jco@91-167-203-101.subs.proxad.net) (Changing host)
10:15:16 neiluj joins (~jco@unaffiliated/neiluj)
10:15:24 <dminuoso> Yeah but
10:15:26 <dminuoso> Deprecated: Use decodeUtf8 instead
10:15:29 <tomsmeding> oh ascii
10:15:31 <dminuoso> Also the type is wrong
10:15:49 <dminuoso> I mean yeah, I can just scan the text for non-ascii characters
10:16:51 × guest1210 quits (~user@49.5.6.87) (Quit: ERC (IRC client for Emacs 27.1))
10:17:08 <dminuoso> f s | all isAscii s = Right (T.encodeUtf8 s) | otherwise = Left ...
10:17:12 <dminuoso> But that will waste work
10:17:19 × raichoo quits (~raichoo@dslb-188-100-001-158.188.100.pools.vodafone-ip.de) (Quit: Lost terminal)
10:17:31 <dminuoso> On a happy pass that has to traverse the text twice
10:17:50 <tomsmeding> doesn't ByteString have something like Functor f => Int -> (Int -> f Word8) -> f ByteString
10:18:01 <tomsmeding> though that's probably not any better than going via fromList
10:18:03 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer)
10:18:10 <tomsmeding> it will be a single pass though
10:18:16 <opqdonut> especially with fusion
10:18:35 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
10:19:05 <tomsmeding> Data.ByteString.unfoldr is kind of that function, though it has an unnecessary state component
10:19:39 tomsmeding meant unfoldrN
10:19:54 ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
10:20:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
10:20:36 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:21:04 <dminuoso> tomsmeding: by fromList you mean pack?
10:21:31 <dminuoso> It seems the most rational thing to do, is something like
10:21:46 <dminuoso> maybeAsciiLength :: String -> Maybe Int
10:22:04 <tomsmeding> I do but you'd want something like packN, which doesn't exist?
10:22:07 <dminuoso> And then write something like
10:22:26 <dminuoso> asciiPack cs = unsafePackLenChars <$> (maybeAsciiLength cs) <*> cs
10:22:45 <tomsmeding> https://hackage.haskell.org/package/bytestring-0.11.0.0/docs/Data-ByteString-Internal.html#v:packUptoLenBytes that apparently, though internal
10:22:59 <tomsmeding> lol yes
10:24:35 <dminuoso> tomsmeding: That function doesn't seem right.
10:24:46 <dminuoso> The primitive I want doesn't seem to exist.
10:24:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
10:25:07 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:25:09 raichoo joins (~raichoo@dslb-188-100-001-158.188.100.pools.vodafone-ip.de)
10:26:03 <dminuoso> err, actually the above should be
10:26:24 <dminuoso> asciiPack cs = (`unsafePackLenChars` cs) <$> maybeAsciiLength cs
10:26:56 GenocidalFruit joins (~kqzx@49.37.145.142)
10:27:30 <dminuoso> It's possible this will perform much worse than just doing through the list twice, I'd have to hope fusion kicks in on the Maybe for maybeAsciiLength, or I have to write it with cont manually
10:28:35 × GenocidalFruit quits (~kqzx@49.37.145.142) (Client Quit)
10:28:44 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 256 seconds)
10:28:57 mbomba joins (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca)
10:29:38 <boxscape> I think I figured it out, `type family Undefined :: forall k . k` is nullary, but `type family Undefined :: k` is unary because it takes the invisible k
10:30:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
10:30:36 × da39a3ee5e6b4b0d quits (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:30:40 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:31:27 <dminuoso> boxscape: Huh, so the latter is kind indexed but the former is not?
10:31:32 <boxscape> yes
10:31:53 <dminuoso> Mmm, is that with PolyKinds on?
10:31:57 <boxscape> yeah
10:32:09 <dminuoso> Interesting, does `forall k. k` in general kind polymorphic?
10:32:22 <dminuoso> Or is this just a specialty in case of tyfams?
10:32:46 da39a3ee5e6b4b0d joins (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th)
10:33:36 <boxscape> dminuoso hmm what sort of situation aside from tyfams are you thinking of?
10:34:03 <dminuoso> Mmm. Good question
10:34:10 <dminuoso> Can you write a data declaration with explicit forall?
10:34:28 <dminuoso> % data forall s t. Const s t = Const t
10:34:28 <yahb> dminuoso: ; <interactive>:53:6: error: parse error on input `forall'
10:34:37 <dminuoso> Mmm, apparently not
10:34:43 <boxscape> % data Proxy' :: forall k . (a :: k) where Proxy :: Proxy a
10:34:43 <yahb> boxscape: ; <interactive>:54:28: error:; * Expected a type, but `a :: k' has kind `k'; * In the kind `forall k. (a :: k)'
10:34:53 <boxscape> % data Proxy' :: forall k . (a :: k)-> * where Proxy :: Proxy a
10:34:53 <yahb> boxscape: ; <interactive>:55:28: error:; * Expected a type, but `a :: k' has kind `k'; * In the kind `forall k. (a :: k) -> *'
10:34:54 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
10:34:56 × oish quits (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 240 seconds)
10:34:57 <boxscape> dammit
10:35:12 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:35:13 DavidEichmann joins (~david@62.110.198.146.dyn.plus.net)
10:35:54 urek joins (~urek@2804:7f1:e10a:4c43:c16d:b553:6dc5:9c45)
10:35:56 <absence> is there a library/concept that makes it easy to implement things like f (a, b, c, d) -> (f a, f b, f c, f d)?
10:36:58 <boxscape> % data Proxy' :: forall k . k -> * where Proxy' :: forall k (a :: k) . Proxy' a -- dminuoso
10:36:59 <yahb> boxscape:
10:36:59 <dminuoso> absence: generics
10:37:13 <dminuoso> absence: or relying on something that has done the boilerplate for you, like lens
10:37:38 <dminuoso> e.g.: sequenceOf :: LensLike (WrappedMonad m) s t (m b) b -> s -> m t
10:38:06 <dminuoso> % sequenceOf each (Just 1, Just 2, Just 3, Just 4)
10:38:06 <yahb> dminuoso: Just (1,2,3,4)
10:38:29 × mbomba quits (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0)
10:38:53 <dminuoso> oh wait, wrong direction :>
10:39:39 <absence> % sequenceOf each (Just (1, 2, 3, 4))
10:39:39 <yahb> absence: ; <interactive>:67:1: error:; * Ambiguous type variable `a0' arising from a use of `print'; prevents the constraint `(Show a0)' from being solved.; Probable fix: use a type annotation to specify what `a0' should be.; These potential instances exist:; instance Show a => Show (ZipList a) -- Defined in `Control.Applicative'; instance Show a => Show (Complex a) -- Define
10:40:02 <dminuoso> That actually looks like coapplicative rather, doesn't it?
10:40:37 <dminuoso> Or no, coapplicative would be be:
10:41:03 <dminuoso> f (a, b, c, d) -> Either (f a) (Either (f b) (Either (f c) (f d)))
10:41:16 <dminuoso> absence: What should the function above even do? What choices of f do you want to make?
10:41:58 <dminuoso> Mmm, that looks like cotraversable
10:42:02 <dminuoso> cosequence :: Functor g => g (f a) -> f (g a)
10:42:10 <absence> dminuoso: returning (Just 1, Just 2, Just 3, Just 4) would be fine
10:42:48 <dminuoso> absence: Is monomorphized f ~ Maybe fine?
10:42:53 <dminuoso> Or do you want it for functors in general?
10:43:24 <absence> i was hoping to find something general
10:44:26 <dminuoso> absence: https://hackage.haskell.org/package/distributive-0.6.2/docs/Data-Distributive.html
10:44:40 <dminuoso> (I guess that's just a different name/version of the Cotraversable above)
10:45:01 <dminuoso> Note:
10:45:02 <dminuoso> (Distributive a, Distributive b) => Distributive (a :*: b)
10:45:07 <dminuoso> So you can do just that with generics + distributive
10:45:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
10:45:39 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:47:30 <dminuoso> So to do the above, it should be enough to just write:
10:47:39 <dminuoso> to . distribute . from
10:49:03 <dminuoso> % let d = G.to . distribute . G.from in d (Just (1,2,3))
10:49:03 <yahb> dminuoso: ()
10:49:05 <dminuoso> Mmm, not quite
10:49:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
10:50:07 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
10:51:01 × kritzefitz quits (~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
10:52:39 <absence> % G.to . sequenceA . G.from $ Just (1,2,3)
10:52:39 <yahb> absence: ()
10:52:45 <absence> :D
10:53:21 <dminuoso> Mmm, is this MMR?
10:53:28 <dminuoso> Where the heck does this unit come from
10:53:30 kritzefitz joins (~kritzefit@212.86.56.80)
10:54:02 × SanchayanMaity quits (~Sanchayan@122.181.205.6) (Quit: SanchayanMaity)
10:54:26 SanchayanMaity joins (~Sanchayan@122.181.205.6)
10:55:11 <dminuoso> % import Data.Distributive.Generic
10:55:11 <yahb> dminuoso:
10:55:27 <dminuoso> % genericDistribute $ Just (1,2,3)
10:55:28 <yahb> dminuoso: ; <interactive>:99:1: error:; * No instance for (GDistributive (G.K1 G.R Integer)) arising from a use of `it'; * In the first argument of `print', namely `it'; In a stmt of an interactive GHCi command: print it
10:56:22 × SanchayanMaity quits (~Sanchayan@122.181.205.6) (Client Quit)
10:57:10 <boxscape> % type Undefined :: k; type family Undefined :: k where Undefined @Nat = 4; Undefined @Symbol = "test" -- FWIW this makes the difference more obvious; writing these equations wouldn't be possible with forall k . k
10:57:10 <yahb> boxscape:
10:57:32 <dminuoso> Mmm Distributive f => GDistributive (Rec1 f)
10:57:52 SanchayanMaity joins (~Sanchayan@122.181.205.6)
10:58:09 <dminuoso> Yeah no idea how to use this
10:58:39 sh9 joins (~sh9@softbank060116136158.bbtec.net)
10:58:56 <dminuoso> % data V2 a = V2 a a deriving (Show, Functor, Generic1)
10:58:57 <yahb> dminuoso: ; <interactive>:101:45: error:; Not in scope: type constructor or class `Generic1'; Perhaps you meant one of these: `G.Generic1' (imported from GHC.Generics), `G.Generic' (imported from GHC.Generics)
10:58:59 <dminuoso> % data V2 a = V2 a a deriving (Show, Functor, G.Generic1)
10:58:59 <yahb> dminuoso:
10:59:07 <dminuoso> % instance Distributive V2' where distribute = genericDistribute
10:59:08 <yahb> dminuoso: ; <interactive>:103:23: error:; Not in scope: type constructor or class V2'; Perhaps you meant `V2' (line 102)
10:59:13 <dminuoso> % instance Distributive V2 where distribute = genericDistribute
10:59:13 <yahb> dminuoso:
10:59:21 urek__ joins (~urek@191.32.142.168)
10:59:31 × argento quits (~argent0@168.227.97.29) (Quit: leaving)
10:59:41 <dminuoso> % distribute (Just (V2 'a' 'b'))
10:59:41 <yahb> dminuoso: V2 (Just 'a') (Just 'b')
10:59:44 <dminuoso> absence: Ah there!
11:00:48 <absence> wow
11:01:07 × urek quits (~urek@2804:7f1:e10a:4c43:c16d:b553:6dc5:9c45) (Ping timeout: 258 seconds)
11:01:36 × kritzefitz quits (~kritzefit@212.86.56.80) (Ping timeout: 256 seconds)
11:03:47 kritzefitz joins (~kritzefit@212.86.56.80)
11:05:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
11:05:38 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
11:05:55 × da39a3ee5e6b4b0d quits (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:06:19 × sphalerite quits (~sphalerit@NixOS/user/lheckemann) (Quit: brb rebooting)
11:07:29 <absence> dminuoso: unfortunately it breaks apart when the input type is Maybe (a,b) rather than Maybe (a,a)
11:09:08 <dminuoso> Well you can just newtype a uniform type
11:09:19 sphalerite joins (~sphalerit@NixOS/user/lheckemann)
11:09:22 <dminuoso> But yeah
11:09:30 da39a3ee5e6b4b0d joins (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th)
11:09:35 shatriff joins (~vitaliish@80.233.49.24)
11:09:56 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
11:10:04 <absence> dminuoso: does that help? I mean e.g Just ("hello", False)
11:10:08 <dminuoso> Maybe edwardk has an idea whether you can turn single-type tuples into Distributive
11:10:10 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
11:10:19 <dminuoso> (or even poly-tuples)
11:10:47 <dminuoso> You can still write your generic code at least
11:12:04 × raichoo quits (~raichoo@dslb-188-100-001-158.188.100.pools.vodafone-ip.de) (Quit: Lost terminal)
11:14:01 × shah^ quits (irt@ip98-184-89-2.mc.at.cox.net) ()
11:14:05 × da39a3ee5e6b4b0d quits (~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th) (Client Quit)
11:14:43 raichoo joins (~raichoo@dslb-188-100-001-158.188.100.pools.vodafone-ip.de)
11:15:42 × sgibber2018 quits (~arch-gibb@208.85.237.137) (Quit: WeeChat 2.9)
11:15:43 <kuribas> After seeing so many lisp code, I am convinced that greenspun's law holds for haskell as well. Any sufficiently complicated lisp or clojure program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of haskell.
11:16:22 <kuribas> I was speaking with my colleage about our clojure api, and he was basically designing some sort of type system to get rid of the inconsistencies because "everything is a hashmap".
11:16:39 <kuribas> Meanwhile I was thinking, "this is already solved in haskell".
11:16:53 Vulfe joins (~vulfe@2600:1702:31b0:34e0:6541:1b91:3fbc:465)
11:17:18 <kuribas> lisp is so flexible, but in the end you just use this flexibility to implement what is already in haskell.
11:18:17 <absence> dminuoso: thanks for looking into it!
11:21:22 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:6541:1b91:3fbc:465) (Ping timeout: 260 seconds)
11:25:42 pjb joins (~t@2a01cb04063ec50024a1053c4d73c23f.ipv6.abo.wanadoo.fr)
11:27:33 slack1256 joins (~slack1256@45.4.2.119)
11:28:42 × Stanley00 quits (~stanley00@unaffiliated/stanley00) ()
11:30:16 × sh9 quits (~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8)
11:30:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
11:30:38 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
11:32:28 × slack1256 quits (~slack1256@45.4.2.119) (Ping timeout: 260 seconds)
11:32:29 sh9 joins (~sh9@softbank060116136158.bbtec.net)
11:34:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
11:35:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
11:35:52 kupi joins (uid212005@gateway/web/irccloud.com/x-hofoknqplmdvajsv)
11:36:49 × sh9 quits (~sh9@softbank060116136158.bbtec.net) (Client Quit)
11:37:08 sh9 joins (~sh9@softbank060116136158.bbtec.net)
11:37:26 × sh9 quits (~sh9@softbank060116136158.bbtec.net) (Client Quit)
11:38:15 <kupi> is there a database which supports sum types?
11:39:26 <raichoo> There are enums in postgres, but I assume you want sums of products?
11:39:50 ralejs joins (~ralejs@2620:10d:c093:400::5:9f2)
11:39:59 × nolrai quits (4c1bcada@c-76-27-202-218.hsd1.or.comcast.net) (Remote host closed the connection)
11:40:09 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds)
11:40:39 × rprije quits (~rprije@14-201-170-17.tpgi.com.au) (Ping timeout: 260 seconds)
11:40:50 <kupi> yes
11:43:59 <raichoo> jsonb *runs*
11:45:17 <tdammers> question is, is there a database that supports types to begin with
11:45:59 <tdammers> because depending how you look at it, postgres doesn't really have types, just tags
11:46:59 <tdammers> kuribas: I have said this before, but s/Haskell/a type system/
11:47:12 <kuribas> tdammers: yeah, I guess so
11:47:27 ski . o O ( "Modelling Large Datasets Using Algebraic Datatypes: A Case Study of the CONFMAN Database" by Markus Mottl in 2002-05-15 at <http://www.ofai.at/cgi-bin/tr-online?number+2002-27> ; "Algebraic Data Types for Language-Integrated Queries" by George Giorgidze,Torsten Grust,Alexander Ulrich,Jeroen Weijers in 2013-01 at
11:47:30 <tdammers> (and also, just like Lisp isn't an adequate Lisp, Haskell is not an adequate Haskell)
11:47:32 ski <https://www-db.informatik.uni-tuebingen.de/publications/AlgebraicDataTypesforLanguage-IntegratedQueries.html> )
11:47:57 <kuribas> tdammers: a type system with polymorphic parametrism and algebraic datatypes.
11:48:32 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
11:51:21 <lortabac> kupi: https://github.com/agentm/project-m36
11:51:27 <edwardk> dminuoso: single type tuples being things like V4, V3, etc. from linear? aren't they all?
11:51:45 <dminuoso> edwardk: No I rather meant something like (a,b,c)
11:51:53 <edwardk> then the answer is no
11:51:56 × plutoniix quits (~q@184.82.204.178) (Quit: Leaving)
11:52:20 <edwardk> there isn't a 1-ary tuple, and the others aren't isomorphic to function spaces when you peel off the last arg
11:52:50 <edwardk> newtype V4ish a = V4ish (a,a,a,a) -- that you can do
11:53:10 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
11:53:19 heatsink joins (~heatsink@2600:1700:bef1:5e10:e85f:7c7d:b6c9:7820)
11:54:11 <edwardk> but consider that you need to be able to convert (some representation -> c) back and forth to (a,b,c) without losing any information, but there's no place to smuggle out the info for a and b in that.
11:54:54 × son0p quits (~son0p@181.58.39.182) (Quit: leaving)
11:56:42 × puffnfresh quits (~puffnfres@119-17-138-164.77118a.mel.static.aussiebb.net) (Ping timeout: 258 seconds)
11:58:14 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e85f:7c7d:b6c9:7820) (Ping timeout: 264 seconds)
11:58:34 Vulfe joins (~vulfe@2600:1702:31b0:34e0:6541:1b91:3fbc:465)
11:59:02 puffnfresh joins (~puffnfres@119-17-138-164.77118a.mel.static.aussiebb.net)
12:01:16 tsrt^ joins (tsrt@ip98-184-89-2.mc.at.cox.net)
12:01:46 <kuribas> wouldn't Identity be a 1-ary tuple?
12:03:13 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:6541:1b91:3fbc:465) (Ping timeout: 258 seconds)
12:05:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
12:05:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
12:09:47 Lycurgus joins (~niemand@cpe-45-46-137-210.buffalo.res.rr.com)
12:09:54 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
12:09:55 × berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 272 seconds)
12:09:58 berberman_ joins (~berberman@unaffiliated/berberman)
12:10:08 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
12:12:54 × shailangsa quits (~shailangs@host86-186-177-155.range86-186.btcentralplus.com) ()
12:20:50 Vulfe joins (~vulfe@2600:1702:31b0:34e0:6857:cc73:b034:d422)
12:24:21 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 265 seconds)
12:25:50 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:6857:cc73:b034:d422) (Ping timeout: 264 seconds)
12:26:05 fendor joins (~fendor@91.141.3.143.wireless.dyn.drei.com)
12:26:23 p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
12:30:37 bitmapper joins (uid464869@gateway/web/irccloud.com/x-npxxmdhrbnlnnshm)
12:36:36 Tario joins (~Tario@201.192.165.173)
12:40:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
12:40:40 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
12:41:40 christo joins (~chris@81.96.113.213)
12:43:06 × Tario quits (~Tario@201.192.165.173) (Ping timeout: 256 seconds)
12:44:58 × clynamen quits (~clynamen@37.183.22.31) (Ping timeout: 256 seconds)
12:48:32 Mikagami joins (~MOSCOS@152.32.70.55)
12:49:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
12:50:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
12:52:10 × MOSCOS quits (~MOSCOS@122.54.107.175) (Ping timeout: 256 seconds)
12:52:29 MOSCOS joins (~MOSCOS@122.54.107.175)
12:53:05 × Mikagami quits (~MOSCOS@152.32.70.55) (Ping timeout: 240 seconds)
12:55:43 Entertainment joins (~entertain@104.246.132.210)
12:58:37 × fendor quits (~fendor@91.141.3.143.wireless.dyn.drei.com) (Remote host closed the connection)
13:01:58 Vulfe joins (~vulfe@2600:1702:31b0:34e0:6857:cc73:b034:d422)
13:06:16 drincruz_ joins (~adriancru@ool-44c748be.dyn.optonline.net)
13:07:00 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:6857:cc73:b034:d422) (Ping timeout: 268 seconds)
13:10:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
13:10:38 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
13:10:54 da39a3ee5e6b4b0d joins (~da39a3ee5@171.5.29.209)
13:11:53 elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
13:14:29 geekosaur joins (82659a09@host154-009.vpn.uakron.edu)
13:14:57 × sw1nn quits (~sw1nn@2a00:23c6:2385:3a00:415:b4b7:c159:18ea) (Quit: WeeChat 2.9)
13:15:09 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
13:15:26 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
13:16:16 × drincruz_ quits (~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 240 seconds)
13:20:03 sw1nn joins (~sw1nn@host86-164-184-101.range86-164.btcentralplus.com)
13:20:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
13:20:38 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
13:21:53 × p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Quit: p-core)
13:21:58 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
13:22:05 × doct0rhu quits (~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net) (Ping timeout: 240 seconds)
13:24:12 × benjamingr__ quits (uid23465@gateway/web/irccloud.com/x-klvbiusyrufiamvx) (Quit: Connection closed for inactivity)
13:24:20 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Remote host closed the connection)
13:24:35 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
13:24:36 × Lycurgus quits (~niemand@cpe-45-46-137-210.buffalo.res.rr.com) (Quit: Exeunt)
13:24:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
13:25:11 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
13:25:43 <dminuoso> If I want to identify duplicate items in a list, is doing a foldM into a Set via alterF the most effective way?
13:27:25 × jespada quits (~jespada@90.254.245.49) (Ping timeout: 240 seconds)
13:30:28 jespada joins (~jespada@90.254.245.49)
13:32:01 scasc joins (~szabi@213142096072.public.telering.at)
13:32:13 Lurkki joins (54f048f5@esm-84-240-72-245.netplaza.fi)
13:32:23 christo joins (~chris@81.96.113.213)
13:32:28 brisbin joins (~patrick@pool-173-49-158-4.phlapa.fios.verizon.net)
13:32:36 <Lurkki> https://paste.debian.net/1176346/ Can anyone offer some advice on how do this?
13:33:40 cosimone joins (~cosimone@93-47-228-249.ip115.fastwebnet.it)
13:35:45 <gentauro> ski, is that LINQ for Haskell?
13:36:28 drincruz_ joins (~adriancru@ool-44c748be.dyn.optonline.net)
13:36:45 × christo quits (~chris@81.96.113.213) (Ping timeout: 258 seconds)
13:36:52 <gentauro> just dl the paper. I guess not …
13:37:15 hyperisco joins (~hyperisco@d192-186-117-226.static.comm.cgocable.net)
13:41:46 Tario joins (~Tario@201.192.165.173)
13:43:28 Deide joins (~Deide@217.155.19.23)
13:45:16 × jyang_ quits (~jyang@modemcable044.186-200-24.mc.videotron.ca) (Quit: Lost terminal)
13:48:16 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
13:48:55 × da39a3ee5e6b4b0d quits (~da39a3ee5@171.5.29.209) (Quit: My MacBook has gone to sleep. ZZZzzz…)
13:49:06 × jamm_ quits (~jamm@unaffiliated/jamm) (Remote host closed the connection)
13:50:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
13:50:38 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
13:51:38 christo joins (~chris@81.96.113.213)
13:53:33 × alorente quits (~alorente@s91904426.blix.com) (Remote host closed the connection)
13:54:52 heatsink joins (~heatsink@2600:1700:bef1:5e10:e85f:7c7d:b6c9:7820)
13:54:56 × hiroaki quits (~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
13:55:01 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
13:55:16 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
13:55:24 × pavonia quits (~user@unaffiliated/siracusa) (Quit: Bye!)
13:55:41 da39a3ee5e6b4b0d joins (~da39a3ee5@171.5.29.209)
14:00:07 plutoniix joins (~q@ppp-223-24-162-153.revip6.asianet.co.th)
14:00:38 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e85f:7c7d:b6c9:7820) (Ping timeout: 264 seconds)
14:02:36 × scasc quits (~szabi@213142096072.public.telering.at) (Ping timeout: 256 seconds)
14:03:21 Vulfe joins (~vulfe@2600:1702:31b0:34e0:d070:4174:c9a4:1003)
14:03:59 carlomagno joins (~cararell@148.87.23.8)
14:04:14 × NinjaTrappeur quits (~ninja@unaffiliated/ninjatrappeur) (Ping timeout: 264 seconds)
14:05:19 scasc joins (~szabi@213142096072.public.telering.at)
14:05:56 × SanchayanMaity quits (~Sanchayan@122.181.205.6) (Quit: SanchayanMaity)
14:05:58 NinjaTrappeur joins (~ninja@unaffiliated/ninjatrappeur)
14:07:24 roconnor joins (~roconnor@host-45-58-200-239.dyn.295.ca)
14:08:22 hiroaki joins (~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de)
14:10:03 × raichoo quits (~raichoo@dslb-188-100-001-158.188.100.pools.vodafone-ip.de) (Quit: Lost terminal)
14:14:03 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:d070:4174:c9a4:1003) (Remote host closed the connection)
14:15:01 Vulfe joins (~vulfe@2600:1702:31b0:34e0:d070:4174:c9a4:1003)
14:15:03 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 240 seconds)
14:15:25 <joel135> Lurkki: https://paste.debian.net/1176351/
14:17:01 SanchayanMaity joins (~Sanchayan@122.181.205.6)
14:19:21 sord937 joins (~sord937@gateway/tor-sasl/sord937)
14:19:24 × SanchayanMaity quits (~Sanchayan@122.181.205.6) (Client Quit)
14:19:41 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:d070:4174:c9a4:1003) (Ping timeout: 258 seconds)
14:20:53 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
14:21:54 sord937 joins (~sord937@gateway/tor-sasl/sord937)
14:24:26 jonatanb_ joins (~jonatanb@83.24.180.20.ipv4.supernova.orange.pl)
14:27:21 Vulfe joins (~vulfe@2600:1702:31b0:34e0:d070:4174:c9a4:1003)
14:27:36 × drincruz_ quits (~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 240 seconds)
14:29:19 cgfuh joins (~cgfuh@181.167.191.58)
14:32:24 drincruz_ joins (~adriancru@ool-44c748be.dyn.optonline.net)
14:34:08 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
14:34:34 <kupi> https://gist.github.com/theqp/17756e060816c039cd52cb3bb84c4ec0
14:34:45 <kupi> which function have i reinvented?
14:34:48 <kupi> hoogle did not help
14:34:58 urodna joins (~urodna@unaffiliated/urodna)
14:35:11 ephemera_ joins (~E@122.34.1.187)
14:35:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
14:35:23 acidx1 joins (~acidx@185.103.96.147)
14:35:36 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
14:38:41 × dexterlb quits (~dexterlb@2a01:9e40:2:2::2) (Quit: No Ping reply in 180 seconds.)
14:39:10 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
14:39:18 shailangsa joins (~shailangs@host86-186-177-155.range86-186.btcentralplus.com)
14:39:25 <merijn> Isn't that just "traverse . traverse"
14:39:28 <merijn> :t traverse
14:39:30 <lambdabot> (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
14:39:38 <merijn> :t traverse . traverse
14:39:41 <lambdabot> (Applicative f, Traversable t1, Traversable t2) => (a -> f b) -> t1 (t2 a) -> f (t1 (t2 b))
14:39:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
14:39:56 <merijn> hmm, not quite
14:40:07 <merijn> What's the type of concat there?
14:40:10 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
14:40:23 <kupi> t [b] -> [b]
14:40:25 <tomsmeding> hoogle has similar things under the name concatMapM, though this has an extra >>=
14:40:44 <merijn> :t concat
14:40:45 × lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Ping timeout: 240 seconds)
14:40:47 <lambdabot> Foldable t => t [a] -> [a]
14:40:54 xirhtogal joins (~lagothrix@unaffiliated/lagothrix)
14:40:54 xirhtogal is now known as lagothrix
14:41:02 × jonatanb_ quits (~jonatanb@83.24.180.20.ipv4.supernova.orange.pl) ()
14:41:11 <merijn> :t \f -> traverse (concat . f)
14:41:13 <lambdabot> (Traversable t1, Foldable t2) => (a -> t2 [b]) -> t1 a -> [t1 b]
14:41:26 <merijn> :t \f -> sequence . traverse (concat . f)
14:41:28 <lambdabot> (Monad m, Traversable m, Foldable t) => (a1 -> t [a2]) -> m a1 -> m [a2]
14:41:31 jonatanb joins (jonatanb@gateway/vpn/protonvpn/jonatanb)
14:41:49 × ystael quits (~ystael@209.6.50.55) (Quit: Lost terminal)
14:42:24 <nshepperd> it's foldMapM with an extra >>=
14:42:34 <merijn> kupi: Anyway, this seems fairly specific so I'm not sure there really is a generic name
14:43:06 × jonatanb quits (jonatanb@gateway/vpn/protonvpn/jonatanb) (Remote host closed the connection)
14:43:21 SanchayanMaity joins (~Sanchayan@122.181.205.6)
14:43:53 × geekosaur quits (82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
14:44:34 <nshepperd> which i guess would just be foldMap if we had the generic monoid instance for applicative
14:44:42 <merijn> We do
14:44:44 <merijn> :t Ap
14:44:46 <lambdabot> forall k (f :: k -> *) (a :: k). f a -> Ap f a
14:44:48 <nshepperd> alaf Ap foldMap
14:45:01 mouseghost joins (~draco@87-206-9-185.dynamic.chello.pl)
14:45:01 × mouseghost quits (~draco@87-206-9-185.dynamic.chello.pl) (Changing host)
14:45:01 mouseghost joins (~draco@wikipedia/desperek)
14:45:05 <merijn> I'd just use "getAp . foldMap (Ap . f)"
14:45:13 <nshepperd> we have it but we don't *have* it :p
14:45:24 <kupi> foo f = mapM f >>> fmap concat
14:45:35 × notzmv quits (~user@unaffiliated/zmv) (Read error: No route to host)
14:46:07 ystael joins (~ystael@209.6.50.55)
14:47:43 notzmv joins (~user@unaffiliated/zmv)
14:48:44 <Lurkki> joel135 thanks very much
14:48:52 <Lurkki> works great
14:49:03 <joel135> np i needed some practice
14:49:07 Sgeo joins (~Sgeo@ool-18b98aa4.dyn.optonline.net)
14:49:15 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
14:51:33 × pbgc quits (~pbgc@a89-152-145-91.cpe.netcabo.pt) (Quit: Textual IRC Client: http://www.textualapp.com/)
14:52:46 dexterlb joins (~dexterlb@2a01:9e40:2:2::2)
14:53:41 vicfred joins (~vicfred@unaffiliated/vicfred)
14:55:28 amiri joins (~amiri@cpe-76-91-154-9.socal.res.rr.com)
14:56:14 <Lurkki> joel135 if it's not too much to ask, how could I use the `sumStats` function with that, since my actual record isn't so simple
14:56:40 fendor joins (~fendor@77.119.131.193.wireless.dyn.drei.com)
14:56:49 <joel135> hmm
14:56:52 × hiroaki quits (~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de) (Remote host closed the connection)
14:59:07 × LKoen quits (~LKoen@243.169.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
14:59:27 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
15:02:44 <joel135> https://paste.debian.net/1176356/
15:03:18 <joel135> wait it is not abstract enough
15:04:35 <joel135> https://paste.debian.net/1176357/
15:05:20 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 256 seconds)
15:05:48 × lambda quits (~xiretza@mail.xiretza.xyz) (Quit: WeeChat 2.9)
15:07:02 lambda joins (~xiretza@mail.xiretza.xyz)
15:08:22 × phasespace quits (~sar@80-89-47-117.inet.signal.no) (Ping timeout: 258 seconds)
15:09:04 <merijn> ick...fromJust
15:10:56 <ystael> Anyone know where in lsp-haskell I can supply an option to tell haskell-language-server it should not default to optimizing compile?
15:11:02 <ystael> (emacs lsp-haskell, sorry)
15:11:20 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
15:11:43 jganong joins (2f2d6d1d@047-045-109-029.biz.spectrum.com)
15:12:29 × berberman_ quits (~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
15:13:19 berberman joins (~berberman@unaffiliated/berberman)
15:13:30 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
15:15:34 × jganong quits (2f2d6d1d@047-045-109-029.biz.spectrum.com) (Remote host closed the connection)
15:15:39 <dminuoso> huh, it defaults to optimizing?
15:20:01 × Cthalupa quits (~cthulhu@47.186.47.75) (Ping timeout: 264 seconds)
15:20:07 × __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving)
15:21:08 × SanchayanMaity quits (~Sanchayan@122.181.205.6) (Quit: SanchayanMaity)
15:22:03 <fendor> ystael, it almost definitely disables all optimisations
15:22:44 Cthalupa joins (~cthulhu@47.186.47.75)
15:23:03 phasespace joins (~sar@89-162-33-21.fiber.signal.no)
15:24:19 <Lurkki> i think it'd be better to wrap Stats in a Maybe to make sumStats' Maybe Stats -> Maybe Stats -> Maybe Stats
15:25:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
15:25:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
15:25:42 <Lurkki> or use intersectionWith
15:26:37 <ystael> Well, I find that compiling in haskell-language-server inside emacs is slower than in stack build, and when I run the stack build with optimization turned off, it rebuilds a bunch of things because "Optimisation flags changed"
15:26:51 <ystael> so I can't find hard evidence, but the external behavior suggests that HLS is optimizing
15:26:51 × MOSCOS quits (~MOSCOS@122.54.107.175) (Remote host closed the connection)
15:27:14 MOSCOS joins (~MOSCOS@122.54.107.175)
15:27:28 <ystael> but my setup has enough weird ad hoc stuff in it that if there isn't "a standard place to set this" already it's not worth asking the channel to troubleshoot :)
15:29:24 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
15:29:43 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
15:29:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
15:30:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
15:32:11 sakirious joins (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
15:32:20 toorevitimirp joins (~tooreviti@117.182.181.85)
15:32:57 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
15:33:18 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
15:34:00 adder joins (~adder@unaffiliated/adder)
15:35:00 <adder> hello, i have an issue with quoting, this is my code: `clickable' s w = xmobarAction ("xmonadctl view\\\"" ++ show s ++ "_" ++ w ++ "\\\"") "1" w` i expect it to produce `xmonadctl view"0_1"` for example, but it's producing 0_5"
15:35:05 mirrorbird joins (~psutcliff@2a00:801:44a:c3da:d62e:776:ee8f:54bf)
15:35:15 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
15:36:17 p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
15:36:34 conal joins (~conal@64.71.133.70)
15:38:20 <joel135> using Maybe seems more dangerous in my opinion
15:38:22 Lycurgus joins (~niemand@cpe-45-46-137-210.buffalo.res.rr.com)
15:39:33 <tomsmeding> adder: what is the entire result? I guess it's not just `0_5"`
15:39:47 <adder> Couldn't find command 0_4"
15:40:04 <Lurkki> how's Maybe dangerous
15:40:15 <joel135> ... because it is more complex and it is not clear how to properly handle Nothing if the case Nothing is never supposed to happen.
15:40:37 <tomsmeding> adder: do you want the quotes " to be interpreted by the shell, or do you want the argument to xmonadctl to literally be view"0_1"?
15:40:49 <adder> yes the latter
15:40:55 <joel135> if in the future the behavior of sumStats changes to make Nothing a possible output for the first time, sumStatLists may not have made the right assumption about how to handle Nothing
15:41:16 <tomsmeding> are you sure that 'show s' doesn't result in spaces?
15:41:21 <tomsmeding> adder: ^
15:41:55 × conal quits (~conal@64.71.133.70) (Ping timeout: 260 seconds)
15:42:24 <adder> s is a ScreenId, i think it should be just a short numerical string
15:42:36 <tomsmeding> because if `show s` for example produces `abc 0`, then you'd be producing `xmonadctl view"abc 0_1"`, where xmonadctl gets two arguments
15:42:48 <tomsmeding> don't know xmonad so don't know how it would interpret that
15:42:55 <tomsmeding> "i think it should be" -- check that :)
15:43:18 <sm[m]> g'day all
15:44:08 <sm[m]> anybody else dealing with "can't load framework" errors on mac os 11 / big sur ? I think no GHC release fixes it yet, right ?
15:44:09 <joel135> how would you sum s1 := Nothing and s2 := Just s? a possible bug that one might fail to catch: s1 >>= \s1_ -> s2 >>= \s2_ -> sumStats s1_ s2_ discards s!
15:44:58 <joel135> this would fail silently
15:45:09 <sm[m]> aha, https://www.reddit.com/r/haskell/comments/k9r2cy/workaround_for_haskell_woes_on_macos_11_big_sur/
15:46:10 × da39a3ee5e6b4b0d quits (~da39a3ee5@171.5.29.209) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:47:38 phaul joins (~phaul@ruby/staff/phaul)
15:47:46 <Lurkki> i donät think that failing matters since we're always inputting `Stats` without the `Maybe`
15:48:04 <joel135> true
15:50:16 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
15:50:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
15:50:35 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
15:52:05 × plutoniix quits (~q@ppp-223-24-162-153.revip6.asianet.co.th) (Ping timeout: 240 seconds)
15:52:35 × aqd quits (~aqd@87-92-163-238.rev.dnainternet.fi) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:53:30 <joel135> but then these toMap and fromMap are not inverses anymore. if you decide to implement [[Stats]] -> [Stats] and "optimize" by removing some "redundant" composites (toMap . fromMap) it may fail silently.
15:53:56 conal joins (~conal@107.181.166.205)
15:54:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
15:55:08 × acidjnk_new quits (~acidjnk@p200300d0c719ff6609235681fd8d59d5.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
15:55:10 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
15:55:10 <kupi> is there a transformer for IO ([String])?
15:55:20 <kupi> Control.Monad.Trans.List is deprecated
15:55:33 <merijn> kupi: For doing what?
15:56:16 <kupi> getting a list of files recursively
15:56:48 × scasc quits (~szabi@213142096072.public.telering.at) (Remote host closed the connection)
15:56:58 <Lurkki> https://paste.debian.net/1176370/
15:56:59 hnOsmium0001 joins (uid453710@gateway/web/irccloud.com/x-bdwcxdgjdouaybsg)
15:57:01 heatsink joins (~heatsink@2600:1700:bef1:5e10:e85f:7c7d:b6c9:7820)
15:57:03 jmchael joins (~jmchael@87.112.60.168)
15:57:11 scasc joins (~szabi@213142096072.public.telering.at)
15:57:18 <joel135> that's what i warned against
16:00:04 × TekShifter[m] quits (tekshifter@gateway/shell/matrix.org/x-whcsjptmuuxhmcff) (Quit: Idle for 30+ days)
16:01:36 × orion quits (~orion@unaffiliated/orion) (Quit: "")
16:01:38 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
16:01:57 × heatsink quits (~heatsink@2600:1700:bef1:5e10:e85f:7c7d:b6c9:7820) (Ping timeout: 260 seconds)
16:03:19 <tomsmeding> Lurkki: just passing by and saying that sumStats' in your latest paste can also be written as: liftM2 sumStats
16:03:19 <joel135> i think this is safer https://paste.debian.net/1176374/
16:04:57 plutoniix joins (~q@node-uk9.pool-125-24.dynamic.totinternet.net)
16:05:20 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 256 seconds)
16:06:36 LKoen joins (~LKoen@243.169.9.109.rev.sfr.net)
16:07:18 × berberman quits (~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
16:08:25 berberman joins (~berberman@unaffiliated/berberman)
16:08:34 × scasc quits (~szabi@213142096072.public.telering.at) (Remote host closed the connection)
16:08:58 scasc joins (~szabi@213142096072.public.telering.at)
16:09:52 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.com)
16:09:52 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
16:09:52 dibblego joins (~dibblego@haskell/developer/dibblego)
16:10:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
16:10:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
16:12:50 danso joins (~dan@69-165-210-185.cable.teksavvy.com)
16:13:22 × berberman quits (~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
16:14:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
16:15:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
16:15:35 Kronic joins (~Kronic___@84.203.98.133)
16:17:29 <Kronic> Hey there, can I ask a question in relation to stack here? I am just a little bit curious as to what the motivation was for how dependencies are handled, to me it is just very not obvious how to install just install a package and use it. Dependencies are spread over multiple files. Why is that and where can I read about why this design decision was made?
16:18:19 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 260 seconds)
16:18:23 Ariakenom joins (~Ariakenom@h-98-128-229-53.NA.cust.bahnhof.se)
16:18:37 × cgfbee quits (~bot@oc1.itim-cj.ro) (Ping timeout: 260 seconds)
16:18:44 nicholassmith joins (~nicholass@c-67-180-177-103.hsd1.ca.comcast.net)
16:19:04 <merijn> Kronic: Stack is project based, so the entire idea of "install a package and use it" isn't supported
16:19:08 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
16:19:18 <merijn> Kronic: You always use a package as "dependency of a project"
16:20:04 × toorevitimirp quits (~tooreviti@117.182.181.85) (Ping timeout: 256 seconds)
16:20:16 <Kronic> How is that different in comparison to say, installing an NPM package in JavaScript?
16:20:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
16:20:36 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
16:20:57 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Remote host closed the connection)
16:21:06 falafel_ joins (~falafel@pool-108-31-243-192.washdc.fios.verizon.net)
16:21:12 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
16:21:18 <merijn> Kronic: Basically, the idea of "globally installing a package" is just kinda dumb when you think about it. Because if you work on more than 1 project and those projects need different versions of the same dependency, then you're screwed
16:21:41 × Lycurgus quits (~niemand@cpe-45-46-137-210.buffalo.res.rr.com) (Quit: Exeunt)
16:21:42 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
16:21:49 <merijn> Unless, of course, your package manager allows you to install the same package multiple times
16:21:53 <nicholassmith> et vim_mode_cmd_seq kj
16:21:58 hekkaidekapus_ joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
16:22:00 <Lurkki> if you want to install libs "globally", use nix
16:22:07 <Kronic> Oh, I do not mean globally installing packages. I do not want that. I want to simply run one command and then just have a package work for my project
16:22:10 <merijn> But then you get the problem "if I have 3 versions of package "foo" installed, which version do I expect to use"
16:22:25 <Kronic> When I said install, I meant install ¨to this project¨
16:22:33 × nicholassmith quits (~nicholass@c-67-180-177-103.hsd1.ca.comcast.net) (Client Quit)
16:22:57 nicholassmith joins (~nicholass@c-67-180-177-103.hsd1.ca.comcast.net)
16:23:11 <Kronic> So, basically your second definition, with npm you differentiate those via npm install and npm install -g -- My point was that seemingly with stack install there are extra steps, and I was wondering why those are necessary
16:23:12 <merijn> Kronic: There's no real command for that, you generally just "add it to the cabal file" (or hpack, for people I haven't managed to convince to not use hpack)
16:23:14 <Lurkki> or you can use inline cabal
16:23:43 × hekkaidekapus quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
16:23:48 <Lurkki> i usually use nix-shell if i want to work with some lib temporarily
16:23:59 × nicholassmith quits (~nicholass@c-67-180-177-103.hsd1.ca.comcast.net) (Client Quit)
16:24:08 <merijn> Lurkki: There isn't a single beginner whose life was made better by adding Nix :)
16:24:41 <Lurkki> nix-shell was easier to me as beginner than trying to figure out cabal
16:24:45 <merijn> Kronic: If you say "I have to add it in two places" you presumably mean in both stack.yaml and your cabal file (or package.yaml for hpack)
16:24:48 <Kronic> Yea, honestly I appreciate the variety of options available, but I am just looking to get a simple workflow going so I can focus on learning the language more
16:24:54 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
16:25:03 phaul joins (~phaul@ruby/staff/phaul)
16:25:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
16:25:09 nicholassmith joins (~nicholass@c-67-180-177-103.hsd1.ca.comcast.net)
16:26:12 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
16:26:20 <merijn> Kronic: Stack is based on "curated snapshots" with stack.yaml defining which snapshot (aka resolver) to use. If you wanna use something outside of the curated set, you have to tell it about it (which is why you may need to add things to stack.yaml)
16:26:36 <merijn> Kronic: .cabal is the thing that actually defines your package (see: https://gist.github.com/merijn/8152d561fb8b011f9313c48d876ceb07)
16:27:05 <merijn> (which is why everything has to go in .cabal, regardless of whether it's in the snapshot)
16:27:53 <Kronic> I see, so that makes some sense -- is there a flag I can use to just put it in both files automatically?
16:28:28 <merijn> I don't use stack, so I dunno, but I suspect "no"
16:28:30 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
16:28:51 <sm[m]> Kronic: normally you don't list packages in stack.yaml - only if they are not in the snapshot you specified
16:28:51 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
16:29:06 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
16:29:38 <sm[m]> you kind of have to read one or other of the intros to these tools, they are not obvious otherwise
16:29:50 <sm[m]> s/ otherwise//
16:31:02 <Kronic> I have read the intros to both and I more or less knew most of what was discussed here, I was just talking from a usability perspective. It just seems a little strange to me that there is not just one command I can use to install a package and focus on the actual problem I have. Thanks for your help though, I guess I will just learn them both separately and then come back to working on my code.
16:31:37 × nicholassmith quits (~nicholass@c-67-180-177-103.hsd1.ca.comcast.net) (Quit: leaving)
16:31:53 <sm[m]> Kronic: are you sure there isn't ? Can you describe this use case more exactly ?
16:32:29 <sm[m]> you're writing some software, you want to import code from some external package, so you need to add that package to your project deps.. right ?
16:32:30 <dolio> I don't really understand the issue. You just list the dependency in a file, and then you build. You have to list dependencies in a file with npm, too, if I recall.
16:32:33 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
16:32:58 × Yumasi quits (~guillaume@2a01:e0a:5cb:4430:5178:619c:fc92:5a85) (Ping timeout: 268 seconds)
16:33:32 <Kronic> My use case is the following: I have a package that I want to use. I want to run one command and have that be immediately available without editing any build files. Maybe I was being a little presumptious, but more or less every other language build/dependency management tool I have ever used allowed me to just run a command to get access to the dependency that I want
16:34:22 <Kronic> An example would be if I ran npm install <something> in javascript, the dependency is automatically added to the right place in the package.json file, with stack there is seemingly multiple places for dependencies to go, but I figured there would perhaps be a flag I could use on the install command to give me some sane default
16:34:55 <glguy> Does anyone understand why I get so many warnings "Warning: The package has an extraneous version range for a dependency on an internal library:..." https://gist.github.com/glguy/290dc1da6b4c9812aff05ef36a8a4ca4#file-output-txt-L31
16:35:27 <sm[m]> that's interesting.. so in js you run the install command and it updates the project deps file. In hs we update the project deps file and it runs the install command (next time you do stack build or stack repl)
16:35:44 <glguy> oh, looks like it's just a known bug https://github.com/haskell/cabal/issues/5119
16:35:50 <Kronic> Ah... okay, that makes sense sm[m]
16:36:05 × scasc quits (~szabi@213142096072.public.telering.at) (Ping timeout: 240 seconds)
16:36:13 <Kronic> I was figuring this was not a two step process. If I use the file-watch flag on stack build will it automatically do that?
16:36:27 <sm[m]> our way is different, but really pretty easy usually (add - somepackage-VERSION to package.yaml (or the .cabal file if you don't use package.yaml)
16:36:33 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
16:36:34 <sm[m]> yes it will
16:36:42 scasc joins (~szabi@213142096072.public.telering.at)
16:37:21 <Kronic> Okay, that is exactly what I was looking for. Thank you. I was just convinced there was no way I had to do two things when it is a one step process everywhere else. Thanks again
16:37:49 × boxscape quits (54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8) (Ping timeout: 246 seconds)
16:38:13 <sm[m]> you will occasionally have to do more than one thing, I can't lie :)
16:38:36 × Tesseraction_n quits (~Tesseract@unaffiliated/tesseraction) (Remote host closed the connection)
16:38:37 <sm[m]> but not in that common case
16:38:46 <Kronic> Yea, that is why I opened with my original question
16:39:14 <Kronic> My thought was if this is just not obvious or easy, why is that, it sounded like a trade off but it was actually just thinking the opposite way to what I am used to
16:40:01 <sm[m]> example: you are using stack and you want to add a package that's not included in your stackage snapshot - then you must add it in both package.yaml and in stack.yaml's extra-deps list
16:40:19 <sm[m]> but that's not too bad
16:41:06 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:41:08 × ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
16:41:14 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
16:41:53 <sm[m]> another one: you are using VS Code & Haskell extension - I think it won't automatically notice a change in package.yaml or the .cabal file, so you have to Restart Haskell LSP Server
16:42:15 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
16:42:28 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Remote host closed the connection)
16:42:53 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
16:43:06 × Aquazi quits (uid312403@gateway/web/irccloud.com/x-juroagyriejbnvke) (Quit: Connection closed for inactivity)
16:43:10 nicholassmith joins (~nicholass@c-67-180-177-103.hsd1.ca.comcast.net)
16:43:10 × nicholassmith quits (~nicholass@c-67-180-177-103.hsd1.ca.comcast.net) (Client Quit)
16:43:19 <Kronic> I see, I will keep that in mind, thank you
16:44:07 nhs joins (~nhs@c-67-180-177-103.hsd1.ca.comcast.net)
16:44:17 × ericsagn1 quits (~ericsagne@2405:6580:0:5100:e26e:cf9:1dd6:9615) (Ping timeout: 260 seconds)
16:44:22 <sm[m]> it would certainly be possible to write a script, and perhaps some day contribute as a stack/cabal command, that we could run for such a common task, and hide some of the variations
16:44:26 heatsink joins (~heatsink@2600:1700:bef1:5e10:e85f:7c7d:b6c9:7820)
16:44:56 <sm[m]> maybe it's out there on hackage.. but editing the file is easy enough that maybe it doesn't exist
16:45:33 <Kronic> If I stick around long enough to get good enough to do something like that, I will do that. To me it is an obvious no-brainer coming from the JS world, but I appreciate that it was just a different thought process here.
16:45:46 × nhs quits (~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Client Quit)
16:45:55 × Lurkki quits (54f048f5@esm-84-240-72-245.netplaza.fi) (Ping timeout: 245 seconds)
16:46:01 <sm[m]> if you do, I'll test!
16:46:14 ccapndave joins (~ccapndave@80-218-89-57.dclient.hispeed.ch)
16:46:31 nhs joins (~nhs@c-67-180-177-103.hsd1.ca.comcast.net)
16:46:32 <sm[m]> would be interesting to compare the commands/workflows you're used to with ours
16:46:43 × nhs quits (~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Client Quit)
16:46:51 <dolio> I'm not sure it really makes sense except in particular scenarios.
16:47:18 <dolio> Like, there can be multiple sections in the relevant files, each with their own dependencies.
16:47:19 <ccapndave> Hey everyone - I'm pretty new to Haskell. Is there a way to "unwrap" an `IO` value in GHCI?
16:47:42 <ccapndave> i.e. I run a function (in GHCI) that returns `IO Text`, but I want to get the `Text` in GHCI
16:47:48 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
16:47:57 <sm[m]> dolio: yes
16:48:41 <ccapndave> Ah, I just found the `<-` works on the prompt :)
16:49:46 <solonarv> ccapndave: yeah, the GHCi prompt is a Frankensteinish mixture of 'giant do-block in IO', 'top level of a Haskell source file', and 'interactive command interpreter'
16:50:14 × xff0x quits (~fox@2001:1a81:530c:8200:84b2:75ac:f6ea:70c4) (Remote host closed the connection)
16:50:30 xff0x joins (~fox@2001:1a81:530c:8200:b602:4be0:ca24:7260)
16:53:10 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
16:55:04 tlaxkit joins (~kvirc@89.35.63.181)
16:55:28 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
16:56:52 vicfred_ joins (~vicfred@unaffiliated/vicfred)
16:56:52 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
16:57:08 ericsagn1 joins (~ericsagne@2405:6580:0:5100:dfb:ab60:926e:6731)
16:58:13 × mouseghost quits (~draco@wikipedia/desperek) (Quit: mew wew)
16:59:53 ransom__ joins (c4264035@gateway/vpn/protonvpn/c4264035)
17:00:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
17:00:23 × vicfred quits (~vicfred@unaffiliated/vicfred) (Ping timeout: 256 seconds)
17:00:37 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
17:02:13 × scasc quits (~szabi@213142096072.public.telering.at) (Ping timeout: 258 seconds)
17:02:14 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Ping timeout: 256 seconds)
17:03:48 michalz joins (~user@185.246.204.44)
17:04:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
17:05:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
17:05:36 × vicfred_ quits (~vicfred@unaffiliated/vicfred) (Quit: Leaving)
17:06:04 geekosaur joins (82659a09@host154-009.vpn.uakron.edu)
17:10:39 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 258 seconds)
17:11:15 phaul joins (~phaul@ruby/staff/phaul)
17:11:59 × chele quits (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection)
17:14:47 × Jesin quits (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving)
17:15:55 × ccapndave quits (~ccapndave@80-218-89-57.dclient.hispeed.ch) (Remote host closed the connection)
17:15:58 christo joins (~chris@81.96.113.213)
17:17:06 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
17:17:37 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
17:19:45 × Kronic quits (~Kronic___@84.203.98.133) (Quit: Leaving)
17:20:13 <ezzieyguywuf> hrm, I think regexp may be the solution for my use-case, not writing a parser. I want my user's to be able to specify in a configuration file "take such-and-such portions of a string, and put them together. These other portions, save them for later", which sounds a lot like regexp capture groups
17:20:49 <ezzieyguywuf> to make this work with a parser I find myself essentially developing a mini-language in my configuration file and then translating that to megaparsec
17:20:53 <ezzieyguywuf> but it is non-trivial
17:21:46 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
17:22:41 <solonarv> that does seem like a sensible use of regex to me; another plus of that is being able to use an existing flavor of regex, so you can just point your users to that flavor's documentation
17:22:43 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
17:22:44 <glguy> regexp seems like the right solution for that kind of problem
17:22:46 Jesin joins (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
17:22:51 <sm[m]> ezzieyguywuf: indeed, I think (some form of) regexps are that language
17:24:25 × ransom__ quits (c4264035@gateway/vpn/protonvpn/c4264035) (Ping timeout: 240 seconds)
17:25:05 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
17:25:54 o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
17:26:41 z0 joins (~zzz@2a03:b0c0:3:d0::3095:3001)
17:26:56 <ezzieyguywuf> solonarv: precisely
17:27:05 z0 is now known as Guest60311
17:27:06 <ezzieyguywuf> well, glad we reached a consensus
17:27:14 ezzieyguywuf pats self on back, and thumb's up to the team
17:27:34 <ezzieyguywuf> I did get a very basic version of the parser thing working though, but it scaled extremely poorly, lol.
17:27:46 <ezzieyguywuf> hats off to glguy because config-value/config-schema is up to the task
17:29:07 × zzz quits (~zzz@2a03:b0c0:3:d0::3095:3001) (Ping timeout: 272 seconds)
17:29:07 Guest60311 is now known as zzz
17:29:36 zzz is now known as Guest70504
17:31:43 DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
17:36:16 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 246 seconds)
17:37:42 × cosimone quits (~cosimone@93-47-228-249.ip115.fastwebnet.it) (Quit: cosimone)
17:37:57 × mirrorbird quits (~psutcliff@2a00:801:44a:c3da:d62e:776:ee8f:54bf) (Quit: Leaving)
17:38:39 jonatanb joins (jonatanb@gateway/vpn/protonvpn/jonatanb)
17:38:39 × jonatanb quits (jonatanb@gateway/vpn/protonvpn/jonatanb) (Read error: Connection reset by peer)
17:38:43 obfusk_ joins (~quassel@a82-161-150-56.adsl.xs4all.nl)
17:39:28 jonatanb joins (jonatanb@gateway/vpn/protonvpn/jonatanb)
17:40:00 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
17:41:31 × obfusk quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (Ping timeout: 246 seconds)
17:41:34 ransom__ joins (c4264035@gateway/vpn/protonvpn/c4264035)
17:43:08 × jonatanb quits (jonatanb@gateway/vpn/protonvpn/jonatanb) (Remote host closed the connection)
17:43:14 × obfusk_ quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (Client Quit)
17:43:36 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Ping timeout: 256 seconds)
17:43:39 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
17:47:49 <ezzieyguywuf> 😍 regex-tdfa
17:48:02 abhixec joins (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net)
17:48:08 <ezzieyguywuf> (1) seems to already be here (I guess some other dependency built it), (2) seems very straightforward to use
17:49:41 <ezzieyguywuf> very clever use of polymorphism in =~
17:49:53 <ezzieyguywuf> (or maybe it's not so clever and I'm just so n00b)
17:50:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
17:50:35 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
17:51:13 <ezzieyguywuf> hrm, but maybe I want pcre, seems to be more prevalent
17:51:27 <ezzieyguywuf> i.e. I think pcre is the regex I think of when I say 'regex'
17:52:24 <sm[m]> ezzieyguywuf: regexps in haskell are a bit painful, choose with care. Do you need it to build easily on windows ? Do you need replace ? Capture groups ? etc.
17:52:40 <dminuoso> pcre-heavy is nice if you're into regular expressions
17:52:49 <dminuoso> And really light on the ergonomics, despite its name
17:53:47 <sm[m]> https://hackage.haskell.org/package/regex and the brand-new https://hackage.haskell.org/package/pcre2 are also worth checking out I expect
17:54:22 <ezzieyguywuf> yes capture groups, preferably yes windows, probably not replace
17:54:29 <sm[m]> for a portable solution, I use regex-tdfa plus some replace helpers
17:54:49 <dminuoso> There's also regex-applicative
17:54:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
17:55:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
17:55:10 <dminuoso> Which is a really darn well built library with a minimal dependency footprint.
17:55:30 <dminuoso> (Go ApplicativeDo, and capture groups is just monadic looking bind)
17:56:44 <ezzieyguywuf> 'Go'?
17:56:45 <sm[m]> dminuoso: hmm, it's hard for me to recognise that as a regular expressions package
17:57:42 × revprez_stg quits (~revprez_s@pool-108-49-213-40.bstnma.fios.verizon.net) (Quit: Lost terminal)
17:57:51 Yumasi joins (~guillaume@gar13-h03-176-172-89-74.dsl.sta.abo.bbox.fr)
17:57:54 <dminuoso> sm[m]: it parses regular grammars..
17:58:07 <dminuoso> you can parse regular expressoins with it
17:58:25 <dminuoso> Unless of course you confuse "regex" with "PCRE looking regex matchers"
17:58:32 <sm[m]> sure, but ezzieyguywuf wants to provide recognisable user-facing regular expressions
17:59:20 <dminuoso> Hard to say
17:59:33 × p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Remote host closed the connection)
18:00:16 <dminuoso> Also consider, giving your user access to regex is an invitatoin for ReDoS depending on the underlying implementation
18:00:32 <ezzieyguywuf> ReDoS?
18:00:40 <dminuoso> https://en.wikipedia.org/wiki/ReDoS
18:00:54 revprez_stg joins (~revprez_s@pool-108-49-213-40.bstnma.fios.verizon.net)
18:01:03 <sm[m]> ezzieyguywuf is building a tool that users run offline on their own data I think
18:01:26 <dminuoso> Im just giving them the insight, I dont know how things are tied together at the end
18:01:41 <sm[m]> +1
18:03:12 <ezzieyguywuf> yea, not woried about ReDoS after reading the wiki
18:03:18 <ezzieyguywuf> dminuoso: appreciate it.
18:03:20 <dminuoso> 17:49:45 solonarv | ccapndave: yeah, the GHCi prompt is a Frankensteinish mixture of 'giant do-block in IO', 'top level of a Haskell source file', and 'interactive command interpreter'
18:03:37 <dminuoso> That is a scary thought. If GHCi starts to seek revenge against its authors..
18:03:42 <ezzieyguywuf> lol, I dove into the ghci code once, I was like 😵
18:03:53 <ezzieyguywuf> ...or was it ghcid?
18:05:31 × sakirious quits (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Quit: The Lounge - https://thelounge.chat)
18:06:05 × phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 240 seconds)
18:07:11 sakirious joins (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
18:08:17 phaul joins (~phaul@ruby/staff/phaul)
18:08:27 <ezzieyguywuf> so regex-pcre requires an external c-library
18:08:46 <ezzieyguywuf> probs present on most linux, ad probably mac, but for windows would it be a hassle?
18:09:24 <sm[m]> I think we could bet on it
18:09:43 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 240 seconds)
18:10:00 <sm[m]> but worth testing eg with a stack build on windows
18:10:29 × zebrag quits (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr) (Quit: Konversation terminated!)
18:10:50 zebrag joins (~inkbottle@aaubervilliers-654-1-115-108.w86-198.abo.wanadoo.fr)
18:10:50 <sm[m]> I tested it some years back
18:10:53 <ezzieyguywuf> hrm, but regex-pcre-builtin bundles the pcre code, so it would build during cabal build I imagine
18:11:28 <ezzieyguywuf> i'll have to fire up my windows vm later to try it out
18:12:57 sord937 joins (~sord937@gateway/tor-sasl/sord937)
18:15:02 bitmagie joins (~Thunderbi@200116b806fa5f00c900c61d068f287f.dip.versatel-1u1.de)
18:18:29 nhs joins (~nhs@c-67-180-177-103.hsd1.ca.comcast.net)
18:18:38 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
18:19:08 × bitmagie quits (~Thunderbi@200116b806fa5f00c900c61d068f287f.dip.versatel-1u1.de) (Client Quit)
18:19:49 fuzzypixelz_ joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
18:19:49 × fuzzypixelz_ quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Remote host closed the connection)
18:19:55 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Read error: Connection reset by peer)
18:20:14 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
18:20:47 × nhs quits (~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Client Quit)
18:21:06 nhs joins (~nhs@c-67-180-177-103.hsd1.ca.comcast.net)
18:21:28 Fractalis joins (~Fractalis@2601:987:280:8d40:406e:6ad8:9d0d:835)
18:22:02 × nhs quits (~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Client Quit)
18:22:16 nhs joins (~nhs@c-67-180-177-103.hsd1.ca.comcast.net)
18:22:22 × stzsch quits (~stzsch@187.44.81.18) (Quit: stzsch)
18:24:13 × nhs quits (~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Client Quit)
18:27:33 fuzzypixelz_ joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
18:27:50 × conal quits (~conal@107.181.166.205) (Quit: Computer has gone to sleep.)
18:29:16 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 265 seconds)
18:29:16 fuzzypixelz_ is now known as fuzzypixelz
18:29:41 nhs joins (~nhs@c-67-180-177-103.hsd1.ca.comcast.net)
18:30:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
18:30:35 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
18:31:10 × nhs quits (~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Client Quit)
18:31:29 nhs joins (~nhs@c-67-180-177-103.hsd1.ca.comcast.net)
18:32:41 conal joins (~conal@107.181.166.205)
18:33:51 fuzzypixelz_ joins (~fuzzypixe@124.168.185.81.rev.sfr.net)
18:34:56 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
18:35:11 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
18:37:29 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 265 seconds)
18:37:29 fuzzypixelz_ is now known as fuzzypixelz
18:38:31 × nhs quits (~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Quit: leaving)
18:39:07 nhs joins (~nhs@c-67-180-177-103.hsd1.ca.comcast.net)
18:41:28 howdoi joins (uid224@gateway/web/irccloud.com/x-yhdmsladghejwjme)
18:41:37 p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
18:42:40 <dsal> I don't have a good mental model around what ~ does in a lambda parameter other than the opposite of !.
18:43:27 <dsal> e.g., when using criterion env, you're supposed to do something like this: `env getInput $ \ ~x -> ...` ... I don't fully understand why the ~ is necessary.
18:44:32 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) ()
18:44:58 <monochrom> ~x is unnecessary, it's just x, you're right about that.
18:45:15 <dsal> Oh. When would it be necessary?
18:45:17 × Fractalis quits (~Fractalis@2601:987:280:8d40:406e:6ad8:9d0d:835) (Remote host closed the connection)
18:45:33 Fractalis joins (~Fractalis@2601:987:280:8d40:406e:6ad8:9d0d:835)
18:45:45 <monochrom> I agree with your model that ~ and ! are opposites.
18:45:52 <geekosaur> in a case expression, as opposed to a lambda, when you need the pttern to be lazy instead of strict
18:45:55 × ystael quits (~ystael@209.6.50.55) (Read error: Connection reset by peer)
18:46:22 jb55 joins (~jb55@gateway/tor-sasl/jb55)
18:46:24 <monochrom> (let !(x,y) = foo in ...) = case foo of (x,y) -> ...
18:46:25 <dsal> Oh interesting. OK. I don't really think about where stuff is forced.
18:46:27 ystael joins (~ystael@209.6.50.55)
18:46:32 <geekosaur> although, hm, I thought lambda patterns desugared to cases so ~ would be necessary; it was let pattersn that are default lazy
18:46:40 <monochrom> (case foo of ~(x,y) -> ...) = let (x,y) = foo in ...
18:47:02 <monochrom> So in that sense (which is very strong) ~ and ! are opposites.
18:47:43 <dsal> Well I don't know why I've cargo-culted this ~ as my parameter to env, then.
18:48:01 scasc joins (~szabi@213142096072.public.telering.at)
18:48:20 <monochrom> Although, (let !x = foo in ...) becomes (let x = foo in seq x ...) and this is not reproduced by (case foo of x -> ...)
18:48:43 <dsal> Is there something special about tuples? It specifically mentions them in the docs.
18:49:13 <dsal> "The function that receives the environment must use lazy pattern matching to deconstruct the tuple (e.g., ~(x, y), not (x, y)), as use of strict pattern matching will cause a crash if an exception-throwing value is passed in."
18:49:28 <monochrom> (Although^2, GHC Core's "case foo of x -> ..." does a seq, different from Haskell's "case")
18:50:29 Lurkki joins (54f048f5@esm-84-240-72-245.netplaza.fi)
18:50:35 <monochrom> That sentence applies to your homebrew tuple/record types, too.
18:50:55 <monochrom> E.g., it applies to "data MyTuple a b = MkMyTuple a b" just as well.
18:51:26 <monochrom> "\(MkMyTuple x y) -> ..." is different from "\~(MkMyTyple x y) -> ..."
18:52:24 <dsal> Hmm... So is it just about when the exception is handled?
18:52:31 <monochrom> When your function doesn't always need x or y, and when you anticipate that the caller of your function may give you bottom instead of a constructed tuple, you will need the extra laziness of ~
18:52:37 <dsal> I have this problem where laziness just does what I want most of the time and I don't have to think about it.
18:52:51 <monochrom> :)
18:53:10 <dsal> Oh, so like partially filled records and stuff would be fine for a particular test with ~ but fail with !
18:53:32 <monochrom> No no, not partially-filled record. No record at all, plain bottom.
18:54:10 <dsal> I guess I just don't know why I would do that in this situation.
18:54:10 <monochrom> (\(MkMyTuple x y) -> ...) (MkMyTuple bottom bottom) is fine. (\(MkMyTuple x y) -> ...) bottom isn't.
18:54:39 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
18:55:44 <monochrom> Here is my favourite example of ~(x,y). It is tying a knot, therefore needs maximum laziness (tl;dr).
18:56:09 clynamen joins (~clynamen@37.183.22.31)
18:56:33 × Amras quits (~Amras@unaffiliated/amras) (Quit: Leaving)
18:57:02 × grol quits (~quassel@2620:11e:1000:2:250:56ff:fea4:7) (Ping timeout: 264 seconds)
18:57:07 grol_ joins (~quassel@2620:11e:1000:2:250:56ff:fea4:7)
18:57:09 <monochrom> Define f ~(xs , ys) = (1:ys, 0:xs). Define xys = f xys.
18:57:15 fuzzypixelz_ joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
18:58:02 <monochrom> If you forget the ~, my code becomes unproductive.
18:59:27 <dsal> Neat.
18:59:35 <monochrom> I am not familiar with any use case that involves errors instead of infinite data. Normally I want errors to manifest as early as possible, no?
19:00:40 × fuzzypixelz quits (~fuzzypixe@124.168.185.81.rev.sfr.net) (Ping timeout: 256 seconds)
19:00:40 fuzzypixelz_ is now known as fuzzypixelz
19:00:43 <ezzieyguywuf> I'm using the regex-tdfa documentation b/c the regex-pcre doesn't include as much info
19:00:46 <ezzieyguywuf> (why....?)
19:00:57 <ski> @src partition
19:00:57 <lambdabot> partition p xs = foldr (select p) ([],[]) xs
19:00:57 <lambdabot> where select p x ~(ts,fs) | p x = (x:ts,fs)
19:00:57 <lambdabot> | otherwise = (ts, x:fs)
19:01:25 × ralu quits (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 240 seconds)
19:01:50 × Fractalis quits (~Fractalis@2601:987:280:8d40:406e:6ad8:9d0d:835) (Ping timeout: 264 seconds)
19:02:08 <ski> @let partition' p xs = foldr (select p) ([],[]) xs where select p x (ts,fs) | p x = (x:ts,fs) | otherwise = (ts,x:fs)
19:02:11 <lambdabot> Defined.
19:02:15 <geekosaur> ezzieyguywuf, presumably because (a) core documentation comes from the base regex package, which the others extend (b) and much of the rest for PCRE comes from the C PCRE package
19:02:33 <ski> > let (xs,ys) = partition even [0 ..] in (take 4 xs,take 4 ys)
19:02:36 <lambdabot> ([0,2,4,6],[1,3,5,7])
19:02:38 <ski> > let (xs,ys) = partition' even [0 ..] in (take 4 xs,take 4 ys)
19:02:46 <lambdabot> mueval-core: Time limit exceeded
19:02:46 <lambdabot> mueval: ExitFailure 1
19:03:05 ralu joins (~ralu@static.211.245.203.116.clients.your-server.de)
19:03:42 Fractalis joins (~Fractalis@2601:987:280:8d40:406e:6ad8:9d0d:835)
19:06:23 × gxt__ quits (~gxt@gateway/tor-sasl/gxt) (Ping timeout: 240 seconds)
19:06:41 × ransom__ quits (c4264035@gateway/vpn/protonvpn/c4264035) (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:08:53 gxt__ joins (~gxt@gateway/tor-sasl/gxt)
19:10:25 × Rudd0 quits (~Rudd0@185.189.115.103) (Ping timeout: 240 seconds)
19:10:59 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
19:11:33 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: fuzzypixelz)
19:11:58 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
19:12:01 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Remote host closed the connection)
19:12:24 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
19:13:37 × conal quits (~conal@107.181.166.205) (Quit: Computer has gone to sleep.)
19:13:42 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Client Quit)
19:13:50 × geekosaur quits (82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds)
19:14:04 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
19:15:21 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
19:16:20 × _deepfire quits (~user@80.92.100.69) (Remote host closed the connection)
19:16:37 conal joins (~conal@107.181.166.205)
19:16:55 <scasc> is there something like `sleep :: Int {- seconds -} -> IO ()` in base? I could only find it in the package "extra" and "unix"
19:17:24 × bcmiller quits (~bm3719@66.42.95.185) (Ping timeout: 260 seconds)
19:17:26 × jathan quits (~jathan@69.61.93.38) (Ping timeout: 256 seconds)
19:17:31 bcmiller joins (~bm3719@66.42.95.185)
19:17:48 <scasc> Those are rather heavy dependencies
19:17:49 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
19:17:51 <dsal> scasc: `sleep = liftIO . threadDelay . seconds`
19:18:05 <dsal> @hoogle threadDelay
19:18:05 <lambdabot> Control.Concurrent threadDelay :: Int -> IO ()
19:18:05 <lambdabot> GHC.Conc threadDelay :: Int -> IO ()
19:18:05 <lambdabot> GHC.Conc.IO threadDelay :: Int -> IO ()
19:18:23 <dsal> seconds :: Num p => p -> p; seconds = (1000000 *)
19:18:37 <scasc> dsal: Thanks for the pointer to threadDelay!
19:18:56 <dsal> I'm annoyed there's not a proper type for time that these things use.
19:19:22 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection)
19:19:32 <scasc> (at least newtype)
19:19:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
19:20:07 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
19:21:05 <scasc> hm, before I asked I put `a -> IO ()` into hoogle, and this didn't show up. but that's not because hoogle interprets "a" as "user requests most generic type", as signatures with constraints (ie. less than unresticted) are displayed
19:21:25 jathan joins (~jathan@69.61.93.38)
19:21:36 <scasc> @hoogle liftIO
19:21:37 <lambdabot> Control.Monad.IO.Class liftIO :: MonadIO m => IO a -> m a
19:21:37 <lambdabot> GHC.IO liftIO :: IO a -> State# RealWorld -> STret RealWorld a
19:21:37 <lambdabot> Test.Framework.Providers.API liftIO :: IO a -> ImprovingIO i f a
19:21:39 × p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Quit: p-core)
19:22:27 × LKoen quits (~LKoen@243.169.9.109.rev.sfr.net) (Remote host closed the connection)
19:23:07 <dsal> IO is MonadIO. That sleep just works in all the transformers.
19:24:41 <scasc> I was just looking up the module name :-)
19:25:23 × clever quits (~clever@NixOS/user/clever) (Ping timeout: 256 seconds)
19:25:36 urodna_ joins (~urodna@unaffiliated/urodna)
19:26:23 × Yumasi quits (~guillaume@gar13-h03-176-172-89-74.dsl.sta.abo.bbox.fr) (Ping timeout: 260 seconds)
19:27:56 × urodna quits (~urodna@unaffiliated/urodna) (Ping timeout: 240 seconds)
19:29:46 × kuribas quits (~user@ptr-25vy0i7q16oj3vk3ynd.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
19:30:13 macrover joins (~macrover@ip68-108-126-211.lv.lv.cox.net)
19:31:07 hlysig joins (~hlysig@mobile-194-144-46-247.3G.internet.is)
19:31:26 adder parts (~adder@unaffiliated/adder) ("Leaving")
19:31:49 ransom joins (c4264035@gateway/vpn/protonvpn/c4264035)
19:32:58 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Ping timeout: 256 seconds)
19:33:45 justsomeguy joins (~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b)
19:33:45 × justsomeguy quits (~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b) (Changing host)
19:33:45 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
19:34:16 Amras joins (~Amras@unaffiliated/amras)
19:34:45 <justsomeguy> In “class Functor (f :: * -> *) where” ... is the “(f :: * -> *)” a kind signature?
19:35:20 LKoen joins (~LKoen@243.169.9.109.rev.sfr.net)
19:35:28 sagax joins (~sagax_nb@213.138.71.146)
19:36:29 <koz_> justsomeguy: Yes.
19:36:32 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
19:36:39 <koz_> Although the more modern spelling of that is (f :: Type -> Type).
19:37:06 × tlaxkit quits (~kvirc@89.35.63.181) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/)
19:38:24 <justsomeguy> Where does “Type” come from? I thought that kind signatures can only have “*”, “->”, and “#”.
19:38:25 × conal quits (~conal@107.181.166.205) (Quit: Computer has gone to sleep.)
19:38:46 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer)
19:38:49 <koz_> justsomeguy: It's just another way of saying '*'.
19:38:54 <koz_> It comes from Data.Kind.
19:39:01 <glguy> They have * and ->; # is a GHC-ism from old-times
19:39:11 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
19:40:39 geekosaur joins (82659a09@host154-009.vpn.uakron.edu)
19:40:45 the-void joins (~the-void@gateway/tor-sasl/the-void)
19:40:53 × the-void quits (~the-void@gateway/tor-sasl/the-void) (Remote host closed the connection)
19:41:15 the-void joins (~the-void@gateway/tor-sasl/the-void)
19:41:36 the-void parts (~the-void@gateway/tor-sasl/the-void) ()
19:41:42 acidjnk_new joins (~acidjnk@p200300d0c719ff053d8846c1390abdcb.dip0.t-ipconnect.de)
19:44:28 conal joins (~conal@64.71.133.70)
19:44:47 × Fractalis quits (~Fractalis@2601:987:280:8d40:406e:6ad8:9d0d:835) (Ping timeout: 260 seconds)
19:45:54 <jle`> justsomeguy: just to be clear, the * -> * is the kind here, and it's being ascribed to f
19:46:12 <jle`> like `id :: Int -> Int`
19:51:13 <justsomeguy> Could a type signature like “f :: a -> a” be used to limit the arity of “f”, instead of a kind signature?
19:52:04 <geekosaur> no, because f does not have a type, it's a typeclass and has a kind
19:54:14 <fresheyeball> is there anyone I can talk to about GHCJS? I have a hard one
19:54:21 <justsomeguy> Oh, “f” is a type constructor, anyways. I got confused for a second there.
19:54:26 <fresheyeball> but it's not that I have a hard one
19:54:35 <fresheyeball> it's that I don't know if there is anyone I can talk to
19:55:08 lidenbrock joins (bac05708@186.192.87.8)
19:55:17 × kupi quits (uid212005@gateway/web/irccloud.com/x-hofoknqplmdvajsv) (Quit: Connection closed for inactivity)
19:57:25 <fresheyeball> like, when should I use syncPoint. Why is my IO monad not fully evaling when normally it should
19:58:37 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
19:59:16 × scasc quits (~szabi@213142096072.public.telering.at) (Ping timeout: 240 seconds)
19:59:27 × abhixec quits (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) (Quit: leaving)
20:01:24 <justsomeguy> I'm only a newbie, but generally I have more luck with long-form formats for complicated questions. Maybe it would help to make an example repository and do a short write up on the problem on the mailing list?
20:01:50 justsomeguy is not sure which mailing list would be appropriate, though. Maybe #ghc would know.
20:02:16 <geekosaur> reddit might be better
20:02:37 <geekosaur> #ghc probably not unless it's a question about developing ghc / ghcjs
20:03:40 zzz joins (~zzz@2a03:b0c0:3:d0::3095:3001)
20:04:03 zzz is now known as Guest16204
20:04:07 <sm[m]> or draft your q on a paste site and we could help you refine it
20:05:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
20:05:39 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
20:06:11 × Guest70504 quits (~zzz@2a03:b0c0:3:d0::3095:3001) (Ping timeout: 272 seconds)
20:07:27 × wonko7 quits (~wonko7@2a01:e35:2ffb:7040:14a1:46f4:68f7:2133) (Ping timeout: 272 seconds)
20:07:47 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
20:08:11 hidedagger joins (~nate@unaffiliated/hidedagger)
20:08:42 × hidedagger quits (~nate@unaffiliated/hidedagger) (Client Quit)
20:08:57 kenran joins (~kenran@87.123.205.194)
20:09:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
20:10:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
20:14:15 × sakirious quits (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Quit: The Lounge - https://thelounge.chat)
20:15:53 × ransom quits (c4264035@gateway/vpn/protonvpn/c4264035) (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:20:01 × macrover quits (~macrover@ip68-108-126-211.lv.lv.cox.net) (Remote host closed the connection)
20:22:21 <fresheyeball> I posted my problem in #reflex-frp if anyone is interested
20:23:45 wonko7 joins (~wonko7@lns-bzn-55-82-255-183-4.adsl.proxad.net)
20:24:33 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds)
20:27:43 × danvet quits (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
20:27:54 × bliminse quits (~bliminse@host86-134-63-68.range86-134.btcentralplus.com) (Quit: leaving)
20:29:34 bor0 joins (~boro@unaffiliated/boro/x-000000001)
20:29:57 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
20:30:03 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
20:30:40 jpds joins (~jpds@gateway/tor-sasl/jpds)
20:31:08 conal joins (~conal@64.71.133.70)
20:31:11 × conal quits (~conal@64.71.133.70) (Client Quit)
20:31:15 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 260 seconds)
20:31:36 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
20:31:36 <bor0> I am trying to wrap my head around how `memoize` works, as defined in https://wiki.haskell.org/Memoization, especially this part: "= (fibMemo 1 + fibMemo 0) + fibMemo 1" and only a brief comment saying `fibMemo 1` will be evaluated only once. why is this the case?
20:31:39 conal joins (~conal@64.71.133.70)
20:31:58 × conal quits (~conal@64.71.133.70) (Client Quit)
20:34:26 <glguy> bor0: there's a block of text walking through why below. Did you have a question about a line or portion of that?
20:34:59 <glguy> let x = f y in x + x
20:35:24 <glguy> Does it make sense that 'x' need only get evaluated once there despite it being used twice?
20:35:40 <bor0> No, sorry. That's what confuses me.
20:36:12 <bor0> Does it hold in general that `f x + f y + f x` means evaluating `f x` once in Haskell?
20:36:15 <glguy> no
20:36:48 <bor0> I guess my question is. what makes this case special - (fibMemo 1 + fibMemo 0) + fibMemo 1
20:37:09 <glguy> what you wrote wouldn't reuse fibMemo 1
20:37:19 vicfred joins (~vicfred@unaffiliated/vicfred)
20:37:42 <glguy> It would have to be more like: let f1 = fibMemo 1; f0 = fibMemo 0 in (f1 + f0) + f1
20:37:48 <bor0> right below that, there's a comment saying -- Note: Because of the memoization, both �fibMemo 1� terms refer to the same thunk,
20:37:55 <glguy> in this case instead of discrete names like f0 and f1
20:37:57 <bor0> Maybe this comment refers to the line below, not above
20:38:00 <glguy> you have a list of the expressions
20:38:12 <glguy> let fs = map fibMemo [0..]
20:38:24 <glguy> fs :: [Integer]
20:38:59 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
20:39:14 <glguy> if you look at the 3rd element of that list twice it will only have to be computed the first time you look
20:39:49 <glguy> The way GHC compiles things once a lazy "thunk" is evaluated it gets replaced with the answers
20:40:02 <bor0> So, let x = map (+1) [0..] in (x !! 0, x !! 0) evaluates `x !! 0` only once?
20:40:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
20:40:36 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
20:40:36 <bor0> Sorry, I meant "evaluates 0+1 only once"
20:40:59 <glguy> yeah
20:41:01 × urek__ quits (~urek@191.32.142.168) (Quit: urek__)
20:41:02 sgibber2018 joins (~arch-gibb@208.85.237.137)
20:41:32 <bor0> Would that still be true for let x = map (+1) [0..10] in (x !! 0, x !! 0) ?
20:41:32 <glguy> you get something like: let x = (thing that adds 0+1 when needed and replaces this sentence with 1 afterward) : map (+1) [1..]
20:42:26 <glguy> yeah, it doesn't matter that the list is infinite or not
20:42:27 <dminuoso> It should be said that if GHC spots `f x + f y + f x` and optimizations are enabled, then if it's possible-to-likely GHC will turn it into `let fx = f x in fx + f y + fx`, but that's not a guarantee you get from the language or the compiler.
20:42:47 <dminuoso> Equivalently, if you name it, GHC is still free to inline the definition (thwarting sharing)
20:42:54 <glguy> common subexpression elimination is not an optimization you should rely upon
20:42:57 <bor0> glguy, ah, right, the lazy load kicks in for both finite/infinite lists.
20:43:07 <glguy> and GHC tries not to do replacements that will blow up like that
20:43:50 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) (Ping timeout: 264 seconds)
20:44:53 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
20:45:09 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
20:47:07 <dminuoso> bor0: This is the definition of cycle: cycle xs = xs' where xs' = xs ++ xs'
20:47:24 <dminuoso> Do you understand why there's a seemingly useless binding xs'?
20:48:04 <bor0> yeah, that seems pretty similar to `fix`, for infinite computation right?
20:48:13 × urodna_ quits (~urodna@unaffiliated/urodna) (Quit: urodna_)
20:48:31 Kem36 joins (cfac55db@207.172.85.219)
20:48:32 <bor0> > take 10 $ fix ((:) 3)
20:48:36 <lambdabot> [3,3,3,3,3,3,3,3,3,3]
20:49:31 <dminuoso> This just ensures that the infinite list uses constant space. The rationale is: If you name it, you can share it - so this does sharing in a cyclic structure, ensuring that in memory the list will loop like a p sideways (where it goes back to itself)
20:50:19 <bor0> Wow. I guess this sharing isn't happening in the `fix` example?
20:51:05 <dminuoso> It does actually, it's sort of the point of fix. :)
20:52:03 <bor0> yeah but I thought like 3:3:3:... would generate new copies of 3 every time
20:52:23 <dminuoso> fix f = let x = f x in x
20:52:33 <monochrom> "x = f x" shares x. "zs = 0 : zs" shares zs.
20:52:46 <bor0> ahhh!
20:52:53 <dminuoso> If its named (see the let x = ... binding site), it can be shared (usually).
20:54:38 <monochrom> f n = f (n-1) + f(n-1) takes time exponential to g n = let x = g (n-1) in x + x
20:55:04 <bor0> I am certain this is related to my memoization question (since we talk about `fix`) but there's too many dots for me to connect now. I guess the point here is that the space only grows when it meets a new number (memoized)?
20:56:00 shatriff_ joins (~vitaliish@176-52-216-242.irishtelecom.com)
20:57:05 × shatriff quits (~vitaliish@80.233.49.24) (Read error: Connection reset by peer)
20:57:15 conal joins (~conal@64.71.133.70)
20:57:29 <dminuoso> bor0: The space isn't necessarily the problematic part (it might still grow depending on whether reference prevent garbage collection). It's that the result is sharable, and thus can be reused.
20:57:51 <dminuoso> So it avoids re-computing what you already held in your hand, like in monochrom's example
20:58:08 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 265 seconds)
20:58:16 × kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection)
20:58:58 <bor0> Going back to `let x = map (+1) [0..] in (x !! 0, x !! 0)`, I guess the sharing happens here as well? Since we have `let x = ... x ...`
20:59:53 <dminuoso> Right. There's actually a trick you can use to observe this
20:59:57 <dminuoso> % :t trace
20:59:58 <yahb> dminuoso: String -> a -> a
21:01:02 × conal quits (~conal@64.71.133.70) (Client Quit)
21:01:54 <dminuoso> If you wrote: let x = trace "forced" (map (+1) [0..]) in (x !! 0, x !! 0)
21:02:05 <dminuoso> Then it will print "forced" whenever x is evaluted/forced/demanded.
21:02:57 <dminuoso> That lets you experiment and observe when/whether something is evaluated at all. It's also a valuable debugging primitive when something goes wrong deep in pure code and you have no easy way of threading IO in.
21:03:10 <bor0> I am now wondering why it printed `forced` twice
21:03:27 × Cthalupa quits (~cthulhu@47.186.47.75) (Ping timeout: 260 seconds)
21:03:40 <dminuoso> It's quite possible GHC decided to inline the definition of x.
21:03:43 <bor0> I would have expected (forced 1, 1) but it's instead (forced 1, forced 1)
21:03:53 drincruz joins (adriancruz@gateway/vpn/privateinternetaccess/drincruz)
21:04:16 Cthalupa joins (~cthulhu@47.186.47.75)
21:04:26 <dminuoso> So what was said earlier about "you get sharing when you name it" only holds true if GHC doesn't inline your definition anyway
21:04:51 <bor0> What does inlining a definition mean and can we alter that behavior somehow?
21:05:17 <dminuoso> Simplest way is to disable optimizations entirely, this is perhaps better for experimentation here.
21:05:35 hiroaki joins (~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de)
21:05:43 <dminuoso> In general GHC has pretty good heuristics to figure out when to inline regardless of whether you floated it out on a let.
21:06:14 <dminuoso> And inlining means replacing occurences of x with its definition.
21:06:28 <bor0> OK, so simple substitution
21:06:44 <bor0> This printed it only once `let x = trace "forced" (map (+1) [0..]) in take 5 $ repeat [x !! 0]`
21:07:05 <bor0> I get the feeling that this sharing thing seems to occur only when laziness is in play
21:07:25 × drincruz_ quits (~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 264 seconds)
21:07:31 <bor0> Maybe it is my optimization settings, I have no idea. But TIL that GHC is a monster with a lot of magic behind :)
21:07:55 <dminuoso> bor0: The thing with the previous example is, it's quite possible GHC figured out what you were doing and just inlined it all the way, such that it became ("forced" `trace` 0, "forced" `trace` 0)
21:08:43 <solonarv> bor0: you can tell GHC that it should or shouldn't inline a particular binding, sure; both of these can end up being useful
21:09:09 <dminuoso> bor0: The primary optimization mechanism in GHC is inlining, inlining and inlining!
21:09:18 <bor0> dminuoso, so can we say that in general GHC will not inline expressions when laziness is in play?
21:09:29 <dminuoso> Many of the other transformations GHC does in the optimizer is just to create opportunities for more inlining.
21:09:34 <bor0> Otherwise, how can we be certain that fibMemo will always work??
21:09:58 × sdrodge quits (~sdrodge@unaffiliated/sdrodge) (Quit: WeeChat 2.9)
21:10:40 <dminuoso> bor0: Regarding "can we say that in general GHC will not inline expressions when laziness is in play?" - no.
21:11:33 <bor0> How does it know not to inline the memoized fibonacci implementation? Or I guess it can't inline it, but if it can't, why?
21:11:39 <dolio> I think it's pretty unlikely that it turned it into `("forced" `trace` 0, "forced" `trace` 0)`
21:12:07 <dminuoso> bor0: So lets take the previous example and dolio's comment and bring that together. Look at core!
21:12:23 <solonarv> there are a bunch of heursitcs, like "don't inline big things", "don't inline recursive things", and so on
21:12:52 <dminuoso> dolio: Oh well, it should be 1 rather than 0 I guess if that's what you meant. :P
21:12:53 <dolio> Like, it might have inlined stuff, but it doesn't do enough partial evaluation for that good a result, I think.
21:13:45 <dolio> Yeah, it should also be 1, but that wasn't what I was thinking.
21:14:22 <dminuoso> bor0: So if you take your previous example, run GHC with `-ddump-simpl` and observe the output.
21:14:56 <dolio> Like, I would be surprised if it turned `[0..] !! 0` into `0` at compile time. I didn't think it actually did much of that.
21:15:12 <bor0> How can I pass `--ddump-simpl` to `stack`? I am using `stack repl`
21:15:16 × nfd quits (~nfd9001@c-67-183-38-33.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
21:15:47 <dminuoso> bor0: add `--ghc-options '-ddump-simpl'`
21:16:13 <dminuoso> Make sure to clean first, or use --force-dirty/-fforce-recomp
21:16:59 × acidx1 quits (~acidx@185.103.96.147) (Remote host closed the connection)
21:17:16 <bor0> I am seeing a lot of code but I have no idea what it represents (looks like a lambda with IO and stuff), and (forced 1, forced 1)
21:17:19 <dminuoso> dolio: Oh, perhaps it floated the map definition out, and then inlined x?
21:17:47 <dminuoso> That is, turned it ito `let m = map (+1) [0..]; x = trace "forced" m; in (x !! 0, x !! 0)`
21:18:00 drincruz_ joins (~adriancru@ool-44c748be.dyn.optonline.net)
21:18:05 <dminuoso> bor0: Can you share the output in a gist?
21:18:10 <dminuoso> @where paste
21:18:10 <lambdabot> Help us help you: please paste full code, input and/or output at eg https://paste.tomsmeding.com
21:18:10 <dolio> I think you guys might be missing the obvious explanation.
21:18:43 <bor0> https://paste.tomsmeding.com/ZoqUZJJD
21:19:02 <dolio> bor0: Is this in the repl?
21:19:16 × drincruz quits (adriancruz@gateway/vpn/privateinternetaccess/drincruz) (Ping timeout: 256 seconds)
21:19:22 <bor0> Yeah I used `stack repl --ghci-options '-ddump-simpl' --force-dirty`
21:19:47 <dolio> Well, I mean, are you typing the 'let' thing above in the repl directly?
21:19:53 son0p joins (~son0p@181.136.122.143)
21:20:03 <tomsmeding> the repl doesn't do sharing as aggressively as the compiler usually does
21:20:19 <bor0> oh yeah, if you search for `import Debug.Trace` it's right below that line
21:20:30 <bor0> (this paste has no line numbers it seems)
21:20:31 <tomsmeding> if you type that in a function in a normal haskell file, load that file in the repl and then run the function, you'll only see one "forced"
21:20:41 <tomsmeding> line numbers are todo sorry
21:20:55 <dminuoso> tomsmeding: Counting is a hard problem, don't worry. :)
21:21:06 <dminuoso> By the way, I have an explanation about the wildcard/type inference thing!
21:21:15 × dhouthoo quits (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
21:21:17 maop joins (~maop@185.204.1.185)
21:21:22 <dminuoso> Apparently `f :: _` does not subsume `f :: _ => _` ...
21:21:23 <dolio> dminuoso: Have you considered: what is the type of `x`?
21:21:25 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
21:21:26 <bor0> You're right! REPL seems to be different
21:21:37 <bor0> I get only one forced by just `stack repl test.hs`
21:21:41 <dminuoso> dolio: Ohhhh!
21:21:49 <dolio> :)
21:21:51 <dminuoso> Good catch. :)
21:22:32 × hlysig quits (~hlysig@mobile-194-144-46-247.3G.internet.is) (Quit: Leaving)
21:22:35 <dminuoso> Yeah, so now we've told him about sharing, inlining, fix, showed how core works... and now we have to explain MMR and how polymorphism fits into all of this
21:22:45 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
21:22:50 <dolio> Yeah. And it's off in the repl.
21:23:19 <dminuoso> Right
21:24:05 <dminuoso> bor0: Do you want the tl;dr version, or the sophisticated explanation?
21:24:36 <bor0> I am writing a blog post about Advent of Code #10. For part two I wasn't able to use memoization (because I didn't know) so I learned how to use it but I had no idea why it works. I will write a short blog post with all of this info
21:24:43 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
21:24:58 <bor0> Oh I repeated the first and the last sentence. My energy has been drained.
21:25:11 <bor0> dminuoso, let's start with the tl;dr :)
21:25:21 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Remote host closed the connection)
21:25:26 <dminuoso> bor0: For your experimentation, it's best if you turned on `:set -XMonomorphismRestriction` (by default the REPL has this turned off). After you do this, you should see only one "forced"
21:26:04 <bor0> I know what polymorphism means but not monomorphism
21:26:17 <monochrom> The opposite.
21:26:24 <monochrom> Err, the negation.
21:27:12 sdrodge joins (~sdrodge@unaffiliated/sdrodge)
21:27:15 <bor0> So `t a` vs `[Int]`?
21:27:20 <monochrom> Yes.
21:27:22 × Ariakenom quits (~Ariakenom@h-98-128-229-53.NA.cust.bahnhof.se) (Quit: Leaving)
21:27:39 <dminuoso> The MMR, broadly speaking, causes code to be monomorphized when you might not expect it to.
21:27:50 <dminuoso> It's on by default, and that's a good thing.
21:27:54 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
21:28:03 <dminuoso> If it's off, you trip into problems *exactly* like yours
21:28:12 <dminuoso> Where sharing just doesn't seem to happen for no obvious reason
21:28:36 <monochrom> "x = 4" if its type becomes the polymorphic "Num a => a" then it requires re-computation every time you use it. Clearly, "4" is a simple example, imagine you have a formula there that takes 5 seconds to compute.
21:29:26 <monochrom> The monomorphism restriction says "so let's kill the polymorphism for x=4 so programmers aren't surprised by re-computations we think they didn't intend"
21:29:32 <dminuoso> The underlying reason is, something of type `f :: Num a => a` becomes a function internally, taking a dictionary. We can't memoize the result of `f 1 :: Int`, because what if the next person does `f 1 :: Double`?
21:29:41 <monochrom> But it will surprise you when you intend polymorphism, haha.
21:30:09 <dminuoso> The trade off is: Either programmers will have drastic performance bugs that are really hard to debug, or they have the occasional type error they have to fix with an explicit type annotation
21:30:20 <dminuoso> It was deemed better to have obvious-type errors than non-obvious performance bugs
21:30:29 <dminuoso> Especially because the former are really easy to fix
21:31:05 <bor0> Can you explain why polymorphic types require computation every time? Is it because of type inference (but if yes, this only affects the type checker no?)
21:31:14 conal joins (~conal@64.71.133.70)
21:31:22 <dminuoso> Well, let's say you had something `x :: Num a => a`
21:31:25 <dminuoso> With some elaborate implementation
21:31:30 <dminuoso> That took 5 seconds to compute
21:31:51 tomsmeding thought that the repl just somehow did less sharing than ghc proper, but that of course makes no sense, default-NoMonomorphismRestriction explains it completely
21:31:55 <dminuoso> The consumer/user of a polymorphic binding decides on the type, so if you use `x` you decide what type you want it to have
21:32:28 <dminuoso> tomsmeding: It's funny, isnt it? 3 seasoned Haskell developers didn't spot it for half an hour.
21:32:32 <dminuoso> Precisely the reason we have MMR at all.
21:33:04 <tomsmeding> I didn't spot it in my own code (admittedly a bit more complex) for months
21:33:09 <monochrom> What you need is a seasoned user-guide lawyer like me. :)
21:33:09 <dminuoso> bor0: So if you decided to demand `x` at type Int, it would do the computation and hand you the result, say 11.
21:33:15 <dminuoso> Can it memoize the result 11?
21:33:17 × acidjnk_new quits (~acidjnk@p200300d0c719ff053d8846c1390abdcb.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
21:33:37 × vicfred quits (~vicfred@unaffiliated/vicfred) (Ping timeout: 258 seconds)
21:33:40 <bor0> In some map of (Type, Value), yes?
21:33:51 <dminuoso> That could certainly be done, yes.
21:34:17 <monochrom> That's an idea there, but I think it doesn't fit the structure of any Haskell compiler so far.
21:34:20 <bor0> But I guess GHC doesn't do that for some reason (since we have the MMR problem)
21:35:08 <dminuoso> bor0: There's some other very subtle and curious reasons for the MMR. If you want to learn more, check the Haskell report on this.
21:35:15 <bor0> I guess the map gets more complex as the polymorphic type gets more complex so it's probably not that easy to solve
21:35:55 <dminuoso> bor0: I guess part of the problem is that the memoization we have is not an active caching we implement, it's rather an artifact of our implementation.
21:37:11 <dminuoso> Very roughly, evaluation in GHC is done by jumping into a thunk, and executing some entry code. Then this will cause the evaluation to occur, and when the result is obtained, the thunk rewrites itself such that the next time its entered, it will readily return the result
21:37:21 <dminuoso> (This is with a lot of handwaving, mind you)
21:38:23 <bor0> That's OK. I am used to it. In the beginning I thought Haskell was magical, then I got used to it, then I meet a concept like this that blows my mind and now I am back to the beginning - Haskell is magical
21:38:40 <bor0> Or probably not Haskell but just GHC (which I guess is really Haskell nowadays)
21:39:37 <dminuoso> bor0: Anyhow. Like I just said a short while ago, the fact that 3 seasoned Haskell developers didn't even spot why sharing didn't occur is very much the reason we have the "Dreaded Monomorphism Restriction in the Haskell report itself.
21:39:54 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
21:40:08 <dminuoso> So this MMR is not just GHC, it's part of Haskell (as per Haskell2010) itself
21:40:44 × geekosaur quits (82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
21:41:47 <bor0> Well thank you dminuoso monochrom and others. I've learned a lot! That was fun. I'll try to digest all of this and write about it so that I can understand it even better
21:43:35 <tomsmeding> thanks from me too :p
21:44:58 vicfred joins (~vicfred@unaffiliated/vicfred)
21:45:28 × blissful quits (~azuline@unaffiliated/azuline) (Quit: The Lounge - https://thelounge.chat)
21:46:11 blissful joins (~azuline@unaffiliated/azuline)
21:46:51 <AWizzArd> Anyone here who knows the IHS web framework?
21:46:58 tput joins (~tput@S0106a84e3fe54613.ed.shawcable.net)
21:47:29 <AWizzArd> IHP that is
21:49:29 × LKoen quits (~LKoen@243.169.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
21:50:33 × michalz quits (~user@185.246.204.44) (Remote host closed the connection)
21:52:37 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
21:53:12 <jle`> is that the pancake one
21:55:03 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
21:57:46 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
21:58:41 Varis joins (~Tadas@unaffiliated/varis)
21:59:26 × Alleria_ quits (~AllahuAkb@2604:2000:1484:26:5ce:3f03:877d:a85e) (Ping timeout: 264 seconds)
21:59:57 × gentauro quits (~gentauro@unaffiliated/gentauro) (Read error: Connection reset by peer)
22:00:25 Rudd0 joins (~Rudd0@185.189.115.103)
22:00:41 Alleria_ joins (~AllahuAkb@2604:2000:1484:26:243e:f6eb:6465:f2c9)
22:00:54 gentauro joins (~gentauro@unaffiliated/gentauro)
22:01:08 <AWizzArd> jle`: not that I know of
22:01:33 <AWizzArd> I just wonder how their html form knows which action/handler it has to submit its data to.
22:01:49 hlysig joins (~hlysig@mobile-194-144-46-247.3G.internet.is)
22:02:45 × kenran quits (~kenran@87.123.205.194) (Quit: leaving)
22:03:03 <tomsmeding> what does the html look like? :)
22:04:12 ddellacosta joins (dd@gateway/vpn/mullvad/ddellacosta)
22:04:37 × bor0 quits (~boro@unaffiliated/boro/x-000000001) (Quit: Leaving)
22:05:01 × evanjs quits (~evanjs@075-129-098-007.res.spectrum.com) (Ping timeout: 264 seconds)
22:05:14 mounty joins (~mounty@2001:8000:2f59:0:55c2:3b2f:d5d6:95de)
22:05:14 <AWizzArd> tomsmeding: 1) <form method="POST" action="/CreatePost" id="" class="new-form">
22:05:17 <AWizzArd> tomsmeding: 2) <form method="POST" action="/UpdatePost?postId=9d95a780-2c8a-4f58-b8ea-db2465389ae9" id="/UpdatePost?postId=9d95a780-2c8a-4f58-b8ea-db2465389ae9" class="edit-form">
22:06:00 <tomsmeding> looks like plenty of identifying information in there
22:06:33 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:06:33 <AWizzArd> tomsmeding: The more interesting question is: what Haskell code produced this html? Here I’ve moved it all into one line:
22:06:37 <AWizzArd> renderForm post = formFor post [hsx|{(textField #title)} {(textField #body)} {submitButton} |]
22:06:48 <tomsmeding> oooh template haskell
22:06:54 <AWizzArd> The interesting bit is that in both cases the form got generated by that same line!
22:07:08 <AWizzArd> There is no information about the action= part
22:07:32 <AWizzArd> How can it know that in one case it needs to send the data to /CreatePost and in the other case to /UpdatePost ?
22:08:14 <tomsmeding> and that information is not in 'post' somehow?
22:09:20 × jle` quits (~mstksg@unaffiliated/mstksg) (Quit: WeeChat 2.7)
22:09:48 jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com)
22:09:48 × jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host)
22:09:48 jle` joins (~mstksg@unaffiliated/mstksg)
22:09:57 rprije joins (~rprije@14-201-170-17.tpgi.com.au)
22:10:26 evanjs joins (~evanjs@075-129-098-007.res.spectrum.com)
22:13:04 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
22:13:37 <AWizzArd> tomsmeding: nope
22:14:21 <AWizzArd> tomsmeding: maybe, to be honest, I am not sure
22:16:07 elliott__ joins (~elliott@pool-108-45-178-3.washdc.fios.verizon.net)
22:16:55 <tomsmeding> just guessing, but it might be the ControllerContext being passed around in a implicit parameter?
22:18:09 <tomsmeding> going off the definition of formFor here ( https://github.com/digitallyinduced/ihp/blob/master/IHP/View/Form.hs#L75 )
22:18:17 <tomsmeding> it's defined here: https://github.com/digitallyinduced/ihp/blob/master/IHP/Controller/Context.hs#L13
22:18:36 tomsmeding eww implicit parameters
22:18:49 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 264 seconds)
22:19:30 <solonarv> I started using those for my advent of code thing this year :>
22:19:53 <AWizzArd> solonarv: them? Is that a) IHP or b) implicit parms?
22:20:01 <tomsmeding> like, I use HasCallStack too, but ew :p
22:20:11 <tomsmeding> I would be surprised if someone uses IHP for AoC
22:20:22 <tomsmeding> though people use Excel so perhaps I shouldn't be
22:21:06 <Clint> o_O
22:22:09 <tomsmeding> you haven't seen the Excel posts on the reddit?
22:22:13 <solonarv> AWizzArd: "them" = implicit params
22:22:57 <AWizzArd> tomsmeding: what is AoC?
22:23:02 <AWizzArd> https://github.com/digitallyinduced/ihp/blob/master/IHP/View/Form.hs#L75
22:23:13 <tomsmeding> https://adventofcode.com/
22:24:02 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Read error: Connection reset by peer)
22:24:24 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
22:24:32 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Remote host closed the connection)
22:24:37 <solonarv> my framework gives the solution access to a (?dyns :: Map String Dynamic), which is used by tests to override paramteres that are different from the real input
22:25:06 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:25:06 <AWizzArd> What is that questionmark?
22:25:19 <solonarv> for example, 2020 day 9 (yesterday)'s problem involves a sliding window; in the real input, it's a 25-wide window, but in the example inputs, it's only 5-wide
22:25:26 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
22:25:30 <solonarv> the question mark is how implicit parameters are written
22:25:54 <AWizzArd> solonarv: Is that a unary operator or Haskell syntax?
22:26:09 <tomsmeding> special magical syntax
22:26:15 <tomsmeding> https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#implicit-parameters
22:27:05 <tomsmeding> mind you, I don't know if that thing is the answer to your question, but it seemed a likely candidate given that the question was "where is this information coming from that I'm not passing in"
22:31:20 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
22:31:58 <AWizzArd> tomsmeding: it probably will be something like that, indeed.
22:32:00 ep1ctetus joins (b8bba2a3@gateway/web/cgi-irc/kiwiirc.com/ip.184.187.162.163)
22:32:27 conal joins (~conal@64.71.133.70)
22:32:27 × conal quits (~conal@64.71.133.70) (Client Quit)
22:33:14 conal joins (~conal@64.71.133.70)
22:33:14 × conal quits (~conal@64.71.133.70) (Client Quit)
22:34:08 × fuzzypixelz quits (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
22:35:33 <ep1ctetus> Hi all, I'm experimenting to teach myself about Monad Transformers. I've successfully built a monad with ReaderT and LoggerT. I've never used Logger, and I've been looking through the docs for like 10 minutes, I can't figure out how to actually log a message. Can anyone help? It would be so nice to see an example of how it's used.
22:35:52 conal joins (~conal@64.71.133.70)
22:36:03 <glguy> What's a LoggerT?
22:36:38 <ep1ctetus> My mistake, LoggingT
22:36:54 <glguy> OK. What's a LoggingT :)
22:37:09 <ep1ctetus> https://hackage.haskell.org/package/monad-logger-0.3.36/docs/Control-Monad-Logger.html#t:LoggingT
22:37:26 × lidenbrock quits (bac05708@186.192.87.8) (Remote host closed the connection)
22:38:01 <glguy> ep1ctetus: Libraries written in this style hide all the interesting operations in typeclass instances. In this case the MonadLogger class
22:38:06 <glguy> monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> m ()
22:38:16 <glguy> https://hackage.haskell.org/package/monad-logger-0.3.36/docs/Control-Monad-Logger.html#t:MonadLogger
22:39:55 <ep1ctetus> ok I see, thank you! let me try this out
22:39:55 fuzzypixelz joins (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
22:42:56 <dminuoso> Hackage/haddock had a keybinding to open up the content window as a sort of overlay, what was the key?
22:43:55 <dminuoso> Or am I possibly just confusing this with <s> ?
22:44:06 <tomsmeding> well, s, yes, but what content window?
22:44:29 <dminuoso> https://hackage.haskell.org/package/optics-core-0.3.0.1/docs/Optics-AffineTraversal.html
22:44:33 <dminuoso> On the right side, the content box
22:44:43 <dminuoso> I swear there was a key binding that would bring this up like the <s> box
22:44:52 <tomsmeding> that Synopsis thing
22:44:53 <tomsmeding> ?
22:45:45 <dminuoso> No, the one that says content
22:47:10 <tomsmeding> oh, the contents box on the old haddocks pages?
22:47:21 <tomsmeding> on the new ones it's a sidebar on the left
22:47:34 <dminuoso> Yeah
22:47:42 <dminuoso> It seems as if the JavaScript comes from hackage, not haddocks
22:49:10 <tomsmeding> if I have to believe firefox devtools there's one event handler that runs when I press a key, and it seems to be the one for the 's' search box
22:49:22 × solonarv quits (~solonarv@astrasbourg-552-1-28-212.w90-13.abo.wanadoo.fr) (Ping timeout: 256 seconds)
22:49:26 <ep1ctetus> @glguy that was the direction I needed, thanks very much!
22:49:27 <lambdabot> Unknown command, try @list
22:50:19 <dminuoso> tomsmeding: Ah alright, cheers. Maybe I just misremember
22:51:19 <tomsmeding> yeah that listener just watches for 's' outside the box, and the various keybindings inside the box
22:51:24 <tomsmeding> ¯\_(ツ)_/¯
22:53:09 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
22:53:35 × fendor quits (~fendor@77.119.131.193.wireless.dyn.drei.com) (Remote host closed the connection)
22:53:42 monadmatt joins (~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
22:54:41 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
22:57:59 × monadmatt quits (~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Remote host closed the connection)
22:58:56 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
22:59:16 conal joins (~conal@64.71.133.70)
22:59:26 × TimWolla quits (~timwolla@2a01:4f8:150:6153:beef::6667) (Quit: Bye)
23:04:03 Gurkenglas_ joins (~Gurkengla@unaffiliated/gurkenglas)
23:04:46 Wuzzy joins (~Wuzzy@p549c9bc8.dip0.t-ipconnect.de)
23:05:22 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Quit: rcdilorenzo)
23:05:28 × dftxbs3e quits (~dftxbs3e@unaffiliated/dftxbs3e) (Remote host closed the connection)
23:05:35 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
23:06:04 × ddellacosta quits (dd@gateway/vpn/mullvad/ddellacosta) (Quit: WeeChat 2.8)
23:07:07 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 260 seconds)
23:07:53 dftxbs3e joins (~dftxbs3e@unaffiliated/dftxbs3e)
23:08:12 TimWolla joins (~timwolla@2a01:4f8:150:6153:beef::6667)
23:09:15 whatisRT joins (~whatisRT@ip5b416a33.dynamic.kabel-deutschland.de)
23:09:54 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
23:10:11 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
23:12:02 × ericsagn1 quits (~ericsagne@2405:6580:0:5100:dfb:ab60:926e:6731) (Ping timeout: 264 seconds)
23:12:07 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
23:14:03 <dsal> TIL you can pass the same Map type between strict and lazy maps.
23:14:52 × neiluj quits (~jco@unaffiliated/neiluj) (Ping timeout: 256 seconds)
23:14:59 <dolio> They're the same type, just different functions, yeah.
23:15:08 <dolio> The Functor instance is lazy, too.
23:16:34 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Ping timeout: 256 seconds)
23:17:43 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
23:20:40 monadmatt joins (~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
23:22:21 <dsal> Yeah, that's the magic. So I was abler to fmap a strict map into a knot-tying lazy self-referencing map.
23:22:44 × monadmatt quits (~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Remote host closed the connection)
23:23:24 ericsagn1 joins (~ericsagne@2405:6580:0:5100:68eb:cd6f:e65f:336b)
23:23:34 monadmatt joins (~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
23:24:55 × monadmatt quits (~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Remote host closed the connection)
23:26:38 sMuNiX joins (~sMuNiX@vlnsm8-montreal02-142-122-8-233.internet.virginmobile.ca)
23:26:55 monadmatt joins (~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
23:27:36 banner joins (~banner@116-255-17-47.ip4.superloop.com)
23:27:36 × banner quits (~banner@116-255-17-47.ip4.superloop.com) (Client Quit)
23:27:59 × monadmatt quits (~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Remote host closed the connection)
23:28:58 monadmatt joins (~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
23:29:16 doct0rhu joins (~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net)
23:29:16 <dolio> It's probably better not to think of the map as strict. The functions are.
23:29:43 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
23:30:43 <dsal> Yeah. I always thought they were two independent things. Makes sense but now I can do things easily I couldn't do before.
23:30:58 × wonko7 quits (~wonko7@lns-bzn-55-82-255-183-4.adsl.proxad.net) (Ping timeout: 256 seconds)
23:33:45 × monadmatt quits (~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Remote host closed the connection)
23:34:39 monadmatt joins (~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
23:34:45 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
23:38:01 × son0p quits (~son0p@181.136.122.143) (Quit: leaving)
23:41:16 × monadmatt quits (~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Remote host closed the connection)
23:43:22 × o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
23:44:19 olligobber joins (~olligobbe@unaffiliated/olligobber)
23:45:35 monadmatt joins (~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
23:53:52 jedws_ joins (~jedws@121.209.189.201)
23:54:12 × jedws quits (~jedws@121.209.189.201) (Read error: Connection reset by peer)
23:58:27 × jedws_ quits (~jedws@121.209.189.201) (Ping timeout: 260 seconds)
23:59:15 × Lurkki quits (54f048f5@esm-84-240-72-245.netplaza.fi) (Ping timeout: 245 seconds)

All times are in UTC on 2020-12-10.