Home freenode/#haskell: Logs Calendar

Logs on 2021-01-04 (freenode/#haskell)

00:00:06 × atk quits (~Arch-TK@ircpuzzles/staff/Arch-TK) (Quit: Well this is unexpected.)
00:00:27 atk joins (~Arch-TK@ircpuzzles/staff/Arch-TK)
00:00:43 × ezrakilt_ quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Remote host closed the connection)
00:02:58 stef204 joins (~stef204@unaffiliated/stef-204/x-384198)
00:04:46 <b4er> I will never understand how they got Wadler to join them..
00:05:37 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
00:05:39 × boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed)
00:07:51 <MarcelineVQ> "We'll pay you to do research" "okay"
00:09:21 boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
00:09:46 <b4er> But, presumably, he doesn't need more money and now he's affiliated with a company that very much looks like a scam
00:09:57 × GuerrillaMonkey quits (~Jeanne-Ka@static-198-54-134-170.cust.tzulo.com) (Quit: Leaving)
00:12:15 <b4er> And his focus of work is/was not really cryptography or BlOcKcHaIn TeChNolOgY, so it always strikes me as really odd
00:13:11 <MarcelineVQ> What makes it look like a scam to you?
00:15:04 <b4er> Idk, it's very biased but the first time I heard of them was at ZuriHac talking to some of them and the vibe I got
00:15:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
00:16:21 <b4er> First impression really sucked, then there's the way they market themselves. The area they work in is not necessarily helping either
00:17:10 <b4er> Or the fact that they feel the need to legitimize themselves by trying to be affiliated with universities and/or Wadler
00:17:32 <MarcelineVQ> Is that how they feel? :>
00:17:41 <b4er> It's really difficult to put into words, but I know I'm not the only one that I know
00:18:02 <b4er> MarcelineVQ, pretty sure yeah
00:20:08 × stef204 quits (~stef204@unaffiliated/stef-204/x-384198) (Quit: WeeChat 3.0)
00:20:51 <b4er> Heck, they felt the need to put a video online defending themselves for not being a scam. No legitimate business would do that, if someone thinks ACME is a scam then ACME would not respond to it
00:21:09 <DigitalKiwi> b4er: are you stephen diehl
00:21:57 jedws joins (~jedws@121.209.189.201)
00:22:03 <b4er> DigitalKiwi, are you Hoskinson?
00:22:04 <MarcelineVQ> That reminiscent of 'No innocent person would have to defend themselves.' which is a bit of a scary line
00:24:58 <b4er> Wdym?
00:26:03 <DigitalKiwi> if you're a witch you float but if you're not a witch you drown
00:26:29 <DigitalKiwi> but the more you say you're not a witch the more they think you're a witch...and then you drown
00:28:33 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
00:30:30 × Lurkki quits (54f048f5@esm-84-240-72-245.netplaza.fi) (Ping timeout: 245 seconds)
00:30:38 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:143:c475:d20e:3db4:7e5b)
00:33:34 <b4er> I know it's not right to judge them based on that video, but that video just reinforced what I already was thinking
00:34:46 dandels joins (~dandels@unaffiliated/dandels)
00:35:11 <b4er> Maybe they are not a scam but fact is, their marketing strategy is very offputting and I've never heard of anyone that uses Cardano
00:35:58 <dmwit> So I'm using postgresql-simple. I have a table made via `create table foo ( foo real[] );`. If I `insert into foo(foo) values array[null]` I get an error (column "foo" is of type real[] but expression is of type text[]), which is kind of a shame because that's the syntax postgresql-simple generates.
00:36:50 <dmwit> What can I do about it?
00:37:14 sparsity joins (5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145)
00:37:47 renzhi joins (~renzhi@2607:fa49:653f:ba00::e0e5)
00:38:51 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
00:39:01 <shachaf> I guess you gotta use postgresql-complex.
00:39:54 <dmwit> (Specifically, that's what it generates for `execute "insert into foo(foo) values (?)" (Only (PGArray [Nothing :: Maybe Double]))`.)
00:41:24 × boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed)
00:41:26 × alx741 quits (~alx741@181.196.69.173) (Ping timeout: 256 seconds)
00:43:39 × zaquest quits (~notzaques@5.128.210.178) (Quit: Leaving)
00:43:39 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:44:57 zaquest joins (~notzaques@5.128.210.178)
00:45:09 boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
00:46:16 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
00:47:37 <sm[m]> b4er: you need to research them more
00:48:24 <boxscape> hmm just spent half an hour manually writing singletons for a GADT type because SIngletons' template haskell stuff couldn't do it, before realizing I actually just need singletons for lists :)
00:48:36 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
00:53:51 alx741 joins (~alx741@181.196.69.158)
00:54:01 <b4er> sm[m], in the sense that Cardano is actually being used?
00:56:14 <dolio> Well, at the very least, one of their "we aren't a scam" videos was made due to specific accusations that they are a scam. So your criteria don't seem very good in that sense.
00:57:02 <sm[m]> b4er: in the sense that it's a very interesting project with good goals, people and technology, and a large global decentralised proof of stake network running, much excellent informative free content online, good community etc. etc. But it's early days, don't expect to buy coffee with it
00:57:12 <dolio> I.E. anything accused of being a scam is not allowed to defend itself, because that would confirm it's a scam.
00:57:24 <sm[m]> I think if you research it properly you might change your mind
00:58:16 <sm[m]> the cryptocurrency world is weird and there is some culture shock
00:58:20 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Quit: Lost terminal)
00:59:09 <sm[m]> simply look at the people involved and you should know there's something interesting here
01:00:50 <DigitalKiwi> i mean a lot of the people i look at there are not interesting in a good way
01:01:37 <sm[m]> ok forget my last line, but I would suggest taking a real look
01:02:06 × zebrag quits (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
01:02:26 <DigitalKiwi> https://www.btc-exchange.com/register <-- yikes
01:02:49 zebrag joins (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr)
01:04:39 <DigitalKiwi> the further you go in the process and the more you read about the companies...lol
01:05:20 <DigitalKiwi> https://play.google.com/store/apps/details?id=com.mistertango&showAllReviews=true
01:05:34 <b4er> dolio, that is one criteria and it's the last one too. It just striked me as odd, usually companies don't let themselves drag down to such a level of discussion
01:05:51 <b4er> DigitalKiwi, what?
01:06:09 <DigitalKiwi> https://www.lb.lt/en/news/mistertango-uab-fined-eu245-thousand-for-non-compliance-with-aml-requirements
01:06:41 <DigitalKiwi> https://insidebitcoins.com/news/co-owner-of-defunct-crypto-exchange-bitmarket-dead
01:07:14 <sm[m]> b4er: it's the cryptocurrency world, which is like a wild west information warfare zone (exaggerating slightly). Scam accusations are the norm
01:07:26 sgibber2018 joins (~arch-gibb@208.85.237.144)
01:07:45 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
01:08:30 <maerwald> The tech can be used for whatever... it is neutral. The question you might rightfully ask is who's funding those efforts and why.
01:08:36 <sm[m]> I mean, it's even the norm here in #haskell
01:09:12 <DigitalKiwi> https://twitter.com/smdiehl/status/1288822169645002754
01:09:28 <maerwald> DigitalKiwi: Stephen himself works in fintech :)
01:10:08 <DigitalKiwi> well him being morally hypocritical doesn't make him wrong :P
01:10:42 <b4er> DigitalKiwi, what does MisterTango/Secure Nordic Payments have to do with all this now?
01:11:02 CMCDragonkai1 joins (~Thunderbi@124.19.3.250)
01:11:17 <DigitalKiwi> 00:59 sm[m]: simply look at the people involved and you should know there's something interesting here
01:11:17 <DigitalKiwi> 01:00 DigitalKiwi: i mean a lot of the people i look at there are not interesting in a good way
01:11:32 <glguy> #haskell is more for discussing Haskell than the merits of cryptocurrency or related companies
01:11:47 <DigitalKiwi> i think i took that more generally than it was meant to be
01:12:13 <glguy> even if a crypto-blockchain-company happens to use Haskell
01:12:33 shwouchk joins (uid154201@gateway/web/irccloud.com/x-zkcmqjwttckpbsnh)
01:12:46 <maerwald> glguy: and funds the haskell foundation and GHC
01:12:50 <sm[m]> DigitalKiwi: to be clear, I did mean people (humans)
01:12:58 <glguy> maerwald, right
01:13:08 <DigitalKiwi> "people involved" = cardano, while i thought "people involved (in crypto in general)"
01:13:50 <maerwald> glguy: so maybe it isn't that OT ;) ...if you look at the tech people involved, there are many great haskellers caring about haskell.
01:13:53 <sm[m]> DigitalKiwi: and I was talking about cardano, yes :)
01:14:07 <DigitalKiwi> i'm a bit slow on the uptake sometimes
01:15:02 <glguy> maerwald, still off topic for here, but probably interesting to discuss somewhere
01:15:13 <sm[m]> it would be a great shame if haskellers did not look at and learn from the cardano project because "they're all a scam"
01:15:19 <b4er> Just take the wad of cash but don't ask where it comes from is the norm
01:15:41 elliott_ joins (~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
01:15:55 <sm[m]> it's a very interesting large-scale actively maintained real-world haskell project and there aren't many of those
01:16:44 o1lo01ol_ joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
01:16:47 <maerwald> sm[m]: did you mention it's fully open source?
01:16:54 × madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 260 seconds)
01:17:04 <sm[m]> I had too many adjectives so did not
01:17:11 <DigitalKiwi> i don't think even if he's right and everything comes crashing down that anyone's going to associate it with haskell like he's afraid...
01:17:20 <b4er> They didn't, but they also didn't mention it's for-profit
01:17:25 <DigitalKiwi> then again people think nix is haskell
01:17:55 <DigitalKiwi> https://twitter.com/grhmc/status/1342834483003846656
01:18:00 nbloomf joins (~nbloomf@2600:1700:ad14:3020:71cc:d94:dfc3:ae9b)
01:18:34 <DigitalKiwi> hey don't a the crypto companies use nix for their haskell :P
01:19:27 <maerwald> DigitalKiwi: interesting point... no one does that indeed (and I know nix is used in some oil companies in russia, I think)
01:19:43 <maerwald> :D
01:19:46 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:20:22 × o1lo01ol1o quits (~o1lo01ol1@176.78.51.169) (Ping timeout: 265 seconds)
01:20:26 <b4er> Do these oil companies also place themselves close to nix the same way Cardano does to Haskell?
01:20:38 <DigitalKiwi> i just wanted to scream at them "It's a LAMBDA"
01:20:56 <MarcelineVQ> upper case or lower case?
01:21:32 <DigitalKiwi> https://upload.wikimedia.org/wikipedia/commons/9/9d/SICP_cover.jpg look at these posers using the haskell logo
01:23:58 <DigitalKiwi> maybe the cardano people are different than the oil people and cardano isn't so bad afterall
01:24:57 × zebrag quits (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Remote host closed the connection)
01:25:36 <sm[m]> hey, what have y'all got against oil shell !
01:25:40 zebrag joins (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr)
01:26:27 Jeanne-Kamikaze joins (~Jeanne-Ka@static-198-54-134-138.cust.tzulo.com)
01:27:12 <DigitalKiwi> i hate wildlife
01:27:34 <DigitalKiwi> so shell is alright by me :)
01:27:59 <sm[m]> https://www.oilshell.org not shell.com (DigitalKiwi :)
01:28:27 <DigitalKiwi> oh the thing i've only ever heard one person talk about lol
01:28:38 <DigitalKiwi> and only once
01:28:52 <DigitalKiwi> not like me that talks about nix/haskell all of the time to everyone >.>
01:30:01 × zebrag quits (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Client Quit)
01:31:06 <Axman6> IMO, if you believe a company who wants to give you money is corrupt, then you should attempt to take as much of their money as possible - money does not (necessarily) equal influence, we can turn corrupt dollars into non-corrupt Haskell infrastructure and development
01:31:25 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 264 seconds)
01:32:23 zebrag joins (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr)
01:33:14 <DigitalKiwi> i'm pretty sure i use tools that wouldn't exist without the crypto companies but wouldn't it be nice if they did
01:33:33 <sm[m]> not sure about that Axman6 , taking the mafia's money seems to end up badly in the movies
01:34:03 <maerwald> I'm sure the haskell foundation said they won't accept Mafia money :D
01:34:07 × columbarius1 quits (~columbari@i5E86B379.versanet.de) (Ping timeout: 260 seconds)
01:34:27 madjestic joins (~Android@86-88-72-244.fixed.kpn.net)
01:34:35 <sm[m]> did they though
01:34:40 <DigitalKiwi> if anyone wants to try and corrupt me i dare ya
01:34:46 <maerwald> Yes, they ruled out certain industries from funding
01:34:49 <sm[m]> oh it's a slow time here in #haskell :)
01:35:52 <DigitalKiwi> yeah so slow an op even came by and chatted for a bit ;D
01:35:59 columbarius1 joins (~columbari@mue-88-130-54-155.dsl.tropolys.de)
01:39:06 <DigitalKiwi> sm[m]: lol i still haven't written tito in haskell yet :( but i did finally make a macos kvm so i could maintain my nixpkgs for darwin a year after i said i was going to so there's hope
01:40:00 <maerwald> how do you legally make a macos kvm
01:40:01 <sm[m]> DigitalKiwi: tito.. remind me ?
01:40:26 <DigitalKiwi> https://mostlyabsurd.com/files/tito
01:40:58 <DigitalKiwi> i have a macbook pro
01:41:03 <Axman6> I thought it was astounding that there were people suggesting we shouldn't accept funding from Galois, while they arte technically a "military contractor", it's not like they are building anything which kills people, and more than Intel makes CPUs which kill people, and theiur R&D has lead to society's improved ability to make people's lives more private and secure. The black and whiteness of the thinking just blew me away
01:41:21 <DigitalKiwi> not that i care about what apple says lol
01:41:22 <sm[m]> DigitalKiwi: ah yes! thanks
01:42:28 <sm[m]> Axman6 I must nitpick: how do you know what such companies are building
01:42:35 <sm[m]> s/such//
01:43:03 × shatriff_ quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
01:43:15 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
01:43:39 <Axman6> that's true I guess, though many military contractors are all to happy to tell you how leathal their arms are (in less direct language, but it's clear that an artillary shell isn't designed to build houses)
01:43:44 <DigitalKiwi> "i make sure the rockets don't crash on innocent civilians! i'm not bad!" -- someone who writes flight control software
01:43:48 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
01:44:21 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
01:44:27 <Axman6> at what point do yuo become responsible though?
01:44:49 <DigitalKiwi> maerwald: and to answer your question a different way; easily https://github.com/adisbladis/macOS-Simple-KVM
01:44:51 <sm[m]> it's at least a good question to be asking
01:45:09 <DigitalKiwi> i spent hours trying to find this one twitter thread a few months ago :(
01:45:10 <b4er> The key is you distribute the workload among different people/companies such that no one is responsible
01:46:16 <Axman6> someone makes the decision to shoot a gun at a person or a dear, it's not the gun's fault, or the manufacturer's (and don't mistake me got a gun nut, I'm Australian and wish we had stricter laws)
01:46:23 <b4er> In case the media/public needs a responsible person just fire the CEO and you're good, maybe say "We're sorry!"
01:46:26 <DigitalKiwi> teacher rephrased a lot of the things that were probably not explained at being so nefarious whent hey were built to see if people would still want to work on them
01:47:28 ThoaiOnline joins (79c81878@nv.tho.ai)
01:48:00 <DigitalKiwi> would you have written the software that did the census if you knew how it would be used?
01:48:17 <Axman6> the Australian census?
01:48:20 <DigitalKiwi> https://en.wikipedia.org/wiki/IBM_and_the_Holocaust
01:49:01 <ThoaiOnline> yes, at least i can introduce a bug into it :D
01:49:08 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
01:49:49 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
01:50:14 <DigitalKiwi> and people did too yea
01:50:56 <Axman6> If youIf you meant the Australian one, hell yes I would, I wouldn't have fucked up the infrastyructure as badly as IBM did :)
01:51:09 <DigitalKiwi> a lot of people are like "well i might as well be the one that gets paid because someone else will do it if i don't" and don't stop to think well maybe we shouldn't let them do it either
01:52:20 steven3 joins (~steven@172.92.142.109)
01:53:03 × tomboy64 quits (~tomboy64@gateway/tor-sasl/tomboy64) (Ping timeout: 240 seconds)
01:54:14 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
01:54:36 × s00pcan quits (~chris@075-133-056-178.res.spectrum.com) (Ping timeout: 240 seconds)
01:56:23 ThoaiOnline_ joins (~ThoaiOnli@2403-5800-4200-e00-144c-eb3c-31a1-4f15.ip6.aussiebb.net)
01:56:42 s00pcan joins (~chris@107.181.165.217)
01:56:49 <maerwald> I think a lot of ppl don't think twice before they make large accusations, because opinion on the internet is cheap and you're not New York Times, having to make your case legally sound.
01:57:13 × elliott_ quits (~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 264 seconds)
01:57:28 ThoaiOnline23 joins (79c81878@nv.tho.ai)
01:57:32 <steven3> hello, I was trying to do a simple transformation from within a do block and I can't get it to type check, can someone take a look? Here's the minimal example https://gist.github.com/stevenfontanella/8ff3c45db26c6de58c0ee891bcfeda4c
01:57:47 <steven3> I must be missing something relatively simple, but I thought what I did there usually should work
01:58:37 <steven3> (ignoring that I probably shouldn't be using fromRight at all :))
01:59:04 ThoaiOnline_ parts (~ThoaiOnli@2403-5800-4200-e00-144c-eb3c-31a1-4f15.ip6.aussiebb.net) ()
01:59:29 <Axman6> :t fromRight
01:59:30 <lambdabot> b -> Either a b -> b
01:59:32 × renzhi quits (~renzhi@2607:fa49:653f:ba00::e0e5) (Ping timeout: 268 seconds)
01:59:32 <steven3> hmm actually maybe I need either error id
01:59:41 <steven3> yeah looks like I assumed the wrong type
01:59:42 <Axman6> thar's ya prarblem
01:59:47 ThoaiOnline_ joins (~ThoaiOnli@2403-5800-4200-e00-144c-eb3c-31a1-4f15.ip6.aussiebb.net)
02:00:02 <Axman6> @hoogle Either a b -> b
02:00:04 <lambdabot> Data.Either.Combinators fromRight' :: Either a b -> b
02:00:04 <lambdabot> Data.Either.Utils fromRight :: Either a b -> b
02:00:04 <lambdabot> Data.Strict.Either fromRight :: Either a b -> b
02:00:13 <Axman6> @hoogle+
02:00:13 <lambdabot> Data.Either.Unwrap fromRight :: Either a b -> b
02:00:13 <lambdabot> Rebase.Prelude fromRight' :: () => Either a b -> b
02:00:13 <lambdabot> Network.Haskoin.Util fromRight :: Either a b -> b
02:00:17 × ThoaiOnline_ quits (~ThoaiOnli@2403-5800-4200-e00-144c-eb3c-31a1-4f15.ip6.aussiebb.net) (Client Quit)
02:00:30 <steven3> thanks Axman6
02:00:34 ThoaiOnline_ joins (~ThoaiOnli@2403-5800-4200-e00-144c-eb3c-31a1-4f15.ip6.aussiebb.net)
02:05:02 × ThoaiOnline_ quits (~ThoaiOnli@2403-5800-4200-e00-144c-eb3c-31a1-4f15.ip6.aussiebb.net) (Ping timeout: 260 seconds)
02:06:31 × quinn quits (~quinn@c-73-223-224-163.hsd1.ca.comcast.net) (Quit: ZNC 1.8.1 - https://znc.in)
02:06:41 tomboy64 joins (~tomboy64@gateway/tor-sasl/tomboy64)
02:07:20 × ThoaiOnline23 quits (79c81878@nv.tho.ai) (Remote host closed the connection)
02:07:40 × paintcan quits (~user@cpe-69-206-241-99.nyc.res.rr.com) (Remote host closed the connection)
02:13:06 × acidjnk_new quits (~acidjnk@p200300d0c704e739101f4cb6fc9280ae.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
02:14:54 ThoaiOnline is now known as Guest90236
02:14:54 × Guest90236 quits (79c81878@nv.tho.ai) (Killed (moon.freenode.net (Nickname regained by services)))
02:15:20 quinn joins (~quinn@c-73-223-224-163.hsd1.ca.comcast.net)
02:15:35 ThoaiOnline joins (~ThoaiOnli@2403-5800-4200-e00-144c-eb3c-31a1-4f15.ip6.aussiebb.net)
02:18:25 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Quit: brb restarting)
02:20:29 × DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...)
02:21:49 × Wuzzy quits (~Wuzzy@p5790e976.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
02:23:02 × notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection)
02:24:13 × Tario quits (~Tario@201.192.165.173) (Ping timeout: 264 seconds)
02:24:32 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
02:25:24 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 272 seconds)
02:25:24 × m0rphism quits (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 272 seconds)
02:27:19 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:28:44 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:32:11 elliott_ joins (~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
02:32:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
02:34:51 Tario joins (~Tario@201.192.165.173)
02:38:07 × lawid quits (~quassel@dslb-084-059-133-104.084.059.pools.vodafone-ip.de) (Ping timeout: 246 seconds)
02:39:02 lawid joins (~quassel@dslb-090-186-127-244.090.186.pools.vodafone-ip.de)
02:39:21 olligobber joins (~olligobbe@unaffiliated/olligobber)
02:41:34 × benjamingr__ quits (uid23465@gateway/web/irccloud.com/x-jmrkejpitddinbuk) (Quit: Connection closed for inactivity)
02:42:28 notzmv joins (~user@unaffiliated/zmv)
02:44:00 b4er_ joins (~b4er@91.193.4.138)
02:44:23 × xff0x quits (~fox@2001:1a81:523c:2500:528d:7247:c11a:c6c7) (Ping timeout: 260 seconds)
02:45:11 × b4er quits (~b4er@91.193.4.138) (Read error: Connection reset by peer)
02:46:08 xff0x joins (~fox@2001:1a81:5271:e800:9600:6dbe:32ee:1f82)
02:46:24 b4er_ is now known as b4er
02:49:04 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection)
02:50:37 × CMCDragonkai1 quits (~Thunderbi@124.19.3.250) (Ping timeout: 264 seconds)
02:51:04 × sparsity quits (5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) (Quit: Connection closed)
02:51:42 × zebrag quits (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
02:52:05 zebrag joins (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr)
02:52:06 × zebrag quits (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Client Quit)
02:52:39 Stanley00 joins (~stanley00@unaffiliated/stanley00)
02:54:16 zebrag joins (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr)
02:58:25 × quinn quits (~quinn@c-73-223-224-163.hsd1.ca.comcast.net) (Quit: ZNC 1.8.1 - https://znc.in)
03:00:17 × jmchael quits (~jmchael@81.174.205.210) (Ping timeout: 256 seconds)
03:00:52 × s00pcan quits (~chris@107.181.165.217) (Ping timeout: 246 seconds)
03:02:57 wei2912 joins (~wei2912@unaffiliated/wei2912)
03:03:00 s00pcan joins (~chris@075-133-056-178.res.spectrum.com)
03:03:46 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving)
03:03:47 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:04:56 × cads quits (~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 240 seconds)
03:05:04 × cads2 quits (~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 246 seconds)
03:05:05 quinn joins (~quinn@c-73-223-224-163.hsd1.ca.comcast.net)
03:06:18 × notzmv quits (~user@unaffiliated/zmv) (Read error: No route to host)
03:06:27 × madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 272 seconds)
03:06:52 guest14 joins (~user@49.5.6.87)
03:07:39 xirhtogal joins (~lagothrix@unaffiliated/lagothrix)
03:07:39 × lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (barjavel.freenode.net (Nickname regained by services)))
03:07:39 xirhtogal is now known as lagothrix
03:07:48 <guest14> why use read in parsec would show something like "Prelude.read: no parse" https://paste.ubuntu.com/p/8W5NcDrS6J/
03:10:09 <dsal> Parsec doesn't do that
03:10:18 notzmv joins (~user@unaffiliated/zmv)
03:10:45 <dsal> You're using `read`, which gives that error.
03:11:17 × larryba quits (~bc812391@217.29.117.252) (Quit: http://www.okay.uz/ (Session timeout))
03:12:31 <guest14> dsal: but this work https://paste.ubuntu.com/p/s55ywJJfgC/
03:13:09 <dsal> Maybe, got you should not use read. It's partial and confusing you.
03:13:38 <dsal> I don't know the parsec api well. Megaparsec has `decimal` to parse numbers. Much less confusing.
03:13:39 <guest14> dsal: https://paste.ubuntu.com/p/9983fQH8rb/
03:13:39 <xsperry> guest14, on fail read returns error, instead of Parsec.Error, so it doesn't play well with Parsec, and shouldn't be used if it can fail
03:14:50 <guest14> xsperry: which should use to digit?
03:15:00 b4er_ joins (~b4er@2a02:aa16:3a80:1900:5f0f:a23e:4628:9051)
03:15:15 <dsal> guest14: is parsec required?
03:15:34 × b4er quits (~b4er@91.193.4.138) (Ping timeout: 246 seconds)
03:15:36 <xsperry> guest14 just ensure that it can't fail, or use readMaybe if it can
03:15:42 <guest14> dsal: yes
03:16:16 <dsal> readMaybe isn't much better, it'll just not fail.
03:16:40 Stanley|00 joins (~stanley00@unaffiliated/stanley00)
03:16:48 <guest14> xsperry: dsal the weird things is why the first link fail, and the second link success
03:16:58 <guest14> https://paste.ubuntu.com/p/8W5NcDrS6J/
03:17:03 <guest14> https://paste.ubuntu.com/p/9983fQH8rb/
03:17:33 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
03:17:39 <dsal> Sometimes doing the wrong thing works. That it's confusing you is why it's not a good way to do it.
03:18:58 × Stanley|00 quits (~stanley00@unaffiliated/stanley00) (Read error: Connection reset by peer)
03:19:25 × Stanley00 quits (~stanley00@unaffiliated/stanley00) (Ping timeout: 264 seconds)
03:19:28 Stanley|00 joins (~stanley00@unaffiliated/stanley00)
03:19:55 <xsperry> AFAICS the only way `do l <- many digit; return (read l)` can fail is if the input contained too many digits for Int
03:20:20 <glguy> xsperry, many can return 0 digits
03:20:32 <glguy> > read "" :: Int
03:20:33 <lambdabot> *Exception: Prelude.read: no parse
03:20:35 <xsperry> indeed, use many1
03:20:41 <dsal> many and some are confusing names
03:21:11 <dsal> > read "parse" :: Int
03:21:13 <lambdabot> *Exception: Prelude.read: no parse
03:21:44 <xsperry> that would have failed at `many digit'
03:22:03 <dsal> many1 is some, afaik
03:22:21 <guest14> many is 0 or more than 0
03:22:28 <guest14> many1 is 1 or more than 1
03:22:48 <dsal> some is 1 or more. many is 0 or more
03:23:01 × b4er_ quits (~b4er@2a02:aa16:3a80:1900:5f0f:a23e:4628:9051) (Read error: Connection reset by peer)
03:23:13 <guest14> I change many to many1, and it works now
03:23:14 <dsal> Oh, parsec defines its own
03:23:15 b4er joins (~b4er@91.193.4.106)
03:23:18 b4er_ joins (~b4er@91.193.4.106)
03:23:28 <dsal> guest14: it's still incorrect, just less incorrect
03:23:38 b4er__ joins (~b4er@91.193.4.106)
03:23:51 <guest14> dsal: what's the right way?
03:24:31 <dsal> guest14: not using read, failing properly in the case where it can't produce the type you want
03:25:01 × urodna quits (~urodna@unaffiliated/urodna) (Quit: urodna)
03:25:36 hiroaki joins (~hiroaki@ip4d16b6b9.dynamic.kabel-deutschland.de)
03:26:01 <guest14> https://hackage.haskell.org/package/parsers-0.12.10/docs/Text-Parser-Token.html#v:decimal ?
03:26:19 <dsal> guest14: e.g., see what megaparsec does here: https://hackage.haskell.org/package/megaparsec-9.0.1/docs/Text-Megaparsec-Char-Lexer.html
03:28:57 × Stanley|00 quits (~stanley00@unaffiliated/stanley00) (Read error: Connection reset by peer)
03:29:27 Stanley00 joins (~stanley00@unaffiliated/stanley00)
03:30:28 <jle`> i wonder if there's a nice way turn a list like [1,2,3,4,5,6,7,8] into ((1<>2)<>(3<>4))<>((5<>6)<>(7<>8)) in constant-time
03:30:43 drbean joins (~drbean@TC210-63-209-184.static.apol.com.tw)
03:31:09 <jle`> er
03:31:12 <jle`> constnat-space
03:31:22 <jle`> probably not
03:37:02 × boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed)
03:37:28 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
03:37:44 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
03:37:58 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
03:38:08 boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
03:38:43 <guest14> cabal or stack, which one you guys prefer?
03:39:00 <dsal> Fight!
03:39:15 <guest14> there're cabal v1 v2 v3, if there's v4?
03:39:35 <guest14> stack put everything on AWS, that sucks
03:40:17 <dsal> What's wrong with aws?
03:40:34 <guest14> aws is blocked on some countries
03:41:02 <arahael> I liked stack, but then cabal picked up most of the functionality I actually wanted.
03:41:14 <arahael> So if I was choosing today... I think I'd just do cabal.
03:41:59 <dsal> I've not managed to get a cabal workflow that works for me. I also use nix, so pretty much all the things.
03:42:07 × shwouchk quits (uid154201@gateway/web/irccloud.com/x-zkcmqjwttckpbsnh) (Quit: Connection closed for inactivity)
03:42:15 <guest14> pacman is the greatest package manager I ever use, but it's not friendly to haskell
03:42:32 <guest14> nix or guix are too hard to config?
03:42:44 <dsal> Sorry to hear that. You'll find nix someday :)
03:43:13 × Tario quits (~Tario@201.192.165.173) (Ping timeout: 246 seconds)
03:43:16 <guest14> pacman is really awesome, apt sucks
03:44:15 <dsal> ok
03:45:47 dyeplexer joins (~lol@unaffiliated/terpin)
03:45:49 EnoGalaxy joins (~cyphermag@c-24-143-96-65.customer.broadstripe.net)
03:45:53 Tario joins (~Tario@201.192.165.173)
03:45:55 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
03:45:58 EnoGalaxy parts (~cyphermag@c-24-143-96-65.customer.broadstripe.net) ()
03:48:46 ThoaiOnline1 joins (~ThoaiOnli@nv.tho.ai)
03:48:54 × andi- quits (~andi-@NixOS/user/andi-) (Remote host closed the connection)
03:49:11 Tario joins (~Tario@201.192.165.173)
03:49:14 <maerwald> guest14: pacman doesn't have much in terms of features, so its implementation isn't very complex
03:50:26 × ThoaiOnline quits (~ThoaiOnli@2403-5800-4200-e00-144c-eb3c-31a1-4f15.ip6.aussiebb.net) (Ping timeout: 264 seconds)
03:52:17 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
03:53:32 × shinobi quits (~shinobi@c-24-147-48-162.hsd1.ma.comcast.net) (Ping timeout: 260 seconds)
03:53:54 andi- joins (~andi-@NixOS/user/andi-)
03:54:24 × boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Ping timeout (120 seconds))
03:54:35 × b4er_ quits (~b4er@91.193.4.106) (Quit: bye!)
03:54:40 × b4er quits (~b4er@91.193.4.106) (Quit: bye!)
03:54:44 × b4er__ quits (~b4er@91.193.4.106) (Quit: bye!)
03:54:46 × theDon quits (~td@94.134.91.73) (Ping timeout: 246 seconds)
03:54:57 b4er joins (~b4er@91.193.4.106)
03:55:01 jmchael joins (~jmchael@81.174.205.210)
03:56:50 theDon joins (~td@94.134.91.22)
03:57:37 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
03:57:40 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
03:57:54 <guest14> maerwald: and apt is more complex than pacman?
03:58:16 <maerwald> not much, no
03:59:20 <dsal> guest14: you started this by saying your packaging system isn't good for Haskell. Not selling it very well here.
03:59:29 <guest14> I tried `proxychains stack install parsers` but got ""/home/john/.stack/build-plan/lts-16.27.yaml" (Response {responseStatus = Status {statusCode = 404, statusMessage = "Not Found"},"
04:00:10 <guest14> it means proxychains won't work to stack?
04:00:11 <dsal> That's probably not what you wanted to do in the first place.
04:02:54 <guest14> https://hackage.haskell.org/package/parsers-0.12.10/docs/Text-Parser-Token.html#v:decimal
04:03:12 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
04:03:16 <guest14> this package called `parsers` right?
04:03:49 jpds joins (~jpds@gateway/tor-sasl/jpds)
04:04:35 <dsal> Yes, but you put it in your package.yaml and just build, you don't do a global install.
04:04:56 boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
04:05:24 <dsal> But if you're reading for something new, try megaparsec. It's much more feature rich and has good error messages.
04:05:31 <guest14> ok
04:05:38 × boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Client Quit)
04:05:50 × Tops2 quits (~Tobias@dyndsl-095-033-092-191.ewe-ip-backbone.de) (Read error: Connection reset by peer)
04:06:40 boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
04:09:01 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
04:09:37 <jle`> hm...would like to write a function that turns [1,2,3,4,5,6,7,8,9] into (1<>(2<>3)) <> ( (4<>(5<>6)) <> (7<>(8<>9)) )
04:09:48 <boxscape> Getting a thing tight now where upon saving a file ghcid reloads a dozen times in a row quickly instead of once, has anyone experienced that?
04:11:12 jedws joins (~jedws@121.209.189.201)
04:11:20 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:12:12 <dsal> jle`: isn't that effectively `fold`?
04:12:16 × petersen quits (~petersen@redhat/juhp) (Ping timeout: 246 seconds)
04:12:42 <jle`> oh yeah i shouldn't have used <>
04:12:47 <jle`> pretend it isn't associative heh
04:12:58 <dsal> Ah, makes more sense
04:13:02 <jle`> arbitrary non-associative operation :)
04:13:09 <b4er> Or `mconcat`? But the order of evaluation is different
04:13:10 Varis joins (~Tadas@unaffiliated/varis)
04:13:44 <MarcelineVQ> \\n xs -> mconcat $ mconcat <$> chunksOf n xs
04:13:52 <jle`> ah the idea is that it'd be recursive
04:13:58 Stanley|00 joins (~stanley00@unaffiliated/stanley00)
04:14:02 <jle`> so the next step would be even more parenthesesy
04:14:23 × Stanley00 quits (~stanley00@unaffiliated/stanley00) (Disconnected by services)
04:15:16 <jle`> so it'd be chunks of 1,2,4,8,16,etc.
04:15:33 <MarcelineVQ> scanChunksOf :>
04:15:39 <jle`> er, i guess 3, 6, 12, etc. in that case
04:15:48 × Jeanne-Kamikaze quits (~Jeanne-Ka@static-198-54-134-138.cust.tzulo.com) (Remote host closed the connection)
04:16:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
04:19:05 Wuzzy joins (~Wuzzy@p5790e09a.dip0.t-ipconnect.de)
04:20:18 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
04:21:03 Feuermagier joins (~Feuermagi@213.178.26.41)
04:22:36 × jmchael quits (~jmchael@81.174.205.210) (Ping timeout: 268 seconds)
04:28:04 <jle`> i cant do it :(
04:28:13 <jle`> recursion make brain hurt
04:28:23 <boxscape> use a for loop :)
04:28:38 jollygood2 joins (~bc812391@217.29.117.252)
04:29:10 <jle`> would still need recursively nested for loops i think ;_;
04:29:21 <boxscape> :(
04:29:54 × Sheilong quits (uid293653@gateway/web/irccloud.com/x-zwenbxsjaehrjmmn) ()
04:30:07 × elliott_ quits (~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Quit: WeeChat 3.0)
04:30:52 × steven3 quits (~steven@172.92.142.109) (Quit: WeeChat 2.8)
04:32:09 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
04:32:59 × adamwespiser quits (~adamwespi@209.6.43.158) (Remote host closed the connection)
04:33:26 adamwespiser joins (~adamwespi@209.6.43.158)
04:35:34 elliott_ joins (~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
04:35:37 × elliott_ quits (~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Client Quit)
04:35:39 CMCDragonkai1 joins (~Thunderbi@124.19.3.250)
04:38:43 × adamwespiser quits (~adamwespi@209.6.43.158) (Ping timeout: 260 seconds)
04:41:16 × Jesin quits (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Read error: Connection reset by peer)
04:41:57 Jesin joins (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
04:42:15 × jollygood2 quits (~bc812391@217.29.117.252) (Quit: quit)
04:44:59 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:45:27 larryba joins (~bc812391@199.204.85.195)
04:46:53 × sgibber2018 quits (~arch-gibb@208.85.237.144) (Ping timeout: 256 seconds)
04:46:54 <guest14> how to remote spaces "[\"a\", \"b e\"]" that only inside a list?
04:47:08 <guest14> but don't change spaces in string
04:47:29 <guest14> "[\"a\", \"b e\"]" to "[\"a\",\"b e\"]"
04:47:59 <boxscape> % "[\"a\", \"b e\"]" == "[\"a\",\"b e\"]"
04:47:59 <yahb> boxscape: False
04:48:11 <boxscape> hmm I'm still trying to find the difference
04:48:13 <jle`> hm i think i did it
04:48:19 <boxscape> nice
04:48:21 <larryba> hi. what's the proper way of debugging haskell program for using more memory when it should? not using seq when I should have, etc
04:48:45 <boxscape> ah there's a space after the comma, I see
04:48:50 <koz_> larryba: http://neilmitchell.blogspot.com/2015/09/detecting-space-leaks.html
04:49:07 <larryba> thanks
04:54:49 × darjeeling_ quits (~darjeelin@115.215.41.150) (Ping timeout: 264 seconds)
04:56:43 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
04:58:59 <dsal> guest14: You'll need to know whether you're "in a string" and then use that to decide what to do when you encounter a space.
05:00:07 jcowan joins (sid325434@gateway/web/irccloud.com/x-xccxiqbedbcrqfvq)
05:00:53 × CMCDragonkai1 quits (~Thunderbi@124.19.3.250) (Quit: CMCDragonkai1)
05:03:22 × dfeuer quits (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) (Ping timeout: 246 seconds)
05:03:31 <xsperry> guest14, you could parse that into [String], then display it without a space
05:04:45 <dsal> Yeah, there's a bit of an XY problem here. If there's a particular grammar you want to parse and a particular way you want to emit that grammar, that's probably a better way to think of it. i.e, I like xsperry's suggestion.
05:07:42 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
05:08:55 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
05:09:53 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
05:10:32 × tomku quits (~tomku@unaffiliated/tomku) (Ping timeout: 260 seconds)
05:11:23 adamwespiser joins (~adamwespi@209.6.43.158)
05:11:35 tomku joins (~tomku@unaffiliated/tomku)
05:12:01 darjeeling_ joins (~darjeelin@115.215.41.150)
05:13:31 × Tario quits (~Tario@201.192.165.173) (Ping timeout: 246 seconds)
05:14:04 × p-core quits (~Thunderbi@koleje-wifi-0045.koleje.cuni.cz) (Quit: p-core)
05:14:19 p-core joins (~Thunderbi@koleje-wifi-0045.koleje.cuni.cz)
05:14:44 × Wuzzy quits (~Wuzzy@p5790e09a.dip0.t-ipconnect.de) (Remote host closed the connection)
05:16:58 <jle`> what's that trick for perfectly balanced trees with an irregular data type?
05:17:50 <jle`> non-regular data type
05:18:18 × adamwespiser quits (~adamwespi@209.6.43.158) (Ping timeout: 272 seconds)
05:19:32 × djellemah quits (~djellemah@2601:5c2:100:96c:e008:b638:39fe:6a54) (Ping timeout: 260 seconds)
05:19:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
05:21:41 <ThoaiOnline1> hi fam, what's the most mature ide-integrated haskell debugger nowadays?
05:23:21 <dsal> What a weird combination of words.
05:24:07 <dsal> I've never used a debugger in haskell, though I did have to write something to work with traces to figure out a strange concurrency issue once.
05:26:58 <Axman6> jle`: foo [] = mempty; foo [a] = a; foo (x:y:xs) = foo (x<>y:foo xs)?
05:27:25 <Axman6> % let foo [] = mempty; foo [a] = a; foo (x:y:xs) = foo (x<>y:foo xs) in foo a b c d e :: Expr
05:27:25 <yahb> Axman6: ; <interactive>:161:88: error:; Not in scope: type constructor or class `Expr'; Perhaps you meant one of these: `ExpQ' (imported from Language.Haskell.TH), `Exp' (imported from Language.Haskell.TH)
05:27:32 <Axman6> > let foo [] = mempty; foo [a] = a; foo (x:y:xs) = foo (x<>y:foo xs) in foo a b c d e :: Expr
05:27:34 <lambdabot> error:
05:27:34 <lambdabot> • Occurs check: cannot construct the infinite type: a ~ [a]
05:27:35 <lambdabot> • In the expression: foo (x <> y : foo xs)
05:28:13 <Axman6> oh right
05:29:27 <Axman6> > let foo [] = mempty; foo [a] = a; foo xs = foo (go xs) where go (x:y:ys) = x<>y : go ys; go ys = ys in foo [a, b, c, d, e] :: Expr
05:29:29 <lambdabot> ((a <> b) <> c <> d) <> e
05:29:52 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:30:26 <jle`> hm, i wonder how that associates
05:30:47 <Axman6> I'm sure if you're nice it it it will associate with you :)
05:31:06 <Axman6> You're good people jle`, you'll be alright
05:31:32 <jle`> :)
05:35:05 cads2 joins (~cads@ip-64-72-99-232.lasvegas.net)
05:35:12 cads joins (~cads@ip-64-72-99-232.lasvegas.net)
05:41:07 petersen joins (~petersen@redhat/juhp)
05:41:48 dansho joins (~dansho@ec2-3-112-18-114.ap-northeast-1.compute.amazonaws.com)
05:46:12 × larryba quits (~bc812391@199.204.85.195) (Quit: CGI:IRC)
05:46:28 adamwespiser joins (~adamwespi@209.6.43.158)
05:46:47 <ThoaiOnline1> @dsal - i understand the "if it compiles it probably works" sentiment but once in a bluemoon, something catastrophic is bound to happen
05:46:47 <lambdabot> Maybe you meant: keal eval
05:47:16 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:71cc:d94:dfc3:ae9b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:47:44 ThoaiOnline1 is now known as ThoaiOnline
05:48:25 <dsal> ThoaiOnline1: no, it's true... I've written bugs that compile more than once. I just don't use debuggers.
05:48:50 <ThoaiOnline> ah ok
05:49:03 larryba joins (~bc812391@217.29.117.252)
05:49:03 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:49:42 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:50:05 × xsperry quits (~as@unaffiliated/xsperry) (Remote host closed the connection)
05:51:54 xsperry joins (~as@unaffiliated/xsperry)
05:52:58 × adamwespiser quits (~adamwespi@209.6.43.158) (Ping timeout: 265 seconds)
05:53:43 tama00 joins (~tama@unaffiliated/tama00)
05:54:07 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
05:55:03 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Ping timeout: 240 seconds)
05:56:25 dfeuer joins (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net)
06:00:00 andreas303 joins (~andreas@gateway/tor-sasl/andreas303)
06:00:42 <maerwald> whoever started "if it compiles it probably works" was either a troll or an academic, running well defined code, not real world stuff :p
06:02:47 <b4er> It probably once said "if it *still* compiles *after this refactor* it probably works *the same as before*"
06:03:22 <maerwald> how's that any better? :D
06:04:00 <maerwald> you can reorder a sequence of IO actions arbitrarily and it will probably compile :D
06:04:39 <koz_> Also, infinite loops compile just fine. :P
06:04:46 <koz_> Especially when you least want them to.
06:04:52 <b4er> Of course but when you refactor something you're usually not reordering statements?
06:04:52 <larryba> presumably it assumes an actual programmer doing reasonable changes, and not a monkey randomly reording lines in the code
06:05:04 <maerwald> b4er: not?
06:05:27 <b4er> Idk, not like that I'd assume
06:05:28 <maerwald> larryba: on a sufficiently large codebase, we're all monkeys
06:05:28 <boxscape> koz_ just wait until someone implements a totality checker :P
06:05:49 <b4er> You also just took that statement and made it look like I said this is true 100%
06:05:51 <koz_> boxscape: Yes, I too have written Idris.
06:07:10 <b4er> larryba, and in such a case it's a reasonable statement (nota bene it still reads with a "probably")
06:07:33 <maerwald> it's never a reasonable statement
06:07:50 <maerwald> it's something you should never say, believe or prefix even with "probably"
06:07:55 <maerwald> forget it was ever said
06:09:06 <maerwald> it makes your code worse, thinking like that
06:09:56 edwtjo joins (~edwtjo@h-7-145.A213.priv.bahnhof.se)
06:09:56 × edwtjo quits (~edwtjo@h-7-145.A213.priv.bahnhof.se) (Changing host)
06:09:56 edwtjo joins (~edwtjo@fsf/member/edwtjo)
06:10:25 × dansho quits (~dansho@ec2-3-112-18-114.ap-northeast-1.compute.amazonaws.com) (Ping timeout: 264 seconds)
06:10:31 <b4er> So once I have working code I cannot change it with trivial modifications like generalizing functions because it makes my code worse?
06:10:44 × electricityZZZZ quits (~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
06:11:38 <b4er> Pretty sure that's exactly how a lot of great things in the Haskell ecosystem got born
06:11:40 × Vulfe quits (~vulfe@2600:1702:31b0:34e0:b1ad:809d:33ad:d747) (Remote host closed the connection)
06:12:05 <larryba> it is a reasonable statement from my experience. certainly far more reasonable for haskell than for most other languages. I recently made major refactoring to 10k lines of code base, spent nearly an hour fixing errors compiler gave me on auto-pilot, and it just worked when it finally compiled
06:17:49 plutoniix joins (~q@node-uje.pool-125-24.dynamic.totinternet.net)
06:19:16 <maerwald> I made a 2 LOC change to a 34k LOC codebase and it broke hell.
06:19:29 <maerwald> and it wasn't even IO code.
06:19:38 <maerwald> (it was lens)
06:21:36 <Axman6> there are techniques which can increase the liklihood that the "if it compiles, it works" will be true - using sum types alone gets you much closer if you can represent only valid values
06:22:21 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:23:25 <Axman6> I've run into several instances in our codebase where refactoring to only allow valid values had significantly simplied the implementation and made it much more certain the code is correct
06:23:45 <MarcelineVQ> aka 'correct by construction'
06:23:51 <Axman6> yeah
06:24:09 <Axman6> GADTs can also be used to get you even further
06:26:33 <koz_> I actually used some type-level shenanigans to allow better error messages at Real Job For Real Money recently.
06:26:56 <koz_> (and they're the best kind of type-level shenanigans in that nobody but me needs to understand why they work to use them)
06:27:01 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:143:c475:d20e:3db4:7e5b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:30:28 jedws joins (~jedws@121.209.189.201)
06:31:02 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving)
06:31:46 × dfeuer quits (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
06:32:41 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:34:43 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Ping timeout: 240 seconds)
06:35:01 × Rudd0 quits (~Rudd0@185.189.115.103) (Ping timeout: 264 seconds)
06:36:03 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
06:37:19 jpds joins (~jpds@gateway/tor-sasl/jpds)
06:38:22 andreas303 joins (~andreas@gateway/tor-sasl/andreas303)
06:38:24 × tomboy64 quits (~tomboy64@gateway/tor-sasl/tomboy64) (Ping timeout: 240 seconds)
06:39:04 <dsal> In my experience, "it compiles" after just about any refactoring is much more likely to give me desirable results than just about anything else.
06:39:25 <dsal> tests are compiler enhancements.
06:40:16 × Jesin quits (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Read error: Connection reset by peer)
06:40:42 tomboy64 joins (~tomboy64@gateway/tor-sasl/tomboy64)
06:40:50 <jle`> yay i solved my recursion problem thing, it was a real pain
06:40:58 <jle`> i'm never writing any recursion again
06:41:01 <jle`> recursion, not even once
06:41:20 <koz_> jle`: This.
06:41:22 <dsal> I thought recursion was solved with schemes.
06:41:25 dansho joins (~dansho@ec2-3-112-18-114.ap-northeast-1.compute.amazonaws.com)
06:42:10 <dsal> recursion-schemes is hard to understand with all the parentheses and call/cc and stuff.
06:43:33 × Anthaas quits (~Anthaas@unaffiliated/anthaas) (Ping timeout: 256 seconds)
06:44:16 Goldio joins (uid478328@gateway/web/irccloud.com/x-xntekinrreveajvt)
06:45:04 Anthaas joins (~Anthaas@unaffiliated/anthaas)
06:47:21 sgibber2018 joins (~arch-gibb@208.85.237.144)
06:48:54 da39a3ee5e6b4b0d joins (~da39a3ee5@49.228.238.173)
06:56:25 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
07:00:38 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 265 seconds)
07:01:37 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
07:02:39 rekahsoft joins (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
07:04:07 × rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Remote host closed the connection)
07:04:28 rekahsoft joins (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
07:07:31 × plutoniix quits (~q@node-uje.pool-125-24.dynamic.totinternet.net) (Quit: Leaving)
07:10:13 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye)
07:14:17 Deide joins (~Deide@217.155.19.23)
07:15:27 × boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Ping timeout (120 seconds))
07:23:54 × rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 268 seconds)
07:26:31 × ransom quits (~c4264035@8.47.12.52) (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:29:23 CMCDragonkai1 joins (~Thunderbi@124.19.3.250)
07:29:54 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
07:30:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:31:35 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
07:35:26 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
07:36:08 <glguy> It's pretty easy to make your code more confusing by fitting it into some existing "recursion scheme"
07:37:34 <glguy> I've definitely made code less clear and felt fancy doing it using foldr
07:38:59 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:39:09 <dminuoso> To quote Dijkstra: The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.
07:39:29 <dminuoso> If you cannot find a precise description using recursion schemes, they're a bad fit.
07:41:37 × drbean quits (~drbean@TC210-63-209-184.static.apol.com.tw) (Ping timeout: 264 seconds)
07:41:42 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Remote host closed the connection)
07:41:43 gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh)
07:42:16 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
07:45:08 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:49:46 adamwespiser joins (~adamwespi@209.6.43.158)
07:54:26 × adamwespiser quits (~adamwespi@209.6.43.158) (Ping timeout: 256 seconds)
07:57:30 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:59:04 × spopejoy quits (~stuart@ool-44c5f8c9.dyn.optonline.net) (Quit: spopejoy)
08:01:36 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 240 seconds)
08:02:16 dandels joins (~dandels@unaffiliated/dandels)
08:03:53 <tdammers> recursion is great when the problem at hand naturally fits the pattern, and when that happens, working with a language that makes recursion cheap and feasible is a godsent
08:05:04 <ThoaiOnline> believe it or not, after a full week of deep dive, i was dreaming is haskell last night. **** just got real.
08:09:56 <jle`> ThoaiOnline: whoa
08:12:26 <dminuoso> **** is the generalisation of Applicative's<*>.
08:12:49 <koz_> Before, **** was clearly merely Integral.
08:15:25 <ThoaiOnline> perhaps we're actually onto something https://hoogle.haskell.org/?hoogle=****&scope=set%3Astackage
08:15:40 jespada joins (~jespada@90.254.245.49)
08:17:05 × edwtjo quits (~edwtjo@fsf/member/edwtjo) (Ping timeout: 240 seconds)
08:17:10 <ThoaiOnline> the fact that anyone can invent operators at will is both super convenient and frightening
08:17:54 <dminuoso> ThoaiOnline: In Agda you can create arbitrary post and even mixfix operators!
08:18:02 <dminuoso> Imagine the fun writing a parser for such a language.
08:18:53 edwtjo joins (~edwtjo@fsf/member/edwtjo)
08:20:30 <koz_> Wow, that same package defines +++!
08:20:51 <koz_> It's good to know that profunctorial generalizations of Applicative exist.
08:21:33 × dansho quits (~dansho@ec2-3-112-18-114.ap-northeast-1.compute.amazonaws.com) (Ping timeout: 260 seconds)
08:26:24 rmk236 joins (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3)
08:29:01 ph88 joins (~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de)
08:30:36 adamwespiser joins (~adamwespi@209.6.43.158)
08:35:37 × adamwespiser quits (~adamwespi@209.6.43.158) (Ping timeout: 264 seconds)
08:35:45 cfricke joins (~cfricke@unaffiliated/cfricke)
08:36:15 × danso quits (~dan@23-233-111-39.cpe.pppoe.ca) (Quit: WeeChat 3.0)
08:36:26 madjestic joins (~Android@86-88-72-244.fixed.kpn.net)
08:38:22 thc202 joins (~thc202@unaffiliated/thc202)
08:41:52 × Sgeo quits (~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
08:44:58 × da39a3ee5e6b4b0d quits (~da39a3ee5@49.228.238.173) (Quit: My MacBook has gone to sleep. ZZZzzz…)
08:48:23 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 240 seconds)
08:48:49 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
08:49:03 × gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Ping timeout: 240 seconds)
08:49:04 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
08:51:22 sord937 joins (~sord937@gateway/tor-sasl/sord937)
08:51:23 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
08:53:43 × Goldio quits (uid478328@gateway/web/irccloud.com/x-xntekinrreveajvt) (Quit: Connection closed for inactivity)
08:56:58 kuribas joins (~user@ptr-25vy0i8khwxhgges4vi.18120a2.ip6.access.telenet.be)
09:00:07 × boistordu quits (boistordum@gateway/shell/matrix.org/x-dtootmkcjgdppcmk) (Quit: Idle for 30+ days)
09:00:36 gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh)
09:01:34 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
09:01:36 <idnar> how do I use -ddump-stg with cabal?
09:02:55 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
09:03:24 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
09:03:41 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
09:04:12 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
09:04:30 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
09:05:01 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
09:05:20 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
09:05:49 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
09:05:51 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
09:06:10 jedws joins (~jedws@121.209.189.201)
09:14:03 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
09:14:17 × b4er quits (~b4er@91.193.4.106) (Ping timeout: 268 seconds)
09:15:40 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
09:16:58 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:17:47 b3zi is now known as b3z
09:18:42 jedws joins (~jedws@121.209.189.201)
09:19:16 b3z parts (~b3z@vmd41962.contaboserver.net) ()
09:19:32 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
09:20:46 × hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-ifctsrxnkcmchcxm) (Quit: Connection closed for inactivity)
09:22:22 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
09:24:33 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
09:24:52 sord937 joins (~sord937@gateway/tor-sasl/sord937)
09:28:14 × heatsink quits (~heatsink@2600:1700:bef1:5e10:9188:afb8:416b:5229) (Remote host closed the connection)
09:29:30 SzBB joins (~SzBB@244-13-138-91.dyn.cable.fcom.ch)
09:40:47 pthariensflame joins (~pthariens@2600:6c52:7280:100:74b9:5eb6:fa0d:d4f0)
09:40:59 × pthariensflame quits (~pthariens@2600:6c52:7280:100:74b9:5eb6:fa0d:d4f0) (Client Quit)
09:41:22 × kjak quits (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 258 seconds)
09:44:06 DavidEichmann joins (~david@98.27.93.209.dyn.plus.net)
09:46:19 <dminuoso> idnar: You can set ghc-options (either via cli flag or cabal.project/cabal.project.local), or via {-# OPTIONS_GHC -ddump-stg #-} for any module you want it.
09:46:36 <dminuoso> In addition you might find -ddump-to-file and -ddump-file-prefix of interest.
09:47:01 × o1lo01ol_ quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
09:49:40 <idnar> dminuoso: ah yes, I forgot OPTIONS_GHC
09:50:43 <idnar> now to see if I can make any sense of this
09:50:48 Franciman joins (~francesco@host-87-17-26-221.retail.telecomitalia.it)
09:51:10 kritzefitz joins (~kritzefit@fw-front.credativ.com)
09:51:49 × SzBB quits (~SzBB@244-13-138-91.dyn.cable.fcom.ch) (Quit: Leaving)
09:53:51 shatriff joins (~vitaliish@80.233.34.229)
09:54:00 × CMCDragonkai1 quits (~Thunderbi@124.19.3.250) (Quit: CMCDragonkai1)
09:54:05 michalz joins (~user@185.246.204.78)
09:54:17 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:54:28 <idnar> !! 80 MB?!
09:55:26 jedws joins (~jedws@121.209.189.201)
09:55:47 <ThoaiOnline> @idnar hey hey it's static compilation we're talking about here :P
09:55:47 <lambdabot> Unknown command, try @list
09:58:11 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:00:37 m0rphism joins (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
10:02:03 fendor joins (~fendor@178.115.130.71.wireless.dyn.drei.com)
10:04:27 Rudd0 joins (~Rudd0@185.189.115.103)
10:04:37 × tomboy64 quits (~tomboy64@gateway/tor-sasl/tomboy64) (Remote host closed the connection)
10:05:06 tomboy64 joins (~tomboy64@gateway/tor-sasl/tomboy64)
10:05:33 × hiroaki quits (~hiroaki@ip4d16b6b9.dynamic.kabel-deutschland.de) (Remote host closed the connection)
10:06:08 hiroaki joins (~hiroaki@ip4d16b6b9.dynamic.kabel-deutschland.de)
10:08:51 LKoen joins (~LKoen@174.175.9.109.rev.sfr.net)
10:10:39 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 260 seconds)
10:12:13 × urdh quits (~urdh@unaffiliated/urdh) (Quit: Boom!)
10:14:12 rnat2 joins (uid73555@gateway/web/irccloud.com/x-ealqzpltkozxdmaa)
10:16:15 dhil joins (~dhil@78.156.97.38)
10:25:25 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
10:28:35 × Guest82752 quits (~textual@2603-7000-3040-0000-0072-420e-44f4-4dab.res6.spectrum.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:28:35 heatsink joins (~heatsink@2600:1700:bef1:5e10:9188:afb8:416b:5229)
10:30:42 Alleria joins (~textual@2603-7000-3040-0000-0072-420e-44f4-4dab.res6.spectrum.com)
10:31:06 Alleria is now known as Guest59377
10:31:56 adamwespiser joins (~adamwespi@209.6.43.158)
10:32:19 dandels joins (~dandels@unaffiliated/dandels)
10:33:05 acidjnk_new joins (~acidjnk@p200300d0c704e789dd5e2676b6b00ca1.dip0.t-ipconnect.de)
10:33:07 × heatsink quits (~heatsink@2600:1700:bef1:5e10:9188:afb8:416b:5229) (Ping timeout: 260 seconds)
10:33:13 × Guest59377 quits (~textual@2603-7000-3040-0000-0072-420e-44f4-4dab.res6.spectrum.com) (Client Quit)
10:33:15 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:143:71ff:303a:4980:438c)
10:34:15 × cheater quits (~user@unaffiliated/cheater) (Ping timeout: 256 seconds)
10:36:17 <idnar> oh okay it's _fully_ inlined things like `showDuration d = (showRational 2 . toSeconds) d <> "s"` and the code wraps to a billion lines because it's indented so far
10:36:54 × adamwespiser quits (~adamwespi@209.6.43.158) (Ping timeout: 260 seconds)
10:43:30 ezrakilty joins (~ezrakilty@75-172-99-84.tukw.qwest.net)
10:46:23 × greylica quits (~greylica@139.28.218.148) (Remote host closed the connection)
10:47:46 × ezrakilty quits (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 246 seconds)
10:48:41 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:49:46 Alleria__ joins (~textual@mskresolve-a.mskcc.org)
10:54:13 <idnar> -dppr-cols=250
10:54:25 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 246 seconds)
11:00:09 adamwespiser joins (~adamwespi@209.6.43.158)
11:02:31 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
11:03:04 jpds joins (~jpds@gateway/tor-sasl/jpds)
11:03:23 __monty__ joins (~toonn@unaffiliated/toonn)
11:06:06 b4er joins (~b4er@91.193.4.122)
11:06:43 pdurbin1 joins (~pdurbin@217.146.82.202)
11:12:49 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
11:13:02 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
11:13:31 christo joins (~chris@81.96.113.213)
11:15:47 × wei2912 quits (~wei2912@unaffiliated/wei2912) (Remote host closed the connection)
11:17:01 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 264 seconds)
11:18:13 × christo quits (~chris@81.96.113.213) (Ping timeout: 264 seconds)
11:20:31 × davve_ quits (davve@bsd.douchedata.com) (Quit: leaving)
11:23:09 × larryba quits (~bc812391@217.29.117.252) (Quit: http://www.okay.uz/ (Session timeout))
11:29:32 dandels joins (~dandels@unaffiliated/dandels)
11:29:51 heatsink joins (~heatsink@2600:1700:bef1:5e10:f4f0:b09:41bd:e3e)
11:31:58 urdh joins (~urdh@unaffiliated/urdh)
11:33:49 × shatriff quits (~vitaliish@80.233.34.229) (Ping timeout: 264 seconds)
11:34:50 × heatsink quits (~heatsink@2600:1700:bef1:5e10:f4f0:b09:41bd:e3e) (Ping timeout: 264 seconds)
11:36:35 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:143:71ff:303a:4980:438c) (Read error: Connection reset by peer)
11:41:23 cfricke joins (~cfricke@unaffiliated/cfricke)
11:43:34 <kuribas> why isn't ReaderT a profunctor?
11:43:43 jedws joins (~jedws@121.209.189.201)
11:44:05 <kuribas> https://hackage.haskell.org/package/profunctors-5.6.1/docs/Data-Profunctor.html
11:46:24 <Taneb> kuribas: type arguments are in the wrong order
11:46:36 <kuribas> ah right...
11:46:41 <kuribas> :i ReaderT
11:46:49 <kuribas> :k ReaderT
11:46:51 <lambdabot> * -> (* -> *) -> * -> *
11:47:35 <Taneb> kuribas: there's Star which is very similar with the arguments in the right oder
11:48:13 <Taneb> But ReaderT wants the m parameter second-to-last so it can have a MonadTrans instance
11:51:23 bitmagie joins (~Thunderbi@200116b806b5fe00740e531bf47a925c.dip.versatel-1u1.de)
11:53:19 × ph88 quits (~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
11:53:28 Sheilong joins (uid293653@gateway/web/irccloud.com/x-qgpagvfhytqrdzbx)
11:54:43 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 256 seconds)
12:01:35 drbean joins (~drbean@TC210-63-209-175.static.apol.com.tw)
12:01:43 × rmk236 quits (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3) (Quit: Leaving.)
12:05:15 Entertainment joins (~entertain@104.246.132.210)
12:08:00 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
12:08:41 jpds joins (~jpds@gateway/tor-sasl/jpds)
12:09:51 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
12:10:55 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
12:11:19 jpds joins (~jpds@gateway/tor-sasl/jpds)
12:12:47 Tario joins (~Tario@201.192.165.173)
12:13:02 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408)
12:14:53 × acidjnk_new quits (~acidjnk@p200300d0c704e789dd5e2676b6b00ca1.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
12:16:37 × xff0x quits (~fox@2001:1a81:5271:e800:9600:6dbe:32ee:1f82) (Ping timeout: 258 seconds)
12:17:21 xff0x joins (~fox@2001:1a81:5271:e800:63d8:c69:6df1:58cb)
12:23:03 jedws joins (~jedws@121.209.189.201)
12:24:25 ph88 joins (~ph88@2a02:8109:9e00:7e5c:107a:c84:877e:fc08)
12:26:05 × Stanley|00 quits (~stanley00@unaffiliated/stanley00) ()
12:29:37 × tama00 quits (~tama@unaffiliated/tama00) (Ping timeout: 264 seconds)
12:36:44 coot joins (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
12:40:07 geekosaur joins (ac3a3ed6@172.58.62.214)
12:41:01 cmcma20 joins (~cmcma20@l37-192-2-125.novotelecom.ru)
12:43:55 <cmcma20> hi! what is the preferred method to share code snippets in this channel?
12:44:18 <hpc> according to the topic, gist
12:44:30 <hpc> if you don't want to log into github, there's various other paste sites
12:44:46 × urdh quits (~urdh@unaffiliated/urdh) (Quit: Boom!)
12:44:46 <hpc> just pick one that you like
12:44:59 <cmcma20> lpaste is dead so I'm quite confused. thx for your suggestions, gonna just use github
12:46:46 Major_Biscuit joins (~Major_Bis@93-21-124.netrun.cytanet.com.cy)
12:47:53 <pjb> cmcma20: I like termbin: http://termbin.com you can use it with: cat foo.hs | nc termbin.com 9999 | tr -d '\000'
12:49:12 × bitmagie quits (~Thunderbi@200116b806b5fe00740e531bf47a925c.dip.versatel-1u1.de) (Quit: bitmagie)
12:50:18 urdh joins (~urdh@unaffiliated/urdh)
12:50:26 <ski> @paste
12:50:27 <lambdabot> A pastebin: https://paste.debian.net/
12:50:33 <ski> @where paste
12:50:33 <lambdabot> Help us help you: please paste full code, input and/or output at eg https://paste.tomsmeding.com
12:50:41 <ski> cmcma20 ^
12:51:41 <pjb> cmcma20: there are also things like https://codeshare.io and others that let you share and compile code in the web, for collaborative debugging and development.
12:52:00 <ski> kuribas : `Kleisli' ?
12:52:24 <kuribas> ski: what about Kleisli?
12:52:46 <cmcma20> thanks a lot! "@where paste" was enlightening
12:52:51 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
12:53:07 <ski> newtype ReaderT r m a = ReaderT (r -> m a)
12:53:08 <ski> newtype Kleisli m a b = Kleisli (a -> m b)
12:53:09 <pjb> cmcma20: For example https://www.jdoodle.com/execute-haskell-online/
12:53:23 <kuribas> :t Kleisli
12:53:25 <lambdabot> (a -> m b) -> Kleisli m a b
12:54:39 <ski> @type dimap
12:54:40 <lambdabot> Profunctor p => (a -> b) -> (c -> d) -> p b c -> p a d
12:54:42 <ski> @type dimap :: Monad m => (a1 -> a0) -> (b0 -> b1) -> (Kleisli m a0 b0 -> Kleisli m a1 b1)
12:54:43 <lambdabot> Monad m => (a1 -> a0) -> (b0 -> b1) -> Kleisli m a0 b0 -> Kleisli m a1 b1
12:57:27 <kuribas> @type dimap @_ @_ @_ @_ Kleisli
12:57:28 <lambdabot> error:
12:57:28 <lambdabot> Pattern syntax in expression context: dimap@_
12:57:28 <lambdabot> Did you mean to enable TypeApplications?
12:57:37 <kuribas> ye
12:57:40 <kuribas> yes
12:58:55 <ski> % :t dimap @_ @_ @_ @_ Kleisli
12:58:56 <yahb> ski: Profunctor _1 => (_2 -> d) -> _1 (Kleisli m a b) _2 -> _1 (a -> m b) d
12:59:38 kjak joins (~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
13:02:09 <cmcma20> I'm trying to master fused-effects but it's not going well. This paste should explain a bit: https://paste.tomsmeding.com/thKjEyrP
13:03:17 <kuribas> % :t dimap @_ @_ @_ @_ @_ Kleisli
13:03:17 <yahb> kuribas: Profunctor _1 => (_2 -> _3) -> _1 (Kleisli m a b) _2 -> _1 (a -> m b) _3
13:03:26 <kuribas> looks wrong still...
13:03:57 <cmcma20> Using Reader with concrete types is OK, but I can't properly use Reader with parameterized types.
13:04:14 <kuribas> why not?
13:04:56 mouseghost joins (~draco@wikipedia/desperek)
13:05:00 bitmagie joins (~Thunderbi@200116b806b5fe00740e531bf47a925c.dip.versatel-1u1.de)
13:05:12 <ski> @type \f g -> runKleisli . dimap f g . Kleisli
13:05:14 <lambdabot> Monad m => (a -> b1) -> (c -> b2) -> (b1 -> m c) -> a -> m b2
13:05:17 <cmcma20> I can't understand why GHC emits a warning about overlapping instances for Control.Effect.Sum.Member (Reader (LangStatic env0 cmd0)) (Reader (LangStatic () Exp) Control.Effect.Sum.:+: fused-effects-1.1.1.0:Control.Effect.Lift.Internal.Lift IO
13:05:45 <ski> kuribas : not sure what you intended to get, there ..
13:05:54 <tomsmeding> cmcma20: what if you use TypeApplications and write (usage @() @Exp) instead of just 'usage' in main?
13:06:03 <cmcma20> It looks plain wrong because LangStatic env0 cmd0 is more general so it can't be a subeffect of a more concrete LangStatic () Exp
13:06:13 <tomsmeding> not saying that's a good and nice solution, just exploring the problem
13:06:31 <kuribas> ski: dimap specialized to Kleisli :)
13:06:43 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
13:06:49 × bitmagie quits (~Thunderbi@200116b806b5fe00740e531bf47a925c.dip.versatel-1u1.de) (Client Quit)
13:07:10 <ski> i guess you mean specialized to `Kleisli m'
13:07:24 <cmcma20> tomsmeding: astonishingly simple solution
13:07:35 <merijn> cmcma20: Quite brittle too ;)
13:07:48 <tomsmeding> ghc is telling you it can't figure out what instance to use, because that depends on the instantiation of the env and cmd type variables
13:08:02 <tomsmeding> with that visible type application, you tell it what they are :p
13:08:07 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds)
13:08:12 <kuribas> :t dimap @_ @_ @_ @_ (Kleisli m a b)
13:08:14 <lambdabot> error:
13:08:14 <lambdabot> Pattern syntax in expression context: dimap@_
13:08:14 <lambdabot> Did you mean to enable TypeApplications?
13:08:23 <kuribas> % :t dimap @_ @_ @_ @_ (Kleisli m a b)
13:08:23 <yahb> kuribas: ; <interactive>:1:20: warning: [-Wdeferred-type-errors]; * Couldn't match expected type `t0 -> t1 -> _3 -> _2' with actual type `Kleisli m0 a0 b0'; * The function `Kleisli' is applied to three arguments,; but its type `(a0 -> m0 b0) -> Kleisli m0 a0 b0' has only one; In the fifth argument of `dimap', namely `(Kleisli m a b)'; In the expression: dimap @_ @_ @_ @_ (Kleisli m a b)
13:08:25 <ski> @type dimap `asTypeIn` \dimap f g -> runKleisli . dimap f g . Kleisli
13:08:26 <lambdabot> Monad m => (a -> b1) -> (c -> b2) -> Kleisli m b1 c -> Kleisli m a b2
13:08:29 <tomsmeding> but I have no idea about fused-effects, so someone else will have to say how you properly fix this cmcma20
13:08:42 <kuribas> % :t dimap @_ @_ @_ @_ @(Kleisli m a b)
13:08:42 <yahb> kuribas: ; <interactive>:1:29: error: Not in scope: type variable `m'; <interactive>:1:31: error: Not in scope: type variable `a'; <interactive>:1:33: error: Not in scope: type variable `b'
13:09:01 <cmcma20> tomsmeding: But why can't it figure it out if one of the variants is strictly more specific?
13:09:28 <cmcma20> I guess my intuition about instance resolution is flawed
13:09:58 <merijn> cmcma20: Ok, simple example why it can't do that
13:10:36 <merijn> cmcma20: Consider library A and B, one provides typeclass that's parameterised over some variable, one that has more specific instances
13:11:07 <tomsmeding> general algorithm for instance resolution is: look only at the right-hand sides of the => of instance declarations, and find all that match. If there are multiple, abort. If there is exactly one, add the left-hand side of the => to the set of constraints to solve, and continue
13:11:28 <merijn> cmcma20: Now library C depends on B (and it's instance) and my executable depends on A and C, there's no guarantee those two instances are always in scope despite being in the same executable
13:11:53 <kuribas> % :t dimap @(Kleisli _)
13:11:54 <yahb> kuribas: Monad _ => (a -> b) -> (c -> d) -> Kleisli _ b c -> Kleisli _ a d
13:12:02 <kuribas> ski: success :)
13:12:06 <merijn> cmcma20: Basically, given "instance Foo (Bar a)" it's impossible for GHC to prove that "instance Foo (Bar X)" doesn't exist *somewhere*
13:12:09 <kuribas> % :t dimap @(Kleisli m)
13:12:10 <yahb> kuribas: ; <interactive>:1:17: error: Not in scope: type variable `m'
13:12:20 <kuribas> % :t dimap @(Kleisli _m)
13:12:21 <ski> type-lambda would be handy :)
13:12:21 <yahb> kuribas: ; <interactive>:1:17: error: Not in scope: type variable `_m'
13:12:27 <kuribas> ski: yeah
13:12:42 <merijn> cmcma20: So the sanest thing to do is "when you see instance for 'Bar a', disallow any other instances for 'Bar'"
13:13:18 mpereira joins (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d)
13:13:35 rmk236 joins (~lcampos@ip-37-201-210-153.hsi13.unitymediagroup.de)
13:13:57 <cmcma20> merijn tomsmeding : thank you, the fog has cleared up a bit
13:14:25 <tomsmeding> being pinged by the pastebin sometimes shows me interesting questions :)
13:14:30 st8less joins (~st8less@2603:a060:11fd:0:7893:a633:39db:c3dc)
13:16:06 × LKoen quits (~LKoen@174.175.9.109.rev.sfr.net) (Remote host closed the connection)
13:19:25 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
13:19:46 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408) (Quit: My MacBook has gone to sleep. ZZZzzz…)
13:20:11 LKoen joins (~LKoen@174.175.9.109.rev.sfr.net)
13:22:01 brisbin joins (~patrick@pool-173-49-158-4.phlapa.fios.verizon.net)
13:22:25 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
13:22:41 takuan joins (~takuan@178-116-218-225.access.telenet.be)
13:25:38 usr25 joins (~usr25@unaffiliated/usr25)
13:29:00 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
13:29:27 × pdurbin1 quits (~pdurbin@217.146.82.202) (Remote host closed the connection)
13:31:23 heatsink joins (~heatsink@2600:1700:bef1:5e10:f4f0:b09:41bd:e3e)
13:32:11 × st8less quits (~st8less@2603:a060:11fd:0:7893:a633:39db:c3dc) (Ping timeout: 272 seconds)
13:32:20 × fionnan quits (~fionnan@109.255.20.201) (Ping timeout: 256 seconds)
13:33:45 st8less joins (~st8less@inet-167-224-197-181.isp.ozarksgo.net)
13:33:54 × Deide quits (~Deide@217.155.19.23) (Read error: Connection reset by peer)
13:34:09 Deide joins (~Deide@217.155.19.23)
13:36:17 × heatsink quits (~heatsink@2600:1700:bef1:5e10:f4f0:b09:41bd:e3e) (Ping timeout: 260 seconds)
13:36:49 × rmk236 quits (~lcampos@ip-37-201-210-153.hsi13.unitymediagroup.de) (Ping timeout: 246 seconds)
13:39:58 rmk236 joins (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3)
13:47:55 × usr25 quits (~usr25@unaffiliated/usr25) (Quit: Leaving)
13:48:32 × drbean quits (~drbean@TC210-63-209-175.static.apol.com.tw) (Ping timeout: 260 seconds)
13:49:11 langseth1 joins (~langseth@84.39.116.180)
13:51:03 nh parts (~NextHendr@unaffiliated/nexthendrix) ("Leaving")
13:51:16 urodna joins (~urodna@unaffiliated/urodna)
13:52:05 p3n joins (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1)
13:57:51 usr25 joins (~usr25@unaffiliated/usr25)
13:59:59 nbloomf joins (~nbloomf@2600:1700:ad14:3020:d98a:f1dc:914b:1b92)
14:00:58 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
14:01:52 × coot quits (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
14:03:11 × ThoaiOnline quits (~ThoaiOnli@nv.tho.ai) (Quit: Leaving.)
14:03:12 cheater joins (~user@unaffiliated/cheater)
14:03:58 argento joins (~argent0@168.227.97.29)
14:04:22 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Quit: mputz)
14:04:54 elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
14:05:05 LKoen_ joins (~LKoen@174.175.9.109.rev.sfr.net)
14:05:40 × Major_Biscuit quits (~Major_Bis@93-21-124.netrun.cytanet.com.cy) (Read error: Connection reset by peer)
14:06:00 <kuribas> % :t dimap @(Kleisli _) @_
14:06:00 <yahb> kuribas: Monad _1 => (_2 -> b) -> (c -> d) -> Kleisli _1 b c -> Kleisli _1 _2 d
14:06:09 carthia joins (~carthia@gateway/tor-sasl/carthia)
14:06:10 djellemah joins (~djellemah@2601:5c2:100:96c:e008:b638:39fe:6a54)
14:07:25 × LKoen quits (~LKoen@174.175.9.109.rev.sfr.net) (Ping timeout: 240 seconds)
14:08:02 × sgibber2018 quits (~arch-gibb@208.85.237.144) (Quit: WeeChat 3.0)
14:08:10 knupfer joins (~Thunderbi@dynamic-046-114-150-158.46.114.pool.telefonica.de)
14:08:30 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
14:13:11 jmchael joins (~jmchael@81.174.205.210)
14:13:24 <kuribas> I sometimes read about the "puzzle factor", meaning that writing haskell and functional language is like solving a puzzle. It's all cute and fun, but in the end doesn't have any benefit.
14:13:49 <kuribas> Isn't the benefit that when the puzzle is solved, your program is "mostly" correct?
14:14:37 <kuribas> like lenses, it took a while to "solve the puzzle", and get to the representation we have now, but now we reap the benefits.
14:19:35 <kuribas> Also the fact that you can rewrite code without needing deep insights, just using equaltional reasoning.
14:19:48 <kuribas> Just like solving an algebra problem.
14:20:57 ulidtko joins (~ulidtko@194.54.80.38)
14:20:58 ulidtko|k joins (~ulidtko@194.54.80.38)
14:21:06 × ulidtko quits (~ulidtko@194.54.80.38) (Remote host closed the connection)
14:21:15 ulidtko|k is now known as ulidtko
14:21:25 × nfd quits (~nfd9001@c-67-183-38-33.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
14:21:31 <merijn> kuribas: I saw a good argument that explains things some time ago
14:21:51 <kuribas> link?
14:22:53 <merijn> kuribas: The essay basically argued, there's two programmer streams: the mathematicians and the tinkerers. The former basically want to "think hard, then write obviously correct solution", the latter wants to incrementally built on top of "stuff we have and understand". This leads to very different ways of working
14:23:17 <merijn> i.e. the former likes static types, "correct by construction" and nice property preserving abstractions
14:23:23 <kuribas> merijn: that sounds like tdammers :-)
14:23:56 <merijn> the latter group likes "simple" code they can understand, tying it together, and testing at every stage that things work, so they like TDD and repls, etc.
14:24:30 <kuribas> merijn: I like to tinker on types, and build on top of types I have and understand :)
14:24:32 <merijn> kuribas: The latter see no value in "this abstraction preservers all my properties, so I don't have to think"
14:24:41 <kuribas> ah right
14:24:47 <merijn> kuribas: In which case the machinery to build such abstractions is worthless
14:25:11 <kuribas> but thinking in terms of abstractions is also something you learn
14:25:24 <merijn> That's all massive oversimplifications, of course :p
14:26:30 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
14:31:15 × notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection)
14:31:34 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
14:33:25 × cads2 quits (~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 240 seconds)
14:33:31 × cads quits (~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 246 seconds)
14:35:40 <dminuoso> merijn: Mmm, while I do not know the assay you are referring to, the summary sparks disagreement with me.
14:36:01 <merijn> dminuoso: I'm not quite happy with my summary
14:36:10 <merijn> but also to lazy to invest in making a better one
14:36:16 <dminuoso> What's the assay?
14:36:28 notzmv joins (~user@unaffiliated/zmv)
14:36:38 <merijn> dminuoso: I can't recall, that was like a week and a half ago
14:39:17 Sgeo joins (~Sgeo@ool-18b98aa4.dyn.optonline.net)
14:39:49 × darjeeling_ quits (~darjeelin@115.215.41.150) (Ping timeout: 264 seconds)
14:41:07 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408)
14:43:46 Tops2 joins (~Tobias@dyndsl-095-033-022-235.ewe-ip-backbone.de)
14:44:32 × elvishjerricco quits (sid237756@NixOS/user/ElvishJerricco) (Ping timeout: 260 seconds)
14:44:46 × geekosaur quits (ac3a3ed6@172.58.62.214) (Remote host closed the connection)
14:45:12 orcus- joins (~orcus@unaffiliated/orcus)
14:45:29 Major_Biscuit joins (~Major_Bis@93-21-124.netrun.cytanet.com.cy)
14:45:42 × rnat2 quits (uid73555@gateway/web/irccloud.com/x-ealqzpltkozxdmaa) (Ping timeout: 260 seconds)
14:45:42 × Kronic quits (uid480486@gateway/web/irccloud.com/x-rjhpihcgimfhbndr) (Ping timeout: 260 seconds)
14:45:42 × d0liver quits (sid363046@gateway/web/irccloud.com/x-aesspnxmupkvbzzz) (Ping timeout: 260 seconds)
14:46:02 elvishjerricco joins (sid237756@NixOS/user/ElvishJerricco)
14:46:13 recon_-_ joins (~quassel@2602:febc:0:b6::6ca2)
14:46:17 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408) (Ping timeout: 260 seconds)
14:46:17 × recon_- quits (~quassel@2602:febc:0:b6::6ca2) (Ping timeout: 260 seconds)
14:46:17 × sw1nn quits (~sw1nn@2a00:23c6:2385:3a00:535:b5d7:a67c:1f0) (Ping timeout: 260 seconds)
14:46:17 × orcus quits (~orcus@unaffiliated/orcus) (Ping timeout: 260 seconds)
14:47:00 <dminuoso> merijn: Unless you are Feynman, the "think really hard" solution doesn't scale well. Once you hit a problem that exceeds your mental capability, you're stuck, and the method is not teachable either.
14:47:06 d0liver joins (sid363046@gateway/web/irccloud.com/x-tttmhfenawofeixc)
14:47:10 rnat2 joins (uid73555@gateway/web/irccloud.com/x-zbnoeruhkwpvwygt)
14:47:14 Kronic joins (sid480486@gateway/web/irccloud.com/x-yefsgwxmddskyzbm)
14:47:19 <merijn> dminuoso: That's not what I meant anyway
14:47:37 <merijn> dminuoso: I wasn't referring to Feynman method, but more "formalise and mechanise"
14:47:47 <dminuoso> I understand, my point is just that I think there's a wealth of people on the side of "writing correct solutions" and "likes static types" without being able to hold a problem in their mind.
14:47:48 <merijn> and implement later
14:47:54 sw1nn joins (~sw1nn@2a00:23c6:2385:3a00:8a08:ba4e:209b:1d11)
14:48:16 <merijn> As opposed implementing right away and adjusting existing code as you go
14:48:20 <dminuoso> Fair enough
14:48:52 pera joins (~pera@unaffiliated/pera)
14:48:52 stree joins (~stree@50-108-115-238.adr01.mskg.mi.frontiernet.net)
14:48:57 <dminuoso> merijn: I was just getting at this line
14:49:03 <dminuoso> `the latter group likes "simple" code they can understand, tying it together, and testing at every stage that things work,`
14:49:09 × gxt quits (~gxt@gateway/tor-sasl/gxt) (Quit: WeeChat 3.0)
14:49:16 <dminuoso> As far as I understand, that's precisely how folks like Edward work. :p
14:49:51 <dminuoso> That was all
14:50:03 carlomagno joins (~cararell@148.87.23.13)
14:50:08 <merijn> dminuoso: Well, "simple" was in quotes for a reason :p
14:52:06 × LKoen_ quits (~LKoen@174.175.9.109.rev.sfr.net) (Remote host closed the connection)
14:52:23 <merijn> hmm
14:52:42 cfricke joins (~cfricke@unaffiliated/cfricke)
14:53:00 darjeeling_ joins (~darjeelin@122.245.218.97)
14:53:13 zangi joins (~azure@103.154.230.250)
14:53:15 <merijn> Is there a nice existing IO memoisation somewhere? i.e. I have "Key -> IO Val" and wanna store it so that I only bother doing the lookup once, caching it in a Map (or something)
14:54:18 × knupfer quits (~Thunderbi@dynamic-046-114-150-158.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
14:54:21 × cfricke quits (~cfricke@unaffiliated/cfricke) (Client Quit)
14:55:18 <dminuoso> merijn: Mm, how is that IO related? Wouldn't just e.g. MemoTrie be enough here?
14:55:21 gxt joins (~gxt@gateway/tor-sasl/gxt)
14:55:32 <zangi> can anyone explain what's so bad about thunks?
14:55:35 <dminuoso> Or would that cache the result of IO?
14:55:43 <dminuoso> zangi: Nothing. Why do you think they are bad?
14:55:47 <merijn> dminuoso: Basically, doing database lookups, but no point in querying the database a million times for the same key
14:56:28 <dminuoso> merijn: Is this, by any chance, in the same program where you do your fancy conduit/async machinery?
14:56:34 <merijn> Yes
14:56:42 <dminuoso> You seem to be heading into haxl territory...
14:56:56 <merijn> Naah, that's way overcomplicated for my needs
14:57:13 <merijn> dminuoso: All my existing conduit/queries are basically sequential streams over result sets
14:57:34 <zangi> dminuoso: like there exists foldl' that avoids uncollected thunks (if I understand it correctly)
14:57:42 <dminuoso> Ah, those conduit/queries are what would be using this caching `Key -> IO Val`?
14:58:04 <merijn> dminuoso: I'm "just" writing some import logic so I can import data from other databases, so I need to map keys from the input database to the new key in the current database to translate
14:58:08 <dminuoso> zangi: I see. So a thunk itself is not bad, it's a name for an implementation artifact that GHC does to implement lazyness.
14:58:49 <merijn> dminuoso: So I get like a million rows of input, with (say several tens) foreign keys in each row I need to translate
14:58:59 shinobi joins (~shinobi@c-24-147-48-162.hsd1.ma.comcast.net)
14:59:02 <dminuoso> zangi: Note the word "lazyness". If we know, for a fact, that we will need a value, then wrapping it in a thunk (which costs memory and extra CPU time for the indirection) is wasteful
14:59:10 <merijn> dminuoso: No point in looking up the new foreign key a million times if I have only several tens of unique values
14:59:53 <merijn> I suppose I can just look all of them up ahead of time, come to think of it
15:02:50 <dminuoso> zangi: foldl' f z0 xs = foldr f' id xs z0 where f' x k z = k $! f z x
15:02:54 <dminuoso> This is the default definition.
15:03:53 × rnat2 quits (uid73555@gateway/web/irccloud.com/x-zbnoeruhkwpvwygt) (Quit: Connection closed for inactivity)
15:04:20 dhouthoo joins (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be)
15:04:54 <__monty__> zangi has probably just learned about the inefficiency of foldl, without the prime?
15:06:41 <merijn> dminuoso: Eh, fuck it, I'll just do the dumb lookup for every row and DM anyone complaining about performance issue my bank details where they can pay me :p
15:06:45 × evanjs quits (~evanjs@075-129-098-007.res.spectrum.com) (Ping timeout: 256 seconds)
15:07:21 eacameron joins (uid256985@gateway/web/irccloud.com/x-ibwftunwaaouzfew)
15:07:31 <dminuoso> merijn: In my large project I just pre-load all data according to the lookup schemes I want, and keep them around in large sets and maps. :P
15:07:44 <dminuoso> But my problem domain can be easily held in memory, so..
15:08:35 <dminuoso> zangi: You can find some visualizations and explanations here: https://wiki.haskell.org/Foldr_Foldl_Foldl%27
15:09:06 evanjs joins (~evanjs@075-129-098-007.res.spectrum.com)
15:09:15 <merijn> dminuoso: This is mainly for importing missing results from older databases into newer databases, so since it's a one time import I'm just gonna consider it not worth optimising :p
15:10:06 × pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Read error: Connection reset by peer)
15:10:27 pfurla_ joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
15:10:32 <zangi> ?src foldl'
15:10:32 <lambdabot> foldl' f a [] = a
15:10:33 <lambdabot> foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs
15:10:48 × p3n quits (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (Remote host closed the connection)
15:11:04 <dminuoso> Note that lambdabot's src command is just a lookup in a text file that is sometimes inaccurate or just not updated.
15:11:09 <dminuoso> But, the definition works just as well.
15:11:31 <dminuoso> It's probably better for the purpose of explaining.
15:11:49 <merijn> zangi: Basically, consider this: "When computing the sum of a list, what's more efficient: keeping a single strict Int in memory or keeping a few tens/hundreds of MB of lazy computation in memory that will eventually produce an Int?"
15:12:03 son0p joins (~son0p@181.136.122.143)
15:12:03 × gxt quits (~gxt@gateway/tor-sasl/gxt) (Ping timeout: 240 seconds)
15:12:21 <dminuoso> This sort of consideration is the price of "lazy by default". :)
15:12:29 <kuribas> merijn: if it's open source, let someone else provide a PR :-)
15:12:57 <merijn> kuribas: It's science, like 3 people will probably use it and then this will still be a rare subcommand :p
15:13:34 <dminuoso> https://xkcd.com/1205/
15:14:04 <merijn> dminuoso: I fundamentally disagree with the flawed assumption underlying that chart :p
15:14:16 <zangi> merijn: so is it basically just performance issue?
15:14:21 <merijn> zangi: Yes
15:14:25 <dminuoso> merijn: You fundamentally disagree with about 80% of the things in this world.
15:14:33 <merijn> dminuoso: True :p
15:14:49 <merijn> dminuoso: But the value of automating things is more than just "net time saved"
15:15:09 gxt joins (~gxt@gateway/tor-sasl/gxt)
15:15:45 <merijn> dminuoso: You gotta account for the fact that "interactive speeds" accommodate a different way of working/using than slow speeds do, even if the net savings don't actually save time. Not to mention the reduced frustration, distraction, and interruptiong of routine
15:16:19 × pavonia quits (~user@unaffiliated/siracusa) (Quit: Bye!)
15:17:41 <kuribas> yes, and often when something becomes easier and faster to use, you also will use it more.
15:17:59 <kuribas> I often hear "there is no point in optimizing this, we don't use it often".
15:18:07 <merijn> dminuoso: A 5s process can interrupt your flow and ruin productivity. Automating that away has bigger impact beyond just the 5s saved
15:18:10 <kuribas> but then we don't use it often because it's slow or cumbersome.
15:18:36 <kuribas> merijn: imagine every key press took 5 seconds :)
15:19:01 <merijn> kuribas: I've worked over SSH from an ICE train...
15:19:10 <merijn> I don't have to imagine :p
15:19:15 <dminuoso> merijn: And yet, the net time lost can be quantified.
15:19:28 <dminuoso> This is the usual opposing sides of "developer"
15:19:36 <merijn> dminuoso: Can it?
15:19:36 <dminuoso> and the management guy who just looks at the numbers
15:19:40 <dminuoso> Sure, it can.
15:20:06 <merijn> I mean *theoretically*, sure. But practically?
15:20:39 × Franciman quits (~francesco@host-87-17-26-221.retail.telecomitalia.it) (Quit: Leaving)
15:21:15 <dminuoso> If we assume you're doing a set of tasks, we can simply measure how long it takes you. An interruption would have a measurable delay on this process.
15:21:39 <dminuoso> We just need a clone of you.. can you send me a sample of your DNA?
15:23:13 fendor_ joins (~fendor@178.115.131.182.wireless.dyn.drei.com)
15:23:44 × gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
15:23:53 Vulfe joins (~vulfe@2600:1702:31b0:34e0:54f0:e9d4:232a:a299)
15:25:39 × fendor quits (~fendor@178.115.130.71.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
15:27:00 <merijn> hmm, anyone know if it's possible to request all fields that are foreign keys in persistent?
15:27:47 × madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 256 seconds)
15:29:59 × mpereira quits (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d) (Ping timeout: 272 seconds)
15:30:38 madjest15 joins (~Android@89-200-3-179.mobile.kpn.net)
15:30:49 × quinn quits (~quinn@c-73-223-224-163.hsd1.ca.comcast.net) (Ping timeout: 264 seconds)
15:33:02 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
15:33:49 × argento quits (~argent0@168.227.97.29) (Ping timeout: 264 seconds)
15:33:58 quinn joins (~quinn@c-73-223-224-163.hsd1.ca.comcast.net)
15:34:23 × hekkaidekapus} quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
15:34:52 hekkaidekapus} joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
15:35:49 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408)
15:35:51 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408) (Client Quit)
15:35:52 × hekkaidekapus} quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection)
15:36:14 hekkaidekapus} joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
15:37:11 argento joins (~argent0@168.227.97.29)
15:37:42 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
15:38:19 × argento quits (~argent0@168.227.97.29) (Client Quit)
15:38:37 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408)
15:41:51 <kritzefitz> I was recently digging in the rts source code to find out that Haskell functions called from C are run in a new thread that is bound to the OS thread the call came from. Is that last part (about the thread being bound) documented/guaranteed somewhere?
15:43:24 × robotmay quits (~beepboop@2001:8b0:7af0:2580:80b7:418d:2e2d:4473) (Ping timeout: 268 seconds)
15:45:02 cfricke joins (~cfricke@unaffiliated/cfricke)
15:45:07 × cfricke quits (~cfricke@unaffiliated/cfricke) (Client Quit)
15:45:44 <dminuoso> kritzefitz: It is described by the original paper https://simonmar.github.io/bib/papers/conc-ffi.pdf
15:45:48 <dminuoso> See 3.4 Callbacks
15:46:08 cfricke joins (~cfricke@unaffiliated/cfricke)
15:46:19 <yushyin> https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ffi-chap.html#foreign-imports-and-multi-threading
15:46:21 <tdammers> kuribas: it sounds a bit like me, but my hypothesized dichotomy is between "inductive" and "empirical" programmers. they align with the "mathematicians" and "tinkerers" somewhat, and I might even use the same names, but it's not so much about up-front proof vs. iterative evolution (you can iterate in an inductive / logical paradigm too), it's about how you assert correctness: "correct by construction" vs.
15:46:23 <tdammers> "correct by sufficiently large sample of observably correct behavior"
15:46:36 robotmay joins (~beepboop@2001:8b0:7af0:2580:695c:2c43:c9f4:f004)
15:47:10 Wuzzy joins (~Wuzzy@p5790e09a.dip0.t-ipconnect.de)
15:49:43 <kritzefitz> dminuoso, thanks, that explains the problem I have perfectly.
15:50:25 <kritzefitz> yushyin, I think that's related, but if that section describes the case I asked about, I don't see where.
15:50:56 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:51:31 spopejoy joins (~stuart@ool-44c5f8c9.dyn.optonline.net)
15:52:03 <yushyin> kritzefitz: I also hoped for a bit more detailed information on that page ^^
15:52:53 <dminuoso> merijn: I had a brilliant idea! For a long time, I've been really annoyed by the lack of a sleek and neat config file library in Haskell
15:52:56 <dminuoso> And then it hit me like a train.
15:53:07 <merijn> dminuoso: SQLite!
15:53:08 <dminuoso> optparse-applicative on a file!
15:53:11 × zangi quits (~azure@103.154.230.250) (Read error: Connection reset by peer)
15:53:11 <merijn> Ah
15:53:12 <merijn> :p
15:54:15 <glguy> dminuoso: sounds like you should look at my config-schema stuff then
15:54:48 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
15:55:13 <kuribas> tdammers: right
15:57:22 <merijn> Is it possible to only export some methods of a typeclass?
15:58:12 <ski> i think so
15:58:19 <Taneb> I believe array does that
15:58:25 <dminuoso> merijn: the same way as with records and fields
15:58:41 <merijn> But then you can't implement it outside that module, I guess?
15:58:48 <ski> module Foo (C (m))
15:58:49 × usr25 quits (~usr25@unaffiliated/usr25) (Read error: Connection reset by peer)
15:59:08 <ski> right
15:59:15 × adamwespiser quits (~adamwespi@209.6.43.158) (Remote host closed the connection)
15:59:32 <ski> so better have default implementations, in case you want the user to be able to make instances
15:59:33 adamwespiser joins (~adamwespi@209.6.43.158)
16:00:06 × andreabedini[m] quits (andreabedi@gateway/shell/matrix.org/x-hjtxhxhwobrdxypa) (Quit: Idle for 30+ days)
16:00:10 × adamwespiser quits (~adamwespi@209.6.43.158) (Remote host closed the connection)
16:00:14 × lawid quits (~quassel@dslb-090-186-127-244.090.186.pools.vodafone-ip.de) (Quit: lawid)
16:00:36 adamwespiser joins (~adamwespi@209.6.43.158)
16:00:38 × cfricke quits (~cfricke@unaffiliated/cfricke) (Ping timeout: 260 seconds)
16:02:08 <merijn> I guess that can work
16:02:22 lawid joins (~quassel@dslb-090-186-127-244.090.186.pools.vodafone-ip.de)
16:02:57 hnOsmium0001 joins (uid453710@gateway/web/irccloud.com/x-flibwgaldygamqxl)
16:04:11 × madjest15 quits (~Android@89-200-3-179.mobile.kpn.net) (Read error: Connection reset by peer)
16:04:50 mpereira joins (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d)
16:05:02 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Quit: leaving)
16:05:36 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:11:13 × mpereira quits (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d) (Ping timeout: 258 seconds)
16:11:20 <merijn> You know, this mtl-style tagless final stuff is really starting to grow on me
16:11:32 <merijn> (not mtl itself, those classes are still junk)
16:11:35 adamwesp_ joins (~adamwespi@107.181.19.30)
16:12:37 × Sheilong quits (uid293653@gateway/web/irccloud.com/x-qgpagvfhytqrdzbx) (Quit: Connection closed for inactivity)
16:14:45 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
16:15:13 × adamwespiser quits (~adamwespi@209.6.43.158) (Ping timeout: 264 seconds)
16:15:19 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408)
16:16:51 × rmk236 quits (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3) (Ping timeout: 272 seconds)
16:17:20 × zebrag quits (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
16:17:28 × michalz quits (~user@185.246.204.78) (Remote host closed the connection)
16:18:18 rmk236 joins (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3)
16:18:57 mpereira joins (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d)
16:19:00 × carlomagno quits (~cararell@148.87.23.13) (Remote host closed the connection)
16:20:48 × zyeri quits (zyeri@tilde.team/users/zyeri) (Quit: ZNC 1.8.1 - https://znc.in)
16:20:57 danso joins (~dan@23-233-111-39.cpe.pppoe.ca)
16:21:05 carlomagno joins (~cararell@148.87.23.13)
16:21:33 zebrag joins (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr)
16:23:23 koluacik joins (~koluacik@134.122.28.77)
16:23:31 × xff0x quits (~fox@2001:1a81:5271:e800:63d8:c69:6df1:58cb) (Quit: xff0x)
16:23:39 xff0x joins (~fox@2001:1a81:5271:e800:63d8:c69:6df1:58cb)
16:24:11 × zebrag quits (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Remote host closed the connection)
16:26:33 zyeri joins (zyeri@gateway/shell/tilde.team/x-grfsriuxevraoxmh)
16:26:33 × zyeri quits (zyeri@gateway/shell/tilde.team/x-grfsriuxevraoxmh) (Changing host)
16:26:33 zyeri joins (zyeri@tilde.team/users/zyeri)
16:27:55 zebrag joins (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr)
16:28:01 heatsink joins (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce)
16:31:14 fendor_ is now known as fendor
16:31:34 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 260 seconds)
16:31:37 × matryoshka quits (~matryoshk@184.75.223.227) (Quit: ZNC 1.8.2 - https://znc.in)
16:31:47 twopoint718 joins (~cjw@fsf/member/twopoint718)
16:31:54 matryoshka joins (~matryoshk@184.75.223.227)
16:32:04 pera joins (~pera@unaffiliated/pera)
16:43:31 <kuribas> tdammers: statistically correct is still useful for haskell though. In the words of Knuth: "I have only proved it correct, not tried it."
16:44:39 <kritzefitz> yushyin, (maybe dminuoso), I just noticed that Control.Concurrent included with the current master of GHC explains this. So apparently I was just asking a few versions too early.
16:45:55 <tdammers> kuribas: yes, of course, but this isn't about QA, it's about the development process
16:46:38 × jb55 quits (~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection)
16:48:42 electricityZZZZ joins (~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net)
16:48:44 Neo-- joins (~neo@BSN-176-188-17.dynamic.siol.net)
16:49:40 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
16:49:51 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408) (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:50:25 × neiluj quits (~jco@unaffiliated/neiluj) (Ping timeout: 240 seconds)
16:50:30 ransom joins (~c4264035@8.47.12.52)
16:51:42 hekkaidekapus[ joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
16:53:14 geekosaur joins (42d52137@66.213.33.55)
16:53:15 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
16:53:23 × hekkaidekapus} quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
16:53:45 da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408)
16:53:52 × son0p quits (~son0p@181.136.122.143) (Quit: Lost terminal)
16:53:53 jb55 joins (~jb55@gateway/tor-sasl/jb55)
17:01:32 × da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408) (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:02:42 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
17:03:13 <kritzefitz> Actually, the current base on hackage also has it. I was just reading it wrong.
17:03:49 × Alleria__ quits (~textual@mskresolve-a.mskcc.org) (Ping timeout: 264 seconds)
17:04:44 × kritzefitz quits (~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
17:05:19 dandels joins (~dandels@unaffiliated/dandels)
17:06:16 × heatsink quits (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) (Remote host closed the connection)
17:07:51 × twopoint718 quits (~cjw@fsf/member/twopoint718) (Quit: Textual IRC Client: www.textualapp.com)
17:11:51 coot joins (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
17:13:57 kritzefitz joins (~kritzefit@212.86.56.80)
17:14:36 christo joins (~chris@81.96.113.213)
17:15:01 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
17:15:14 × quinn quits (~quinn@c-73-223-224-163.hsd1.ca.comcast.net) (Ping timeout: 272 seconds)
17:17:39 × Kaiepi quits (~Kaiepi@47.54.252.148) (Ping timeout: 260 seconds)
17:18:40 madjestic joins (~Android@86-88-72-244.fixed.kpn.net)
17:21:10 cfricke joins (~cfricke@unaffiliated/cfricke)
17:21:21 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
17:22:02 × mpereira quits (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d) (Ping timeout: 260 seconds)
17:22:50 × coot quits (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
17:28:22 × matryoshka quits (~matryoshk@184.75.223.227) (Quit: ZNC 1.8.2 - https://znc.in)
17:28:41 matryoshka joins (~matryoshk@184.75.223.227)
17:30:16 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 246 seconds)
17:32:23 × teardown_ quits (~user@gateway/tor-sasl/mrush) (Ping timeout: 240 seconds)
17:33:12 cads2 joins (~cads@ip-64-72-99-232.lasvegas.net)
17:33:12 cads joins (~cads@ip-64-72-99-232.lasvegas.net)
17:33:16 fresheyeball joins (~isaac@c-71-237-105-37.hsd1.co.comcast.net)
17:33:20 <fresheyeball> http://ix.io/2KQY
17:33:22 <fresheyeball> Why?!
17:33:29 × sakirious quits (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Read error: Connection reset by peer)
17:33:36 <fresheyeball> Is it possible to get type families and qualified constraints to play nice?
17:33:38 sakirious joins (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
17:34:26 <fresheyeball> http://ix.io/2KQZ for context
17:34:45 × zfnmxt_ quits (~zfnmxt@unaffiliated/zfnmxt) (Quit: Bye!)
17:36:18 halbGefressen joins (~halbGefre@2a02:810d:f40:2a9c:40b2:2308:84bd:8b9b)
17:38:33 heatsink joins (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce)
17:38:40 <halbGefressen> Say I have a data Tree a = Leaf | Node (Tree a) a (Tree a). If I want to use currying on the right node with the second constructor, I can write `Node left val` instead of (\x -> Node x val right). Can I somehow shift the arguments around easily to achieve similar brevity?
17:39:23 <dmwit> Nope.
17:39:52 <halbGefressen> :(
17:40:02 <dmwit> It's not that bad in the end.
17:40:19 <halbGefressen> I know, but my OCD kinda doesn't like lambdas :)
17:40:28 <dmwit> You have to have *some* syntax for saying which argument you're leaving out. In terms of possible syntaxes, lambdas are pretty lightweight and very general.
17:41:03 <dmwit> You can imagine many others, of course. All with tradeoffs.
17:41:22 <halbGefressen> Yeah, using a lambda would be the easiest solution, but I thought "perhaps Haskell has something for that as well" and didnt find it. Thanks!
17:41:39 <halbGefressen> something like flip3 or so
17:42:03 <halbGefressen> oh wait a second
17:42:10 fafufafufafu joins (b2e91980@178.233.25.128)
17:42:36 zfnmxt joins (~zfnmxt@unaffiliated/zfnmxt)
17:42:55 × matryoshka quits (~matryoshk@184.75.223.227) (Quit: ZNC 1.8.2 - https://znc.in)
17:43:13 matryoshka joins (~matryoshk@184.75.223.227)
17:43:52 <dsal> @pl \x -> Node x val right
17:43:52 <lambdabot> flip (flip Node val) right
17:44:28 <kuribas> halbGefressen: short doesn't mean readable
17:44:34 <kuribas> lambdas are fine
17:44:39 <dmwit> > (length "\\x -> Node x val right", length "flip (flip Node val) right")
17:44:41 <lambdabot> (22,26)
17:44:41 <dolio> It's not even shorter.
17:44:43 <dsal> Look ma, no lambda
17:44:50 <dolio> It's just less clear and longer.
17:44:54 <dmwit> ^
17:45:18 <dmwit> (I was aware of and considered this kind of possibility before I answered "Nope." above.)
17:45:19 <Melanie> sometimes there's no point in going point-free
17:45:32 <halbGefressen> then it just becomes point-less...
17:45:38 <dsal> It's a good demonstration, though.
17:45:47 <xsperry> halbGefressen, you might consider changing the order of Node constructor, if that is the most common way you want to partially apply it
17:45:55 <dsal> If you want to avoid a lambda for some reason, you *can*, but also, maybe don't do that.
17:46:01 <halbGefressen> wait, I can reduce that to flip (`Node` val) right
17:46:04 <dsal> Or just have a helper function that does the thing that you want.
17:46:09 × rmk236 quits (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3) (Quit: Leaving.)
17:47:48 dfeuer joins (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net)
17:48:05 <dolio> The solution is to fix whatever mental block is causing you to think lambda expressions are always bad.
17:48:10 <dolio> Because they are not.
17:50:34 × dandels quits (~dandels@unaffiliated/dandels) (Ping timeout: 246 seconds)
17:51:46 × zebrag quits (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
17:52:07 zebrag joins (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr)
17:52:10 koluacik parts (~koluacik@134.122.28.77) ()
17:52:25 <dolio> That's why, if you ask me, it makes no sense when people complain about redundancies in Haskell syntax. The different syntaxes for achieving the same thing can be better or worse in different situations, so paring things down to only a single way to do any given thing forces you to write less clear code in various situations.
17:52:32 DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
17:52:42 koluacik joins (~koluacik@134.122.28.77)
17:52:48 × matryoshka quits (~matryoshk@184.75.223.227) (Quit: ZNC 1.8.2 - https://znc.in)
17:53:03 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
17:53:12 <dsal> I rarely use flip. It sometimes adds brevity, but rarely clarity.
17:53:54 <Kronic> why would anyone say lambdas are bad?
17:54:19 <monochrom> I know two religious camps, from opposite directions, that hate lambda.
17:54:51 <monochrom> One is the pointfree religion. The other is the meaningful-name religion
17:54:52 matryoshka` joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
17:54:55 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Read error: Connection reset by peer)
17:55:31 <Kronic> The way I look at it is much the same way I look at documentation. You don't document everything that is a maintenance problem. The same way, you don't name absolutely everything because sometimes using a lambda or point free is nicer. IT;
17:55:39 Sheilong joins (uid293653@gateway/web/irccloud.com/x-qwdszzkqmmrcolkn)
17:55:47 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:55:59 <Kronic> It is almost certainly not always -- sorry, I sent that message too early there, new keyboard.
17:56:10 Alleria joins (~textual@mskresolve-a.mskcc.org)
17:56:34 × matryoshka` quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
17:56:34 Alleria is now known as Guest73365
17:56:53 matryoshka joins (~matryoshk@184.75.223.227)
17:57:37 mpereira joins (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d)
17:57:38 <monochrom> I have spoken to OOP people who, even in OOP, found "o1.m1(o2.m2(), o3.m3())" alien because their ideal is "meaningfulname2 = o2.m2(); meaningfulname3 = o3.m3(); o1.m1(meaningfulname2, meaningfulname3)"
17:58:04 <fresheyeball> anyone intereseted in my problem?
17:58:22 matryoshka` joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
17:58:27 <monochrom> Basically rolling back the most important innovation of Backus in Fortran, that you no longer write three-address instructions.
17:58:28 × matryoshka quits (~matryoshk@184.75.223.227) (Read error: Connection reset by peer)
17:58:48 Franciman joins (~francesco@host-87-17-26-221.retail.telecomitalia.it)
17:59:00 <fresheyeball> like why is a qualified constraint illegal in a type family?
17:59:01 <merijn> hmm, so is there a "traverse for (micro)lenses"?
17:59:25 <kuribas> merijn: id ?
17:59:26 <fresheyeball> is there a logical reason for this? Or just GHC can't do it right now?
17:59:51 <dolio> Where is that in the code you linked?
17:59:53 <merijn> kuribas: hmm?
18:00:10 × matryoshka` quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
18:00:23 <kuribas> did you mean traverseOf? https://hackage.haskell.org/package/microlens-0.4.12.0/docs/Lens-Micro.html#v:traverseOf
18:00:28 <kuribas> which is just id
18:00:33 matryoshka joins (~matryoshk@184.75.223.227)
18:00:44 <merijn> Ah, yes
18:01:32 <Kronic> monochrom: those people are kinda weird. I mean, I get it. At some point though repeating information becomes a problem I would say, to each their own though.
18:02:09 × spopejoy quits (~stuart@ool-44c5f8c9.dyn.optonline.net) (Quit: spopejoy)
18:02:37 × mpereira quits (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d) (Ping timeout: 272 seconds)
18:04:40 × dyeplexer quits (~lol@unaffiliated/terpin) (Remote host closed the connection)
18:05:46 mizlan joins (~michaella@c-67-169-7-31.hsd1.ca.comcast.net)
18:05:48 <kuribas> monochrom: so thisAddsTwoAndMultipliesByThree x = (x+1)*2, instead of (*1).inc ?
18:06:23 <kuribas> meaningful names are great, if they are really meaningful
18:09:32 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
18:10:08 <merijn> Is there, like, an Endo version for monadic functions?
18:10:10 × Major_Biscuit quits (~Major_Bis@93-21-124.netrun.cytanet.com.cy) (Ping timeout: 246 seconds)
18:10:44 × crblmr quits (~carbolyme@matrix.dropacid.net) (Ping timeout: 260 seconds)
18:12:02 hyperisco joins (~hyperisco@d192-186-117-226.static.comm.cgocable.net)
18:12:32 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Read error: Connection reset by peer)
18:12:38 nineonin_ joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
18:12:40 crblmr joins (~carbolyme@matrix.dropacid.net)
18:13:12 gues72874 joins (~username@62-34-117-205.abo.bbox.fr)
18:13:28 Kaiepi joins (~Kaiepi@47.54.252.148)
18:13:55 <Melanie> merijn: monadic functions, like (m a -> m a) or (a -> m a)?
18:14:02 <merijn> Melanie: The latter
18:14:35 <Melanie> that sounds like a fixed point to me
18:15:12 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
18:15:22 <merijn> Not really? I basically just need "foldl (>=>) return . map foo" that I was hoping to handle with a single foldMap
18:15:58 jpds joins (~jpds@gateway/tor-sasl/jpds)
18:16:38 LKoen joins (~LKoen@174.175.9.109.rev.sfr.net)
18:16:52 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) ()
18:17:05 <Melanie> :t foldl (>=>) return
18:17:07 <lambdabot> (Foldable t, Monad m) => t (b -> m b) -> b -> m b
18:19:24 × nineonin_ quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Read error: Connection reset by peer)
18:19:28 <Melanie> i don't think you'll get a monoid like Endo because of the types, but maybe Kleisli? https://hackage.haskell.org/package/base-4.14.1.0/docs/Control-Arrow.html#t:Kleisli
18:19:30 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
18:20:29 <Melanie> you could probably put a monoid instance on Kleisli m a a
18:21:10 × gues72874 quits (~username@62-34-117-205.abo.bbox.fr) (Ping timeout: 265 seconds)
18:21:41 <merijn> Melanie: Yeah, but then I'm probably better off writing out the fold instead :)
18:22:07 <Melanie> ¯\_(ツ)_/¯
18:23:09 mpereira joins (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d)
18:23:38 × matryoshka quits (~matryoshk@184.75.223.227) (Quit: ZNC 1.8.2 - https://znc.in)
18:23:52 matryoshka joins (~matryoshk@184.75.223.227)
18:24:28 howdoi joins (uid224@gateway/web/irccloud.com/x-rxnglkkhuozkyxip)
18:32:08 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
18:33:04 <Melanie> maybe you could use (Applicative f, Monoid a) => Monoid (Ap f a)
18:33:18 <Melanie> with Data.Monoid.Ap
18:33:40 <Melanie> ah, sorry, that's not the function composition you'd need
18:34:15 × geekosaur quits (42d52137@66.213.33.55) (Ping timeout: 245 seconds)
18:34:35 × bitmapper quits (uid464869@gateway/web/irccloud.com/x-cjvrvhgujfjiqkfn) (Quit: Connection closed for inactivity)
18:34:35 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
18:38:37 × zfnmxt quits (~zfnmxt@unaffiliated/zfnmxt) (Quit: Bye!)
18:39:14 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
18:43:08 zfnmxt joins (~zfnmxt@unaffiliated/zfnmxt)
18:44:00 × mizlan quits (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Quit: leaving)
18:45:16 × texasmynsted quits (~texasmyns@99.96.221.112) (Ping timeout: 240 seconds)
18:45:44 × kritzefitz quits (~kritzefit@212.86.56.80) (Ping timeout: 260 seconds)
18:47:38 cgadski joins (~cgadski@a95-95-106-208.cpe.netcabo.pt)
18:48:02 <cgadski> symbols generated by Template Haskell are picked up and used in autocompletion by e.g. the Haskell Language Server, right?
18:49:47 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
18:50:25 nineonine joins (~nineonine@50.216.62.2)
18:51:46 × zebrag quits (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
18:52:08 zebrag joins (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr)
18:52:16 geekosaur joins (42d52137@66.213.33.55)
18:55:00 × Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 265 seconds)
18:55:33 Lord_of_Life joins (~Lord@unaffiliated/lord-of-life/x-0885362)
18:55:59 bitmagie joins (~Thunderbi@200116b806b5fe0008aee93e467ed0bc.dip.versatel-1u1.de)
18:56:57 × bitmagie quits (~Thunderbi@200116b806b5fe0008aee93e467ed0bc.dip.versatel-1u1.de) (Client Quit)
18:58:11 neiluj joins (~jco@91-167-203-101.subs.proxad.net)
19:00:49 quinn joins (~quinn@c-73-223-224-163.hsd1.ca.comcast.net)
19:02:26 × mpereira quits (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d) (Ping timeout: 264 seconds)
19:02:28 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
19:02:29 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
19:02:51 jpds joins (~jpds@gateway/tor-sasl/jpds)
19:03:29 berberman joins (~berberman@unaffiliated/berberman)
19:03:47 × berberman_ quits (~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds)
19:04:30 × matryoshka quits (~matryoshk@184.75.223.227) (Quit: ZNC 1.8.2 - https://znc.in)
19:04:48 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
19:06:29 cfricke joins (~cfricke@unaffiliated/cfricke)
19:08:16 × cfricke quits (~cfricke@unaffiliated/cfricke) (Client Quit)
19:08:38 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
19:08:58 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
19:09:00 × heatsink quits (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) (Remote host closed the connection)
19:09:25 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 240 seconds)
19:09:45 × b4er quits (~b4er@91.193.4.122) (Ping timeout: 240 seconds)
19:10:00 andreas303 joins (~andreas@gateway/tor-sasl/andreas303)
19:11:27 Tario joins (~Tario@201.192.165.173)
19:13:10 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
19:13:29 matryoshka joins (~matryoshk@184.75.223.227)
19:14:25 × notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection)
19:15:23 notzmv joins (~user@unaffiliated/zmv)
19:17:20 × nineonine quits (~nineonine@50.216.62.2) (Remote host closed the connection)
19:17:52 nineonine joins (~nineonine@50.216.62.2)
19:18:55 × matryoshka quits (~matryoshk@184.75.223.227) (Quit: ZNC 1.8.2 - https://znc.in)
19:19:14 matryoshka joins (~matryoshk@184.75.223.227)
19:19:20 × notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection)
19:19:24 chenshen joins (~chenshen@2620:10d:c090:400::5:418a)
19:20:35 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
19:20:53 notzmv joins (~user@unaffiliated/zmv)
19:23:22 × matryoshka quits (~matryoshk@184.75.223.227) (Client Quit)
19:23:39 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
19:27:20 boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
19:27:52 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
19:28:12 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
19:30:09 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
19:30:29 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
19:30:58 × zfnmxt quits (~zfnmxt@unaffiliated/zfnmxt) (Quit: Bye!)
19:33:21 zfnmxt joins (~zfnmxt@unaffiliated/zfnmxt)
19:33:38 bitmapper joins (uid464869@gateway/web/irccloud.com/x-naqbxzlsevlmbjnm)
19:33:48 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
19:34:27 <shinobi> Learn You a Haskell states that let expressions are, in fact, expressions. If where expressions are not expressions, what are they?
19:34:56 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 240 seconds)
19:35:04 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
19:35:10 <geekosaur> clauses associated with declarations
19:35:11 <sm[m]> syntactic sugar
19:35:11 <merijn> shinobi: Well, they're not where *expressions*, they're where blocks :p
19:35:22 <monochrom> They are part of a definition.
19:35:34 <merijn> Which are, part of a binding's definition
19:35:50 <merijn> sm[m]: Arguably so are let expressions :p
19:36:11 <monochrom> You simply don't treat it in isolation.
19:36:29 <monochrom> "let x=1 in x" can stand alone. "where x=1" cannot stand alone.
19:36:37 <monochrom> Well, "let x=1" cannot, either.
19:36:59 <merijn> That's do notation, though, not a let expression
19:37:33 <boxscape> merijn what would let expressions be syntactic sugar for in that view?
19:37:37 <monochrom> do or do not, "let x=1" cannot stand alone.
19:37:45 <merijn> boxscape: Lambdas
19:37:58 <boxscape> don't lambdas work differently with type inference in hindley-milner?
19:38:07 <monochrom> No, let-generalization stops you from translating let to lambda.
19:38:20 <monochrom> and recursion stops you, too.
19:38:37 <merijn> I guess then we get to the question "what is sugar?"
19:39:03 <monochrom> This is why I don't bring up sugar.
19:39:08 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
19:39:12 <monochrom> Apart from desugared grape juice.
19:40:06 <monochrom> I don't draw a line "these are syntax sugars" unless there is a really high pedagogical value.
19:40:18 kritzefitz joins (~kritzefit@212.86.56.80)
19:40:38 <shinobi> I take it that I should just take it for what it is, that being let is local and can stand alone; where has a greater scope but cannot stand alone.
19:40:44 <monochrom> Such as forcing stubborn minds to finally accept that [1,2,3,4] matches the pattern x:xs with x=1, xs=[2,3,4].
19:41:38 <boxscape> shinobi let can have the same scope as where if you put it on a high enough level, i.e., directly after the = in a function definition
19:41:52 <monochrom> Such as forcing cargo-culters (they cargo-cult do-notation) to understand using >>=
19:42:54 <boxscape> shinobi ... though I suppose to be fair things defined in such a let expression wouldn't be available to a where block associated with that function definition, so maybe you're right after all that where has a larger scope :)
19:43:06 <shinobi> boxscape: Is there an preferred approach or is this a matter of style
19:43:22 <boxscape> shinobi matter of style I would say, I tend to use where a lot
19:44:29 <shinobi> Then there are guards. These seem very close to the case statement. Is there a rule of thumb as to when to use guards vs case .. of ?
19:44:53 <boxscape> case allows you to pattern match, (vanilla) guards allow you to check boolean conditions - they are for different use cases
19:44:54 <monochrom> They are mostly uninterchangeable.
19:45:05 × nineonine quits (~nineonine@50.216.62.2) (Ping timeout: 240 seconds)
19:45:32 <ski> > case () of () | 2 > 3 -> "foo" | otherwise -> "bar"
19:45:34 <lambdabot> "bar"
19:46:03 texasmynsted joins (~texasmyns@99.96.221.112)
19:46:21 nineonine joins (~nineonine@50.216.62.2)
19:47:28 × cads quits (~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 246 seconds)
19:48:07 × zmagii_ quits (~zmagii@unaffiliated/zmagii) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
19:48:09 × cads2 quits (~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 260 seconds)
19:51:45 <__monty__> shinobi: I usually stick to pattern matching and guards but use case expressions if it avoids duplication.
19:53:22 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
19:53:45 × boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed)
19:53:58 boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
19:54:49 <merijn> shinobi: I would say that "where where possible" is by far the preferred style
19:54:54 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
19:55:15 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
19:55:27 <merijn> monochrom: Pattern guard disagree ;)
19:57:42 nineonin_ joins (~nineonine@50.216.62.2)
19:57:42 × nineonine quits (~nineonine@50.216.62.2) (Remote host closed the connection)
19:58:29 × texasmynsted quits (~texasmyns@99.96.221.112) (Read error: Connection timed out)
19:58:57 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 260 seconds)
19:59:15 pavonia joins (~user@unaffiliated/siracusa)
19:59:31 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
19:59:32 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
19:59:48 × ph88 quits (~ph88@2a02:8109:9e00:7e5c:107a:c84:877e:fc08) (Ping timeout: 260 seconds)
19:59:53 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
20:00:02 mpereira joins (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d)
20:00:19 texasmynsted joins (~texasmyns@99.96.221.112)
20:00:29 zmagii joins (~zmagii@unaffiliated/zmagii)
20:01:12 × jedws quits (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:03:50 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Client Quit)
20:04:07 matryoshka joins (~matryoshk@184.75.223.227)
20:04:25 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 264 seconds)
20:04:27 × mpereira quits (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d) (Ping timeout: 260 seconds)
20:04:45 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
20:05:19 <ephemient> I use -XLambdaCase relatively often… almost always on the RHS of a >>=
20:05:26 heatsink joins (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce)
20:05:33 fascher- joins (~fascher@105.112.46.41)
20:05:37 × nineonin_ quits (~nineonine@50.216.62.2) (Ping timeout: 264 seconds)
20:05:50 matryoshka` joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
20:05:54 <ephemient> otherwise I don't think I use case much
20:05:56 × matryoshka quits (~matryoshk@184.75.223.227) (Read error: Connection reset by peer)
20:06:58 plopls joins (69702e29@105.112.46.41)
20:07:50 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
20:09:16 <ephemient> I suppose every pattern match/guard can be desugared to case .. of, and every case expression could be turned into a local binding with pattern matches/guards
20:09:25 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 256 seconds)
20:09:48 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
20:11:51 <ephemient> e.g. `x = case () of () | 2 > 3 -> "foo" | otherwise -> "bar"` == `x | 2 > 3 = "foo" | otherwise = "bar"`
20:13:00 × geekosaur quits (42d52137@66.213.33.55) (Ping timeout: 245 seconds)
20:14:26 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 256 seconds)
20:14:47 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
20:15:14 <ski> (possibly after parameterizing on nonlocals)
20:16:32 × Franciman quits (~francesco@host-87-17-26-221.retail.telecomitalia.it) (Quit: Leaving)
20:17:24 × plopls quits (69702e29@105.112.46.41) (Remote host closed the connection)
20:18:00 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Read error: Connection reset by peer)
20:18:30 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
20:19:26 × fascher- quits (~fascher@105.112.46.41) (Remote host closed the connection)
20:22:58 fascher joins (~fascher@105.112.46.41)
20:24:05 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 256 seconds)
20:24:50 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
20:26:23 <fascher> is there any discord server for haskell ?
20:26:50 <Uniaika> fascher: there is a general FP Discord
20:26:59 <Uniaika> and topos's own one
20:27:24 <fascher> ok. can you give me an invite to both?
20:27:27 mpereira joins (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d)
20:27:32 <topos> mine is for the cool kids
20:27:35 <topos> you have to be a cool kid to get in
20:27:39 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 272 seconds)
20:28:00 <fascher> what are the requirements to being a cool kid?
20:28:27 <fascher> :D
20:29:16 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 240 seconds)
20:29:31 ski . o O ( "Team Chat" <https://xkcd.com/1782/> )
20:29:39 Faker joins (69702e29@105.112.46.41)
20:29:45 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
20:30:37 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
20:32:38 × fascher quits (~fascher@105.112.46.41) (Remote host closed the connection)
20:32:52 fascher joins (~fascher@105.112.46.41)
20:34:36 <shinobi> In chapter 9 (page 197) the askForNumber function contains IO Actions that will be executed at some point. However, this function calls itself recursively and doesn't seem to return. When are those IO actions executed?
20:34:46 geekosaur joins (42d52137@66.213.33.55)
20:35:13 × ClaudiusMaximus quits (~claude@unaffiliated/claudiusmaximus) (Quit: ->)
20:35:44 <boxscape> (link to the html page that contains it http://learnyouahaskell.com/input-and-output )
20:35:46 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
20:36:23 <monochrom> Have you run it and made empirical observations?
20:37:09 <sm[m]> Discord pfff, Matrix is cool now
20:37:16 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:37:36 <Uniaika> fascher: https://discord.gg/V7GCEkYD
20:38:10 <Uniaika> fascher: rules are simple: be kind, don't be an arse, don't ask for non-FP coding help, read the wikipedia page on FP (at least the first paragraph), and read the rules
20:38:37 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 260 seconds)
20:39:03 <boxscape> % forever
20:39:03 <yahb> boxscape: ; <interactive>:175:1: error:; * No instance for (Show (f0 a0 -> f0 b0)) arising from a use of `print'; (maybe you haven't applied a function to enough arguments?); * In a stmt of an interactive GHCi command: print it
20:39:06 <boxscape> % :t forever
20:39:06 <yahb> boxscape: Applicative f => f a -> f b
20:39:19 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
20:39:40 × geekosaur quits (42d52137@66.213.33.55) (Ping timeout: 245 seconds)
20:39:43 <boxscape> shinobi this function is perhaps simpler to understand but has the same principle: It takes an IO action (or other action) and executes it forever, calling itself but never returning
20:39:59 nineonine joins (~nineonine@50.216.62.2)
20:40:16 <boxscape> % forever $ putChar 'c'
20:40:23 <yahb> boxscape: cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
20:40:30 <boxscape> @src forever
20:40:30 <lambdabot> forever a = let a' = a >> a' in a'
20:41:15 <boxscape> okay so actually it doesn't call itself in this @src but you could implement it as `forever a = a >> forever a`
20:41:21 <fascher> @Uniaika Thanks
20:41:21 <lambdabot> Unknown command, try @list
20:41:59 <ski> forever act = loop
20:42:01 <ski> where
20:42:06 <ski> loop = do act
20:42:11 <ski> loop
20:42:34 <monochrom> a' calls itself
20:43:04 <shinobi> monochrom: My system doesn't seem to find System.Random :/
20:43:23 <monochrom> Yeah it has been splitted off of GHC.
20:43:41 <boxscape> you need the "random" package
20:43:41 <monochrom> In LYAH's time, it came with GHC. Not any more.
20:44:22 <monochrom> On the bright side, today's random package (version 1.2 or above) uses an actually good generator.
20:45:17 <shinobi> I thought the whole point was to separate pure and unpure. If IO actions get input from the user in my pure functions, what's the point?
20:45:26 × Faker quits (69702e29@105.112.46.41) (Remote host closed the connection)
20:45:32 <shinobi> I thought it had to return to main before it was executed.
20:46:11 × mpereira quits (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d) (Ping timeout: 268 seconds)
20:46:19 geekosaur joins (42d52137@66.213.33.55)
20:46:37 <boxscape> shinobi askForInput is not a pure function, which you can tell by the IO in its result type
20:46:51 <monochrom> For toy programs that are merely 10 lines long, yes you can use a monolithic organization (i.e. no organization at all).
20:46:52 <boxscape> erm
20:46:56 <boxscape> askForNumber, I mean
20:46:59 <ski> it is a pure, effectful, operation
20:47:39 <monochrom> The fundamental dilemma of education is this.
20:48:26 <monochrom> If I show you modularity by a 1000-line case study, it takes too long for me to describe, and it takes too long for you to digest, and above all, it has to contain 100 distractions.
20:48:28 <ski> shinobi : what do you mean by "it had to return to main before it was executed"
20:49:04 <monochrom> But if I show a 20-line toy example, it is so toy you wonder "why does it need a better organization".
20:49:23 × madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Quit: -a- Connection Timed Out)
20:49:37 madjestic joins (~Android@86-88-72-244.fixed.kpn.net)
20:49:37 <shinobi> I thought I read that IO actions do not get executed in pure functions. They have to return to main.
20:49:42 Major_Biscuit joins (~Major_Bis@93-21-124.netrun.cytanet.com.cy)
20:49:53 <ski> all Haskell functions are pure
20:49:55 <shinobi> monochrom: I thought the point of the IO action is to keep functions pure
20:50:02 <shinobi> It is a sign of impurity?
20:50:15 <shinobi> Then I don't understand Io
20:50:40 kyali joins (~kyali@APN-123-251-207-gprs.simobil.net)
20:50:50 <monochrom> I think no one knows what "keep functions pure" means.
20:50:59 <monochrom> including whoever says it
20:51:07 <ski> the resulting value (an `IO'-action) of calling `askForNumber' (on a `StdGen') is being incorporated into `main', so that when `main' is executed, the former action will be executed, since it's a part of `main'
20:51:45 <int-e> . o O ( Everything is pure up to the point where the devil takes an IO action and runs it... )
20:51:49 × notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection)
20:52:14 <monochrom> In my class, I don't even talk about "pure".
20:52:34 <ski> if `main' had just contained `print (length [askForNumber gen])' as the last command (rather than `askForNumber gen'), then the I/O-effects described by `askForNumber' would not have been performed
20:52:37 notzmv joins (~user@unaffiliated/zmv)
20:53:20 nineonin_ joins (~nineonine@50.216.62.2)
20:53:36 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
20:53:36 × nineonine quits (~nineonine@50.216.62.2) (Ping timeout: 256 seconds)
20:54:27 × cgadski quits (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection)
20:54:40 <shinobi> ok. That makes sense
20:57:17 <ski> `IO'-actions are only performed/run/executed, insofar as they're being made a part of the `main' action
20:57:45 <merijn> shinobi: The point of *having* IO is that IO *is* pure
20:57:57 <shinobi> ski: you just lost me
20:57:59 <merijn> shinobi: But humans are messy inconsistent and sloppily use "impure" to mean "uses IO"
20:58:04 × notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection)
20:58:08 mpereira joins (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d)
20:58:36 <ski> (with some caveats. in the interactor, you can also enter actions, which will be (evaluated and) executed. also, if some action is part of a branch of the `main' big action that is not taken (or, say, an exception is raised (or an infinite loop occurs) before the action is reached), then that action won't be performed)
20:58:43 <merijn> shinobi: All functions (including those returning IO) are pure, with a handful of exceptions (which all have "unsafe" in the name)
20:59:25 <shinobi> So would all those functions return the same value if run with the same parameters?
20:59:25 <ski> shinobi : you know how `do'-notation is desugared into calls of `(>>=)' (and `(>>)', and in some cases `fail') ?
20:59:33 <ski> shinobi : yes
20:59:34 <__monty__> There's a similar thing going on with "side-effects" where people call everything a side-effect even if it's outright an effect.
20:59:37 <merijn> shinobi: They do, yes
20:59:41 <Kronic> The way I understand it is that Haskell has kind of an internal system of logic which is unaffected by IO and the effects that happen with it
20:59:49 <ski> @type readFile
20:59:50 <lambdabot> FilePath -> IO String
21:00:03 <Kronic> I'm a noob too, though, so, my understanding might be mislead, but I more than get around
21:00:12 <merijn> shinobi: Consider this: 'putStrLn "foo"' isn't a function that "prints 'foo'" it's a function that returns an IO action "IO ()" which (when executed) will print foo
21:00:27 <ski> `readFile "myFile"' always returns the same value, namely the same `IO'-action, the same *description* of input/output interactions to perform with the OS
21:01:03 <merijn> shinobi: If I apply the the function putStrLn to two identical strings, what do I get? Two actions that do the exact same thing when executed.
21:01:14 × texasmynsted quits (~texasmyns@99.96.221.112) (Remote host closed the connection)
21:01:17 <merijn> something, something, glorious stereo ;)
21:01:22 <shinobi> Right, but if the function is recursive and doesn't return, how does the IO action eventually get executed?
21:01:28 <ski> the result of performing those interactions will commonly yield different `String's as results, even if the same `String' is passed to `readFile'. but the "instruction list" that is returned by `readFile' will still be the same, given the same file name
21:01:40 Lorra joins (~lorenzo@2001:a61:ba6:4501:e4b0:8d5e:9fde:f2ec)
21:01:42 <ski> __monty__ : yea
21:01:47 <__monty__> Kronic: Sounds more complicated than "Your pure program produces a sequence of instructions to be executed by the RTS."
21:02:16 ski plays a fugue in the background
21:02:50 <ski> shinobi : if it doesn't compute an `IO'-action as result, then there's no action to perform/execute
21:03:01 <Kronic> To me it doesn't but I kinda get how it works so I'm not sure I would like to argue :)
21:03:24 <dolio> IO actions can be infinite objects, just like lists.
21:03:25 <Kronic> Me being the more new of the two of us here, that is
21:04:22 <__monty__> Kronic: Imo it's more complicated in the sense that you treat IO as a special case.
21:04:27 <Kronic> shinobi, I hate to answer your question with a question, but what is your understanding of what a pure function is?
21:04:39 <shinobi> So is this because IO is a functor? Is Haskell mapping over it to make a more complicated IO Action that gets return only to be executed in main later ?
21:05:09 guest9689 joins (~username@62-34-117-205.abo.bbox.fr)
21:05:27 <shinobi> Kronic: I believe a pure function to be a function that depends soley and completely on it's input parameters.
21:05:33 × dhouthoo quits (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
21:05:35 <shinobi> It may or may not be complete
21:05:51 <shinobi> The goal is to have complete, pure functions
21:06:16 <Kronic> Right, so if you take what you just said and look at what merijn said earlier
21:06:46 <Kronic> The result or thing that is evaluated out of a function that results in IO is just the IO type with an empty tuple
21:06:52 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
21:06:58 <ski> > (take 8 . (`execState` undefined)) (let loop = do loop; xs <- get; put (1 : map (2 *) xs) in loop)
21:07:01 <lambdabot> [1,2,4,8,16,32,64,128]
21:07:03 <Kronic> The fact that a file gets written to or is deleted or made or whatever does not really make a difference
21:07:16 <__monty__> shinobi: The recursion doesn't happen until the action is executed. That's why askForNumber doesn't get stuck in a loop trying to return an IO action.
21:07:32 jpds joins (~jpds@gateway/tor-sasl/jpds)
21:07:57 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
21:07:58 <shinobi> So this just goes back to lazy execution ?
21:07:58 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
21:08:15 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
21:09:12 <__monty__> Not quite, laziness only affects when the arguments to your function are evaluated.
21:09:25 × Neo-- quits (~neo@BSN-176-188-17.dynamic.siol.net) (Disconnected by services)
21:09:27 Neo--- joins (~neo@BSN-143-24-54.dynamic.siol.net)
21:09:52 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
21:10:38 × rcdilorenzo quits (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit)
21:10:55 rcdilorenzo joins (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com)
21:12:25 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
21:13:30 christo joins (~chris@81.96.113.213)
21:14:48 <shinobi> ok, so the do in that example from the book, will make 1 IO action out of the whole thing that gets returned, including the call to askForNumber?
21:15:28 <ski> `main' is one single `IO'-action, yes
21:15:59 <ski> that will include the actions described by `askForNumber' as part of it
21:16:08 <__monty__> And so is what askForNumber returns when applied to a StdGen.
21:17:38 <gentauro> > :t distinct = map head . groupBy . sort
21:17:41 <lambdabot> <hint>:1:1: error: <hint>:1:1: error: parse error on input ‘:’
21:17:46 × christo quits (~chris@81.96.113.213) (Ping timeout: 246 seconds)
21:17:46 spopejoy joins (~stuart@ool-44c5f8c9.dyn.optonline.net)
21:17:55 <ski> @type let distinct = map head . groupBy . sort in distinct
21:17:57 <lambdabot> error:
21:17:57 <lambdabot> • Couldn't match type ‘[a0] -> [[a0]]’ with ‘[[b1]]’
21:17:57 <lambdabot> Expected type: [a1] -> [[b1]]
21:18:09 <ski> @type let distinct f = map head . groupBy f . sort in distinct
21:18:10 <lambdabot> Ord b => (b -> b -> Bool) -> [b] -> [b]
21:18:33 <shinobi> I guess I was expecting the repeat call to askForNumber in main.
21:18:49 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
21:19:11 <gentauro> @type let distinct = map head . group . sort
21:19:13 <lambdabot> <no location info>: error:
21:19:13 <lambdabot> not an expression: ‘let distinct = map head . group . sort’
21:19:17 × kuribas quits (~user@ptr-25vy0i8khwxhgges4vi.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
21:19:19 <ski> shinobi : you could do it like that, too
21:19:33 <gentauro> @type let distinct = map head . group . sort in distinct
21:19:35 <lambdabot> Ord b => [b] -> [b]
21:19:36 <gentauro> :)
21:19:48 <ski> but then you'd need some indication back from `askForNumber', to determine whether to continue, or to stop
21:19:51 <shinobi> ski: Is one way better than the other?
21:19:53 christo joins (~chris@81.96.113.213)
21:20:03 <ski> (or, i guess, you could use `forever', and throw an exception when you want to stop ..)
21:20:19 <ski> shinobi : depends on what you want to achieve/do ?
21:20:28 <dolio> Or `exitSuccess`
21:20:31 <ski> yea
21:20:52 coot joins (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl)
21:20:54 <int-e> hmm `forever exitSuccess`
21:21:48 <shinobi> Sounds like when I'm given no requirements but told it has to be done "right".
21:22:18 <ski> % try System.Exit.exitSuccess :: IO (Either SomeException ())
21:22:18 <yahb> ski: Left ExitSuccess
21:23:41 <gentauro> @type let distinct = map head . group . sort in distinct -- Is this correctly assumed: map head O(n) + group O(n) + sort O(n lg n)?
21:23:43 <lambdabot> Ord b => [b] -> [b]
21:23:48 <gentauro> `map head O(n) + group O(n) + sort O(n lg n)`?
21:23:51 gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh)
21:23:59 <dolio> Ah, they actually implemented exiting with exceptions.
21:24:10 <ski> shinobi : as it is now, `askForNumber' expresses repeatedly asking the user for an input, until the reply is an empty line
21:24:11 <Kronic> shinobi: Haskell isn't like other programming languages in many ways, but one of the main ways is that there is no silly creed on which on haskell devs swear to write good code. That results in there being many ways to skin a cat
21:24:24 <gentauro> I read on stackoverflow that `nubBy` was quadratic
21:25:02 <dolio> "Quadratic" gets you a C on the exam.
21:25:33 <gentauro> at DIKU you got dumped. 3-strikes and they kicked you out of the CS-programme …
21:25:36 <gentauro> :o
21:25:38 ohmysomuchuser joins (~nickednam@037008230157.dynamic-3-poz-k-1-2-0.vectranet.pl)
21:25:51 <int-e> :t Data.Containers.ListUtils.nubOrd
21:25:53 <lambdabot> Ord a => [a] -> [a]
21:25:53 × gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Remote host closed the connection)
21:26:17 tama00 joins (~tama@unaffiliated/tama00)
21:26:22 <dolio> What I mean is, doing an analysis and concluding that it's quadratic ...
21:26:31 × crblmr quits (~carbolyme@matrix.dropacid.net) (Ping timeout: 246 seconds)
21:26:54 <merijn> gentauro: Not really
21:26:59 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
21:27:09 <merijn> gentauro: Because you don't actually end up walking the entire list each time
21:27:16 gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh)
21:27:19 <merijn> gentauro: Let's consider a simpler case first
21:27:30 <merijn> gentauro: "map f . map g"
21:27:49 crblmr joins (~carbolyme@matrix.dropacid.net)
21:27:54 × nineonin_ quits (~nineonine@50.216.62.2) (Ping timeout: 260 seconds)
21:28:02 <merijn> gentauro: In a strict language you'd "first map g, which is O(n), and then map f, which is also O(n)"
21:29:01 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 264 seconds)
21:29:42 <gentauro> merijn: yes, we are still in O(n)
21:29:46 × halbGefressen quits (~halbGefre@2a02:810d:f40:2a9c:40b2:2308:84bd:8b9b) (Ping timeout: 258 seconds)
21:29:57 <merijn> But consider in Haskell: "map f (x:xs) = f x : map f xs" to get the first element out of the double map you pattern match "map f", which requires a list, which forces "map g" which can immediately return said first element without walking the list. Now you do the same for the 2nd element, etc. effectively you're only walking the list once and directly applying 'g' and then 'f' for each element. Of course
21:30:02 <merijn> you do still have the overhead of allocating the "intermediate list cells"
21:30:11 × thc202 quits (~thc202@unaffiliated/thc202) (Quit: thc202)
21:30:18 <merijn> But GHC's list fusion stuff can actually often eliminate those intermediate allocations
21:31:25 <gentauro> merijn: I haven't looked into the `nubBy` code yet
21:31:51 <gentauro> like I said, when I road `quadratic` I got worried. So that's why I aimed for my own `distinct` for lists
21:31:54 <gentauro> :)
21:32:27 <merijn> gentauro: nub is quadratic for the reason that, if all you have is Eq, the only way to filter is "pairwise compare *all* values"
21:32:40 <merijn> Give a list of N elements that is N*(N-1) pairs to compare
21:33:00 <dolio> Well, quadratic isn't strictly wrong, but a more detailed analysis would be O(n*k), where k is at worst n, but may be smaller.
21:33:33 <int-e> gentauro: `nub` is lazy though. which is why I tried to point you to Data.Containers.ListUtils.nubOrd which is also lazy
21:33:51 × spopejoy quits (~stuart@ool-44c5f8c9.dyn.optonline.net) (Quit: spopejoy)
21:33:57 <int-e> though if you're going to consume all the elements anyway that will not matter much
21:33:57 usr25 joins (~usr25@unaffiliated/usr25)
21:34:24 <gentauro> int-e: it's using a `Data.Set`. That's `cheating` :P
21:34:31 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
21:34:35 <int-e> gentauro: no it's not?
21:34:40 <int-e> :)
21:34:42 <gentauro> int-e: just kidding
21:35:05 <int-e> FWIW, I have written the map head . group . sort things numerous times myself
21:35:51 <gentauro> int-e: great minds think alike ;)
21:35:51 <int-e> And still do because I can never remember nubOrd's module name.
21:36:02 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Read error: No route to host)
21:36:14 × chenshen quits (~chenshen@2620:10d:c090:400::5:418a) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
21:36:16 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
21:36:21 <monochrom> But dolio, on an exam, how much detail gets how many marks also depends on the context of the exam.
21:36:45 <boxscape> hm strange that nubOrdOn exists but not nubOrdBy
21:36:57 × fascher quits (~fascher@105.112.46.41) (Remote host closed the connection)
21:37:00 <boxscape> oh I guess
21:37:11 <boxscape> you would need an equality function that respects the Ord instance
21:37:17 <boxscape> so fair enough
21:37:33 × kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection)
21:37:44 × Deide quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa)
21:38:26 <monochrom> For most exams, the default is parameterized-by-input-size-only and worst-case. In that context, O(n*k) would be wrong.
21:38:55 b4er joins (~b4er@2a02:aa16:3a80:1900:5f0f:a23e:4628:9051)
21:39:03 <gentauro> when I'm to lazy to write a function signature, I just do: `Foo :: Bool` and build the solution for GHC to tell me the correct signature for me to `copy/pasta` :)
21:39:20 <dolio> This exam is for people who want to go beyond the average stack overflow user. :)
21:40:06 cgadski joins (~cgadski@a95-95-106-208.cpe.netcabo.pt)
21:40:08 × olligobber quits (~olligobbe@unaffiliated/olligobber) (Remote host closed the connection)
21:40:12 × boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed)
21:40:17 <monochrom> Hell, on my exams, "O" is already wrong, you have to say "Θ". :)
21:40:27 boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
21:40:39 elliott_ joins (~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
21:40:44 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
21:40:50 <boxscape> gentauro the thing ghc developers want you to do in that situation is to use _ instead of Bool
21:41:12 × b4er quits (~b4er@2a02:aa16:3a80:1900:5f0f:a23e:4628:9051) (Client Quit)
21:42:01 <gentauro> boxscape: good to know
21:42:06 <dolio> Yeah, that's a good point.
21:42:48 <dolio> Like, nub is O(exp(n)).
21:43:00 justsomeguy joins (~justsomeg@216.186.218.241)
21:43:00 × justsomeguy quits (~justsomeg@216.186.218.241) (Changing host)
21:43:00 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
21:43:10 <__monty__> monochrom: But Θ is average-case?
21:44:01 <monochrom> QED
21:44:16 <boxscape> Θ means the case your looking at is bounded above and below by a given function, not that you're looking at the average case
21:44:29 chenshen joins (~chenshen@2620:10d:c090:400::5:418a)
21:44:51 <int-e> you're still looking at wors cases
21:44:59 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
21:45:10 <monochrom> If there is still anyone who disbelieve my claim that "internet people wrongly think O is for worst case, Ω is for best case, Θ is for average case", you have one data point right theere.
21:45:16 <int-e> (actually the worst/average/best case axis is independent)
21:45:38 nineonine joins (~nineonine@50.216.62.2)
21:45:42 <boxscape> (s/your/you're)
21:45:45 × guest9689 quits (~username@62-34-117-205.abo.bbox.fr) (Ping timeout: 240 seconds)
21:46:10 <monochrom> Answer: Please recall the definition of Θ. It doesn't even say the functions come from any algorithm's running time at all.
21:46:11 × geekosaur quits (42d52137@66.213.33.55) (Remote host closed the connection)
21:46:15 <int-e> But we have comparatively poor (or hard to use) tools for average case analysis, and best cases hardly matter, so worst case analysis is most popular.
21:46:54 <int-e> monochrom: Try asking your students whether Theta(f) = O(f) - o(f)...
21:47:13 <monochrom> The definition just says "if you have two functions out of the blue, here is how to compare them". The two functions can just come out of the blue, I feel like comparing n^2 with 2n^2+3 today, who says they have to be time or space or electricity or anything.
21:48:00 glguy says they have to be electricity
21:48:01 × Major_Biscuit quits (~Major_Bis@93-21-124.netrun.cytanet.com.cy) (Ping timeout: 256 seconds)
21:48:19 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
21:48:31 <boxscape> is EXPELECTRICITY equal to EXPTIME?
21:48:39 <monochrom> hehe
21:49:03 × neiluj quits (~jco@91-167-203-101.subs.proxad.net) (Changing host)
21:49:03 neiluj joins (~jco@unaffiliated/neiluj)
21:49:16 ech parts (~user@gateway/tor-sasl/ech) ()
21:49:29 <monochrom> You need an 80+ platinum certified PSU for EXPELECTRICITY algorithms :)
21:49:33 <ephemient> 1 bits are costlier than 0 bits (maybe)
21:50:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
21:50:42 nineonin_ joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
21:51:03 × nineonin_ quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Read error: Connection reset by peer)
21:51:08 <ephemient> (sort of a joke, but side-channel attacks via measuring power consumption or heat dissipation do exist)
21:51:27 nineonin_ joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
21:52:08 × nineonine quits (~nineonine@50.216.62.2) (Ping timeout: 256 seconds)
21:52:33 <ephemient> e.g. https://platypusattack.com/
21:54:33 <dolio> Is 0 actually cheaper, though? RAM probably has to refresh things regardless, for instance, because the 0s will drift toward 1 over time.
22:00:06 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
22:00:11 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
22:02:07 × p-core quits (~Thunderbi@koleje-wifi-0045.koleje.cuni.cz) (Read error: Connection reset by peer)
22:02:27 p-core joins (~Thunderbi@koleje-wifi-0045.koleje.cuni.cz)
22:04:51 × mouseghost quits (~draco@wikipedia/desperek) (Quit: mew wew)
22:05:11 <ephemient> sure, DRAM needs periodic refresh so it costs a fair bit of power regardless of what it contains
22:05:57 <ephemient> but multiply may be cheaper with 0 bits than 1 bits :)
22:06:09 <dolio> Ah, I see.
22:06:51 spopejoy joins (~stuart@ool-44c5f8c9.dyn.optonline.net)
22:07:28 × hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 246 seconds)
22:08:09 × fafufafufafu quits (b2e91980@178.233.25.128) (Remote host closed the connection)
22:09:21 <justsomeguy> I haven't finished reading it, but the paper “What Every Programmer Should Know About Memory” by Ulrich Drepper seems like a good exploration of this stuff.
22:11:21 × nineonin_ quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
22:11:48 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:11:51 notzmv joins (~user@unaffiliated/zmv)
22:12:01 nineonine joins (~nineonine@50.216.62.2)
22:13:38 Franciman joins (~francesco@host-87-17-26-221.retail.telecomitalia.it)
22:15:51 × fendor quits (~fendor@178.115.131.182.wireless.dyn.drei.com) (Remote host closed the connection)
22:16:42 samsepi0l joins (~jh@2a02:908:2e30:a440:9b59:4b04:b912:5db)
22:19:25 <monochrom> I might just opine "throw capacitors at the problem of how to frustrate EM-side-channel eavesdropping" :)
22:20:02 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:20:18 <monochrom> Well, maybe s/EM/E/ . For M, one may have to Faraday-cage it.
22:21:48 × notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection)
22:22:37 <monochrom> Bah, sorry for sustaining the off-topic-ness. I'll go back to trying to start marking the type inference question!
22:23:29 <monochrom> (I gave type inference homework for my students! My type inference notes is at http://www.vex.net/~trebla/haskell/type-inference.html )
22:23:36 notzmv joins (~user@unaffiliated/zmv)
22:23:52 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:24:02 <koz_> monochrom to students: Today's assignment - derive quick-look from first principles.
22:24:10 ph88 joins (~ph88@2a02:8109:9e00:7e5c:107a:c84:877e:fc08)
22:24:23 <monochrom> haha
22:24:59 <monochrom> HRHFFP = higher-rank haskell from first principles
22:25:03 × notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection)
22:25:05 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
22:25:52 notzmv joins (~user@unaffiliated/zmv)
22:26:21 × samsepi0l quits (~jh@2a02:908:2e30:a440:9b59:4b04:b912:5db) (Quit: Konversation terminated!)
22:27:21 × langseth1 quits (~langseth@84.39.116.180) (Remote host closed the connection)
22:29:15 × ph88 quits (~ph88@2a02:8109:9e00:7e5c:107a:c84:877e:fc08) (Ping timeout: 272 seconds)
22:30:30 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:d98a:f1dc:914b:1b92) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:30:38 fendor joins (~fendor@178.115.131.182.wireless.dyn.drei.com)
22:31:19 × notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection)
22:32:50 <dolio> I'm not sure there's a "first principles" for quick look.
22:34:22 CMCDragonkai1 joins (~Thunderbi@120.17.149.179)
22:37:02 × todda7 quits (~torstein@ppp-2-84-17-53.home.otenet.gr) (Ping timeout: 260 seconds)
22:39:52 × coot quits (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
22:44:40 × petersen quits (~petersen@redhat/juhp) (Ping timeout: 256 seconds)
22:46:42 delinka joins (~delinka@217.146.82.202)
22:48:02 × natechan quits (~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Quit: WeeChat 2.9)
22:52:55 ADG1089__ joins (~aditya@122.163.234.142)
22:53:09 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
22:54:13 natechan joins (~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
22:54:35 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:56:26 × matryoshka` quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Ping timeout: 264 seconds)
22:56:54 × guest14 quits (~user@49.5.6.87) (Read error: Connection reset by peer)
22:57:03 guest14 joins (~user@49.5.6.87)
22:57:03 × jb55 quits (~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds)
22:58:20 jb55 joins (~jb55@gateway/tor-sasl/jb55)
22:58:53 × spopejoy quits (~stuart@ool-44c5f8c9.dyn.optonline.net) (Quit: spopejoy)
22:59:54 × fendor quits (~fendor@178.115.131.182.wireless.dyn.drei.com) (Remote host closed the connection)
23:01:39 jcowan parts (sid325434@gateway/web/irccloud.com/x-xccxiqbedbcrqfvq) ()
23:02:29 chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
23:02:30 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
23:03:15 × carthia quits (~carthia@gateway/tor-sasl/carthia) (Quit: carthia)
23:03:55 × juri_ quits (~juri@178.63.35.222) (Ping timeout: 265 seconds)
23:03:57 × __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving)
23:04:41 Major_Biscuit joins (~Major_Bis@93-21-124.netrun.cytanet.com.cy)
23:06:21 × heatsink quits (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) (Remote host closed the connection)
23:09:14 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 265 seconds)
23:12:54 nbloomf joins (~nbloomf@2600:1700:ad14:3020:b151:c200:4f65:e713)
23:14:18 × dhil quits (~dhil@78.156.97.38) (Ping timeout: 256 seconds)
23:14:47 × carlomagno quits (~cararell@148.87.23.13) (Quit: Leaving.)
23:15:41 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
23:16:11 × LKoen quits (~LKoen@174.175.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.”)
23:16:22 Tario joins (~Tario@201.192.165.173)
23:16:24 × elliott_ quits (~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
23:17:27 × acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 265 seconds)
23:20:31 juri_ joins (~juri@178.63.35.222)
23:23:11 × Franciman quits (~francesco@host-87-17-26-221.retail.telecomitalia.it) (Quit: Leaving)
23:23:44 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 265 seconds)
23:24:12 jumper149 joins (~jumper149@ip4d1622a9.dynamic.kabel-deutschland.de)
23:25:02 Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com)
23:25:37 heatsink joins (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce)
23:25:50 × ADG1089__ quits (~aditya@122.163.234.142) (Remote host closed the connection)
23:25:50 × mpereira quits (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d) (Ping timeout: 264 seconds)
23:28:54 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
23:28:56 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
23:30:13 × Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 264 seconds)
23:30:32 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
23:30:42 jpds joins (~jpds@gateway/tor-sasl/jpds)
23:30:53 matryoshka joins (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
23:31:09 todda7 joins (~torstein@ppp-2-84-17-53.home.otenet.gr)
23:33:41 × chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:34:36 DirefulSalt joins (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt)
23:35:07 × shutdown_-h_now quits (~arjan@2001:1c06:2d0b:2312:ea:479d:de22:4e6b) (Ping timeout: 272 seconds)
23:39:43 × Lorra quits (~lorenzo@2001:a61:ba6:4501:e4b0:8d5e:9fde:f2ec) (Quit: Konversation terminated!)
23:40:33 shutdown_-h_now joins (~arjan@2001:1c06:2d0b:2312:1c6c:f94b:408f:edd0)
23:43:54 × Major_Biscuit quits (~Major_Bis@93-21-124.netrun.cytanet.com.cy) (Quit: WeeChat 2.9)
23:44:30 × cmcma20 quits (~cmcma20@l37-192-2-125.novotelecom.ru) (Quit: leaving)
23:45:13 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 264 seconds)
23:45:38 × cgadski quits (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection)
23:46:52 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
23:49:17 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:b151:c200:4f65:e713) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:51:32 × CMCDragonkai1 quits (~Thunderbi@120.17.149.179) (Read error: Connection reset by peer)
23:55:06 × usr25 quits (~usr25@unaffiliated/usr25) (Quit: Leaving)
23:55:12 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
23:55:28 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
23:55:44 mpereira joins (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837)
23:58:02 tessier joins (~treed@mail.copilotco.com)
23:58:02 × tessier quits (~treed@mail.copilotco.com) (Changing host)
23:58:02 tessier joins (~treed@kernel-panic/copilotco)

All times are in UTC on 2021-01-04.