2020/12/10

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