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.