Home freenode/#haskell: Logs Calendar

Logs on 2020-09-17 (freenode/#haskell)

00:00:02 × Suntop1 quits (~Suntop@217.146.82.202) ()
00:00:11 ryansmccoy joins (~ryansmcco@193.37.254.27)
00:00:13 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 264 seconds)
00:01:45 × Qez quits (52249602@cpc142018-dudl15-2-0-cust513.16-1.cable.virginm.net) (Ping timeout: 245 seconds)
00:02:42 × jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Quit: WeeChat 2.9)
00:07:40 × twopoint718 quits (~cjw@fsf/member/twopoint718) (Quit: Textual IRC Client: www.textualapp.com)
00:11:51 wroathe_ joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:13:17 × wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
00:13:34 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:15:51 mariatsji joins (~mariatsji@155.84-234-177.customer.lyse.net)
00:16:04 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
00:16:20 josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net)
00:16:23 × wroathe_ quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
00:16:30 × ryansmccoy quits (~ryansmcco@193.37.254.27) (Ping timeout: 260 seconds)
00:16:38 <glguy> Hi, josh. Glad you could make it.
00:18:06 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:20:22 × mariatsji quits (~mariatsji@155.84-234-177.customer.lyse.net) (Ping timeout: 272 seconds)
00:20:42 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
00:21:06 mdunnio joins (~mdunnio@208.59.170.5)
00:23:32 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
00:24:47 nan` joins (~nan`@unaffiliated/nan/x-5405850)
00:26:04 × mdunnio quits (~mdunnio@208.59.170.5) (Ping timeout: 272 seconds)
00:27:33 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
00:29:52 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds)
00:32:14 <lc_> what's up justanotheruser. How ya been?
00:32:50 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
00:34:55 frdg joins (~user@pool-71-184-143-249.bstnma.fios.verizon.net)
00:35:01 × spew quits (uid195861@gateway/web/irccloud.com/x-hbqiwomwemzgybnr) (Quit: Connection closed for inactivity)
00:36:56 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
00:38:54 gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
00:40:31 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 272 seconds)
00:41:22 eric_ joins (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e)
00:41:47 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
00:42:59 × HarveyPwca quits (~HarveyPwc@c-98-220-98-201.hsd1.il.comcast.net) (Quit: Leaving)
00:43:36 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
00:43:37 <sshine> monochrom, is there a good reason to use forM_ instead of for_?
00:43:50 <monochrom> No.
00:44:05 <sshine> ok, so it was just for the mapM_ <-> forM_ correspondence.
00:44:25 <sshine> :t for_
00:44:27 <lambdabot> (Foldable t, Applicative f) => t a -> (a -> f b) -> f ()
00:44:50 × eric quits (~eric@2804:431:c7d4:b75:f492:17b0:3087:5bcd) (Ping timeout: 244 seconds)
00:45:03 <monochrom> It's simpler than that. Different people learned different names, and first impressions are always the strongest.
00:45:37 <dolio> I learned all the names before Applicative even existed, but I like the Applicative names better. :þ
00:45:38 <ski> `Applicative' wasn't superclass of `Monad', back then
00:46:30 <monochrom> Always look for human factors and social reasons before looking for technical reasons.
00:46:45 <monochrom> Programmers are artisan humans not scientific robots.
00:47:00 <monochrom> Oh I do wish programmers were scientific robots.
00:47:36 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
00:47:38 <justanotheruser> lc_: hi whos this
00:48:10 <lc_> just a friendly guy
00:48:20 <justanotheruser> ok
00:48:22 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds)
00:50:40 <sshine> I consider myself better of being a bayesian inference machine.
00:50:50 <monochrom> Another good example is why Prelude has the head-tail couple, and why tail [] = undefined, and why they are neither a safeHead-safeTail couple nor a "listAnalysis z _ [] = z; listAnalysis _ f (x:xs) = f x xs" function like maybe and either.
00:50:52 <sshine> I get to defy logic in completely subjective corner cases.
00:51:01 <sshine> robots are doomed to repeat their program.
00:52:15 <monochrom> It is because when the committee formed and sat down to write Prelude, the lot of them was from Lisp backgrounds and their first instinct was to replicate Lisp's car and cdr.
00:53:01 <monochrom> And because of that background, they totally expected the head-tail couple would be very popular among users.
00:53:04 <sshine> I thought the Lisp guys branched off to form the ML cult of which Haskell is more closely related?
00:53:22 <monochrom> It is clearly technically inferior, and equally clearly socially popular.
00:53:27 <sshine> SML has hd/tl, too.
00:54:19 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:55:55 <monochrom> And I guess s/scientific robots/utilitarian robots/
00:56:11 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
00:58:36 Plazma joins (~Plazma@freenode/staff-emeritus/plazma)
00:59:33 <monochrom> ML taught us the valuable lesson that pattern matching trumps head-tail, and after you have pattern matching you can pretty much throw away head-tail. A committee for a new language and its new library, having their chance to start from a clean slate, if they had really learned that lesson, you would think they would reflect this new value by omitting head-tail in their clean slate new library no?
00:59:42 falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
00:59:44 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 244 seconds)
01:00:18 banner joins (~banner@116-255-17-98.ip4.superloop.com)
01:00:30 <monochrom> That they totally (anti-pun!) didn't do it shows that the influence of social inertia trumps the influence of technical superiority.
01:00:54 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
01:03:00 <josh> thanks, glguy. Glad to be here
01:03:51 <Plazma> apologies if this has been brought up before or beaten to death but i came across this - https://www.stephendiehl.com/posts/crypto.html and it seems to be more of a negative against the community vs the language itself.. or did i read it incorrectly
01:05:24 <sm[m]> Plazma: there's some discussion of it on /r/haskell and hacker news
01:05:41 <josh> "the influence of social inertia trumps the influence of technical superiority" is the story of my Haskell life
01:06:05 × banner quits (~banner@116-255-17-98.ip4.superloop.com) (Remote host closed the connection)
01:06:31 <Plazma> i didn't realize social stuff was such a key part of using/loving a language
01:06:36 <Axman6> it's negative about a view of some of the industrial uses of Haskell. I happen to work for a company which is using blockchain/DLT to build non-cryptocurrency stuff so I found the lumping of everyone with anyone who had anything to do with blockchain pretty disappointing and somewhat uninformed (though that's the same of most discussions of blockchain, everyone thinks it means cryptocurrency and boiling the oceans)
01:07:33 <Plazma> Axman6: i've not worked with blockchain but i collaborate with some blockchain folks also (i'm a quantum guy) , and it's a similar story,, they aren't all trying to necessarily start their own cryptocurrency
01:07:38 × elliott_ quits (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) (Read error: Connection reset by peer)
01:07:40 <Plazma> many are just exploring the waters
01:07:52 <MarcelineVQ> It barely mentions haskell and baffles me why it's called a haskell elephant
01:07:59 elliott_ joins (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net)
01:08:11 <monochrom> Hey I heard lately that Microsoft is going to be literally boiling the ocean, or at least seas, by putting data centres undersea.
01:08:13 <Axman6> Plazma: it's not, I think a lot of the community found the article pretty extreme, particularly when the targer was IOHK, possibly (IMO) one of the least bad players in the cryptocurrency market. (I don't work for IOHK, but do know several people who do)
01:08:33 <Plazma> MarcelineVQ: see that'w hat i noticed too.. like what the actual hell is he going on about haskell ? he's not..
01:08:46 <Axman6> monochrom: heating the oceans is much more efficient if we avoid the wasteful atmospheric warming step :P
01:09:12 <monochrom> The benefit is 90% reduction in failure rate.
01:09:23 <Plazma> thermal physics is a signed integer, so we just need to heat it so much it rolls over to cooling through natural means
01:09:54 systemhalted joins (~aqualogic@71-129-231-253.lightspeed.rcsntx.sbcglobal.net)
01:09:56 <monochrom> It looks like the new failure rate is so slow, they won't bother to repair a failed unit, just submerge a new one.
01:10:08 <monochrom> s/slow/low/
01:10:15 jedws joins (~jedws@101.184.189.58)
01:10:53 × systemhalted quits (~aqualogic@71-129-231-253.lightspeed.rcsntx.sbcglobal.net) (Remote host closed the connection)
01:11:13 <MarcelineVQ> "why crypto is badong" would have been a better, though less publicly shared, title
01:11:33 × xff0x_ quits (~fox@2001:1a81:52d0:6b00:7599:d48:f5dc:5fef) (Ping timeout: 272 seconds)
01:11:34 <Plazma> Axman6: yea i mean a source i trust sent me that basically telling me to stay away from haskell or learning it, but it makes no mention of haskell really , at all as a language .. just that some guy may have used some shit for it to do shady things
01:11:40 <MarcelineVQ> "I don't like that some effort in haskell goes towards crypto currencies" ok. "haskell as an ecosystem and community has sold its soul to the devil" umm...
01:12:12 <Axman6> Plazma: your friend seems equally uninformed then :P
01:12:26 <Plazma> i mean malware is often written in C/win32 api stuff, someitmes C++ for ransomware, but we don't chastise C++ for that, we chastise it for every other reason
01:12:41 <Plazma> i mostly just wanted to make sure i didn't misinterpret it
01:12:51 <Plazma> Axman6: he didn't convince me at all with that article
01:12:57 xff0x_ joins (~fox@2001:1a81:5306:e200:7599:d48:f5dc:5fef)
01:13:05 <Axman6> there are definitely better technological and community reasons to avoid Haskell than some companies are using it for cryptocurrency development
01:13:44 <monochrom> We chastise C for the equal and opposite reason. That C makes it easy to write programs that are vulnerable.
01:14:24 <Plazma> monochrom: exactly.. scanf() just to name a simple/easy one
01:14:35 <monochrom> I.e., while we don't chastise C for aggressors being written in C, we do chastise C for victims being written in C.
01:14:47 <monochrom> Hey wait a second, does that count as blaming the victim? >:)
01:14:52 <Axman6> for me, a big one is we seem to really struggle to develop projects as a community, we rely on a lot of single person efforts (edwardk's bus factor is astronomical). One of the few prohjects I've seen do a decent job in Haskell as building some sort of community is Servant
01:15:16 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
01:15:19 <Plazma> monochrom: you're not on trial here :)
01:15:30 da39a3ee5e6b4b0d joins (~textual@2403:6200:8876:37d7:7100:a9d6:e349:d9ad)
01:15:38 <Axman6> like I look at Rust and they seem be quite good at having projects which the community contributes to and progress is made quite quickly
01:15:46 <Plazma> ahh i see
01:16:04 <Plazma> i guess that's whewre community is kind of important..
01:16:51 <Axman6> we do have an incredibly supportive community though, people will fall over themselves to help you learn something
01:17:48 <MarcelineVQ> Even into a pit of spikes
01:18:04 <Axman6> We're also starting to see some decent commercial use and support
01:19:59 bitmagie joins (~Thunderbi@200116b8063aa600b5d933e791b8d0ae.dip.versatel-1u1.de)
01:20:52 <Plazma> so i guess in short that article is an opinion piece and worthless for most things
01:20:56 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:21:27 <Axman6> that depends on your opinion I think :)
01:21:52 <Plazma> i'm new so i don't have any , but the fact they don't mention anything remotely technical it's just some dribble to me
01:22:03 × bitmagie quits (~Thunderbi@200116b8063aa600b5d933e791b8d0ae.dip.versatel-1u1.de) (Client Quit)
01:22:09 <MarcelineVQ> For me there's nothing specific enough to be useful _about haskell_ in that article
01:22:09 <Plazma> no offense to the guy personaly, i'm sure he's great and accomplished
01:22:15 __Joker joins (~Joker@180.151.106.108)
01:23:51 <Axman6> it's not like all of the sommercial use of Haskell is in cryptocurrencies either, by a long shot. there's quite a lot of use in finance., Facebook has their spam detection system written in it, GitHub are using it for their new Semantic (IIRC) project, and several sproduct and contract companies
01:24:31 <Axman6> Plazma: Don't write off everything he's written because of that article though, his What I Wish I Knew When Learning Haskell is incredibly valuable
01:24:48 <Plazma> Axman6: yea actually i just discovered that too and was probably going to learn haskell better from it
01:24:48 × elliott_ quits (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) (Read error: Connection reset by peer)
01:24:57 <Plazma> and some of his stuff and his company seem pretty legit
01:25:07 <Plazma> he probably was just upset about that and wrote it
01:25:24 <Plazma> he's not at all saying "don't learn haskell because of this" either, so
01:25:31 elliott_ joins (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net)
01:25:31 <Plazma> my friend was probably just being overly opininoated
01:25:37 <Plazma> (he told me to learn nim instead)
01:26:41 × RusAlex quits (~Chel@unaffiliated/rusalex) (Ping timeout: 244 seconds)
01:26:45 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
01:26:58 × __Joker quits (~Joker@180.151.106.108) (Ping timeout: 260 seconds)
01:27:44 RusAlex joins (~Chel@unaffiliated/rusalex)
01:28:45 × aenesidemus quits (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) (Read error: Connection reset by peer)
01:29:15 bakabiel joins (~bakabiel@79.104.200.71)
01:29:29 <jchia> That article overgeneralizes things. Just because some 'crypto' stuff is bad doesn't mean all crypto stuff is bad. Just because some Haskell users do bad things doesn't mean the Haskell 'community' is bad. We don't do that kind of generalization for other languages. I don't understand how smart people can make this kind of overgeneralization mistakes.
01:29:53 banner joins (~banner@116-255-17-98.ip4.superloop.com)
01:30:22 × urodna quits (~urodna@unaffiliated/urodna) (Quit: urodna)
01:30:26 <Plazma> jchia: yea that's my conclusion too.. doesn't really make a lot of sense to me either
01:30:42 × darjeeling_ quits (~darjeelin@115.215.41.222) (Ping timeout: 260 seconds)
01:30:53 jbarnette joins (~jbarnette@185.204.1.185)
01:31:40 <monochrom> Programmers seem to be more overgeneralizing than other people.
01:32:09 <Plazma> i'm going to assume he was just emotional and upset and wrote it
01:32:10 <monochrom> For example consider the "software engineer makes toaster" joke.
01:32:11 <Plazma> and it got traction
01:32:27 <Plazma> all i know is bread goes in, toast comes out... you can't explain that , man
01:32:34 × elliott_ quits (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
01:32:58 × bakabiel quits (~bakabiel@79.104.200.71) (Client Quit)
01:33:16 wei2912 joins (~wei2912@unaffiliated/wei2912)
01:33:24 <monochrom> No no, it's a joke along the line of "a physicist, an engineer, and a programmer are each asked to make a toaster".
01:33:26 elliott_ joins (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net)
01:33:26 × banner quits (~banner@116-255-17-98.ip4.superloop.com) (Remote host closed the connection)
01:33:47 <Axman6> "Programmers seem to be more overgeneralizing than other people." so meta
01:33:55 <monochrom> hahaha busted
01:34:08 <jchia> he did say 'seems'
01:34:26 <sm[m]> Axman6: there's good team work going on with ide tools lately
01:34:36 <monochrom> So the joke goes on to say something funny but pretty OK on how a physicist would make a toaster, and how an engineer would make a toaster.
01:34:57 <sm[m]> volunteer, gsoc, and company driven
01:35:02 <MarcelineVQ> I just go down to the local library and use their toaster.
01:36:02 <monochrom> The punchline is a very long sentence about how a programmer does it by going way overboard with the OOP kind of overgeneralization, plus a prophetic addition that the toast also connects to the Internet. (This joke was decades before the IoT movement.)
01:36:41 <monochrom> a long sentence basically enumerating everything one does in OOP
01:36:44 <Axman6> sm[m]: yeah that's true
01:37:02 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
01:37:06 <sm[m]> also haven't ghc, cabal, stack, hackage all involved quite a lot of cooperation
01:37:38 <Plazma> monochrom: yo dawg i heard you like OOP and python so we put abstract classes in your classes , but they're not interfaces, but they are..
01:37:47 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
01:38:11 __Joker joins (~Joker@180.151.106.108)
01:40:12 <monochrom> Also consider that programmers have this saying "YAGNI" and other professions don't.
01:40:41 <monochrom> We have it because we're doing poorly so we need this saying to warn ourselves.
01:41:03 <monochrom> Other professions don't have it because they're already doing it right and don't need a warning.
01:41:11 <sm[m]> KISS is a common saying
01:41:35 × acidjnk_new3 quits (~acidjnk@p200300d0c736587164f46f145ae9b6a7.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
01:41:52 <monochrom> Well yeah OK so everyone else has one saying, we have two, we are still worse.
01:42:16 <monochrom> Consider the possibility that KISS is not strong enough for us.
01:42:31 × kleisli_ quits (~kleisli@172-8-147-49.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 265 seconds)
01:42:42 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds)
01:43:13 × __Joker quits (~Joker@180.151.106.108) (Ping timeout: 272 seconds)
01:45:15 MarcelineVQ learns the term yagni
01:45:50 <sm[m]> Axman6: but I would agree that things usually don't seem to evolve very fast
01:47:16 <sm[m]> that seems to be the Haskell way, often - it takes longer to build, but also lasts longer with less rework & maintenance ?
01:47:51 <sm[m]> When tooling finally matures, perhaps that will change ?
01:49:07 <monochrom> From what I saw, it doesn't take longer to build. Look at tomsmeding's paste site.
01:49:10 <sm[m]> or.. the rust army is just much much bigger ? or.. they have more of an engineering and shipping focus ?
01:49:47 <monochrom> But whenever more than one author is involved, it takes longer to reach consensus, because there are always more than one elegant way to do it, and they aren't compatible.
01:50:30 <sm[m]> So we're like Lisp ? :-/
01:51:12 <monochrom> Yes in this aspect.
01:51:22 <monochrom> No in how many compilers to choose from.
01:52:32 <sm[m]> monochrom: maybe as our libs, architectures, patterns mature, this will improve ?
01:54:03 <monochrom> I wouldn't hold my breath.
01:54:37 × Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds)
01:55:32 <monochrom> Some convergence did happen in the past. transformers and mtl were in competition a long time ago, but one day they agreed to a partition of roles and worked together.
01:56:03 <monochrom> pipes and conduit, I predict them to stay that way forever.
01:56:12 <monochrom> cabal and stack, I predict them to stay that way forever.
01:57:55 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:58:07 × falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 244 seconds)
01:58:13 <monochrom> Although, the pipes-conduit dichotomy is already a vast improvement compared to the long gone days of 3 choices of iteratees, 2 choices of enumeratees, and 5 choices of something in between.
01:59:10 × lembot quits (~lembot@179.8.176.163) (Ping timeout: 272 seconds)
02:00:20 <sm[m]> Yup
02:00:43 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
02:00:51 <sm[m]> also, higher level frameworks will continue to improve
02:02:20 <sm[m]> I think the ide tools are going to be impactful, they will attract more devs
02:04:03 <sm[m]> vs code with hls 0.4 really works and is a real step up IME
02:06:04 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 260 seconds)
02:07:55 × theDon quits (~td@94.134.91.86) (Ping timeout: 272 seconds)
02:08:20 kleisli_ joins (~kleisli@2605:e000:1804:94c6:68bd:9d76:dbd8:24e7)
02:09:38 theDon joins (~td@94.134.91.55)
02:09:44 × shadowdaemon quits (~user@unaffiliated/shadowdaemon) (Remote host closed the connection)
02:15:00 × lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (tolkien.freenode.net (Nickname regained by services)))
02:15:08 lagothrix joins (~lagothrix@unaffiliated/lagothrix)
02:15:46 <sshine> yes
02:16:00 <sshine> I didn't have to manually compile a file and copy it into VSCode's directory!
02:17:55 × howdoi quits (uid224@gateway/web/irccloud.com/x-udrxcrwykbilfjcr) (Quit: Connection closed for inactivity)
02:20:35 drbean joins (~drbean@TC210-63-209-98.static.apol.com.tw)
02:21:56 mdunnio joins (~mdunnio@208.59.170.5)
02:22:55 shafox joins (~shafox@106.51.234.111)
02:27:02 × mdunnio quits (~mdunnio@208.59.170.5) (Ping timeout: 272 seconds)
02:27:07 × heatsink quits (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) (Remote host closed the connection)
02:27:42 × nineonine quits (~nineonine@216.81.48.202) (Remote host closed the connection)
02:31:55 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
02:32:51 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
02:35:26 tylerjl joins (~leothrix@elastic/staff/leothrix)
02:36:55 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 240 seconds)
02:38:07 × leothrix quits (~leothrix@elastic/staff/leothrix) (Ping timeout: 240 seconds)
02:39:32 asan parts (~yan4138@114.84.148.87) ()
02:39:56 asan joins (~yan4138@114.84.148.87)
02:40:01 <frdg> how can I go from `Functor f => f (g (a)) -> g a` without pattern matching ?
02:40:17 <frdg> err and `Functor g`
02:40:36 <c_wraith> You can't just collapse them for any old pair of functors
02:40:57 <frdg> oh
02:41:55 <frdg> what about Traversables?
02:42:25 <c_wraith> :t sequenceA
02:42:27 <lambdabot> (Traversable t, Applicative f) => t (f a) -> f (t a)
02:42:35 <c_wraith> that's as close as they'll get you
02:42:51 <frdg> hmm
02:43:16 <ski> @type asum
02:43:18 <lambdabot> (Foldable t, Alternative f) => t (f a) -> f a
02:44:11 <frdg> this should work.
02:44:14 <c_wraith> Oh, yeah. If Alternative is good enough, that works
02:45:31 exodrifter joins (adacad5d@cpe-173-172-173-93.tx.res.rr.com)
02:46:25 × robotmay quits (~beepboop@80.172.187.81.in-addr.arpa) (Quit: No Ping reply in 180 seconds.)
02:47:08 <exodrifter> Does anyone happen to know if there's a Storable instance of Text floating around out there or how you'd generally represent UTF-8 in an FFI interface?
02:47:58 robotmay joins (~beepboop@80.172.187.81.in-addr.arpa)
02:48:37 <c_wraith> text isn't even UTF-8
02:49:24 <exodrifter> oh, unicode and utf-8 are not the same thing?
02:49:30 <c_wraith> nope
02:49:36 <c_wraith> unicode is a character set
02:49:44 <c_wraith> utf8 is one way of encoding that character set in bytes
02:50:43 <exodrifter> ah, I see. I assumed Text was UTF8 because of decodeUtf8, but that's just what character set to use for the bytestring
02:50:55 <c_wraith> exactly
02:51:15 <c_wraith> well. just what encoding to use for the bytestring.
02:51:35 <exodrifter> yeah. what does it mean for Text to be unicode then? is it not any particular character set until you decide to encode it?
02:52:04 <c_wraith> unicode is a character set. How the characters are represented inside a computer is an implementation detail
02:52:58 <c_wraith> There are a bunch of ways to serialize it that are standardizes, though. UTF-8, UTF-16, and UCS4 are the options that give you the full unicode character set.
02:53:03 <c_wraith> *standardized
02:53:17 <exodrifter> so if i wanted to, say, encode a text into a utf-8 bytestring then marshall that representation out using FFI -- that wouldn't necessarily work because the memory representation might be different?
02:53:23 <dolio> You could represent it other ways in a bytestring, too.
02:53:47 <dolio> But you'd need to be careful.
02:53:50 <c_wraith> Right. You should go through an explicit conversion to the correct encoding you want in a ByteString, then use useAsCString for the bytestring
02:54:42 × machinedgod quits (~machinedg@d67-193-126-196.home3.cgocable.net) (Ping timeout: 260 seconds)
02:54:57 <exodrifter> well, i want to have a foreign function call the haskell code, not the other way around, so useAsCString wouldn't work for what i'm trying to do.
02:55:04 <c_wraith> Ah, ok.
02:55:29 Stanley00 joins (~stanley00@unaffiliated/stanley00)
02:55:45 <exodrifter> dolio: what do you mean exactly? represent it in what other ways?
02:56:21 <dolio> You could have UTF-16 in a byte string, but each byte would be half of one of the basic units of the encoding.
02:56:51 <dolio> Also it probably gives you more ways to mess up the endianness.
02:56:59 <exodrifter> Ah, okay, yeah that makes sense
02:57:25 nineonine joins (~nineonine@216-19-190-182.dyn.novuscom.net)
02:58:22 <exodrifter> so if the way the UTF-8 is represented is an implementation detail, is there then no way to marshall a UTF-8 string without implementing a decoder in the foreign code that knows how it's represented in haskell?
02:59:32 <dolio> The foreign function is going to need to know the encoding used.
02:59:44 × exodrifter quits (adacad5d@cpe-173-172-173-93.tx.res.rr.com) (Remote host closed the connection)
02:59:48 <dolio> If it's UTF-8, it'll need to know that.
03:00:01 × jbarnette quits (~jbarnette@185.204.1.185) ()
03:00:51 exodrifter joins (adacad5d@cpe-173-172-173-93.tx.res.rr.com)
03:00:55 alp_ joins (~alp@2a01:e0a:58b:4920:557f:9e9f:2eef:4c23)
03:01:38 × nineonine quits (~nineonine@216-19-190-182.dyn.novuscom.net) (Ping timeout: 246 seconds)
03:01:58 <exodrifter> Hmm, okay. So if it knew the bytes were UTF-8, then it should be fine? I'm not sure if the UTF-8 standard defines how it would be represented in memory...
03:02:18 <dolio> UTF-8 is a particular way of storing unicode.
03:03:27 <exodrifter> Yes, so does that apply to in-memory? I'm aware that it would work for files, since i can usually open UTF-8 documents regardless of what computer i'm on.
03:03:37 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:03:57 <dolio> It can be stored that way in memory, too. But Text doesn't.
03:04:53 <exodrifter> sure. So I just need to encode the text into a UTF-8 bytestring, then figure out how to convert the bytestring into a CString, and that should work it sounds like
03:04:55 <dolio> That's one of the resons there's `decodeUtf8`
03:05:10 <dolio> Yeah, probably.
03:05:39 <dolio> Although C doesn't necessarily know anything about UTF-8. That'd be up to libraries.
03:06:20 <exodrifter> yeah, that makes sense. But, I'm assuming that if the user was using a library that had the equivalent of decodeUtf8 it should work
03:06:55 <exodrifter> It's too bad ByteString doesn't expose a function that lets you return the CString... I'm looking at the implementation of it and i suuuuure don't understand it yet
03:06:57 <dolio> And e.g. all sorts of Microsoft stuff uses UTF-16, I think.
03:07:29 <exodrifter> I think i am satisfied limiting my use case to UTF-8.
03:08:09 heatsink joins (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf)
03:08:19 <dolio> Yeah, that's pretty safe.
03:09:21 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
03:09:48 <exodrifter> oh -- i guess i don't really want a CString since I don't want to be limited by ascii. I want to return something more like an array of bytes or something.
03:10:45 <exodrifter> ...wait, that is what byte is in c isn't it.
03:10:47 <dolio> I think CString is a char pointer.
03:10:58 <exodrifter> yeah, it's a char*
03:14:19 <exodrifter> okay i think I know what i need to do. Thanks dolio & c_wraith <3
03:19:58 hackage smash-lens 0.1.0.1 - Optics for the `smash` library https://hackage.haskell.org/package/smash-lens-0.1.0.1 (topos)
03:20:58 hackage smash-optics 0.1.0.1 - Optics for the `smash` library using `optics-core` https://hackage.haskell.org/package/smash-optics-0.1.0.1 (topos)
03:22:04 finkata- joins (~dpetrov@83.222.188.39)
03:26:06 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
03:26:18 × eric_ quits (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) (Remote host closed the connection)
03:29:23 mdunnio joins (~mdunnio@208.59.170.5)
03:30:04 × sagax quits (~sagax_nb@213.138.71.146) (Ping timeout: 260 seconds)
03:31:07 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds)
03:35:18 toorevitimirp joins (~tooreviti@117.182.182.33)
03:37:48 × elliott_ quits (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) (Quit: Quit)
03:37:51 × worc3131 quits (~quassel@2a02:c7f:c026:9500:7d0b:65d0:38a4:4786) (Ping timeout: 272 seconds)
03:38:12 × heatsink quits (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) (Remote host closed the connection)
03:38:34 × gmt quits (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
03:39:04 __Joker joins (~Joker@180.151.106.108)
03:39:10 × mdunnio quits (~mdunnio@208.59.170.5) (Ping timeout: 256 seconds)
03:39:58 hackage base16-bytestring 1.0.0.0 - RFC 4648-compliant Base16 encodings for ByteStrings https://hackage.haskell.org/package/base16-bytestring-1.0.0.0 (topos)
03:40:32 × board_control quits (~board_con@50-46-195-209.evrt.wa.frontiernet.net) (Quit: Leaving)
03:40:49 × finkata- quits (~dpetrov@83.222.188.39) (Remote host closed the connection)
03:42:33 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:43:32 × __Joker quits (~Joker@180.151.106.108) (Ping timeout: 256 seconds)
03:44:50 <lemmih> topos: Woo, version 1.
03:45:37 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
03:45:38 <MarcelineVQ> the madlad
03:46:24 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
03:46:55 <topos> lemmih completely cleared out the backlog, basically rewrote the library and achieved some multipliers on performance
03:46:58 <topos> so i'm happy
03:48:00 <exodrifter> that sounds great!
03:48:37 × alp_ quits (~alp@2a01:e0a:58b:4920:557f:9e9f:2eef:4c23) (Ping timeout: 272 seconds)
03:53:50 <lateef> hi does anyone know how to use tasty-discover with the rerun ingredient. can't find any examples
03:54:17 finkata- joins (~dpetrov@83.222.188.39)
03:54:52 finkata- is now known as finkata
03:54:56 __Joker joins (~Joker@180.151.106.108)
03:55:24 × da39a3ee5e6b4b0d quits (~textual@2403:6200:8876:37d7:7100:a9d6:e349:d9ad) (Ping timeout: 244 seconds)
03:55:28 × finkata quits (~dpetrov@83.222.188.39) (Remote host closed the connection)
03:55:38 × wei2912 quits (~wei2912@unaffiliated/wei2912) (Quit: Lost terminal)
03:56:54 finkata joins (~dpetrov@83.222.188.39)
04:00:01 × __Joker quits (~Joker@180.151.106.108) (Ping timeout: 272 seconds)
04:00:15 banner joins (~banner@116-255-17-98.ip4.superloop.com)
04:00:24 × banner quits (~banner@116-255-17-98.ip4.superloop.com) (Client Quit)
04:00:48 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
04:01:24 × jneira quits (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206) (Ping timeout: 258 seconds)
04:02:11 Jeanne-Kamikaze joins (~Jeanne-Ka@107.152.99.41)
04:02:28 <Axman6> topos: how many GB/s? :)
04:02:33 × polyphem quits (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Ping timeout: 272 seconds)
04:02:48 <koz_> Axman6: The only measure that counts. :P
04:02:50 <topos> ugh. i had that number at one point. hang on
04:02:57 × finkata quits (~dpetrov@83.222.188.39) (Remote host closed the connection)
04:02:57 <Axman6> koz_: of course
04:03:10 <koz_> topos: Over 9000. :P
04:03:13 <Axman6> though, speed for small strings is probably more important
04:03:45 × unlink__ quits (~unlink2@p200300ebcf25bd0068eb9d9c94da2a17.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
04:06:39 andreas303 joins (~andreas@gateway/tor-sasl/andreas303)
04:07:55 falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
04:08:47 × irc_user quits (uid423822@gateway/web/irccloud.com/x-cbxmaikgpxapbiip) (Quit: Connection closed for inactivity)
04:10:09 × mirrorbird quits (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Ping timeout: 272 seconds)
04:10:34 da39a3ee5e6b4b0d joins (~textual@2403:6200:8876:37d7:55fb:4d37:ffc2:715b)
04:10:52 mirrorbird joins (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71)
04:11:57 jneira joins (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206)
04:12:25 testing_kirc joins (~testing_k@047-024-136-070.res.spectrum.com)
04:13:23 × testing_kirc quits (~testing_k@047-024-136-070.res.spectrum.com) (Remote host closed the connection)
04:15:16 __Joker joins (~Joker@180.151.106.108)
04:15:34 × sdx23 quits (~sdx23@unaffiliated/sdx23) (Ping timeout: 260 seconds)
04:15:38 × kleisli_ quits (~kleisli@2605:e000:1804:94c6:68bd:9d76:dbd8:24e7) (Ping timeout: 244 seconds)
04:16:18 mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848)
04:17:01 day_ joins (~Unknown@unaffiliated/day)
04:17:05 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
04:19:57 dbmikus joins (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
04:20:19 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
04:20:37 × day quits (~Unknown@unaffiliated/day) (Ping timeout: 264 seconds)
04:20:38 day_ is now known as day
04:20:55 × mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Ping timeout: 272 seconds)
04:21:37 <topos> Axman6 https://pastebin.com/LEs9sBTx
04:21:55 <topos> here's a bench of the old algo vs. the new algo for 1gb
04:22:00 nineonine joins (~nineonine@216-19-190-182.dyn.novuscom.net)
04:22:54 <topos> encode is ~1GB/s, decode ~0.5GB/s compared to ~350MB/s (old encode) and ~120MB/s (old decode)
04:23:31 <koz_> topos: So roughly threefold?
04:23:34 <koz_> That's pretty damn good.
04:23:38 <topos> yeah
04:23:48 <topos> between 3-5 depending on the length of the bytestring
04:23:50 × ddellacosta quits (~dd@86.106.121.168) (Ping timeout: 260 seconds)
04:24:01 <topos> the old algo would degrade for larger bytestrings
04:24:29 <topos> the new one is a steady ratio of encode ~ 2xdecode
04:24:56 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds)
04:25:26 <topos> which makes sense because all you're doing in the encode step is reading a byte, munging it into two and writing it, where the decode case requires reading two, munging it, and then writing one
04:25:34 <topos> oo. sorry for pinging whoever that was
04:27:36 banner joins (~banner@116-255-17-98.ip4.superloop.com)
04:27:42 <Axman6> that's their problem :)
04:28:22 heatsink joins (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf)
04:28:29 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
04:29:20 × banner quits (~banner@116-255-17-98.ip4.superloop.com) (Client Quit)
04:29:23 <Axman6> I really want to make this code work a word at a time...
04:29:25 × falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 240 seconds)
04:29:42 jjj joins (~jjj@195.206.169.184)
04:29:52 GuerrillaMonkey joins (~Jeanne-Ka@107.152.99.41)
04:31:04 <topos> Axman6 i'd like to as well. The best I can think of is to make use of SIMD instructions, because at this point we can't do any better without the benefit of being able to multiple words into a single instruction
04:31:35 <topos> but also, this code is dead. I'm not working on it anymore. It was strictly fanservice, and I'm encouraging everyone to move to https://hackage.haskell.org/package/base16
04:31:56 × jedws quits (~jedws@101.184.189.58) (Quit: My MacBook has gone to sleep. ZZZzzz…)
04:32:00 <topos> if you want to contribute a SIMD version or AVX2 support, be my guest
04:32:06 <topos> it won't happen on base16-bytestring tho
04:32:21 <Axman6> you should have a ook at the PR I had on the text-utf8 repo for faster take/drop/indexing, it was roughly 100x faster than the streaming implementation and pretty much branchless
04:32:28 <topos> ooo
04:32:28 × Jeanne-Kamikaze quits (~Jeanne-Ka@107.152.99.41) (Ping timeout: 260 seconds)
04:32:39 Jeanne-Kamikaze joins (~Jeanne-Ka@static-198-54-131-92.cust.tzulo.com)
04:32:47 <Axman6> but I never finished it off and it was probably too unclear to be maintainable
04:32:54 <topos> https://github.com/text-utf8/text-utf8/pull/11 this guy?
04:33:05 <koz_> topos: What're the numbers on that one?
04:33:28 <topos> koz_ which one?
04:33:33 <koz_> base16
04:33:43 <koz_> For the same bench as you did for base16-bytestring.
04:33:54 <Axman6> topos: https://github.com/text-utf8/text-utf8/pull/1
04:33:54 <topos> ah i implemented the same algorithm
04:33:58 <topos> so roughly the same
04:34:09 <topos> ooo
04:34:15 sumo_r joins (0ec9fb69@14-201-251-105.tpgi.com.au)
04:35:29 × GuerrillaMonkey quits (~Jeanne-Ka@107.152.99.41) (Ping timeout: 272 seconds)
04:35:31 <koz_> Axman6: Is text-utf8 still a live project?
04:35:41 <Axman6> I believe so...
04:36:00 <topos> koz_ the only difference is that I provide a nicer general interface and more support for different types like Text, ShortText, and SHortByteString
04:36:07 × mrte quits (~mrt@p4fcabee7.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
04:36:21 <siraben> Does MTL use strict or lazy state monad by default?
04:36:33 <siraben> Is strict just better space usage wise than lazy?
04:36:56 <topos> Axman6 this is cool stuff :)
04:37:03 <Axman6> hasn't been touched in a while though, hvr would be the best one to answer whether it's live though
04:37:31 <topos> siraben lazy state - https://github.com/haskell/mtl/blob/master/Control/Monad/State.hs
04:37:33 <Axman6> siraben: I believe lazy is the default, but that should be easy to check in the source
04:37:54 <siraben> Ah I see. When should I use strict/lazy state? I've been using lazy all along then.
04:37:56 <koz_> I always specify Control.Monad.State.Strict just to be safe when I import.
04:38:09 <Axman6> the differences between lazy and strict is... one is lazy and one is strict, they have different semantics and there are things you can do in the lazy one which you can't do in the strict one
04:38:11 <koz_> (better be explicit, even if it's just for other folks reading)
04:38:28 <topos> but remember, Strict is better in some ways, but remember that strict state is (confusingly) not strict in its setting, so you still need to `put $! <thing>` if you need it evaluated
04:38:48 <topos> i munged sentences sorry
04:39:56 × heatsink quits (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) (Remote host closed the connection)
04:40:25 <siraben> I see.
04:40:35 <siraben> And what's the difference between Control.Monad.Error and Control.Monad.Except?
04:40:52 <sumo_r> Hi all, does anyone know what the ghcxxxx.exe file created in AppData\Local\Temp on windows by cabal repl are? M365 just flagged one of those (ghcbdbc.exe) as Wacatac malware and our admin pinged me for more details
04:40:59 <topos> siraben error is deprecated, use except
04:41:12 <topos> https://hackage.haskell.org/package/mtl-2.2.2/docs/Control-Monad-Error.html
04:41:16 <topos> top of the haddocks
04:42:05 <siraben> Right
04:42:18 <siraben> I was surprised to see Error so high up: https://www.sciencedirect.com/science/article/pii/S0167642320301313
04:42:21 <siraben> Must be legacy
04:42:25 Sunblaze21 joins (~sanjay@116.72.71.64)
04:43:05 <siraben> Most commonly used monads are (most to least order) State, Trans, Reader, Error, Writer, RWS, Identity, Cont, List, Except
04:43:24 <topos> very interesting study thanks. I could actually use this info
04:44:15 <siraben> Turns out not many people use alternative monad transformer libraries
04:44:43 sumo_r9 joins (0ec9fb69@14-201-251-105.tpgi.com.au)
04:45:25 <dolio> All the stuff that used Error before it was deprecated didn't just disappear from hackage.
04:45:55 × sumo_r quits (0ec9fb69@14-201-251-105.tpgi.com.au) (Ping timeout: 245 seconds)
04:46:00 × Jeanne-Kamikaze quits (~Jeanne-Ka@static-198-54-131-92.cust.tzulo.com) (Quit: Leaving)
04:46:45 <siraben> When does it deprecated?
04:46:49 <siraben> s/does/was
04:48:12 <koz_> Also why?
04:48:17 heatsink joins (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf)
04:49:12 × drbean quits (~drbean@TC210-63-209-98.static.apol.com.tw) (Quit: ZNC 1.8.2+cygwin1 - https://znc.in)
04:50:18 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:50:20 <dolio> I'm not sure. But it probably hasn't been as long since it was deprecated as the (relevant) time before yet.
04:50:25 × wavemode quits (~wavemode@097-070-075-143.res.spectrum.com) (Ping timeout: 240 seconds)
04:51:41 <siraben> Why is continuation monad second least used?
04:51:58 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
04:52:01 <topos> presumably because you have to define an additional `Error` class instance in order to use your errors, which was spurious
04:52:23 × asan quits (~yan4138@114.84.148.87) (Ping timeout: 258 seconds)
04:52:48 <topos> siraben because continuations are hard to get right, and also have very specific use cases that don't often intersect with industry
04:53:05 <siraben> Oops I should correct my list, the actual list is State, Reader, Trans, Error, Writer, Identity, RWS, Except, Cont, List
04:53:05 kleisli_ joins (~kleisli@2600:1700:4640:c560:68bd:9d76:dbd8:24e7)
04:53:11 <siraben> Figure 9b
04:53:16 <siraben> topos: I see
04:53:31 asan joins (~yan4138@124.78.128.72)
04:53:38 <koz_> siraben: Cont is very powerful - it can implement all the others - but that's usually overkill.
04:53:56 <siraben> Yeah, there's a great blog post on reimplementing other monads from Cont
04:54:45 <dolio> It's kind of misleading to say Cont can implement the others.
04:54:49 elliott_ joins (~elliott@pool-71-114-77-65.washdc.fios.verizon.net)
04:54:56 <koz_> dolio: In what sense is it misleading?
04:55:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
04:55:40 <dolio> Because the way you implement them uses different Cont monads depending on which ones you're embeding.
04:56:46 <dolio> You choose a different `r`.
04:56:47 <topos> callCC @Identity @a @⊥ what could go wrong
04:58:08 × asan quits (~yan4138@124.78.128.72) (Ping timeout: 260 seconds)
04:59:10 lucid_0x80 joins (~lucid_0x8@188.253.232.35)
05:01:06 <davean> topos: It does exactly what it says it does, whats the problem?
05:02:07 <topos> No problem here. Constructivists be damned
05:03:02 × elliott_ quits (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) (Quit: WeeChat 2.9)
05:03:08 <davean> If you want to complain so much topos, make me a way to record all your issues.
05:03:24 nan` joins (~nan`@unaffiliated/nan/x-5405850)
05:03:26 <siraben> Should I be creating my own monads more? I usually just use an MTL monad and be done with it.
05:03:30 elliott_ joins (~elliott@pool-71-114-77-65.washdc.fios.verizon.net)
05:03:42 <siraben> Or some combination of MTL monads
05:03:43 <davean> siraben: it varies. Generally you can make your own monad out of MTL's
05:03:45 <topos> Who's complaining davean? I accept LEM as my lord and savior
05:04:01 <siraben> GeneralizedNewtypeDeriving FTW
05:04:03 <davean> siraben: Often making your own typeclass for them is whats really valuable.
05:04:18 <davean> But not all important monads can be created via composing MTL
05:04:24 <siraben> davean: any good examples on that?
05:04:52 <siraben> That's one gap in the literature, books talk about monads and monad transformers but I haven't read material on modeling effects using custom monad typeclasses.
05:05:00 <davean> siraben: PlanT in 'machines'
05:05:08 × solonarv quits (~solonarv@astrasbourg-653-1-186-165.w90-13.abo.wanadoo.fr) (Ping timeout: 260 seconds)
05:05:27 <davean> http://hackage.haskell.org/package/machines-0.7/docs/Data-Machine-Plan.html#t:Plan
05:05:44 mmohammadi9812 joins (~mmohammad@5.116.223.123)
05:05:46 <davean> I was doing on to thread parallelism through too today.
05:06:01 <siraben> Huh, this looks exactly like ReqT from Oleg's work
05:06:18 <davean> Usually if you're writing your own monad though not composing MTL you're doing something "interesting" that would get reused elsewhere.
05:06:27 <davean> Not always but its a good predictor
05:07:02 <davean> siraben: I'd say usually you write your own when you care about semantics, not capabilities, but thats not well defined.
05:07:35 × exodrifter quits (adacad5d@cpe-173-172-173-93.tx.res.rr.com) (Remote host closed the connection)
05:08:26 × isovector1 quits (~isovector@172.103.216.166.cable.tpia.cipherkey.com) (Quit: Leaving)
05:09:09 asan joins (~yan4138@124.78.5.33)
05:09:46 <davean> siraben: did that make sense?
05:10:05 <siraben> davean: what do you mean by capabilities?
05:10:28 <davean> "Get access to Disk" "Ask about a value"
05:10:30 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds)
05:10:54 <siraben> Ah, I see.
05:11:01 jedws joins (~jedws@101.184.189.58)
05:11:05 <siraben> And semantics here as in PL semantics?
05:11:10 Lord_of_Life_ joins (~Lord@unaffiliated/lord-of-life/x-0885362)
05:11:21 <davean> semantics: "Do monadic things sequentually, but applicative things on a thread pool of a given size"
05:11:37 × Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 264 seconds)
05:12:12 <davean> yah, semantics are about how you do the computation
05:12:29 <davean> hence PlanT as an example
05:12:32 Lord_of_Life_ is now known as Lord_of_Life
05:12:42 <davean> topos: slap me around and say something a little tighter?
05:13:20 topos slaps davean
05:13:23 <topos> something a little tighter
05:13:42 <davean> Cont is the exception
05:13:46 <davean> that does anything, badly.
05:14:12 × mmohammadi9812 quits (~mmohammad@5.116.223.123) (Ping timeout: 256 seconds)
05:14:25 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
05:14:40 <siraben> One issue I've had with effects was trying to convert my Scheme interpreter to a monadic version
05:14:41 <siraben> https://github.com/siraben/r5rs-denot/blob/fba3b49d88c6d7c4e7a2cff302589a669a4fdb88/src/SchemeEval.hs#L10
05:15:01 × Foritus quits (~buggery@cpc91334-watf11-2-0-cust153.15-2.cable.virginm.net) (Read error: Connection reset by peer)
05:15:22 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
05:15:39 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net)
05:15:44 <siraben> I tried something like, Except over Reader over Cont over State, but the Except <> Cont interaction didn't work out
05:16:06 <siraben> In a sense I don't want Haskell's full range of continuations, just the Scheme continuations, if that makes sense
05:16:06 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
05:16:07 dansho joins (~dansho@ip68-108-167-185.lv.lv.cox.net)
05:16:20 <davean> siraben: That sure is a scheme interpriter that reads like scheme!
05:16:47 <siraben> davean: Heh, it was converted directly from the denotational semantics of R5RS
05:16:59 <davean> I ... could have guessed
05:17:20 Foritus joins (~buggery@cpc91334-watf11-2-0-cust153.15-2.cable.virginm.net)
05:18:12 <siraben> Maybe it was someone here who mentioned that they were working a similar project and was planning to encapsulate primitive operations in a typeclass
05:18:35 <siraben> Like a CSEK machine.
05:18:37 <siraben> CESK*
05:19:11 × __Joker quits (~Joker@180.151.106.108) (Ping timeout: 272 seconds)
05:19:49 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 272 seconds)
05:20:11 <siraben> Hm, http://matt.might.net/articles/cesk-machines/
05:20:48 <topos> i mean, edwardk's been doing some of that with his livestreaming. I'm working on a machine based on matt might's abstract abstract interpreters work as well
05:20:51 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
05:21:00 <edwardk> i need to stream again
05:21:12 <siraben> edwardk: streaming on twitch?
05:21:39 × elliott_ quits (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) (Quit: WeeChat 2.9)
05:21:58 <edwardk> yeah, i moved and never bothered to get set back up
05:22:17 <siraben> topos: are you referring to http://matt.might.net/papers/might2010free.pdf ?
05:22:19 elliott_ joins (~elliott@pool-71-114-77-65.washdc.fios.verizon.net)
05:22:47 <siraben> Wow, that circular dependence in figure 1 is exactly the issue I came across
05:22:48 <topos> yeah
05:23:28 <topos> but this one http://matt.might.net/papers/vanhorn2010abstract.pdf
05:23:39 <topos> it's all gravy tho
05:24:03 <edwardk> siraben: that interpreter is nice and direct
05:24:40 <siraben> edwardk: the r5rs-denot one?
05:24:53 <edwardk> capturing scheme continuations in a CESK machine is super simple. Capture K, restore K,.
05:24:58 <edwardk> yeah
05:25:07 <siraben> Thanks.
05:26:43 × elliott_ quits (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) (Client Quit)
05:26:54 eric joins (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e)
05:26:57 <siraben> topos: interesting paper
05:27:23 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:27:41 elliott_ joins (~elliott@pool-71-114-77-65.washdc.fios.verizon.net)
05:28:01 × Guest74761 quits (sid13060@gateway/web/irccloud.com/x-rcuirdcnfpfdubdp) ()
05:28:27 dsal joins (sid13060@gateway/web/irccloud.com/x-pvmusdavojjxflwa)
05:28:38 <siraben> These techniques, do they carry over to compilation as well? I haven't looked much into abstract interpretation.
05:28:52 dsal is now known as Guest85365
05:30:25 __Joker joins (~Joker@180.151.106.108)
05:32:06 × eric quits (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) (Ping timeout: 244 seconds)
05:33:23 Guest85365 is now known as dsal
05:34:10 <edwardk> abstract interpretation can be a good first step towards compilation, as you get a sense of what cases are and aren't possible in each use site
05:34:19 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:34:47 <edwardk> there's another paper by van horn and might on abstract abstract machines, that i'm particularly fond of
05:34:48 <edwardk> https://arxiv.org/pdf/1007.4446.pdf
05:34:59 <edwardk> that paper is the one that made abstract interpretation finally gel for me
05:35:01 falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
05:35:16 × __Joker quits (~Joker@180.151.106.108) (Ping timeout: 260 seconds)
05:36:45 <siraben> edwardk: Heh, the notation looks somewhat intimidating
05:37:19 <edwardk> all the greek letters and hats?
05:39:26 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:39:34 <edwardk> the paper starts with a CEK machine, which you can squint at a krivine machine and see, adds a store, moves continuations into the store, then starts to play with what happens if you make the store, etc. less accurate approximations.
05:40:09 <siraben> Ok, so on closer inspection it may be tractable for me.
05:40:12 × lc_ quits (~lc@94.198.42.164) (Ping timeout: 272 seconds)
05:41:29 <Axman6> topos: for the encode loop, have you tried the version which just does the maths to compute the hex character for the nibble?
05:41:39 × mitchellsalad_ quits (uid40617@gateway/web/irccloud.com/x-wopqfurhxhollxgh) (Quit: Connection closed for inactivity)
05:43:06 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
05:43:30 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Client Quit)
05:43:39 <edwardk> one thing all these papers on quantitative type theory seem to sweep under the rug is how much harder it makes inference for things like what to instantiate meta variables to.
05:44:06 <edwardk> (just to mention a frustraton that is on y mind)
05:44:25 <siraben> edwardk: what paper are you reading?
05:44:52 <edwardk> well. i've been trying to build a little "ELF" style logical framework with quantitative type theory bolted in.
05:45:40 <siraben> Quantitative type theory differs from linear type theories in what way?
05:46:58 <edwardk> the papers in question are https://personal.cis.strath.ac.uk/conor.mcbride/PlentyO-CR.pdf which came first https://bentnib.org/quantitative-type-theory.pdf which fixed it up. then abel and bernardy which gave us the formulation for linear haskell, https://wg28.mpi-sws.org/technical-presentations/files/cfdb7_uploads/1584070624-w28-qtt-zion.pdf and finally the choudhury et al paper
05:46:58 <edwardk> https://richarde.dev/papers/2020/quantitative/quantitative.pdf
05:47:06 <edwardk> but the gist is this
05:47:08 <edwardk> take your type theory
05:47:11 mrte joins (~mrt@p4fcabee7.dip0.t-ipconnect.de)
05:47:11 <edwardk> look at the environments
05:47:26 <topos> Axman6 yeah
05:47:27 <edwardk> you have Gamma, x : T
05:47:31 <shafox> Anyone can share their ~/.cabal/config file. I want to know what I can do with all the options.
05:47:49 <edwardk> add a member of some semiring with nice properties to the : annotating each typing judgment
05:48:05 <edwardk> e.g. you might choose the semiring to have 0 for erased, 1 for present
05:48:26 × elliott_ quits (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
05:48:42 <edwardk> and then you run through all the usual rules of type theory, treating environments as semimodules (like vector spaces) over this scalar semiring
05:48:47 <edwardk> why?
05:48:53 <topos> Axman6 when i benched, computing the modulus was faster than doing yet another index look up on a different table. but i have come a long way with it and i might need to revisit
05:49:01 <edwardk> you get to use this to compute erasure for one.
05:49:35 <edwardk> but if you replace the semiring with {0,1,many} with 1+1=many, you get something like linear haskell
05:49:40 <edwardk> but you can pick all sorts of other semirings
05:49:57 <edwardk> e.g. just using the natural numbers would get you something like granule where you get exact usage counts of all variables
05:50:09 <siraben> Oh that's fascinating, so the resource usage is determined by the chosen semiring?
05:50:16 <topos> Axman6 sorry - wires crossed. i can get rid of that shift, yeah
05:50:30 <edwardk> or using {0,1,affine,relevant,unrestricted} you can get something like david walker's post in "Advanced Topics in Types and Programming Languages"
05:50:32 <edwardk> yeah
05:50:54 <edwardk> i've been using a semiring with 6 elements, rather than those 5. {0,1,affine,relevant,STRICT,unrestricted}
05:51:02 <edwardk> where strict and relevance are closely related but not the same
05:52:04 × mrte quits (~mrt@p4fcabee7.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
05:52:16 <edwardk> in my toy type theory 1, strict, relevant all act as the dividing line at which i no longer have thunks in my data types. 0 doesn't exist at all in the result, and affine/unrestricted are lazy
05:53:08 <edwardk> and 1 + 1 is relevant, but 1 + affine = strict rather than unrestricted like it'd be in the 5 point semiring above
05:53:28 ggole joins (~ggole@2001:8003:8119:7200:7c4d:5b32:3cf7:fd63)
05:53:30 <edwardk> strictness then becomes the claim that you will definitely consume at least one of the copies of the thing you passed out to a bunch of sites
05:53:40 <edwardk> where relevance is the claim you will consume ALL of them
05:55:31 <edwardk> the dividing line is something like how relevance _could_ be managed by something that basically copied each A and made two of them and passed each out. Then relevance/linear in that universe would have you delete the structure when you're done. affine would still need the gc to help to know how to deal with something that was dropped, alternately you could maybe refine the notion of affine in that semiring to have versions that both
05:55:32 <edwardk> supported unrestricted style dropping and ones that used an explicit finalizer to free like rust
05:56:17 <edwardk> anything stuffed in a linear/relevant resource can get sort of freely added to some kind of gc root list, and you then don't even need to walk the relevant/linear stuff
05:56:32 <edwardk> because you know it'll be consumed (and hence removed from the global gc root list) eventually
05:56:51 <edwardk> this is a very resource-centric view, but one i've been playing with since i first found haskell
05:57:02 <edwardk> qtt gave me the right framework, i was missing the + for the semiring
05:58:10 <edwardk> now, this is still missing a last component, which is a notion of uniqueness, linearity says the consumer will definitely use up the thing, uniqueness says that you are being handed the only copy, and that the producer hasn't passed around any pointers to anybody else
05:58:32 × lucid_0x80 quits (~lucid_0x8@188.253.232.35) (Quit: Leaving)
05:58:41 <edwardk> but the quantitative type theory stuff basically doesn't prejudge too much what the semiring means
05:58:45 <edwardk> it is more of a formal tool
05:59:11 <edwardk> and your semantics then clears up what you mean, the choudhury et al paper at the end of the reading list i dumped is actually quite clear.
05:59:23 <Axman6> topos: nibbleChar :: Word8 -> Word8; nibbleChar (W8# n) = W8# (int2Word# (word2Int# n +# (48# +# ((geWord# n 10##) *# 39#))))
06:00:02 × jjj quits (~jjj@195.206.169.184) ()
06:00:07 <siraben> edwardk: that is fascinating. do you have a repository for this?
06:00:14 <edwardk> anyways my general problem is this for a _ in my toy type theory i usually drop in a meta variable.
06:00:33 <edwardk> github.com/ekmett/haskell has been where i've been scribbling thoughts, but i don't have any of the qtt stuff committed yet, it breaks the whole toy
06:00:56 × toorevitimirp quits (~tooreviti@117.182.182.33) (Ping timeout: 260 seconds)
06:01:15 <Axman6> topos: using that makes converting it to work a word at a time "trivial"
06:01:24 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
06:02:31 <edwardk> for a meta variable the way i handle it is i look around at all the locally bound variables where i created and placed the meta variable and i just build a meta variable that gets all those as arguments. \x y z. foo M -- where M could reference x y and z requires M to know about contexts, and is messy, so instead I make it \x y z. foo (M x y z). Now if M instantiates to a constant valued function that ignores its arguments, the
06:02:31 <edwardk> normalization done by my unification engine gets me the answer i want.
06:02:38 <edwardk> but here I don't know the usage data for M.
06:02:42 <siraben> edwardk: this metavariable is not the same as a type variable?
06:02:48 <edwardk> which mucks with my ability to do type inference
06:02:52 mmohammadi9812 joins (~mmohammad@5.116.223.123)
06:03:12 <edwardk> meta variables here are like holes in the program. 'please put here the only thing that makes sense'
06:03:36 <siraben> Oh, nice style for a repository. I might steal that, hehe. Maintaining separate repositories is annoying for small projects.
06:03:53 <siraben> Right, I'm thinking of like Coq's metavariables then, ?A
06:04:09 <edwardk> yeah. these are little existential holes
06:04:13 <siraben> I use _ quite a lot when I want Coq to infer it
06:04:32 <siraben> rewrite (mul_assoc _ b c)
06:04:37 <edwardk> and they come up a bunch when you just write something like id :: {A} A -> A
06:05:22 <siraben> Yes
06:05:25 × hvr quits (~hvr@haskell/developer/hvr) (Ping timeout: 272 seconds)
06:05:34 <edwardk> i have an implicit argument A there. great, but it really took id : {A : _} A -> A, and then when elaboration happened it expanded _ to a meta variable, and figured out that it should be 'type'
06:05:35 × sfvm quits (~sfvm@37.228.215.148) (Quit: off to the basement, mixing up the medicine)
06:06:19 <Axman6> topos: magic numbers in there are 48 = '0', 39 = 'a' - '0' - 10
06:06:53 <edwardk> the general model is something like start out with a surface language with a bunch of extra nonsense and file locations and stuff in it, convert to some internal representation used for elaboration that has all these meta variables in it, then crush them out and you get the final 'core' equivalent.
06:07:01 × heatsink quits (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) (Remote host closed the connection)
06:07:34 rihards joins (~rihards@balticom-142-78-50.balticom.lv)
06:07:37 <edwardk> typechecking/inference produces terms in the elaboration form as witnesses that a given source term has a type
06:07:46 <edwardk> but source terms have all sorts of extra bells and whistles.
06:07:51 <edwardk> like in haskell we have where vs. let
06:08:00 <edwardk> complex patterns, top level decls...
06:08:37 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
06:08:51 knupfer joins (~Thunderbi@mue-88-130-61-060.dsl.tropolys.de)
06:09:41 <edwardk> anyways, right now i'm currently wrestling with how to get resource usage constraints on each of my meta variables right, because _normally_ i can just sprinkle them around in my terms, but now i have a problem. their usage of resources affects how many resources i have to typecheck the _rest_ of the term.
06:10:21 <edwardk> so i could try to carefully dance around and use up all the other resources and give them what is left, but i don't _really_ have a subtraction for resources (i'm in a semiring)
06:10:43 <edwardk> i could also do something like first typecheck in the boring {0,1} presence/absence semiring, use that to flesh out my metas
06:11:35 <edwardk> and then try to use backwards the fact that i have a semiring homomorphism from my final semiring to that semiring, and try to use that to 'redo' the job now that i actually have a sort of minimal bottom up chunk of resource usage data to go off
06:11:49 gnumonik joins (~gnumonik@c-73-170-91-210.hsd1.ca.comcast.net)
06:12:04 <siraben> Hmm, seems tricky. I have no idea how semirings work when applied in a type theoretic context yet.
06:12:19 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
06:13:11 <edwardk> if you look at https://richarde.dev/papers/2020/quantitative/quantitative.pdf in figure 1, the rule for ST-App is my bane
06:13:21 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds)
06:13:52 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
06:14:13 × shafox quits (~shafox@106.51.234.111) (Remote host closed the connection)
06:14:34 shafox joins (~shafox@106.51.234.111)
06:14:59 <edwardk> because you have to infer the type of (f) in (f x), then use that to get the usage information for the application rule. but if f is a meta variable then we have no usage to use to fill in
06:15:52 <edwardk> the fact that these judgments tend to be written in a style where it isn't clear how to infer rather than just check doesn't help the story
06:15:58 <siraben> These typing rules don't seem to have meta variables, you added them?
06:16:02 dhouthoo joins (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be)
06:16:09 <Axman6> anyone know of a tool which accepts assembly and can give you how much instruction level parallelism it might have?
06:16:55 <siraben> I meant like, meta variables being part of the source language, not in the meta language used to describe the language (which does have meta variables)
06:16:57 <edwardk> correct. because i need inference and inference wants to put little holes in various places. (also that type theory in that figure is non-dependent, and mine is dependently typed)
06:17:12 × ChaiTRex quits (~ChaiTRex@gateway/tor-sasl/chaitrex) (Remote host closed the connection)
06:17:18 <siraben> Have you thought about using bidirectional type inference?
06:17:26 × ddere quits (uid110888@gateway/web/irccloud.com/x-hxjfplopujbdeyav) (Quit: Connection closed for inactivity)
06:17:26 <siraben> That's a technique I learned recently, very useful.
06:17:27 <edwardk> this is in a bidirectional type checker =)
06:17:44 × mmohammadi9812 quits (~mmohammad@5.116.223.123) (Quit: I quit (╯°□°)╯︵ ┻━┻)
06:17:48 <siraben> Where are the inferred vs. checked types then?
06:17:50 × incognito9999 quits (~incognito@hwsrv-648981.hostwindsdns.com) (Ping timeout: 256 seconds)
06:18:01 ChaiTRex joins (~ChaiTRex@gateway/tor-sasl/chaitrex)
06:18:31 <edwardk> https://github.com/AndrasKovacs/implicit-fun-elaboration/blob/master/fcif/Elaboration.hs#L513 -- here's a version from andras kovacs
06:19:26 danvet joins (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
06:19:30 mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848)
06:19:32 danvet_ joins (~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453)
06:19:33 mmohammadi9812 joins (~mmohammad@5.116.223.123)
06:19:44 hvr joins (~hvr@haskell/developer/hvr)
06:19:45 × danvet_ quits (~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453) (Client Quit)
06:20:01 <edwardk> that is in the 'infer' case for app, which delegates to an infer for the function, notice how it has to manufacture a couple of meta variables
06:20:34 <edwardk> (notice there is a separate 'check' and infer and check bounce back and forth, bidirectional style
06:20:49 <siraben> Heh, going straight for the IO monad
06:20:53 <siraben> Right
06:21:28 <edwardk> yeah andras runs in strict haskell and does evil things for IO
06:21:43 <edwardk> I use slightly less evil things, but then unsafeInterleaveIO all over the same code =P
06:22:00 kori joins (~kori@2804:14c:85a3:9105::1000)
06:22:00 × kori quits (~kori@2804:14c:85a3:9105::1000) (Changing host)
06:22:00 kori joins (~kori@arrowheads/kori)
06:22:11 <edwardk> i've been basing things pretty closely on his work because he gets some pretty great type inference
06:22:26 <edwardk> e.g. he can handle the runST $ do ... stuff without any magic rule for $.
06:22:44 <edwardk> so i more or less grabbed that wholesale
06:23:59 <siraben> Wow, he has an elaboration-zoo repo as well
06:24:17 × falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Remote host closed the connection)
06:24:18 <edwardk> if you rip out all the exotic Tel, PiTel, LamTel, Rec. stuff out of his type theory he gets a pretty good baseline typechecker (modulo the usual sort of implicit reordering that agda does)
06:24:33 × dansho quits (~dansho@ip68-108-167-185.lv.lv.cox.net) (Remote host closed the connection)
06:24:44 falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
06:24:47 dansho joins (~dansho@ip68-108-167-185.lv.lv.cox.net)
06:24:48 <edwardk> We talked quite a bit at ICFP and it served as a good forcing function for me to stop dilly-dallying with other ways to do this, and just raid his toolbox for tricks
06:25:11 × heatsink quits (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection)
06:25:42 × echoreply quits (~echoreply@unaffiliated/echoreply) (Quit: WeeChat 1.9.1)
06:25:50 <edwardk> my usecase is a bit weird
06:26:01 <edwardk> i'm currently trying to do this to build a "logical framework" like LF
06:26:13 echoreply joins (~echoreply@unaffiliated/echoreply)
06:26:15 <edwardk> but with the qtt bits sprinkled on top
06:26:49 <edwardk> LF is what you get if you take a dependent type theory, lop it off at the knees and stunt its growth.
06:27:18 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
06:27:25 × Cale quits (~cale@CPEf48e38ee8583-CM0c473de9d680.cpe.net.cable.rogers.com) (Ping timeout: 246 seconds)
06:28:10 <edwardk> you remove all the bits that have to do with sigma, maybe cripple pi so you can make types that depend on terms but not use other things, force yourself to only have terms, types and kinds, and no universe tower, don't bother making traditional data types and induction principles and the like.
06:28:27 × Neuromancer quits (~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 240 seconds)
06:28:37 <edwardk> which seems like an awful lot of surgery to do
06:29:03 <edwardk> but once you've butcher the type system in this way, it becomes really easy to reason about HOAS.
06:30:06 <edwardk> e.g. you can define tm : type; lam : (tm -> tm) -> tm; app : tm -> tm -> tm -- and have a higher order abstract syntax for terms. and you can know that that function from tm -> tm in lam just places the argument somewhere, BECAUSE IT CANT PATTERN MATCH ON IT.
06:30:14 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 272 seconds)
06:30:16 × josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection)
06:30:22 <edwardk> so you write your semantics in this logical framework and what have you
06:31:01 × mmohammadi9812 quits (~mmohammad@5.116.223.123) (Quit: I quit (╯°□°)╯︵ ┻━┻)
06:31:07 <edwardk> and then reason about meta theorems about what you wrote, and those are simplified by the fact that the language the code manipulating your terms or judging things about your terms was written in is comparatively simple
06:31:37 <edwardk> i figured i'd share because you started from 'hey i wrote down the denotational semantics of r5rs and ran them'
06:32:18 × kori quits (~kori@arrowheads/kori) (Quit: WeeChat 2.8)
06:32:27 <edwardk> normally to work with syntax tree representations you have to go off and fight with debruijn indices/levels or use 'parametric hoas' or use a library like bound or unbound or nominal or name...
06:32:39 <edwardk> but each of those complicate reasoning about the program that manipulates those terms
06:32:43 mmohammadi9812 joins (~mmohammad@5.116.223.123)
06:32:52 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:33:15 josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net)
06:33:25 <siraben> Thanks, that was insightful.
06:33:26 <edwardk> so the old-school bob harper way to handle that was to build a crippled but still usable type system that was good enough for building up those judgments
06:33:54 <siraben> Capture-avoiding substitution is a mess, I've recently using de bruijn to implement a linearly typed lambda calculus.
06:33:57 × josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection)
06:34:05 finkata joins (~dpetrov@83.222.188.39)
06:34:14 incognito9999 joins (~incognito@hwsrv-648981.hostwindsdns.com)
06:34:14 <siraben> Thinking about implementing lambda pi from https://www.andres-loeh.de/LambdaPi/LambdaPi.pdf
06:34:17 __Joker joins (~Joker@180.151.106.108)
06:34:31 josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net)
06:34:43 <edwardk> i've been playing with ways to extend an LF, because, say, working on a language that has linear types in LF is awful. your binding forms don't match the host LF's binding forms in how they are managed and so all of a sudden you're stuck in debruijn hell... in a crippled type theory
06:34:44 <siraben> edwardk: do you know if tagless final can be used to implement dependently typed languages?
06:34:55 × josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
06:35:39 <edwardk> but if the lf itself has qtt, then it becomes pretty easy to reason about any language that uses a binding form that has constraints that look like any subsemiring of the ones offered by the host language.
06:35:50 <edwardk> (there was some work on linear logical frameworks in the 90s)
06:35:58 <edwardk> the answer is a hard 'sorta'
06:36:12 <edwardk> so lets use the running example of an LF
06:36:16 <edwardk> because its on my brain
06:36:23 <edwardk> here we have 'dependent types' where types can depend on terms
06:37:12 <edwardk> i wrote some code the other day and posted it to twitter for how to do typed "normalization-by-evaluation"
06:37:35 <edwardk> https://gist.github.com/ekmett/6c64c3815f9949d067d8f9779e2347ef
06:38:14 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
06:38:18 <edwardk> if you look at the very bottom of that code id_, k, kid_ are id, const, and const id in the little toy 'untyped except i happen to be borrowing haskell's types' typed language.
06:38:37 <edwardk> basically Val represents terms crushed down to normal form.
06:38:44 <edwardk> and expressions allows for you to be sloppier
06:39:02 Cale joins (~cale@CPEf48e38ee8583-CM0c473de9d680.cpe.net.cable.rogers.com)
06:39:11 <edwardk> nf takes an expression to a val, which is internally representing something in beta normal form, and then converts the val back to an expr which happens to be in beta normal form
06:39:37 <edwardk> so what does this have to do with dependently typed languages? this is clearly an untyped language
06:39:45 <edwardk> well, haskelly-typed
06:40:09 <edwardk> well, an old paper of conal elliott's (maybe his thesis, i forget) introduced a notion of 'approximately well typed' programs
06:40:57 <edwardk> which is to say if you run through an LF and rip out all the dependent bits, turning [| Pi x : A. B |]. into [| A |] -> [| A |] ...
06:41:05 <edwardk> er B
06:41:21 <edwardk> then you get a non-dependently typed approxmation of the types in the LF
06:41:48 <edwardk> and termination of unification, etc. in the LF is sort of governed by termination of it for this crippled type
06:42:11 × ystael quits (~ystael@209.6.50.55) (Ping timeout: 240 seconds)
06:42:28 × mmohammadi9812 quits (~mmohammad@5.116.223.123) (Quit: I quit (╯°□°)╯︵ ┻━┻)
06:42:53 <edwardk> so if you were working with something in the LF corner of the lambda cube where you have limited dependent types? then you can use what host language types those types erased to and have an 'approximately well typed' scheme for working with it, implemented finally tagless style
06:43:33 <edwardk> but the finally-tagless bits? i personally tend to go for heavier tagged deep embeddings because i find they are really frustrating to work with when you want sweeter sugar
06:43:33 ystael joins (~ystael@209.6.50.55)
06:43:50 <edwardk> er they here being finally tagless
06:43:52 <siraben> That makes sense
06:44:15 mmohammadi9812 joins (~mmohammad@5.116.223.123)
06:44:18 <edwardk> http://www.cse.chalmers.se/~josefs/publications/svenningsson2015combining.pdf is a paper on how to do typed EDSLs that I rather like
06:44:31 <edwardk> iceland jack posted a link to it the other day on twitter and it reminded me of its existence
06:44:48 <edwardk> in theory a version of that that is 'approximately well typed' could work for an LF.
06:45:06 <edwardk> so that gives the 'can i get the types right' answer with a sort of strong maybe.
06:45:21 × mmohammadi9812 quits (~mmohammad@5.116.223.123) (Client Quit)
06:46:03 <edwardk> for working with dependent types in general i tend to stick to real syntax trees and libraries like bound.
06:46:33 <edwardk> https://hub.darcs.net/dolio/upts/browse/Language/UPTS/SyntaxTree.hs#39 is an example of a small pure type system with universe polymorphism by dolio that uses bound
06:46:38 <siraben> I haven't used the bound library before, will it handle the scoping and substitution for me?
06:46:43 <edwardk> yeah
06:47:05 <edwardk> your Term type becomes a monad, using (>>=) for substitution.
06:47:15 <edwardk> and Scope () Term becomes 'and i need an extra bound variable'
06:47:20 <MarcelineVQ> is the purpose of that 'approximately well typed' to check if something could be correct, with less work, before you check fully?
06:47:23 <edwardk> and you use >>>= to walk over that
06:47:28 <edwardk> MarcelineVQ: yeah
06:47:37 <edwardk> catch most of the stupid programmer bugs
06:47:40 <edwardk> basically a form of lint
06:48:27 <edwardk> maybe if you cps transformed everything you could get into a state where you could do reflection to create the types off terms locally that you'd need... or you could wait for richard to finish dependent hakell
06:48:29 <edwardk> er haskell
06:48:49 borne joins (~fritjof@200116b8641fc4005e981dab12496c3b.dip.versatel-1u1.de)
06:49:00 × xff0x_ quits (~fox@2001:1a81:5306:e200:7599:d48:f5dc:5fef) (Ping timeout: 244 seconds)
06:49:14 × knupfer quits (~Thunderbi@mue-88-130-61-060.dsl.tropolys.de) (Ping timeout: 272 seconds)
06:49:14 <edwardk> https://hub.darcs.net/dolio/upts/browse/Language/UPTS/SyntaxTree.hs#73 see how the >>>= is used for the body of the lambda?
06:49:49 <siraben> Ah
06:49:50 <edwardk> https://www.schoolofhaskell.com/user/edwardk/bound is an article i wrote on bound
06:50:07 xff0x_ joins (~fox@2001:1a81:5306:e200:5d84:8198:9ead:fb9f)
06:50:15 <siraben> great, saved.
06:50:20 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) ()
06:50:30 <edwardk> the key is that when you need a Term and have a Scope () Term you need to give me the value for the extra variable. it won't typecheck if you f up the name manipulation
06:51:08 <edwardk> abstract1 and instantiate1 give you tools for converting from Scope () m <-> m by capturing/instantiating
06:51:21 <edwardk> bound works best when you're working with a language with one type of name
06:51:39 <edwardk> we made it work for ermine by lots of hand-holding
06:52:05 <edwardk> but its quite pleasant to just walk terms, be able to >>= for substituting in your environment, use foldMap to extract free variables.
06:52:23 <edwardk> Scope is basically a 'faster' EitherT
06:53:02 <edwardk> abstract and instantiate handle the case where you want to bind multiple variables at once, (i don't have to just put on a (), maybe i'm binding 8 variables at once in a recursive let binding/where clause, etc.
06:54:12 × tomboy64 quits (~tomboy64@gateway/tor-sasl/tomboy64) (Remote host closed the connection)
06:55:52 × mirrorbird quits (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Remote host closed the connection)
06:56:04 chele joins (~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
06:56:32 mirrorbird joins (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71)
06:58:24 <gnumonik> I thought I remembered some function in the lens library that returns a list of (maybe strings that represent?) the lenses/etc that exist for a datatype. Anyone know what that is or am I mistaken?
07:02:27 <edwardk> :t universe
07:02:28 <lambdabot> Plated a => a -> [a]
07:02:33 <edwardk> er that's not it
07:02:46 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
07:03:21 bitmagie joins (~Thunderbi@200116b80670970060cb385f030853d4.dip.versatel-1u1.de)
07:03:28 mmohammadi9812 joins (~mmohammad@5.116.223.123)
07:03:31 <edwardk> :t contexts
07:03:33 <lambdabot> Plated a => a -> [Context a a a]
07:03:47 <edwardk> :t contextsOf
07:03:49 <lambdabot> ATraversal' a a -> a -> [Context a a a]
07:03:55 × falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 240 seconds)
07:04:02 <edwardk> that gives you each of the 'one hole contexts' of a term
07:04:53 <edwardk> you give a traversal that knows how to find all the parts, and it give you back a context which has what was in that position and a function that can sew the type back up around a new value.
07:05:09 <edwardk> contexts works off the Plated data type
07:05:39 <edwardk> a context is a "lens that has been applied to an 's'"
07:05:51 × da39a3ee5e6b4b0d quits (~textual@2403:6200:8876:37d7:55fb:4d37:ffc2:715b) (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:05:55 <gnumonik> That should work, thanks!
07:06:13 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
07:06:14 <edwardk> if you think of a lens as s -> (a, b -> t) Context a b t = (a, b -> t)
07:06:37 <edwardk> with some newtype and typical lens over-generality applied
07:06:46 <edwardk> :info Context
07:06:52 whiteline joins (~whiteline@unaffiliated/whiteline)
07:06:58 <edwardk> @info Context
07:06:59 <lambdabot> Context
07:07:05 <edwardk> that was helpful.
07:07:07 <edwardk> @type Context
07:07:09 <lambdabot> (b -> t) -> a -> Context a b t
07:07:41 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds)
07:08:19 × sumo_r9 quits (0ec9fb69@14-201-251-105.tpgi.com.au) (Remote host closed the connection)
07:09:48 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:10:01 × mmohammadi9812 quits (~mmohammad@5.116.223.123) (Ping timeout: 272 seconds)
07:10:49 mmohammadi9812 joins (~mmohammad@5.238.164.128)
07:10:52 × tzh quits (~tzh@2601:448:c500:5300::ad1c) (Quit: zzz)
07:10:56 tomboy64 joins (~tomboy64@gateway/tor-sasl/tomboy64)
07:11:06 × asan quits (~yan4138@124.78.5.33) (Ping timeout: 256 seconds)
07:13:19 kritzefitz joins (~kritzefit@fw-front.credativ.com)
07:15:52 × finkata quits (~dpetrov@83.222.188.39) (Remote host closed the connection)
07:15:55 × oxide quits (~lambda@unaffiliated/mclaren) (Read error: Connection reset by peer)
07:16:21 asan joins (~yan4138@61.170.146.94)
07:17:40 da39a3ee5e6b4b0d joins (~textual@2403:6200:8876:37d7:55fb:4d37:ffc2:715b)
07:18:53 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 272 seconds)
07:19:56 × heatsink quits (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection)
07:20:58 alp_ joins (~alp@2a01:e0a:58b:4920:90ae:a5d:9349:f8d8)
07:21:58 ph88 joins (~ph88@2a02:8109:9e40:2704:6cf2:c517:5b95:5f99)
07:22:15 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
07:22:21 maier joins (~maier@b2b-37-24-119-190.unitymedia.biz)
07:22:29 maier is now known as kenran
07:22:38 yoneda joins (~mike@193.206.102.122)
07:23:06 × yoneda quits (~mike@193.206.102.122) (Client Quit)
07:23:17 <kenran> Is there a specific reason why Data.Vector.Storable.Vector doesn't have "the usual" instances? I'm specifically wondering about Foldable.
07:25:51 yoneda joins (~mike@193.206.102.122)
07:25:58 × stiell quits (~stian@fsf/member/stiell) (Ping timeout: 272 seconds)
07:26:22 pera joins (~pera@unaffiliated/pera)
07:26:48 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
07:27:13 <Axman6> because you can't put a constraint on the types of the values stored in it to guarantee they are sStorablwe
07:27:19 <Axman6> Storable*
07:27:30 <dminuoso> % :t foldr
07:27:31 <yahb> dminuoso: Foldable t => (a -> b -> b) -> b -> t a -> b
07:27:40 <dminuoso> kenran: ^- See how b is unconstrained?
07:28:07 <nshepperd> it's the lack of constraint on 'a' that is the problem here
07:28:19 <dminuoso> Oh
07:28:49 <dminuoso> nshepperd: Why does that matter?
07:30:27 AstroDroid joins (~AstroDroi@84.39.117.57)
07:30:34 <dminuoso> Ah nevermind, heh.
07:30:44 <nshepperd> because where t ~ Storable.Vector you can't get the 'a's out of that 't a' without having the Storable a instance at hand
07:30:56 <dminuoso> nshepperd: I kept thinking of Functor for some bizarre reason.
07:31:15 <dminuoso> In which case it'd be both a and b that'd need the Storable constraint
07:32:42 <kenran> ah thanks. I can't try it out right now, but couldn't one have: instance Storable a => Foldable (Storable.Vector a)?
07:33:13 raichoo joins (~raichoo@dslb-178-001-022-071.178.001.pools.vodafone-ip.de)
07:33:32 <dminuoso> kenran: Correct.
07:33:41 <dminuoso> Multiple reasons
07:33:46 <dminuoso> a) Wont kind check
07:33:50 <dminuoso> % :k Foldable
07:33:50 <yahb> dminuoso: (* -> *) -> Constraint
07:34:09 stiell joins (~stian@fsf/member/stiell)
07:34:12 <dminuoso> b) The constraint would have to on the class method (something like quantified constraints would be needed)
07:34:48 <dminuoso> And in addition c) *instance selection* does not consider any constraint on the instance declaration.
07:35:08 shutdown_-h_now joins (~arjan@2001:1c06:2d0b:2312:c058:b9a7:8857:8837)
07:35:14 <kenran> ahh of course, I forgot that one doesn't do `instance Foldable (Foo a)` but `instance Foldable Foo)
07:35:26 <kenran> thanks, very interesting!
07:35:28 <nshepperd> i don't think b and c are really problems
07:38:40 <nshepperd> yeah Foldable is meant to be applied to the, uh, generic container type
07:38:45 Unhammer joins (~Unhammer@gateway/tor-sasl/unhammer)
07:39:22 <Unhammer> https://i.imgur.com/kyFW9B9.png duckduckgo found me an actual stack of haddocks =D
07:40:24 × stiell quits (~stian@fsf/member/stiell) (Ping timeout: 256 seconds)
07:41:10 <dminuoso> Unhammer: It wasnt until I visited scotland and england that I understood the reference. The brits do seem to eat a lot of haddock.
07:41:36 × xlei quits (~akans@unaffiliated/xlei) (Quit: ZNC - https://znc.in)
07:43:05 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
07:43:10 <Unhammer> well, it's yummy :) though I've never had it stacked before
07:43:21 <Unhammer> `alias stack=smoke`
07:43:25 <Unhammer> therewego
07:43:44 cfricke joins (~cfricke@unaffiliated/cfricke)
07:44:10 <dminuoso> Oh haha I didn't get the joke until you mentioned that.
07:44:18 <dminuoso> Cheeky
07:46:07 <nshepperd> There's a different type class called MonoFoldable that you could give instances for Storable a => MonoFoldable (Vector a)
07:46:49 <nshepperd> but defining MonoFoldable and using it requires extensions (type families) and is less convenient, so i don't think it's really commonly used
07:47:48 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
07:54:16 × Sgeo quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
07:54:40 × mmohammadi9812 quits (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻)
07:56:24 mmohammadi9812 joins (~mmohammad@5.238.164.128)
07:56:40 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 260 seconds)
07:56:53 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
07:57:31 × mmohammadi9812 quits (~mmohammad@5.238.164.128) (Client Quit)
07:59:37 mmohammadi9812 joins (~mmohammad@5.238.164.128)
08:01:08 × nfd quits (~nfd9001@c-67-183-38-33.hsd1.wa.comcast.net) (Quit: Leaving)
08:01:57 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 272 seconds)
08:03:53 × dansho quits (~dansho@ip68-108-167-185.lv.lv.cox.net) (Quit: Leaving)
08:03:57 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
08:05:53 xlei joins (znc@unaffiliated/xlei)
08:06:23 × revprez_anzio quits (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 272 seconds)
08:06:52 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
08:06:57 bahamas joins (~lucian@188.24.158.21)
08:06:57 × bahamas quits (~lucian@188.24.158.21) (Changing host)
08:06:58 bahamas joins (~lucian@unaffiliated/bahamas)
08:07:47 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye)
08:08:06 revprez_anzio joins (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
08:08:22 supercoven joins (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi)
08:08:35 <dminuoso> Is there a reason to use `cabal v2-test` over `cabal v2-run test:foo`?
08:08:36 nan` joins (~nan`@unaffiliated/nan/x-5405850)
08:08:51 <dminuoso> The latter seems universally powerful since you can pass arguments to the testsuite
08:08:53 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
08:09:04 <phadej> former runs multiple tests, changes to package directory, ...
08:09:07 <phadej> is a bit different
08:10:23 <dminuoso> Mmm, what kind of changes to the package directory?
08:10:35 <dminuoso> Oh, you mean like the cwd?
08:11:42 oxide joins (~lambda@unaffiliated/mclaren)
08:13:34 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds)
08:13:50 <dminuoso> But I see what you mean, it is different. In case of hspec, v2-run can detect the interactive terminal properly, with v2-test it seems not
08:20:03 × cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds)
08:20:20 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
08:24:07 cantstanya joins (~chatting@gateway/tor-sasl/cantstanya)
08:24:35 × heatsink quits (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Ping timeout: 244 seconds)
08:24:49 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
08:26:26 × mmohammadi9812 quits (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻)
08:26:56 thc202 joins (~thc202@unaffiliated/thc202)
08:26:59 × raichoo quits (~raichoo@dslb-178-001-022-071.178.001.pools.vodafone-ip.de) (Quit: Lost terminal)
08:27:12 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
08:28:09 × z0 quits (~z0@bl15-162-186.dsl.telepac.pt) (Remote host closed the connection)
08:28:19 mmohammadi9812 joins (~mmohammad@5.238.164.128)
08:29:49 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
08:30:27 vicfred_ joins (~vicfred@unaffiliated/vicfred)
08:31:10 × lemmih quits (~lemmih@2406:3003:2072:44:c9d8:3b2b:ae18:24e9) (Remote host closed the connection)
08:31:32 lemmih joins (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d)
08:32:25 × s00pcan quits (~chris@075-133-056-178.res.spectrum.com) (Ping timeout: 240 seconds)
08:33:03 × mmohammadi9812 quits (~mmohammad@5.238.164.128) (Client Quit)
08:33:37 × vicfred quits (~vicfred@unaffiliated/vicfred) (Ping timeout: 272 seconds)
08:34:15 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
08:34:37 <kuribas> How do you solve the problem of having different types for a resource in a rest API? I came up with this solution: data Person read update extra = Person { age :: read Int , name :: update String, job :: extra String}
08:34:38 s00pcan joins (~chris@107.181.165.217)
08:34:42 mmohammadi9812 joins (~mmohammad@5.238.164.128)
08:35:38 × jneira quits (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206) (Ping timeout: 272 seconds)
08:36:16 <kuribas> then type family Id where Id a = a; type family Null where Null a = Maybe Void
08:37:22 <kuribas> Then I can do type ReadPerson = Person Id Id Id
08:37:41 <kuribas> and type UpdatePerson = Person Null Id Null
08:40:16 <kuribas> or the alternative is just to define three types ReadPerson, UpdatePerson, ShortReadPerson
08:40:45 <kuribas> which uses simpler haskell, but doesn't ensure the consistency of the resource.
08:42:50 <bahamas> I'm working on making a haskell quick reference and I'm reading through the haskell report. one thing confuses me. in what way are variables and constructors expressions? https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-240003.2
08:43:06 <bahamas> is it the fact that identifiers are expressions because they "return" a value?
08:43:27 <kuribas> bahamas: haskell doesn't have the concept of return
08:43:49 <kuribas> bahamas: variables are expressions in other language as while
08:43:57 <kuribas> and Constructors in haskell or just functions
08:43:59 <kuribas> :t Just
08:44:01 <lambdabot> a -> Maybe a
08:44:27 × Katarushisu quits (~Katarushi@cpc149712-finc20-2-0-cust535.4-2.cable.virginm.net) (Ping timeout: 256 seconds)
08:44:37 <kuribas> s/as while/as well
08:44:42 <bahamas> kuribas: I know
08:44:44 × asan quits (~yan4138@61.170.146.94) (Ping timeout: 260 seconds)
08:44:55 <kuribas> then what's the confusion
08:44:58 <kuribas> ?
08:45:40 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
08:46:16 asan joins (~yan4138@124.78.128.72)
08:46:21 × cmcma20 quits (~cmcma20@l37-192-3-172.novotelecom.ru) (Quit: leaving)
08:46:32 <bahamas> kuribas: well, how would you define an expression? my intuition tells me that an expression gives you a value. intuitively, function application is an expression, because the function returns a value
08:46:41 <bahamas> however, in what way is a variable an expression?
08:47:04 <kuribas> a variable gives you a value as well
08:47:17 <kuribas> > let x = 1 in x
08:47:18 <[exa]> bahamas: "represents" a value is better naming here I guess.
08:47:20 <lambdabot> 1
08:47:24 <lortabac> kuribas: alternatively, you can define three different types with the same field names and use GHC.Records.HasField or lenses to regain the ability to define generic operations over the 3 types
08:47:33 <bahamas> and a constructor? a constructor, not a constructor application
08:47:45 × vicfred_ quits (~vicfred@unaffiliated/vicfred) (Quit: Leaving)
08:47:51 <[exa]> bahamas: Nothing is a value right?
08:47:57 <kuribas> bahamas: a constructor is a function
08:48:06 <bahamas> and a function is a value
08:48:23 <bahamas> what is wrong with saying that identifiers are expressions?
08:48:32 <[exa]> nothing? :]
08:48:34 Katarushisu joins (~Katarushi@cpc149712-finc20-2-0-cust535.4-2.cable.virginm.net)
08:48:43 <kuribas> an identifier is a syntactic construct
08:48:57 <kuribas> it depends on the context if it's a value
08:49:23 stiell joins (~stian@fsf/member/stiell)
08:50:20 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
08:50:50 <lortabac> kuribas: in my experience having different types is in most cases less annoying than dealing with the type families
08:51:02 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
08:51:14 <kuribas> lortabac: yeah, I guess you're right
08:51:16 <bahamas> kuribas: ok. I think I know what you mean.
08:51:46 <kuribas> lortabac: I find duplicateRecordFields and recordWildcards quite handy :)
08:53:12 <kuribas> "let x = 2", the x is not an expression here, it's a variable binding.
08:53:13 <dminuoso> bahamas: There's two connected notions of an expression: a) something that can be evaluated b) a grammatical production rule - the latter gives you all syntactical trees of evaluatable fragments
08:53:55 Lycurgus joins (~niemand@98.4.96.130)
08:54:49 <bahamas> dminuoso: can you give an example of the second?
08:55:28 hackage postgresql-binary 0.12.3.1 - Encoders and decoders for the PostgreSQL's binary format https://hackage.haskell.org/package/postgresql-binary-0.12.3.1 (NikitaVolkov)
08:55:39 <kuribas> bahamas: also you are asking how to define an expression, but that page defines an expression exactly :) I guess you don't want a definition, but an intuition
08:56:06 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds)
08:56:09 <dminuoso> bahamas: exp -> infixexp :: [context =>] type | infixexp
08:56:19 <dminuoso> Is the topmost production rule for an expression in Haskell
08:56:28 hackage wai-extra 3.0.30 - Provides some basic WAI handlers and middleware. https://hackage.haskell.org/package/wai-extra-3.0.30 (MichaelSnoyman)
08:57:19 <dminuoso> If you follow this down a bit, you'll end up with a production rule `aexp -> qvar | gcon | literal | ( exp ) | ...`
08:59:30 <dminuoso> Roughly, you can think of Haskell evaluation as being a graph reduction machine on a haskell expression graph/tree.
09:00:02 × AstroDroid quits (~AstroDroi@84.39.117.57) ()
09:00:13 <dminuoso> (Taking expressions to expressions)
09:00:56 × reed[m] quits (reedriotfi@gateway/shell/matrix.org/x-zlxtwltpfmittewe) (Quit: Idle for 30+ days)
09:01:00 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
09:02:37 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
09:06:32 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
09:09:28 akegalj joins (~akegalj@93-136-206-221.adsl.net.t-com.hr)
09:10:43 × ChaiTRex quits (~ChaiTRex@gateway/tor-sasl/chaitrex) (Ping timeout: 240 seconds)
09:10:45 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
09:11:10 dyeplexer joins (~lol@unaffiliated/terpin)
09:12:18 ChaiTRex joins (~ChaiTRex@gateway/tor-sasl/chaitrex)
09:12:20 <kuribas> how would you ensure a lazy language is total?
09:13:26 <kuribas> :t fix
09:13:27 <lambdabot> (a -> a) -> a
09:14:18 <phadej> fix isn't something you have to add to a language
09:14:20 <kuribas> is there a fix-like function that doesn't diverge?
09:14:23 <Lycurgus> by disregarding laziness as nothing more than a lang feature?
09:14:37 <bahamas> dminuoso: does that mean that an expression's type signature is also an expression?
09:14:48 <dminuoso> bahamas: There's an easy test:
09:14:53 <dminuoso> bahamas: Go through the production rules
09:15:02 × jzl quits (~jzl@unaffiliated/jzl) (Ping timeout: 256 seconds)
09:15:10 <kuribas> bahamas: you can consider it a "type level expression"
09:15:30 <kuribas> bahamas: however it isn't a value, it's a type.
09:15:33 × jedws quits (~jedws@101.184.189.58) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:15:35 <dminuoso> bahamas: You'd need something like `aexp -> type | ...`
09:15:40 <dminuoso> (or possibly not aexp, but you get the idea)
09:15:55 <dminuoso> If such a production does not exist, then formally, a type is not an expression.
09:16:13 <dminuoso> However, you can see it can be *part* of expressions, namely by the production rule:
09:16:17 <dminuoso> exp -> infixexp :: [context =>] type
09:16:34 <kuribas> Lycurgus: recursion can be total by ensuring the recursive step is smaller. But can you do the same with lazyness?
09:17:16 <kuribas> Lycurgus: perhaps if the return of (a -> a) is smaller than the input?
09:18:34 <kuribas> hmm, no because x = tail x still diverges...
09:20:16 <bahamas> dminuoso: ok. all that recursion and the use of the name "infixexp" is confusing me a bit, but if I'm unpacking those terms, it's slowly falling into place
09:20:19 <bahamas> thanks
09:20:37 <Lycurgus> is laziness modeled as part of the active semantics of haskell? that's why I said what I did, that laziness is is between a compiler feature and the execution semantics
09:20:45 <dminuoso> bahamas: Read a production `foo -> bar` as "to make a foo, use bar"
09:20:57 <dminuoso> (It's why they are called production rules, they tell you how to *produce* the left hand side)
09:21:02 <kuribas> Lycurgus: yes it is
09:21:04 <Lycurgus> an if you only consider the latter then laziness can be disregarded
09:21:41 <kuribas> Lycurgus: because bottom is part of the semantics, and lazyness changes the result when bottom is present.
09:21:51 <Lycurgus> which is sort of cognitively consistent with a lang with the hubris or what ever to have ct as a model of computation
09:21:55 <dminuoso> bahamas: And they are exhaustive. So if there's no production rule for some `f -> g`, then g does not make an f
09:21:57 blardo joins (~blardo@185.244.214.216)
09:22:00 ph88^ joins (~ph88@ip5f5af726.dynamic.kabel-deutschland.de)
09:22:42 <kuribas> > foldr const 1 (1:undefined)
09:22:45 <lambdabot> 1
09:22:56 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
09:22:56 <kuribas> Lycurgus: that would be bottom in a strict language
09:23:07 <kuribas> Lycurgus: haskell ensures it's 1
09:23:27 <Lycurgus> well i gave an easy and gordian way
09:23:40 <Lycurgus> i suppose that's not the hs way tho
09:24:02 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
09:24:07 acidjnk_new3 joins (~acidjnk@p200300d0c736587164f46f145ae9b6a7.dip0.t-ipconnect.de)
09:24:29 ph88_ joins (~ph88@2a02:8109:9e40:2704:85f2:8dce:6e30:a554)
09:24:44 <lortabac> kuribas: Agda is an example of a lazy total language
09:25:14 <lortabac> maybe you can find some answers in the author's Phd thesis
09:25:33 × ph88 quits (~ph88@2a02:8109:9e40:2704:6cf2:c517:5b95:5f99) (Ping timeout: 272 seconds)
09:27:03 × mirrorbird quits (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Quit: Leaving)
09:27:21 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
09:27:53 <Taneb> I'm not sure the question is well defined: "lazy" is normally defined as there exist some functions such that f _|_ /= _|_. In a total language, there is no _|_ so we can't decide if the language is lazy or not
09:28:01 someuser123 joins (59b76050@a89-183-96-80.net-htp.de)
09:28:25 × ph88^ quits (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
09:29:03 <lortabac> Taneb: you can still talk about the order of evaluation and sharing, can't you?
09:29:19 eric joins (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e)
09:29:37 <someuser123> is there a conventional name for a function `m a -> a` where `m` is a monad?
09:30:21 <dminuoso> someuser123: Cokleisli Arrow
09:30:27 <dminuoso> fsvo of "conventional"
09:30:28 <merijn> someuser123: "nonexistent" :)
09:32:00 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
09:33:26 <dminuoso> Oh wait, heh. Well that only works if m was a comonad. :)
09:34:02 v0d1ch joins (~v0d1ch@cable-178-148-120-241.dynamic.sbb.rs)
09:34:16 <maerwald> quiz question: what does `LimitTo` in persistent do if you pass 0?
09:34:17 <dminuoso> someuser123: Do you mean `m` as some *particular* monad, or just any monad?
09:35:21 cpressey joins (~cpressey@79-72-201-114.dynamic.dsl.as9105.com)
09:35:41 × eric quits (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) (Ping timeout: 272 seconds)
09:35:43 <someuser123> I'm thinking of a monad like Maybe that is used to capture computation which can fail
09:36:23 <edwardk> lortabac: laziness in a total language is the differents between 'terminates' and 'terminates in my lifetime'
09:36:54 <kuribas> someuser123: Maybe has fromJust which you shouldn't use
09:37:17 <kuribas> someuser123: use fromMaybe instead
09:37:27 <someuser123> kuribas: why not?
09:37:45 <merijn> someuser123: Because it's bad and broken and you will regret it :p
09:37:47 <kuribas> someuser123: because it will crash on Nothing
09:37:49 <maerwald> someuser123: it's fine to use in local context or where you don't mind something to crash
09:38:20 <merijn> maerwald: What local context is it fine in?
09:38:34 <maerwald> merijn: where you have local proof that it's never Nothing
09:38:37 <kuribas> it's never fine to crash without meaningful error message
09:38:40 <kuribas> or stack trace
09:38:52 <lortabac> edwardk: can you expand? I'm not sure I understand
09:39:08 <merijn> maerwald: I don't see many case where you have both such a proof and still can't skip the maybe
09:39:43 <edwardk> termination checking in a fancy total language might take until the sun explodes. its pretty easy to build tings that theoretically terminate, but won't terminate in my lifetime.
09:40:15 <edwardk> laziness lets you skip some of the evaluation of parts, so while sure those parts will terminate eventually, it might be nice to not do that work at all
09:40:27 <maerwald> merijn: I'm not sure I follow.
09:41:45 <merijn> maerwald: I can't really think of any case where I have a proof that it's not Nothing where I can't simple skip going through Maybe (and thus fromJust)
09:41:47 <maerwald> if you have a regex building function that might return Nothing, but there is no user input and you've verified it compiles at runtime, there's no point going through hoops just to satisfy the totality illusion
09:42:14 <merijn> maerwald: Then you want
09:42:20 <merijn> @hackage validated-literals ;)
09:42:20 <lambdabot> https://hackage.haskell.org/package/validated-literals ;)
09:42:27 <maerwald> I'm aware of that, this was an example
09:42:31 <lortabac> edwardk: ok I see, thanks
09:43:04 <edwardk> as an example, when writing a dependent type checker itself, i wind up having to eval terms to normal form. but those terms often carry around things like unerased type info. _eval_ doesn't care, but maybe they might appear in the final normal form
09:43:22 <edwardk> but i should lazily skip past crunching those things down in case i don't need to compute those answers
09:43:49 <edwardk> sure it'd terminate but it'd bloat the memory footprint of the proof process and significantly slow it down
09:43:58 <kuribas> maerwald: if you have many regexes, change one of those then you don't know which one blew up.
09:44:30 <maerwald> then don't use it
09:44:44 <kuribas> maerwald: and if you know which one blew, it doesn't say what's wrong with it.
09:44:51 Franciman joins (~Franciman@acqua.team)
09:45:16 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
09:46:27 <Unhammer> Upgraded from 8.6.5 to 8.8.4, project compile time went from 3m to 2m30s, compile after changing single (TH) file from 30s to 24s :-) and the windows binary size went from 53MB to 43MB. That's pretty nice :-)
09:47:15 <merijn> Unhammer: You can probably drastically shrink further
09:47:26 <merijn> Unhammer: Enable split-sections
09:47:34 <maerwald> does windows support split-sections?
09:47:40 <Unhammer> on windows?
09:47:45 × Lycurgus quits (~niemand@98.4.96.130) (Quit: Exeunt)
09:47:45 <merijn> hmm, not sure?
09:47:50 <merijn> Only one way to find out :p
09:47:55 × da39a3ee5e6b4b0d quits (~textual@2403:6200:8876:37d7:55fb:4d37:ffc2:715b) (Ping timeout: 240 seconds)
09:48:02 <merijn> Unhammer: Also, don't forget to strip
09:48:16 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
09:48:26 <Unhammer> I think stack does that for me
09:48:28 <Unhammer> on stack install
09:48:56 <Unhammer> yeah, the one in "dist" is 64M, and the one in "install" doesn't get smaller when stripping
09:49:04 <merijn> hmmm
09:49:55 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds)
09:50:28 hackage Z-Data 0.1.1.0 - array, vector and text https://hackage.haskell.org/package/Z-Data-0.1.1.0 (winterland)
09:50:46 <Unhammer> oh I need to rebuild all deps to try split-sections … guess I'll wait, need to do some actual work instead of faffing around with compiler versions =P
09:51:24 <merijn> Unhammer: Yeah, you do
09:51:35 <merijn> Unhammer: It makes *massive* difference, though
09:52:07 <merijn> Unhammer: Like, 10x on my executables
09:52:54 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
09:54:17 <kuribas> merijn: why doesn't it do this by default?
09:54:41 × alp_ quits (~alp@2a01:e0a:58b:4920:90ae:a5d:9349:f8d8) (Ping timeout: 272 seconds)
09:55:24 <merijn> kuribas: Because it's fairly new, doesn't work on all platforms, etc.
09:55:28 <Unhammer> https://gitlab.haskell.org/ghc/ghc/-/issues/11445
09:55:48 <merijn> hmm, older than I thought :p
09:56:15 <Unhammer> does it work to put it in global stack.yaml ?
09:56:36 <phadej> merijn: IIRC it was broken / not working somewhere somewhat
09:57:03 <merijn> It doesn't work on macOS
09:57:11 <maerwald> merijn: you don't need it there
09:57:23 <merijn> maerwald: I know, but GHC error exited when you specified it
09:57:29 <maerwald> yep
09:57:32 <merijn> (now fixed after I whined about it)
09:57:45 <merijn> Now it's just a warning on macOS
09:58:42 <phadej> a problem is that GHC doesn't tell whether it's supported
09:58:53 <phadej> there is ("Object splitting supported","YES") entry, which is about -split-objs
09:58:57 <phadej> but not for -split-sections
09:59:46 <phadej> GHC is not very uniform in how it exposes features
10:00:04 <phadej> (to allow auto-configuration, vs. hardcoding stuff about particular compiler versions into Cabal)
10:01:22 <phadej> an example
10:01:24 <phadej> it tells
10:01:24 <phadej> ,("unlit command","/opt/ghc/8.10.1/lib/ghc-8.10.1/bin/unlit")
10:01:30 <phadej> but doesn't tell e.g. `ghc-pkg command`
10:01:37 <phadej> so Cabal have to use heuristics to find one
10:01:59 <phadej> (where I have no idea what's use case to knowing where is unlit command :P)
10:02:19 <merijn> phadej: Sounds like we need a ticket about all missing things there and add them to GHC
10:03:03 <phadej> merijn: one needs a pedantic person looking after that
10:03:12 × yahb quits (xsbot@haskell/bot/yahb) (Ping timeout: 256 seconds)
10:03:23 yahb joins (xsbot@178.219.36.155)
10:03:23 × yahb quits (xsbot@178.219.36.155) (Changing host)
10:03:23 yahb joins (xsbot@haskell/bot/yahb)
10:03:26 z0 joins (~z0@bl15-162-186.dsl.telepac.pt)
10:03:32 <phadej> new features need to get to that list when they introduced, not 2-3 releases after
10:05:05 <merijn> kuribas: The short answer to why it's not the default is: Insufficient people baby sitting these sorts of tickets/fixes, tracking whether they work everywhere and flipping the switch
10:05:28 <kuribas> merijn: the flipside of avoiding success.
10:08:16 Tops2 joins (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de)
10:08:39 <maerwald> pedantic person? Someone called my name?
10:09:05 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
10:09:06 <merijn> maerwald: Please do :p
10:10:04 <someuser123> where can I see the precedence ranks of operators such as <*> and <$>?
10:10:22 <merijn> % :i (<$>)
10:10:22 <yahb> merijn: (<$>) :: Functor f => (a -> b) -> f a -> f b -- Defined in `Data.Functor'; infixl 4 <$>
10:10:33 <merijn> someuser123: The "infixl 4" is precedence
10:10:36 <merijn> % :i (<*>)
10:10:37 <yahb> merijn: type Applicative :: (* -> *) -> Constraint; class Functor f => Applicative f where; ...; (<*>) :: f (a -> b) -> f a -> f b; ...; -- Defined in `GHC.Base'; infixl 4 <*>
10:10:46 <merijn> So, precedence level 4, left associative
10:11:21 alp_ joins (~alp@88.126.45.36)
10:11:40 <someuser123> thanks
10:11:42 adauguet joins (4d838b43@67.139.131.77.rev.sfr.net)
10:12:12 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds)
10:14:19 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
10:14:24 × sw1nn quits (~sw1nn@host81-146-21-49.range81-146.btcentralplus.com) (Quit: WeeChat 2.9)
10:14:58 <adauguet> Hi everyone, is this the right place to ask beginners questions about haskell?
10:14:59 <dminuoso> Unhammer: I have added `split-sections: true` to my ~/.cabal/config and made profits ever since! :)
10:15:03 <dminuoso> adauguet: Yes.
10:15:25 <dminuoso> adauguet: You can also use #haskell-beginners if you want a more quiet/less chatty place, but we dont mind the most naive beginner questions either.
10:15:36 sw1nn joins (~sw1nn@host81-146-21-49.range81-146.btcentralplus.com)
10:16:02 <adauguet> thanks, i will try on #haskell-beginners then
10:18:43 fendor joins (~fendor@77.119.129.27.wireless.dyn.drei.com)
10:22:59 darjeeling_ joins (~darjeelin@115.215.41.222)
10:24:32 × mmohammadi9812 quits (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻)
10:27:58 jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de)
10:28:26 nan` joins (~nan`@unaffiliated/nan/x-5405850)
10:29:59 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
10:32:13 perdent joins (~k4fr@212.102.36.136)
10:32:22 <perdent> Anyone here want to be hired to code a 'hacking' CTF challenge for money? If so PM me for further details
10:33:28 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds)
10:33:28 <Raito_Bezarius> perdent: what's the relation with Haskell?
10:34:28 <perdent> Raito_Bezarius: I want it to be coded in haskell
10:34:33 urodna joins (~urodna@unaffiliated/urodna)
10:34:44 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
10:35:07 <perdent> Makes it more difficult for participants who are not used to functional programming
10:35:48 <[exa]> also a lot more difficult to actually C the F
10:36:29 × pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Quit: gone to sleep. ZZZzzz…)
10:39:15 × gnumonik quits (~gnumonik@c-73-170-91-210.hsd1.ca.comcast.net) (Quit: Leaving)
10:39:27 rapskalian joins (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb)
10:44:25 × rapskalian quits (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 240 seconds)
10:44:34 × darjeeling_ quits (~darjeelin@115.215.41.222) (Ping timeout: 256 seconds)
10:45:42 sagax joins (~sagax_nb@213.138.71.146)
10:45:47 × fendor quits (~fendor@77.119.129.27.wireless.dyn.drei.com) (Remote host closed the connection)
10:46:51 darjeeling_ joins (~darjeelin@115.215.41.222)
10:47:16 Tops21 joins (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de)
10:48:25 × Tops2 quits (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de) (Ping timeout: 240 seconds)
10:50:02 DavidEichmann joins (~david@43.240.198.146.dyn.plus.net)
10:51:06 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
10:51:37 Amras joins (~Amras@unaffiliated/amras0000)
10:53:10 <dminuoso> How can I extract the test-suite binary in v2-*?
10:53:24 × someuser123 quits (59b76050@a89-183-96-80.net-htp.de) (Ping timeout: 245 seconds)
10:55:17 toorevitimirp joins (~tooreviti@117.182.182.33)
10:56:52 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
11:05:17 raehik joins (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net)
11:08:00 × adauguet quits (4d838b43@67.139.131.77.rev.sfr.net) (Ping timeout: 245 seconds)
11:10:18 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
11:12:02 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
11:13:29 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
11:13:57 ajcerejeira joins (~ajcerejei@2001:8a0:ddee:700:efbc:7163:11a0:b83)
11:13:58 × jchia_ quits (~jchia@58.32.37.220) (Quit: Leaving.)
11:14:00 <maerwald> dminuoso: same as any other
11:14:28 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
11:16:12 <dminuoso> Well until now it was just with `cp $(cabal v2-exec -- which foo) ..`
11:16:21 Turmfalke joins (~user@unaffiliated/siracusa)
11:16:25 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
11:16:26 <dminuoso> So I guess you're proposing to just use cabal-plan?
11:16:42 × yoneda quits (~mike@193.206.102.122) (Quit: leaving)
11:17:33 <maerwald> I did that v2-exec with spec test as well I believe
11:18:44 × rprije quits (~rprije@27.143.220.203.dial.dynamic.acc01-myal-dub.comindico.com.au) (Ping timeout: 260 seconds)
11:18:44 <dminuoso> Ah, I did not realize the testsuite binaries are called after their testsuite name.
11:19:35 × jchia__ quits (~jchia@58.32.37.220) (Quit: Leaving.)
11:19:59 jchia__ joins (~jchia@58.32.37.220)
11:20:12 × jchia__ quits (~jchia@58.32.37.220) (Client Quit)
11:20:35 Neuromancer joins (~Neuromanc@unaffiliated/neuromancer)
11:21:18 tchouri joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
11:21:27 <WzC> does anyone know how to get a fully statically compiled executable using ghc these days?
11:21:46 <maerwald> WzC: with alipne
11:22:02 <WzC> the internet claims 'ghc -static -optl-static -optl-pthread' should work, but that gives a bunch of errors
11:22:10 <merijn> WzC: Depends on how extreme you wanna take "full static" :)
11:22:23 <maerwald> there's only full static or none at all
11:22:55 <WzC> as in: everything (including dependent c-libs) included in the binary
11:22:57 <merijn> WzC: Well, for one, on linux you're hosed because glibc can't be linked statically, so you need a linux (or toolchain, at least) that has a statically linkable libc
11:23:03 <maerwald> WzC: see https://github.com/actions/setup-haskell/issues/31#issuecomment-676001831
11:23:43 × hekkaidekapus quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
11:23:51 jchia__ joins (~jchia@45.32.62.73)
11:24:06 × jchia__ quits (~jchia@45.32.62.73) (Client Quit)
11:24:31 jchia__ joins (~jchia@45.32.62.73)
11:24:40 <WzC> hmm I'll have to read through that a bit
11:24:41 × jchia__ quits (~jchia@45.32.62.73) (Client Quit)
11:26:14 <WzC> essentially I'm trying to set up ghc in domjudge, some system to compile student handins and test them. Somehow the system is running the compiled executables in some chroot, and hence the basic approach to avoid that would be to compile static binaries
11:26:16 <dminuoso> WzC: If you're a nix user, there's a static haskell overlay.
11:26:24 <maerwald> which sometimes works
11:27:09 <maerwald> WzC: it's easy
11:27:10 <WzC> this is essentially what I now get with those options though: https://gist.github.com/noinia/a77769a70b833496501ffb6a6e64472f
11:27:59 akegalj_ joins (~akegalj@93-142-93-99.adsl.net.t-com.hr)
11:28:59 ubert joins (~Thunderbi@178.165.131.132.wireless.dyn.drei.com)
11:31:36 × akegalj quits (~akegalj@93-136-206-221.adsl.net.t-com.hr) (Ping timeout: 256 seconds)
11:32:50 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
11:33:20 TooDifficult joins (~TooDiffic@139.59.59.230)
11:33:27 hackage niv 0.2.18 - Easy dependency management for Nix projects https://hackage.haskell.org/package/niv-0.2.18 (nmattia)
11:34:42 gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
11:34:59 × Stanley00 quits (~stanley00@unaffiliated/stanley00) (Remote host closed the connection)
11:35:09 × cpressey quits (~cpressey@79-72-201-114.dynamic.dsl.as9105.com) (Quit: kwit)
11:35:45 ALM49 joins (7bc007ac@123-192-7-172.dynamic.kbronet.com.tw)
11:36:01 Dolly joins (585fd1fd@ti0203q160-5312.bb.online.no)
11:36:21 <ALM49> Is it possible to qualify an infix operator?
11:36:44 <lortabac> yes
11:36:55 <opqdonut> > 1 Prelude.+ 2
11:36:57 <lambdabot> 3
11:36:59 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
11:37:02 <ALM49> ie. If I want to use `List.(++)` instead of having to `import Data.List (++)`
11:37:13 <dminuoso> ALM49: No, you have to explicitly add an import.
11:37:23 <opqdonut> but it could be a qualified import
11:37:37 <ALM49> Oh, so I just omit the parentheses?
11:37:47 <dminuoso> ALM49: Add additional parentheses.
11:38:02 <dminuoso> import Data.List ((++)), and if you want it qualified you can do `import qualified Data.List ((++))`
11:38:20 <dminuoso> And, then you can give an alias as well, like `import qualified Data.List as L ((++))`
11:38:56 × gmt quits (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
11:39:47 george_____t joins (5c094cd5@host-92-9-76-213.as43234.net)
11:40:17 × oxide quits (~lambda@unaffiliated/mclaren) (Read error: Connection reset by peer)
11:40:30 <ALM49> oh, that's strange
11:40:41 <ALM49> So I'd write something like
11:40:44 <ALM49> `(List.++) "abc" "def"`
11:41:54 <ALM49> Why do I need the parens there? What could that conflict with?
11:43:14 <dminuoso> You're writing it in prefix position.
11:43:30 AlterEgo- joins (~ladew@124-198-158-163.dynamic.caiway.nl)
11:43:57 <dminuoso> You can write named functions in infix position by wrapping them in ``, and you can write operators in prefix position by wrapping them in parens
11:44:12 <dminuoso> The maybe confusing part is to realize that List.++ is an operator
11:44:15 <ALM49> Wow, it never occured to me that I could use a qualified operator in infix position
11:44:18 × gxt quits (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection)
11:44:22 <dminuoso> Well, it *is* and remains an operator. ;)
11:44:59 gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
11:45:03 <ALM49> Well, coming from OCaml, operators are basically just identifiers
11:45:09 gxt joins (~gxt@gateway/tor-sasl/gxt)
11:45:30 <ALM49> I didn't realise that Haskell has a distinction between them
11:45:31 × gxt quits (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection)
11:47:11 frdg` joins (~user@pool-71-184-143-249.bstnma.fios.verizon.net)
11:48:21 gxt joins (~gxt@gateway/tor-sasl/gxt)
11:49:19 × frdg quits (~user@pool-71-184-143-249.bstnma.fios.verizon.net) (Ping timeout: 272 seconds)
11:49:52 <dminuoso> ALM49: There's even more going on. We have a 2x2 matrix of [["Variable identifier", "Constructor identifier"], ["Operator identifier", "Operator constructor"]]
11:50:18 <dminuoso> A common example of operator constructors is (:) from list. :)
11:50:56 <dminuoso> https://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-180002.4 contains a very readable and concise definition
11:51:56 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
11:52:40 × lemmih quits (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) (Remote host closed the connection)
11:53:02 lemmih joins (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d)
11:53:40 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
11:53:56 frdg`` joins (~user@pool-71-184-143-249.bstnma.fios.verizon.net)
11:54:25 takuan joins (~takuan@178-116-218-225.access.telenet.be)
11:54:36 frdg`` parts (~user@pool-71-184-143-249.bstnma.fios.verizon.net) ()
11:54:49 mmohammadi9812 joins (~mmohammad@5.238.164.128)
11:54:56 arjaz joins (~user@91.218.15.22)
11:55:00 arjaz parts (~user@91.218.15.22) ()
11:55:13 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 260 seconds)
11:56:26 sQVe joins (~sQVe@unaffiliated/sqve)
11:58:22 <ALM49> thanks dminuoso
11:58:25 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 264 seconds)
11:58:44 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
11:58:49 × frdg` quits (~user@pool-71-184-143-249.bstnma.fios.verizon.net) (Ping timeout: 272 seconds)
11:58:52 × raehik quits (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
11:59:46 knupfer joins (~Thunderbi@dynamic-046-114-150-052.46.114.pool.telefonica.de)
11:59:54 × toorevitimirp quits (~tooreviti@117.182.182.33) (Ping timeout: 260 seconds)
12:00:01 × blardo quits (~blardo@185.244.214.216) ()
12:00:45 tchouri is now known as hekkaidekapus
12:02:44 × ericsagnes quits (~ericsagne@i153-145-14-232.s42.a013.ap.plala.or.jp) (Ping timeout: 246 seconds)
12:03:22 × sQVe quits (~sQVe@unaffiliated/sqve) (Ping timeout: 272 seconds)
12:03:26 <ski> kuribas : "perhaps if the return of (a -> a) is smaller than the input?" -- how about if it's larger ?
12:03:37 <ski> kuribas : "is there a fix-like function that doesn't diverge?" -- maybe some variant of `loeb' ?
12:03:43 raehik joins (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net)
12:03:58 <kuribas> ski: never heard of loeb... I'll look it up
12:04:32 <hekkaidekapus> ALM49: In ghci, you can use qualified identifiers without a prior module import.
12:04:44 <hekkaidekapus> % 4 Data.List.NonEmpty.:| [5, 6]
12:04:45 <yahb> hekkaidekapus: 4 :| [5,6]
12:05:25 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
12:05:27 fendor joins (~fendor@e237-037.eduroam.tuwien.ac.at)
12:06:36 <ski> kuribas : the usual Haskell combinator with that name is
12:06:40 × lemmih quits (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) (Remote host closed the connection)
12:06:59 lemmih joins (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d)
12:07:46 <ski> @let loeb :: Functor f => f (f a -> a) -> f a; loeb fs = fa where fa = fmap ($ fa) ff
12:07:48 <lambdabot> .L.hs:218:26: error:
12:07:48 <lambdabot> • Variable not in scope: ff :: f1 (f1 b -> b)
12:07:48 <lambdabot> • Perhaps you meant one of these:
12:07:52 <ski> @let loeb :: Functor f => f (f a -> a) -> f a; loeb fs = fa where fa = fmap ($ fa) fs
12:07:54 <lambdabot> Defined.
12:08:01 sQVe joins (~sQVe@unaffiliated/sqve)
12:08:24 × sQVe quits (~sQVe@unaffiliated/sqve) (Client Quit)
12:09:04 <ski> > loeb [sum . tail,length,const 2,liftA2 (*) (!! 1) (!! 2)]
12:09:07 <lambdabot> [14,4,2,8]
12:11:20 × dmiles quits (dmiles@c-73-67-179-188.hsd1.wa.comcast.net) (Ping timeout: 265 seconds)
12:12:57 pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
12:12:59 × knupfer quits (~Thunderbi@dynamic-046-114-150-052.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
12:13:25 <kuribas> what weird magic is this?
12:13:35 × ajcerejeira quits (~ajcerejei@2001:8a0:ddee:700:efbc:7163:11a0:b83) (Quit: ajcerejeira)
12:13:48 <yushyin> loeb magic
12:14:35 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
12:16:30 <enikar> :t loeb
12:16:32 <lambdabot> Functor f => f (f a -> a) -> f a
12:17:44 <ski> (named after some kind of analogy with <https://en.wikipedia.org/wiki/L%C3%B6b%27s_theorem>,<https://en.wikipedia.org/wiki/L%C3%B6b's_paradox>)
12:17:49 <Uniaika> rally racing has made its way into Haskell!
12:17:58 <ski> racing ?
12:18:28 <Uniaika> https://en.wikipedia.org/wiki/S%C3%A9bastien_Loeb
12:18:28 <phadej> https://en.wikipedia.org/wiki/S%C3%A9bastien_Loeb
12:18:29 <Uniaika> :)
12:18:34 <phadej> (:
12:18:35 <Uniaika> haha, raced, phadej!
12:18:42 <ski> hm, never heard about him
12:18:54 <Uniaika> oh don't worry, I know him because I'm french
12:19:01 <phadej> finns know rally too
12:19:24 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
12:19:33 <ski> kuribas : anyway, can you follow that example, or would you like a hint ?
12:21:05 bicho_rastrero joins (~cerdito@154.85-87-39.dynamic.clientes.euskaltel.es)
12:21:33 <phadej> eh, 9 consecutive championships
12:21:42 <phadej> might been a bit boring at the end
12:22:17 <kuribas> ski: more or less... I'll study it another time
12:22:58 <phadej> "Loeb is a tarmac expert, having won all but three of the WRC rallies on that surface in which he has participated between 2005 and 2013."
12:24:12 <ski> kuribas : basically, that example works sortof like a spreadsheet. every "cell" can refer to the value of all the other "cells"
12:24:32 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
12:24:37 <kuribas> ski: a comonad?
12:24:59 × gmt quits (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
12:25:02 <Unhammer> so split-sections on windows gives "ld.exe: blah.o: too many sections", "file is too big", when compiling blazehtml
12:25:17 <Unhammer> too bad
12:25:28 <ski> this `loeb' only requires a functor (and general recursion)
12:26:11 <Unhammer> works great on my other project that doesn't need windows though :) 30M → 9.9M
12:26:14 <ski> (if you pick `Identity', you get the usual `fix')
12:26:34 <kuribas> indeed
12:26:36 <kuribas> pretty neat
12:26:53 × xerox_ quits (~xerox@unaffiliated/xerox) (Ping timeout: 246 seconds)
12:27:00 <ski> so, you can easily chase your own tail, with this `loeb'
12:27:32 <ski> but if you only provided access to some other cells, in some well-founded order, say ..
12:27:52 <ski> > foldr (\f as -> f as : as) [] (replicate 4 (succ . sum))
12:27:55 <lambdabot> [8,4,2,1]
12:27:58 <ski> @type foldr (\f as -> f as : as) []
12:28:00 <lambdabot> Foldable t => t ([a] -> a) -> [a]
12:28:24 <ski> in this case, each cell only gets access to the values of the cells after it
12:28:39 <ski> and so, it's in some sense "like `fix'", but doesn't get you general recursion
12:29:17 <kuribas> ski: but you just showed it is like fix?
12:29:22 <kuribas> with Identity
12:29:31 <ski> no, that was the `loeb' i just defined, above
12:30:17 <kuribas> ah right...
12:30:19 <ski> the original Löb's theorem, can be interpreted to be about staged computation, and in that case also doesn't give you general recursion
12:30:31 <kuribas> and if instead of cell you take datatype fields... that may work
12:30:37 <ski> (also related to quines)
12:31:06 <ski> you have to avoid cycles. so you need to pick some well-founded order
12:32:49 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core)
12:33:05 <ski> (or if you don't, you'd need to ensure that each step is productive. that's my "larger" suggestion from above)
12:33:08 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
12:34:02 mirrorbird joins (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71)
12:34:43 sQVe joins (~sQVe@unaffiliated/sqve)
12:35:27 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
12:36:12 × sQVe quits (~sQVe@unaffiliated/sqve) (Client Quit)
12:36:22 wavemode joins (~wavemode@097-070-075-143.res.spectrum.com)
12:36:46 sQVe joins (~sQVe@unaffiliated/sqve)
12:37:05 × sQVe quits (~sQVe@unaffiliated/sqve) (Client Quit)
12:37:31 × mmohammadi9812 quits (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻)
12:38:35 × george_____t quits (5c094cd5@host-92-9-76-213.as43234.net) (Remote host closed the connection)
12:40:08 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
12:40:59 sQVe joins (sQVe@gateway/vpn/mullvad/sqve)
12:41:30 × sQVe quits (sQVe@gateway/vpn/mullvad/sqve) (Client Quit)
12:41:56 fendor_ joins (~fendor@t204-126.demo.tuwien.ac.at)
12:42:01 sQVe joins (sQVe@gateway/vpn/mullvad/sqve)
12:43:44 × fendor quits (~fendor@e237-037.eduroam.tuwien.ac.at) (Ping timeout: 256 seconds)
12:44:03 × Unhammer quits (~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 240 seconds)
12:44:29 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core)
12:44:48 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
12:46:24 Aquazi joins (uid312403@gateway/web/irccloud.com/x-sjkqhkuufbqwprbm)
12:47:17 Achylles joins (~Achylles@201-27-79-1.dsl.telesp.net.br)
12:48:46 Unhammer joins (~Unhammer@gateway/tor-sasl/unhammer)
12:50:32 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core)
12:50:53 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
12:52:19 × akegalj_ quits (~akegalj@93-142-93-99.adsl.net.t-com.hr) (Remote host closed the connection)
12:52:27 ericsagnes joins (~ericsagne@2405:6580:0:5100:bce9:b254:2a4:39d4)
12:53:14 jchia__ joins (~jchia@45.32.62.73)
12:53:57 × shatriff quits (~vitaliish@176.52.219.10) (Remote host closed the connection)
12:54:57 × jchia__ quits (~jchia@45.32.62.73) (Remote host closed the connection)
12:55:45 jchia__ joins (~jchia@58.32.37.220)
12:56:15 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
12:57:43 × ericsagnes quits (~ericsagne@2405:6580:0:5100:bce9:b254:2a4:39d4) (Ping timeout: 272 seconds)
12:58:00 shatriff joins (~vitaliish@176.52.219.10)
12:58:57 × sQVe quits (sQVe@gateway/vpn/mullvad/sqve) (Quit: Bye!)
12:59:04 × alp_ quits (~alp@88.126.45.36) (Ping timeout: 260 seconds)
13:00:56 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
13:01:06 <exarkun> Anyone want to recommend a prometheus library (I guess they're "prometheus client" libraries? for publishing metrics)? I see a lot of options out there.
13:02:24 × kritzefitz quits (~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
13:06:55 hyperisco joins (~hyperisco@d192-186-117-226.static.comm.cgocable.net)
13:11:08 <exarkun> oops no there's only one in my stack resolver so I guess that's easy
13:11:39 × Rudd0 quits (~Rudd0@185.189.115.98) (Ping timeout: 260 seconds)
13:12:27 × bicho_rastrero quits (~cerdito@154.85-87-39.dynamic.clientes.euskaltel.es) (Remote host closed the connection)
13:12:41 × ALM49 quits (7bc007ac@123-192-7-172.dynamic.kbronet.com.tw) (Remote host closed the connection)
13:13:40 eric_ joins (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e)
13:13:59 jedws joins (~jedws@101.184.189.58)
13:15:43 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
13:16:47 mmohammadi9812 joins (~mmohammad@5.238.164.128)
13:17:10 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
13:17:14 × gxt quits (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection)
13:17:56 gxt joins (~gxt@gateway/tor-sasl/gxt)
13:18:58 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
13:20:08 × Dolly quits (585fd1fd@ti0203q160-5312.bb.online.no) (Remote host closed the connection)
13:20:19 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
13:21:20 ericsagnes joins (~ericsagne@2405:6580:0:5100:bce9:b254:2a4:39d4)
13:21:54 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 265 seconds)
13:22:26 da39a3ee5e6b4b0d joins (~textual@2403:6200:8876:37d7:b93e:60af:b75b:c0ef)
13:24:19 xerox_ joins (~xerox@unaffiliated/xerox)
13:25:52 eric__ joins (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f)
13:28:14 elliott_ joins (~elliott@pool-71-114-77-65.washdc.fios.verizon.net)
13:28:59 × eric_ quits (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) (Ping timeout: 244 seconds)
13:30:26 <dminuoso> exarkun: Both prometheus and prometheus-client are great.
13:30:27 × jedws quits (~jedws@101.184.189.58) (Quit: My MacBook has gone to sleep. ZZZzzz…)
13:30:30 machinedgod joins (~machinedg@d67-193-126-196.home3.cgocable.net)
13:30:50 MaddinSM joins (~MaddinSM@185.204.1.185)
13:31:03 <exarkun> alright, cool. prometheus-client is what I'm looking at now. thanks.
13:31:06 <dminuoso> Overall Id just run with prometheus-client
13:31:16 × s00pcan quits (~chris@107.181.165.217) (Ping timeout: 246 seconds)
13:31:28 <dminuoso> (It's what we use)
13:31:46 jedws joins (~jedws@101.184.189.58)
13:31:47 <dminuoso> It uses a nasty global mutable registry, but oh well.
13:32:24 <dminuoso> Just not a big fan of prometheus coming with warp, feels wrong
13:32:57 hvr_ joins (~hvr@haskell/developer/hvr)
13:33:17 s00pcan joins (~chris@075-133-056-178.res.spectrum.com)
13:33:18 × hvr quits (~hvr@haskell/developer/hvr) (Ping timeout: 272 seconds)
13:36:25 × hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 240 seconds)
13:37:38 hyperisco joins (~hyperisco@d192-186-117-226.static.comm.cgocable.net)
13:38:01 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
13:40:24 son0p joins (~son0p@181.136.122.143)
13:40:54 × aarvar quits (~foewfoiew@50.35.43.33) (Ping timeout: 272 seconds)
13:41:27 hackage wai-extra 3.0.31 - Provides some basic WAI handlers and middleware. https://hackage.haskell.org/package/wai-extra-3.0.31 (MichaelSnoyman)
13:42:41 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
13:47:18 × inkbottle quits (~inkbottle@aaubervilliers-654-1-114-91.w86-198.abo.wanadoo.fr) (Quit: Konversation terminated!)
13:47:22 pingiun joins (~pingiun@ip-213-124-184-182.ip.prioritytelecom.net)
13:47:40 inkbottle joins (~inkbottle@aaubervilliers-654-1-114-91.w86-198.abo.wanadoo.fr)
13:47:57 hackage uniqueness-periods-vector-filters 0.1.0.0 - A library allows to change the structure of the 'RealFrac' function output. https://hackage.haskell.org/package/uniqueness-periods-vector-filters-0.1.0.0 (OleksandrZhabenko)
13:47:58 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
13:50:05 × bitmagie quits (~Thunderbi@200116b80670970060cb385f030853d4.dip.versatel-1u1.de) (Ping timeout: 244 seconds)
13:50:41 × Gerula quits (~Gerula@unaffiliated/gerula) (Ping timeout: 244 seconds)
13:52:59 Gerula joins (~Gerula@unaffiliated/gerula)
13:54:44 × ericsagnes quits (~ericsagne@2405:6580:0:5100:bce9:b254:2a4:39d4) (Ping timeout: 244 seconds)
13:55:10 jlamothe joins (~jlamothe@dev.jlamothe.net)
13:55:53 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
13:57:15 × mirrorbird quits (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Ping timeout: 272 seconds)
13:58:55 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
14:00:38 mdunnio joins (~mdunnio@208.59.170.5)
14:03:05 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
14:05:58 × mdunnio quits (~mdunnio@208.59.170.5) (Remote host closed the connection)
14:06:10 mdunnio joins (~mdunnio@208.59.170.5)
14:07:00 josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net)
14:08:28 tzh joins (~tzh@2601:448:c500:5300::ad1c)
14:08:59 × eric__ quits (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) (Read error: Connection reset by peer)
14:09:10 gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
14:09:35 eric joins (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f)
14:10:15 finkata joins (~dpetrov@83.222.188.39)
14:11:20 × Neuromancer quits (~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 256 seconds)
14:13:04 × finkata quits (~dpetrov@83.222.188.39) (Remote host closed the connection)
14:13:25 × gmt quits (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
14:13:40 <ezzieyguywuf> lol, so turtle is supposed to replace bash?
14:14:37 finkata joins (~dpetrov@83.222.188.39)
14:15:37 × borne quits (~fritjof@200116b8641fc4005e981dab12496c3b.dip.versatel-1u1.de) (Ping timeout: 272 seconds)
14:16:25 <merijn> ezzieyguywuf: define "supposed" and "replace" :p
14:17:17 <merijn> Think of Turtle as a library/framework optimised for making it easier/simpler to write "bash-like scripts" in Haskell
14:17:51 <ezzieyguywuf> "supposed" is in "intended" and "replace" as in "use instead of all the time"
14:18:24 <merijn> Realistically *nothing* is going to replace bash in the next century
14:18:37 <merijn> It's like COBOL, ubiquitous to the point of immortality
14:18:44 seanvert joins (~user@177.84.244.242)
14:19:18 <merijn> And nothing seriously aspires to replacing bash (I mean, that might be the wishful thinking marketing some shells throw about, but nobody believes that)
14:19:36 <merijn> Not to mention the fact that bash is 2 things, an interactive shell and a scripting language
14:19:38 <ezzieyguywuf> i've been using zsh
14:19:44 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
14:19:48 <ezzieyguywuf> but since I just installed gentoo on a new laptop, i'm reconsideringb
14:20:02 <ezzieyguywuf> b/c I think zsh just makes it easy to do things that you can already do in bash with a little bit of oomph
14:20:54 <maerwald> use fish
14:21:07 <ezzieyguywuf> 😂
14:21:09 Neuromancer joins (~Neuromanc@unaffiliated/neuromancer)
14:21:12 <ezzieyguywuf> i tried fish for like a minute once
14:21:20 <maerwald> I switch to bash occasionally when I need to do serious things
14:21:25 <merijn> ezzieyguywuf: So at best turtle is an alternative to one of the two use cases of bash (i.e. shell scripts)
14:21:26 <yushyin> have a look at rash, an interactive shell with the power of racket :D
14:21:27 <maerwald> but the defaults aregood
14:21:27 <ezzieyguywuf> oh you were forrill
14:21:42 <yushyin> https://rash-lang.org/ ^^
14:22:06 <merijn> ezzieyguywuf: The one thing bash (and shell) excel at is easily combining different processes together (the "process" library is a bit heavy weight to work with)
14:22:28 <merijn> ezzieyguywuf: So turtle tries to make that sort of "multi-process" scripting easier/nicer to do in Haskell
14:24:36 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 256 seconds)
14:24:37 <ezzieyguywuf> rash looks interesting
14:25:18 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
14:25:50 <sm[m]> oil shell might do it
14:25:57 ski . o O ( F_{i}shell <http://fishell.sf.net> )
14:26:49 <maerwald> download page is sourceforge, LoL
14:27:03 Sgeo joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
14:27:22 <ezzieyguywuf> maerwald: lol, for rash?
14:27:37 <maerwald> fishell
14:27:55 <ezzieyguywuf> 😂
14:28:11 <ezzieyguywuf> that's weird b/c I just found a github for fish-shell
14:28:25 mmohammadi98127 joins (~mmohammad@5.238.164.128)
14:28:57 <ski> not the same thing
14:29:05 × mmohammadi9812 quits (~mmohammad@5.238.164.128) (Read error: Connection reset by peer)
14:29:06 mmohammadi98127 is now known as mmohammadi9812
14:29:57 × heatsink quits (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Ping timeout: 244 seconds)
14:30:07 nan` joins (~nan`@unaffiliated/nan/x-5405850)
14:33:03 × kleisli_ quits (~kleisli@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) (Ping timeout: 244 seconds)
14:33:30 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
14:34:06 × mmohammadi9812 quits (~mmohammad@5.238.164.128) (Ping timeout: 272 seconds)
14:34:32 mmohammadi9812 joins (~mmohammad@5.238.164.128)
14:34:45 jneira joins (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206)
14:35:01 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 264 seconds)
14:35:48 ddellacosta joins (~dd@86.106.121.168)
14:37:05 × shafox quits (~shafox@106.51.234.111) (Remote host closed the connection)
14:38:12 shafox joins (~shafox@106.51.234.111)
14:38:13 × TooDifficult quits (~TooDiffic@139.59.59.230) (Quit: TooDifficult)
14:38:16 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
14:38:47 × miklcct quits (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
14:39:43 × cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds)
14:40:37 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
14:42:17 miklcct joins (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7)
14:43:44 × da39a3ee5e6b4b0d quits (~textual@2403:6200:8876:37d7:b93e:60af:b75b:c0ef) (Quit: My MacBook has gone to sleep. ZZZzzz…)
14:44:28 <z0> > 9 / (1/0)
14:44:31 <lambdabot> 0.0
14:44:47 shadowdao joins (~user@unaffiliated/shadowdaemon)
14:44:59 <z0> ^ can someone explain this to me?
14:45:07 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 246 seconds)
14:45:13 cantstanya joins (~chatting@gateway/tor-sasl/cantstanya)
14:45:22 <dolio> 1/0 is infinity, and 9/infinity = 0.
14:46:10 <z0> i get the theory, but how does Haskell do this?
14:46:21 <dolio> It's IEEE754 arithmetic.
14:46:32 × mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Remote host closed the connection)
14:47:31 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
14:47:53 <hyperisco> so obviously 0*infinity = 9
14:48:22 <merijn> z0: What do you mean by "how does Haskell do this??
14:48:31 <merijn> s/??/"?
14:48:38 <hyperisco> > 0 * (1/0)
14:48:41 <lambdabot> NaN
14:48:58 mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848)
14:48:59 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
14:49:07 × mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Remote host closed the connection)
14:49:07 <merijn> The answer is, most likely, "the same way C does this"
14:49:16 <hyperisco> maybe "NaN" should mean "more than one number"
14:49:25 <z0> @type (1/0)
14:49:27 <lambdabot> Fractional a => a
14:49:34 mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848)
14:49:37 <z0> > 1/0
14:49:40 <lambdabot> Infinity
14:49:42 <dmwit> > 9 / (1/0) :: Rational
14:49:44 <lambdabot> *Exception: Ratio has zero denominator
14:49:46 <z0> @type Infinity
14:49:48 <lambdabot> error:
14:49:48 <lambdabot> • Data constructor not in scope: Infinity
14:49:48 <lambdabot> • Perhaps you meant variable ‘infinity’ (imported from Data.Number.Natural)
14:49:49 <ski> > sqrt (-1)
14:49:51 <lambdabot> NaN
14:49:52 <merijn> z0: Ah, how does it decide the type of a polymorphic expression?
14:49:52 <ski> > log (-1)
14:49:54 <lambdabot> NaN
14:50:05 <merijn> z0: Was that the question?
14:50:15 <z0> merijn: that's right
14:50:19 <hyperisco> MoreThanOneNumber, NotInRealPlane
14:50:34 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
14:50:37 <hyperisco> FILE_NOT_FOUND probably somewhere in the arithmetic
14:50:41 <dmwit> z0: It uses defaulting. The default default is (Integer, Double), I think.
14:50:41 agiza joins (2eef7ad3@larka.olf.sgsnet.se)
14:50:55 <merijn> z0: Ok, so there's a bunch of rules in the report that define special cases for polymorphic types for Num/Integral and Fractional/etc.
14:51:02 ski . o O ( `abs (0/0)' )
14:51:03 <z0> merijn: and what is Infinity treated as a value of type Fractional a => a
14:51:18 <dmwit> Infinity is not a value of type Fractional a => a.
14:51:24 × agiza quits (2eef7ad3@larka.olf.sgsnet.se) (Remote host closed the connection)
14:51:24 <dmwit> It is a value of type Double, and a value of type Float.
14:51:25 <merijn> z0: Which basically say "if you've got a polymorphic expression that's Num or Integral, default it to Integer" and "Double" for Fractional
14:51:38 <dmwit> > (read "Infinity" :: Double, read "Infinity" :: Rational)
14:51:41 <lambdabot> (Infinity,*Exception: Prelude.read: no parse
14:51:50 <merijn> z0: This is covered by the "defaulting rules"
14:51:54 alp_ joins (~alp@2a01:e0a:58b:4920:102b:86e3:d072:38a0)
14:51:54 <hyperisco> yes, the seldom talked about defaults feature
14:52:02 <merijn> z0: If you enable -Wall you should get warnings for defaulting, iirc
14:52:10 <dolio> Well, Infinity isn't a valid expression unless you define a data type with a constructor of that name.
14:52:19 <ski> (or pattern synonym)
14:52:24 <dolio> Yeah, or that.
14:52:28 <z0> dolio: i think that's what is confusing me
14:52:52 bahamas joins (~lucian@188.24.181.166)
14:52:52 × bahamas quits (~lucian@188.24.181.166) (Changing host)
14:52:52 bahamas joins (~lucian@unaffiliated/bahamas)
14:52:53 <dolio> 1/0 is an expression, and what it does depends on the type.
14:53:09 <merijn> z0: "(1/0) :: Fractional a => a" gets defaulted to type "Double" and when you compute 1/0 for Double the result is a Double (which happens to have value Infinity)
14:53:27 <ski> > 1 / 0 :: Rational
14:53:30 <lambdabot> *Exception: Ratio has zero denominator
14:53:47 <z0> > ((1/0) :: Double, (1/0) :: Rational, Infinity :: Double, Infinity :: Rational)
14:53:48 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
14:53:50 <lambdabot> error:
14:53:50 <lambdabot> • Data constructor not in scope: Infinity :: Double
14:53:50 <lambdabot> • Perhaps you meant variable ‘infinity’ (imported from Data.Number.Natur...
14:54:06 <z0> > ((1/0) :: Double, (1/0) :: Rational)
14:54:09 × mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Ping timeout: 244 seconds)
14:54:09 <lambdabot> (Infinity,*Exception: Ratio has zero denominator
14:54:22 <z0> > (Infinity :: Double)
14:54:25 <lambdabot> error:
14:54:25 <lambdabot> • Data constructor not in scope: Infinity :: Double
14:54:25 <lambdabot> • Perhaps you meant variable ‘infinity’ (imported from Data.Number.Natural)
14:54:32 <z0> hum
14:54:40 <merijn> z0: Infinity is the string representation of a Double value
14:54:48 <merijn> z0: That double value has no literal way to write it
14:54:51 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
14:54:56 <z0> ok i get it. thanks
14:55:18 <merijn> I think adding a pattern synonym for Infinity would be good, tbh
14:55:31 × ph88_ quits (~ph88@2a02:8109:9e40:2704:85f2:8dce:6e30:a554) (Ping timeout: 272 seconds)
14:55:40 <z0> but I also get how it can be a bad idea
14:56:09 <dmwit> Perhaps it is not made a pattern synonym because its type is too hard.
14:56:24 <dmwit> (Should we add a new class that just has Double and Float as instances just for this?)
14:56:29 <merijn> dmwit: Just define it as Double
14:56:37 <merijn> let's face it, no one gives a crap about Float
14:56:53 <merijn> Boom!
14:56:59 <dmwit> Mmm. Machine learning folks default to Float pretty consistently.
14:57:00 <merijn> Problem solved with the power of pragmatism!
14:57:22 <merijn> dmwit: They do silly stuff like use half-floats to, so that won't work anyway
14:57:37 <merijn> dmwit: Also pretty sure machine learning people don't generally care about writing Infinity in their code :p
14:58:04 <z0> ...yet
14:58:41 <dmwit> Nobody cares about writing Infinity in their code. Boom! Problem solved without even doing any work through pragmatism.
14:58:44 <merijn> z0: Anyway, I recommend enabling -Wall and avoiding defaulting :p
14:58:47 <merijn> dmwit: I do, though!
14:58:53 <ski> % 9 / Infinity
14:58:53 <yahb> ski: 0.0
14:59:02 <dolio> Well, you can propose it, and then someone else can run off an invent some kind of IEEE class that must be made to ensure maximal generality.
14:59:33 <merijn> dolio: uh-huh, that's why we have the perfect generalised numeric typeclass hierarchy, now, right? ;)
14:59:37 <dmwit> Pfft, you do silly stuff like serialization and deserialization, so that won't work anyway
15:00:01 × MaddinSM quits (~MaddinSM@185.204.1.185) ()
15:00:15 polyphem joins (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889)
15:00:19 cosimone_ joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
15:00:19 <hyperisco> I'll be impressed once we stop treating floats like reals
15:00:32 <merijn> hyperisco: Smart people never started :p
15:00:40 <dolio> merijn: Just hope that the requirement for the class to be perfect doesn't block your Infinity pattern getting added. :)
15:00:45 <merijn> The reals are shit numbers anyway :p
15:01:22 <merijn> Like a proper computer scientist I only care about whole numbers...and maybe rationals
15:01:31 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
15:01:41 <hyperisco> whole numbers and pairs of whole numbers
15:01:51 <maerwald> rationals escalate quickly
15:02:15 <hyperisco> π is 22/7 and that's the end of it
15:02:34 <merijn> Pi is basically 3
15:02:58 <dolio> Floating point is just bad rationals, though.
15:03:16 <dminuoso> Also, why dont we have support for transcedental numbers? :<
15:03:34 <ski> how about algebraic numbers, to start with ?
15:03:35 <merijn> dmwit: We barely know any of the numbers anyway
15:03:43 <merijn> s/dmwit/dminuoso
15:04:01 <hyperisco> I just want the imprecision of floats acknowledged by some static analysis
15:04:18 <merijn> hyperisco: There's already a whole bunch of that
15:04:27 <hyperisco> I don't want floats put into a type class with laws they don't hold
15:04:34 <merijn> like http://herbie.uwplse.org/
15:04:38 <dmwit> dminuoso: You might like the cyclotomic package.
15:04:47 × cp- quits (~cp-@b157153.ppp.asahi-net.or.jp) (Ping timeout: 240 seconds)
15:04:49 <merijn> hyperisco: Which typeclass's laws do they violate?
15:05:00 <dmwit> It supports most of the transcendentals that come up in calculations, and doesn't have the observation problems that CReal does.
15:05:10 <merijn> I guess Eq, but that's solved once Carter finishes the crusade to abolish value NaN :p
15:05:20 <dmwit> ski: You, too. The cyclotomics are a superset of the algebraic numbers.
15:05:47 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
15:06:18 <hyperisco> merijn, associativity for one
15:06:38 <merijn> hyperisco: Of what?
15:06:53 Saukk joins (~Saukk@2001:998:dc:4a67:1c59:9bb5:b94c:4)
15:06:56 <dolio> Additions and multiplication.
15:06:56 <hyperisco> addition, multiplication, but the report has no laws for Num anyways
15:07:17 da39a3ee5e6b4b0d joins (~textual@2403:6200:8876:37d7:b93e:60af:b75b:c0ef)
15:08:09 <hyperisco> if we were honest up front it might not be *that bad* in the end
15:09:12 cp- joins (~cp-@b157153.ppp.asahi-net.or.jp)
15:09:35 × cosimone_ quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
15:09:59 × machinedgod quits (~machinedg@d67-193-126-196.home3.cgocable.net) (Ping timeout: 246 seconds)
15:11:12 __Joker_ joins (~Joker@180.151.105.86)
15:11:26 <dolio> I don't know. Doesn't that mostly matter when people use other faulty operations, like equality?
15:12:21 <merijn> dolio: Equality is fine, value NaN is bogus >.>
15:12:30 <dolio> No, it's not fine.
15:12:44 × raehik quits (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
15:12:47 <dolio> You shouldn't be testing floats for equality, you should be testing that they're "close enough" usually.
15:12:49 <merijn> Name one thing faulty about it excluding value NaN
15:13:00 <merijn> dolio: I call bullshit
15:13:12 <merijn> I frequently need exact equality for floats
15:13:30 <merijn> Like "when checking that deterministic computations are in fact deterministic and remain identical"
15:14:04 <merijn> equality on floats is a perfectly well-defined and reasonable operation in the absense of value NaN
15:14:22 <hyperisco> dolio, equality for floats is much weaker than usual, yes… I think the error bars need to be accounted for
15:14:38 × __Joker quits (~Joker@180.151.106.108) (Ping timeout: 272 seconds)
15:14:42 <dolio> merijn: You're missing the point.
15:14:48 unlink__ joins (~unlink2@p200300ebcf25bd0068eb9d9c94da2a17.dip0.t-ipconnect.de)
15:14:58 <hyperisco> because if you only retain the error-free equalities then you can hardly say enough about floats
15:15:07 × mud quits (~mud@unaffiliated/kadoban) (Quit: bye)
15:15:15 <merijn> dolio: Which is?
15:15:18 × Neuromancer quits (~Neuromanc@unaffiliated/neuromancer) (Read error: Connection reset by peer)
15:15:27 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
15:15:37 <ski> (it would be nice to have `forall x y. x == y == True => x = y' and `forall x y. x == y = False => x =/= y')
15:15:51 <ski> (s/== True/= True/)
15:16:01 <merijn> ski:Right, which is the case once you elimiante value NaN
15:16:22 <hyperisco> so I think probably instead you have to talk about intervals of reals, and then instead of equality you have interval relations
15:16:30 <merijn> value NaN is what torpedoes reflexivity
15:16:37 <hyperisco> (where actual equality becomes the relation of equality on intervals)
15:17:33 <hyperisco> so you can say a < b if the interval of a precedes the interval of b
15:17:42 <dolio> Which is that expected algebraic rules hold up to 'approximate equality', so you don't just tell people "addition isn't associative," because it's not the whole story. Part of the story is that exact equality is only reliable for exact sequences of operations, and shouldn't be treated as reliable in general.
15:17:50 <hyperisco> precedes or meets
15:17:59 × zaquest quits (~notzaques@5.128.210.178) (Read error: Connection reset by peer)
15:18:01 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
15:18:12 zaquest joins (~notzaques@5.128.210.178)
15:18:25 fendor__ joins (~fendor@e237-037.eduroam.tuwien.ac.at)
15:18:38 <hyperisco> a float calculation is exact if the interval is expressible as [x,x] for some x, etc
15:18:39 <ski> dolio : that's separate from the `NaN' point, though
15:18:46 <hyperisco> at least this is the line I would try to go down
15:18:46 <dolio> I didn't even bring up NaN.
15:18:55 <carter> merijn: did you see the final version of clamp that got merged in last week? It handles NaN in a pretty ncie way
15:19:09 <carter> Yeah, agree with dolio , it’s a stance I’ve had myself.
15:19:14 <ski> yes. iow you're (mostly) talking about different things
15:19:17 <merijn> carter: No, I've been busy learning Fortran >.>
15:19:23 <dolio> Yeah, so don't jump into what I'm saying.
15:19:48 <carter> dolio: the 1 plus or minus epsilon flavor or approximate equality?
15:19:58 <hyperisco> dolio, we can give "approximate equality" a precise meaning though, don't you think?
15:20:11 <carter> merijn: is flang the only oss / free compiler for modern FORTRAN?
15:20:14 <dolio> I don't know. I don't care enough to actually learn all the details necessary.
15:20:19 <carter> hyperisco: ues you can
15:20:49 <carter> Basically every operation has a error bound of multiplicative 1 plus or minus epsilon error
15:20:51 <dolio> It's just my impression that people who actually work with IEEE heavily espouse this view.
15:21:02 <merijn> carter: I dunno? We use gfortran and I am not sure what "modern Fortran" really entails, but I've become really sure that all documentation on Fortran sucks balls :)
15:21:06 × fendor_ quits (~fendor@t204-126.demo.tuwien.ac.at) (Ping timeout: 256 seconds)
15:21:24 <carter> merijn: apparently you can kinda write sane stuff with new enough FORTRAN
15:21:36 <hyperisco> carter, so I suspect my interval analysis is effective
15:22:02 <carter> hyperisco: not quite. Interval analysis will always over estimate error
15:22:14 × ubert quits (~Thunderbi@178.165.131.132.wireless.dyn.drei.com) (Ping timeout: 272 seconds)
15:22:21 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
15:22:21 <carter> Though it’s still useful.
15:22:42 × carlomagno1 quits (~cararell@inet-hqmc02-o.oracle.com) (Remote host closed the connection)
15:22:49 <hyperisco> how can we be more exact?
15:23:13 <dolio> carter: I think people usually would have some defined epislon that their results need. Not necessarily the smallest possible epsilon.
15:23:27 × Sunblaze21 quits (~sanjay@116.72.71.64) (Quit: Leaving.)
15:23:33 <carter> Absolutely
15:23:35 <dolio> Oh, I guess that's what you meant.
15:23:45 <carter> But for the computation itself
15:23:46 ph88_ joins (~ph88@2a02:8109:9e40:2704:85f2:8dce:6e30:a554)
15:24:06 Sunblaze21 joins (~sanjay@116.72.71.64)
15:24:12 <carter> 333333hyperisco: there’s these pretty powerful but soemtimes annoying ideas called forwards and backwards stability
15:24:38 <carter> So one flavor is that your result is a perturbation of the correct answer to the exact input.
15:25:02 <carter> The other is that your output is an exact answer to some input that’s a nearby perturbation of your input
15:25:42 <dmwit> > 0 == -0
15:25:45 <lambdabot> True
15:25:49 <dmwit> > 0 == (-0 :: Double)
15:25:49 mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848)
15:25:52 <lambdabot> True
15:26:00 <dmwit> merijn: ^
15:26:07 <carter> That’s so you can handle directional limits
15:26:11 <dmwit> Torpedoing NaN isn't enough to get ski's property.
15:26:26 <carter> What property does he want
15:26:35 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
15:26:36 <dmwit> (==) being Leibniz equality, basically.
15:26:46 <ski> when it terminates
15:26:51 <dmwit> right
15:27:17 <carter> I mean, the signed zero thing is so you can talk about left or right limits
15:27:28 <carter> Afaik.
15:27:39 <dmwit> I think everybody agrees that every decision made in IEEE754 has a justification behind it.
15:27:44 <carter> Yeah
15:27:48 <dolio> Hahaha.
15:27:57 <dmwit> That doesn't mean that at the end of justifying all those decisions you get something with nice properties.
15:28:29 <carter> Oh did you read how idris2 proved false because it’s model of equalities for float were wrong?
15:28:39 <carter> Apparently same happened to agda before
15:28:48 <hyperisco> I figured it was as simple as it is a possible bitfield
15:28:50 <dolio> Not surprised.
15:28:52 sid_cypher joins (~quassel@200116b80060a70031488a0eec1b5c23.dip.versatel-1u1.de)
15:29:06 <carter> hyperisco: sign in floats?
15:29:07 <hyperisco> like with 1's complement
15:29:08 <dolio> Agda's is still wrong, I think, but someone is working on it.
15:29:09 <hyperisco> yes
15:29:13 <hyperisco> well -0 specifically
15:29:26 <dolio> I don't know if you can prove false from it, though. It just doesn't make sense.
15:29:40 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
15:30:01 <dolio> Like, I think the ordering is just the induced ordering from Double -> Word64.
15:30:18 <hyperisco> their other option is to leave that particular bitfield undefined?
15:30:36 <carter> dolio: as bit rep ? Or other. I think that’s how the ieee tots order is defined
15:30:54 <carter> hyperisco: or make it a quotiented type!
15:30:59 × mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Ping timeout: 272 seconds)
15:31:10 <carter> Ideas from hott but for numerical computing formal methods
15:31:19 <dolio> carter: Yeah, the bit representation. But it's not correct because Word64 is unsigned.
15:31:47 <carter> I thought it was leading bit is sign. Then magnitude. The mantissa ?
15:31:48 <dolio> So negative numbers are larger than positive numbers.
15:31:54 <carter> Ok fuck that
15:31:58 <carter> That’s bad
15:32:05 Lycurgus joins (~niemand@98.4.96.130)
15:32:34 <carter> I’ve actually been thinking a lot about how quotient types a la hott or whatever might be amazing for generic programming
15:33:07 × da39a3ee5e6b4b0d quits (~textual@2403:6200:8876:37d7:b93e:60af:b75b:c0ef) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:33:31 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
15:34:49 <dolio> Yeah, hopefully that bears some fruit. There are aspects to the HoTT approach to quotients that make it quite different than previous attempts.
15:35:19 <dolio> And it seems like it could be capturing useful aspects of computation on quotients.
15:35:24 <ski> we're already simulating factor/quotient types (and subset types), via abstract data types
15:36:44 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
15:36:58 <ski> carter : why/how for generic programming ?
15:37:38 <carter> Ski: so an example I’ve been thinking about is sets as data structures.
15:38:05 <ski> yes
15:38:05 × lemmih quits (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) (Remote host closed the connection)
15:38:08 <carter> In general you need element equality and kinda brute force finding the right permutation exists or not for set sequalith
15:38:32 lemmih joins (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d)
15:38:35 <carter> So the weakest eq proof calc is equality modulo explicit permutation
15:38:39 <ski> what kind of implementation/representation do you have in mind there ? some kind of balanced trees ?
15:39:20 <carter> If the elements themselves have a total order or a well behaved binary serialization you can skip permutation discovery
15:39:22 <ski> or starting from an arbitrary list, considering permutations and elision/introduction of duplicates ?
15:39:26 <carter> And keep them sorting
15:39:34 wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
15:39:38 <carter> Sorted
15:39:50 <carter> These are different proof / computation strategies for sets
15:39:54 <carter> Is my point
15:40:02 <ski> yep
15:40:10 <ski> it would be nice if they could coexist, perhaps
15:40:29 <carter> So they could all be kinda constrained proof constructors for equality sortah
15:40:41 × Lycurgus quits (~niemand@98.4.96.130) (Quit: Exeunt)
15:40:58 <carter> In hott land, the equality type is sortah like an open data family. Sortah? Dolio sclv am I wrong?
15:41:12 <ski> something like that
15:41:21 <carter> So you could conceivably annotate the extra proof terms with a priority weight
15:41:32 <carter> Or so something like a sibling to deriving via
15:41:39 <dolio> Kind of. It's complex. :)
15:41:40 <carter> With some preference ordering
15:42:10 <carter> In some ways it veers into wanting relational programming In your functional programming
15:42:18 <ski> you mean priorities for eq-via-permutation and eq-via-sorting, e.g. ?
15:42:37 <carter> Yeah
15:42:45 <carter> It’s still a fuzzy idea of mine
15:43:02 × arianvp quits (~weechat@arianvp.me) (Quit: WeeChat 2.7.1)
15:43:05 <ski> heh, i've recently been thinking about how to construct isomorphisms between types .. and that (in my mind) ties a bit into relational/logic programming
15:43:11 <dolio> The interesting thing about quotients in HoTT to me is that the equalities between equal quotient values are computationally relevant.
15:43:13 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
15:43:35 arianvp joins (~weechat@arianvp.me)
15:43:44 <ski> yes
15:43:47 × sid_cypher quits (~quassel@200116b80060a70031488a0eec1b5c23.dip.versatel-1u1.de) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
15:43:49 <carter> Ski I’ve been way overdue to write down some of my ideas in this space.
15:44:04 sid_cypher joins (~quassel@200116b80060a70031488a0eec1b5c23.dip.versatel-1u1.de)
15:44:22 × DavidEichmann quits (~david@43.240.198.146.dyn.plus.net) (Remote host closed the connection)
15:44:24 <carter> Plague time plus forcing myself to look into new jobs for a change of pace have eaten into bandwidth. Current job is great. But kinda want a change of pace
15:44:30 lemmih_ joins (~lemmih@58.182.131.25)
15:44:34 <dolio> So you can possibly do 'different' things for 'equal' values, but those things are still able to be mediated between by some other computation.
15:44:40 <ski> (my "reflective syntax" idea, that i introduced for effectful computations, also seems to fit nicely, with some modifications, to equality proofs, and to computing with such HITs)
15:44:43 kw joins (ac4a6125@cpe-172-74-97-37.nc.res.rr.com)
15:44:48 DavidEichmann joins (~david@43.240.198.146.dyn.plus.net)
15:45:01 <carter> Ski how’d you get your logic programming thoughts
15:45:41 spew joins (uid195861@gateway/web/irccloud.com/x-dhwinilivvllyihf)
15:46:18 × kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 272 seconds)
15:46:56 × lemmih quits (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) (Ping timeout: 244 seconds)
15:47:02 <ski> well. if you e.g. express an isomorphism between `Nat' and `Fin n * Nat', you're expressing a bidirectional translation. that's like a binary predicate (except that you enforce it being functional, in both directions). so the "body" of your definition will effectively come after something corresponding to `:-' in Prolog
15:47:19 proofofkeags joins (~proofofke@174-29-30-112.hlrn.qwest.net)
15:47:27 <carter> i'm not super literate at prolog
15:47:29 mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848)
15:47:35 <carter> more strict relational plus datalog
15:48:03 <ski> `:-' is converse implication `<=', basically. or maybe converse entailment `-|', if you prefer
15:48:13 <dolio> Which in some ways makes it "easier" to write functions from quotients. You don't need to decide some canonical representative of each equivalence class and produce an identical result. You just need to show how to mediate between the results when someone presents you with how two values are 'equal'.
15:48:44 <carter> dolio: which referent?
15:49:29 × DavidEichmann quits (~david@43.240.198.146.dyn.plus.net) (Remote host closed the connection)
15:50:23 DavidEichmann joins (~david@43.240.198.146.dyn.plus.net)
15:50:24 × sid_cypher quits (~quassel@200116b80060a70031488a0eec1b5c23.dip.versatel-1u1.de) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
15:50:26 <dolio> Eh?
15:50:32 fendor joins (~fendor@t204-126.demo.tuwien.ac.at)
15:50:43 kritzefitz joins (~kritzefit@212.86.56.80)
15:50:59 <ski> carter : i still have to consider more how computations with these isomorphism / type-equality definitions will actually work. but it seems to naturally want to express itself in logic programming terms, to me, when i'm following the way i'm trying to express things
15:51:00 × kritzefitz quits (~kritzefit@212.86.56.80) (Client Quit)
15:52:00 × fendor__ quits (~fendor@e237-037.eduroam.tuwien.ac.at) (Ping timeout: 272 seconds)
15:52:42 <carter> dolio: couldn't figure you which thing you were referrring to ;)
15:52:47 <carter> ski: i can totally see that
15:52:50 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds)
15:52:53 <carter> full linear logic seems relevant to me
15:53:01 <carter> cause its a really nice way to think about certain relations
15:53:09 martin___ joins (uid411878@gateway/web/irccloud.com/x-mpsimrgxgomecjvf)
15:53:10 <dolio> I've just been rambling, so it's referring to stuff I've said, probably.
15:53:39 machinedgod joins (~machinedg@45.78.189.122)
15:53:52 <carter> Fun rambles
15:54:15 × kw quits (ac4a6125@cpe-172-74-97-37.nc.res.rr.com) (Ping timeout: 245 seconds)
15:54:50 <dolio> It's kind of interesting, really. If you think about the details, it's tying up 'propositions as types' in a really satisfying way.
15:54:55 × heatsink quits (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection)
15:55:00 × hololeap quits (~hololeap@unaffiliated/hololeap) (Quit: KVIrc 5.0.1 Aria http://www.kvirc.net/)
15:55:22 <ski> carter : .. including also sometimes wanting to be able to use disjunction (not just conjunction), in the body of a rule
15:55:32 <carter> which disjunction?
15:55:32 <dolio> Because, the 'propositions as types' approach was originally like "well, A + B is used for A ∨ B, and we don't care that the former might have more than one distinct value."
15:55:33 <carter> :)
15:55:52 <carter> ski have you skimmed mike shulmans linear logic for constructive math?
15:56:01 <carter> it kinda touches on this in a really cool way
15:56:02 <ski> hm, i think i did, at some point, yes
15:56:16 <ski> in what way are you seeing connections to linear logic ?
15:56:18 <carter> its a weird paper , but for a conceputal flavor for full linear lgoic
15:56:39 <carter> well, the duality structure for *full* linear logic is really good for functional programming / duality / logic programming
15:56:40 <dolio> And most attempts to fix that latter part kind of try to make it _not_ have more than one value.
15:56:40 <carter> idk
15:56:48 <carter> err
15:57:00 <carter> poke me about this in a few days, i need to mull how to explain this better
15:57:02 wgolden joins (~wgolden@178.162.204.238)
15:57:11 × acidjnk_new3 quits (~acidjnk@p200300d0c736587164f46f145ae9b6a7.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
15:57:23 ski nods to dolio re functions from quotients
15:57:26 <dolio> But the HoTT approach is kind of the opposite. It has more than one value, but there are mediating values between them that make it sort of equivalent to having only one value.
15:57:51 <ski> (carter : at least if it's the slides i think it is. link ?)
15:58:01 <dolio> More than one value in a strict sense, but not 'up to paths'.
15:58:07 pera joins (~pera@unaffiliated/pera)
15:58:14 <carter> https://arxiv.org/abs/1805.07518 ?
15:59:04 <ski> hm, i think i didn't see this paper (maybe i saw slides of a presentation of it, not sure)
15:59:07 <ski> ty
15:59:08 zebrag joins (~inkbottle@aaubervilliers-654-1-94-225.w86-212.abo.wanadoo.fr)
15:59:14 × inkbottle quits (~inkbottle@aaubervilliers-654-1-114-91.w86-198.abo.wanadoo.fr) (Ping timeout: 260 seconds)
15:59:45 ph88 joins (~ph88@ip5f5af726.dynamic.kabel-deutschland.de)
16:00:05 × Maxdamantus quits (~Maxdamant@unaffiliated/maxdamantus) (Ping timeout: 240 seconds)
16:00:29 Rudd0 joins (~Rudd0@185.189.115.103)
16:00:45 × ph88_ quits (~ph88@2a02:8109:9e40:2704:85f2:8dce:6e30:a554) (Ping timeout: 272 seconds)
16:00:52 brnzhg[m] parts (brnzhgmatr@gateway/shell/matrix.org/x-giqbkbtzwixrtmho) ("Kicked by @appservice-irc:matrix.org : Idle for 30+ days")
16:01:57 × Saukk quits (~Saukk@2001:998:dc:4a67:1c59:9bb5:b94c:4) (Remote host closed the connection)
16:02:03 borne joins (~fritjof@200116b8641fc4005e981dab12496c3b.dip.versatel-1u1.de)
16:02:13 Maxdamantus joins (~Maxdamant@unaffiliated/maxdamantus)
16:02:22 <ski> carter : "which disjunction?" -- well .. in this case, additive, i suppose you'd say
16:02:39 <carter> is that the usual one?
16:02:47 <ski> carter : but i've sometimes been pondering how one could program with multiplicative disjunction, as well
16:02:49 <carter> the thing is ... the other one is also really nice
16:02:52 <ski> the usual constructive one, yes
16:03:25 <carter> ski: i have a tiny model of all 4 in haskell code https://github.com/cartazio/symmetric-monoidal/blob/master/src/Control/Monoidal.hs
16:03:38 <carter> they are sortah matching pair eliminiators
16:03:39 <ski> i have been pondering a pet example, converse of induction on naturals
16:03:57 <carter> wait, PAR is the multiplicative one
16:03:59 <carter> ddrr
16:04:05 <carter> & is the mult product
16:04:09 <carter> PAr is the XOR of proofs
16:04:30 <ski> XOR ?
16:04:40 <carter> yes
16:04:47 <carter> multiplicative disjunction is constructive xor
16:04:47 <ski> in which sense ?
16:04:54 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 256 seconds)
16:05:02 <carter> like a real number is zero XOR some signed nonzero distance from zero
16:05:10 <carter> proving one rules out the other
16:05:13 Neuromancer joins (~Neuromanc@unaffiliated/neuromancer)
16:05:15 <carter> or disproving one implies the other
16:05:31 <carter> lets you be more explicit about mutally exclusive facts
16:05:38 <carter> which IS COOL
16:05:45 <ski> how about `x >= 0 \/ x =< 0', disproving one gives you information for proving the other ?
16:05:48 <dumptruckman> Is it normal to have a data type with only a single value constructor or is there some better construct for this?
16:05:58 <carter> ski: :P
16:06:01 <ski> or `p | a*b => p | a \/ p | b', `p' a prime
16:06:19 <ski> (the usual proof starts with "Assume not `p | a'.")
16:06:27 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
16:06:41 <carter> ski i think your example isn't quite sound unless you have a != zero assumption
16:06:42 <dumptruckman> Once again trying to use Haskell to better understand a problem in Java. However, I'm attempting to learn more about the type system this time.
16:06:49 <monochrom> But x>=0 together with x >= 0 \/ x =< 0 does not give you any information about x=<0
16:07:16 <carter> though x > 0 | x <=0 does thave the onely one is true at the same time
16:07:27 <carter> ski: you need to have something where the XOR of the propreties is true
16:07:33 <carter> Never the ANd
16:07:42 <carter> monochrom: how're you?
16:07:44 <monochrom> dumptruckman: It is normal.
16:07:55 <ski> dumptruckman : sometimes `newtype' is preferable
16:08:22 <ski> carter : i don't see why
16:08:36 <ski> carter : `a != zero', for the prime example ?
16:09:07 <carter> ski: your lack of parens confused me
16:09:09 <ski> monochrom : the idea was that refuting one would give you information about the other
16:09:19 <carter> *proves the other*
16:09:40 <carter> so par is actually a really good model for bijections
16:09:53 <carter> because negation could just be producer/consumer polarity
16:10:01 <carter> in certain models of the logic
16:10:11 × urdh quits (~urdh@unaffiliated/urdh) (Ping timeout: 240 seconds)
16:10:19 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
16:11:08 <carter> (gcd(a,b)==1, AND `p' a prime AND p | a*b ) => (p | a) xor (p | b'),
16:11:16 <carter> ski: tweaks it
16:11:25 <carter> *fixed it
16:11:33 <carter> that would you be the property using par
16:11:40 <dolio> I think the `A ∨ B` version would probably not be linear.
16:11:57 <dolio> You can only do that argument linearly with par.
16:12:08 <carter> dolio: yeah, the formal modelling this way is still useful sans linearity
16:12:19 <carter> linearity is just how you derive the logic and dualities first
16:12:25 <carter> or at least thats my perspective
16:12:26 <carter> idk
16:12:27 <dolio> Because for additive disjunction you'd be dropping a proof in the case you don't need it.
16:12:27 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
16:12:31 <carter> yup
16:12:38 <carter> dolio: sum?
16:12:42 <dolio> Right.
16:12:45 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
16:13:08 <carter> yeah,
16:13:10 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit)
16:13:17 <dolio> Also `P \par Q` has aspects where they "can't both be true".
16:13:24 <carter> dolio: oh?
16:13:31 <carter> i mean, yes
16:13:34 <carter> err
16:13:39 <carter> dolio: example / explaborate?
16:13:47 <carter> have i been wrong for years, AGAIN :)
16:14:03 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
16:14:29 <carter> either way i'm happy to continue chatting about this with folks
16:14:29 urdh joins (~urdh@unaffiliated/urdh)
16:14:29 <dolio> Well, that's what you'd expect from xor.
16:14:33 <carter> oh yeah
16:14:42 <ski> carter : yea .. except that one wants to be able to refer to primality, often, without having to make sure / know that the two factors are coprime
16:14:45 <carter> if both are true or both are false, xor is fal
16:14:52 × DavidEichmann quits (~david@43.240.198.146.dyn.plus.net) (Remote host closed the connection)
16:15:00 DavidEichmann joins (~david@43.240.198.146.dyn.plus.net)
16:15:03 <carter> ski: absolutely, i'm just showing
16:15:12 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit)
16:15:22 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
16:15:48 <carter> dolio: you mean that/
16:15:55 <dolio> carter: I don't have examples because I'm still not good at thinking about par.
16:16:00 <carter> dolio: i was presupposing you have a proof of a xor b
16:16:12 <carter> dolio: you can def prove a xor b false
16:16:17 <ski> carter : anyway, i'm not convinced it should model `xor' in some sense. (and i didn't follow the "so par is actually a really good model for bijections" bit, either)
16:16:33 <carter> ski: depends on your model of it
16:16:34 <dolio> Yeah, proving both would be a way to prove a xor b false.
16:16:40 <carter> yup
16:16:42 <carter> exactly
16:16:50 <carter> or disproving both
16:16:59 <carter> ski: i'm aboslutely happy to help explain more
16:16:59 <ski> usually, with boolean logic, biimplication would be `xnor', not `xor'
16:17:16 <ski> (maybe that's not what you meant by "bijections", though)
16:17:23 <carter> ski: for the relational model, negation could just be the direction that info flows
16:17:30 <carter> *for bijections
16:17:37 <carter> not a consumes an a
16:17:41 <carter> a produces an a
16:18:03 <carter> i think of A `par` B as ==== (not a -> b) & (not b -> a)
16:18:24 <ski> yes, but that image would admit overlap
16:18:25 <carter> & === multiplicative conj where you *choose which* field you get
16:18:40 <carter> all the session type falvored stuff dropps the symmetries
16:18:44 <ski> that would be additive conj.
16:18:58 <carter> i get add and mult confused
16:19:04 <carter> sum, pair, & and par
16:19:23 <carter> i dont really see the metaphor for the additive vs mult binary operators perspective
16:19:24 <ski> hm. when i read Wadler's paper on session types and linear logic, i was thinking all connectives were the opposite of what i expected
16:19:47 <carter> and i alwasy forget which things are additives vs mult
16:19:57 <ski> (iow, replaced by duals, everywhere. or possibly it was just for one of the subsystems described)
16:20:20 <carter> i dont like a lott of / most expositions i've seen
16:20:45 <dolio> ski: Might depend on how they were being used, I guess.
16:20:45 <ski> consider `a * (b + c) = (a * b) + (a * c)'
16:20:53 <ski> `*' is multiplicative, `+' is additive
16:20:55 <dolio> Inputs vs outputs.
16:20:57 <ski> that's how i remember it
16:21:45 <ski> dolio : yes, presumably, but it still seemed simpler to me, to just flip all the connectives, then. not upset people's expectations, for what seemed to be no reason
16:23:10 <ski> carter : fwiw, i don't like the usual notation for (some of) the connectives ..
16:23:16 bicho_rastrero joins (~cerdito@154.85-87-39.dynamic.clientes.euskaltel.es)
16:23:24 <dolio> Which one? :)
16:23:24 <ski> .. so, in personal notes, i'm using my own convention :)
16:23:31 <ski> yea, there's several
16:23:39 <ski> i had Girard's one in mind
16:23:58 <dolio> I think both are wrong categorically.
16:24:27 <ski> (i reconstructed it from memory, after getting exposed to the ideas. then, after a bit, i noticed my reconstructed version was not the same as in the papers i read)
16:24:42 <carter> dolio: which are wrong how?
16:25:04 <dolio> carter: Additives are (co)product, but I think neither notation uses * for additve conjunction.
16:26:08 <dolio> That would suggest + for additive disjunction, too, but maybe Girard doesn't do that, either.
16:26:17 <dolio> It's a circled +?
16:26:41 <dolio> I've heard Girard's notation is supposed to remind you of distributive laws.
16:26:48 nan` joins (~nan`@unaffiliated/nan/x-5405850)
16:27:18 <carter> lol
16:27:46 <dolio> But I'm not sure that's worth it.
16:29:26 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core)
16:29:28 × jedws quits (~jedws@101.184.189.58) (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:29:45 <ezzieyguywuf> so pretty much always just use ghcup rather thn whatever my OS's package manager has, right?
16:29:45 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
16:29:57 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
16:30:10 carlomagno joins (~cararell@inet-hqmc02-o.oracle.com)
16:30:34 <maerwald> ezzieyguywuf: if your OS PM gets it right... then that's also nice
16:30:47 <ski> clearly ⌜+⌝ ought to be coproduct ("either","internal choice"), ⌜×⌝ be product ("with","external choice"), ⌜0⌝ be initial object ("void"), ⌜1⌝ be terminal object ("erase"), i thought. that leaves ⌜⊕⌝ for multiplicative disjunction ("par"), ⌜⊗⌝ for multiplicative conjunction, and then i took ⌜⊥⌝ ("bot") and ⌜⊤⌝ ("top","unit") as the respective neutral elements for those
16:30:47 <dumptruckman> So... If I wanted to model a game state a Monad would be sensible for this, right?
16:31:00 <maerwald> ezzieyguywuf: but ghcup is faster with adding new versions, most likely
16:31:17 <dolio> Oh yeah, the units are all mixed up, too.
16:31:28 <ezzieyguywuf> maerwald: they did the ghc nicely, they just pulled the binary from upstream, but the cabal install is a mess - I end up having to jump through all these hoops to get the cabal dependencies installed in the PM
16:31:56 <ezzieyguywuf> I was planning to just install ghc and cabal from the OS, then cabal install to grab things I need for dev and install the locally
16:32:57 hackage uniqueness-periods-vector-filters 0.1.1.0 - A library allows to change the structure of the 'RealFrac' function output. https://hackage.haskell.org/package/uniqueness-periods-vector-filters-0.1.1.0 (OleksandrZhabenko)
16:33:17 <ski> yes, Girard uses : ⌜⊕⌝,⌜&⌝,⌜0⌝,⌜⊤⌝ for the additives, and ⌜⅋⌝,⌜⊗⌝,⌜⊥⌝,⌜1⌝ for the multiplicatives
16:34:01 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Remote host closed the connection)
16:34:25 × coot quits (~coot@37.30.52.181.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
16:34:27 <ski> dumptruckman : monads can be nice for keeping track of state, yes
16:35:40 <ski> (oh, forgot to say that mult. conj. is "(both) .. and .."/"tensor")
16:38:16 coot joins (~coot@37.30.52.181.nat.umts.dynamic.t-mobile.pl)
16:38:20 × fendor quits (~fendor@t204-126.demo.tuwien.ac.at) (Remote host closed the connection)
16:41:30 <Uniaika> phadej: do you think if SqlQQ can be safely extracted from postgresql-simple? I'd like to use it for sqlite too but I'm not familiar with postgresql-simple's internals
16:43:08 <ezzieyguywuf> k so really...no definitive answer on OS vs ghcup
16:43:09 <ski> dumptruckman : some alternative might perhaps be to try to keep local state, maybe via some kind of stream processors or something (FRP ?)
16:43:14 LKoen joins (~LKoen@81.255.219.130)
16:43:17 <dumptruckman> mmk
16:43:37 <ezzieyguywuf> any gentoo users in here?
16:43:44 <dumptruckman> How would I lift the list out of this to be able to use intersect on an instance of Shares? `data Shares = Shares [Sharable]`
16:43:46 <maerwald> ezzieyguywuf: why
16:44:00 <maerwald> also: gentoo is not the distro that does get GHC right
16:44:12 <ski> dumptruckman : pattern-matching
16:44:19 <dumptruckman> what would that look like
16:44:28 hackage pusher-http-haskell 2.0.0.1 - Haskell client library for the Pusher Channels HTTP API https://hackage.haskell.org/package/pusher-http-haskell-2.0.0.1 (willsewell)
16:44:35 <dumptruckman> do i need to define `intersect :: Shares -> Shares -> Shares`?
16:44:38 <ski> intersectShares :: Shares -> Shares -> Shares
16:44:39 <dumptruckman> ok
16:44:46 <monochrom> "OS vs ghcup" depends on the OS. However, for 90% of OSes, go with ghcup.
16:44:52 <dumptruckman> oh, i have to name it differently?
16:45:03 <ski> instersectShares (Shares ss0) (Shares ss1) = Shares (intersect ss0 ss1)
16:45:15 <ski> depends on whether you import `intersect' qualified
16:45:37 <dumptruckman> hmm ok
16:45:59 geekosaur joins (42d52102@66.213.33.2)
16:46:47 <dumptruckman> is it silly to use the & operator for this?
16:46:53 <dumptruckman> is that even possible?
16:46:58 <monochrom> You can.
16:47:00 <ezzieyguywuf> maerwald: there's been changes in gentoo rather recently, the haskell situation is lots better
16:47:20 <ezzieyguywuf> but I still think I'm going to stick to ghcup - I don't want to have, like, mtl and stuff installed at the system level
16:47:30 × coot quits (~coot@37.30.52.181.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
16:47:50 <maerwald> ezzieyguywuf: I'd be surprised, because the gentoo PM cannot handle installing the same package mulitple times
16:48:01 <maerwald> which you need for haskell packages
16:48:51 <maerwald> The proper way to packages haskell is: only package GHC and cabal and *nothing* else (no haskell packages)
16:49:17 <ski> (dumptruckman : btw, in Haskell terminology, you wouldn't talk about "an instance of Shares", but rather about values of (type) `Shares')
16:49:20 <maerwald> everything else ends up showing limitations of the package manager with the only exception being nix
16:49:32 <maerwald> but then... you know... you'd have to use nix, ugh
16:50:18 <ezzieyguywuf> maerwald: it can, it's called "slots"
16:50:49 <ezzieyguywuf> maerwald: that's what I wanted to do, but in the current setup, I have separate packages for cabal's dependencies, i.e. mtl, fail, etc.
16:51:04 <maerwald> ezzieyguywuf: no, I'm talking about the same version
16:51:09 <maerwald> slots don't do that
16:51:18 <ezzieyguywuf> also, on a different note - I accidentally ran `ghcup` in `/root` as `myUser`, and it gave me a permission error when it tried to do `cabal new-update`
16:51:21 <phadej> Uniaika: https://hackage.haskell.org/package/postgresql-simple-0.6.2/docs/src/Database.PostgreSQL.Simple.SqlQQ.html#sql just copy it
16:51:27 <phadej> it doesn't really do anything smart
16:51:29 <dumptruckman> ski: thanks, i wasn't sure about that
16:51:31 <ezzieyguywuf> shouldn't it always dereference my ~ variable, no matter what the current directory is?
16:51:53 <phadej> (cliking source on hackage docs pages is the trick, often enough ;)
16:51:54 <ezzieyguywuf> maerwald: so there's a need for the same version of the same package to be installed multiple times?
16:52:06 <maerwald> ezzieyguywuf: You cannot install filepath-1.2.0.0 for multiple GHC slots on gentoo
16:52:21 <maerwald> that's a fact, slots don't solve this
16:52:22 <maerwald> nix does
16:52:38 <ski> dumptruckman : it's fine, got what you meant. just pointing it out, for more efficient future communication
16:53:02 <ezzieyguywuf> neat! is ghcup tui using the boxes thing?
16:53:08 <ezzieyguywuf> urm, bricks
16:53:16 <maerwald> yes
16:53:27 <ezzieyguywuf> 😍 ery cool
16:53:33 _ks joins (~kevin@nyc-0.mil.lat)
16:54:04 <ezzieyguywuf> so I want to try using just cabal install of stack. If I want to install xmonad do I just do cabal install xmonad?
16:54:25 <ezzieyguywuf> is there a different install command if I want/need to install a package in a 'sandbox' for a particular project?
16:54:39 <maerwald> ezzieyguywuf: sandboxes are removed
16:54:53 <ezzieyguywuf> so things..."just work"?
16:55:17 <maerwald> you can point it to a different store dir to emulate that, but that's more like something you'd do in CI, not on your local machine
16:55:36 <maerwald> ezzieyguywuf: https://cabal.readthedocs.io/en/3.4/nix-local-build-overview.html
16:55:47 × nineonine quits (~nineonine@216-19-190-182.dyn.novuscom.net) (Remote host closed the connection)
16:56:06 <sclv> xmonad is the one tricky thing because it doesn't work out of the box with new-build stuff in terms of its auto-reload on config chang estuff
16:56:18 <sclv> there's some writeups of different techniques around the web
16:56:37 <ezzieyguywuf> aw man
16:56:39 <sclv> but that's now a cabal/new-build problem, its a "xmonad hasn't been updated to deal with new functionality well" problem
16:56:58 <ezzieyguywuf> s/now/not/ I assume
16:56:59 <sclv> i don't know offhand the "canonical" way to make it work, but i do know there are solutions
16:57:03 <sclv> yes, typo
16:58:01 <ezzieyguywuf> maerwald: thanks for the link reading now
16:58:01 <carter> Ski dolio what makes them multiplicative vs additive?
16:58:22 <ski> carter : i'd say, the distributive law(s)
16:58:42 <dolio> Multiplicatives are tuple-like, and additives are choice-like.
16:58:52 <ski> the replicated connective is multiplicative. the connective it's replicating over is additive
16:58:53 <sclv> ezzieyguywuf: here's one xmonad ticket with some discussion on the issue -- using a build-script seems like the right approach but idk https://github.com/xmonad/xmonad/issues/199
16:59:42 <zebrag> If `m` is an applicative, there really are `Int` in `m Int`. And it really puzzles me that it is always so. If it were only a functor it wouldn't be so. I'm wondering where, on the way from functor to applicative, is this property added.
16:59:45 <dolio> Multiplicative conjunction values are like pairs of values. Multiplicative disjunction continuations are like pairs of continuations.
16:59:57 <ski> yes, additives have to do with choice (internal or external). or information/exformation, if you want. while multiplicatives have to do with aggregation and communication/composition
17:00:02 <carter> dolio: ok that makes more sense to me
17:00:10 <maerwald> there are two kinds of oss projects: 1. unmaintained, 2. pedantic dictatorship maintained
17:00:26 <carter> maerwald: reductive but not false?
17:00:31 <carter> well, depends on what maintained means
17:00:32 <maerwald> I chose 2. and went with i3
17:00:39 <ski> zebrag : "If `m` is an applicative, there really are `Int` in `m Int`." -- nope
17:01:08 <carter> ski: dolio ... but does this flavor of additive vs multiplicative have a formal meaning?
17:01:14 <Uniaika> phadej: glorious, thank you!
17:01:34 <zebrag> ski: What makes me thing that is that ocaml has some sort of do-notation for applicatives
17:01:43 <amf> I'm using sortBy, but I need to order by 2 fields in a specific order, what is the technique? and would this be called a compound sort? (wasnt sure what to google)
17:01:43 <ski> carter : .. dunno ?
17:01:59 <zebrag> ski: can you give me an example
17:02:01 <zebrag> ?
17:02:14 <ezzieyguywuf> what about installing, say, hoogle or ghcid
17:02:14 <ski> zebrag : okay ? iirc, OCaml also has GADTs, no ?
17:02:18 <ezzieyguywuf> just cabal install ghcid?
17:02:27 <ski> zebrag : well, `IO' is a canonical example, in Haskell
17:02:36 qqqqqq joins (~Me@185.142.40.143)
17:02:39 <qqqqqq> 6 To be happy and lifted from hell and misery, Islam is your Jewel of the seas. Say no God except one(Allah)~ 4 To get blessings thru monotheism, He is the Only creator of heaven & earth. 6 He Designed the Universe 4 with Superb ingenuity. 6Lets praise Allah; 3he is our God, thee one; he is the god of Moses; Noah; Jesus & Mohammed; he sent us our Book 7 Quran, 10Monotheism is cleared by all prophets ~ 6 We get heaven by praying to the one god 6& by Sa
17:02:39 × qqqqqq quits (~Me@185.142.40.143) (Killed (Sigyn (Spam is off topic on freenode.)))
17:02:49 <ski> zebrag : there is no `String' inside `getLine :: IO String'
17:02:55 <geekosaur> amf, combine the comparison operations with <>
17:03:48 <amf> geekosaur: doh! yep, that was it, thanks!!
17:04:09 nineonine joins (~nineonine@216.81.48.202)
17:04:19 <zebrag> ski: getLine >>= \x -> f? (isn't x substituted for a string along the way?)
17:04:43 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds)
17:05:06 <carter> Oh I see. Cause cause additive zero is void
17:05:11 × heatsink quits (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection)
17:05:17 <monochrom> maerwald: What is i3?
17:05:26 <ski> zebrag : yes, but `getLine' itself does not contain that `String'
17:05:27 <ezzieyguywuf> monochrom: I window manager like xmonad
17:05:29 × wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
17:05:38 <carter> And that zeros out multiplicative things
17:05:40 <maerwald> monochrom: a tiling wm built by a german
17:05:48 <maerwald> without window icons
17:05:54 <dolio> carter: I'm not sure either. There are differences in the formal stuff, but I'm not sure that qualifies, and I mostly have informal explanations of them.
17:06:04 <ezzieyguywuf> maerwald: I don' understand your statement about (1) vs (2) though - you're saying xmonad is unmaintained?
17:06:07 <monochrom> I understand now. Was not reading it in context.
17:06:17 <maerwald> ezzieyguywuf: yeah :p
17:06:25 <ezzieyguywuf> i like i3 and have been using it for years, just considering xmonad b/c i love haskell, lol
17:06:26 <monochrom> I went with ghcup for the same reason teeheehee!
17:06:31 <dolio> Like, multiplicative stuff involves concatenating contexts, and additive involves sharing them.
17:06:34 <carter> Dolio: i think that’s the reason why the distributive law only works that way?
17:06:35 <maerwald> well, it's a slim core, so there's not much to maintain?
17:06:40 <ezzieyguywuf> monochrom: lol.
17:06:45 <carter> Hrmm
17:06:53 <carter> I guess that worms
17:06:55 <ski> carter : only works which way ?
17:06:55 <dolio> That's 'formal', but it doesn't say much.
17:06:55 <carter> Works
17:07:40 <carter> Hrmm
17:07:47 <ezzieyguywuf> worms, lol
17:07:58 <carter> I’ll explain after lunch ski
17:08:19 <geekosaur> there's plenty of changes to xmonad-contrib, we just don't release very often unless there's a breaking change in ghc (or even more rarely an external library)
17:08:20 <dolio> Another informal description is, I think, that additive stuff involves one thing happening among many, while multiplicative stuff involves all things happening.
17:08:24 <ezzieyguywuf> btw, `cabal install xmonad` worked once I made sure I had all the non-haskell dependencies avaliable
17:08:49 ubert joins (~Thunderbi@178.165.131.132.wireless.dyn.drei.com)
17:08:58 <geekosaur> and yes, the core is kept very minimal and basically never changes except when a new ghc breaks something
17:09:01 <dolio> So, like A \par B is a branching construct where all the branches happen, unlike A + B where only one branch happens.
17:09:10 <carter> That’s true
17:09:12 <carter> Ish
17:09:27 Lord_of_Life_ joins (~Lord@unaffiliated/lord-of-life/x-0885362)
17:09:38 <ski> yes
17:09:38 <carter> Fork io is kinda a value of type par
17:09:47 <carter> If you think In CPS
17:09:51 <ski> yes
17:10:18 <zebrag> ski: But if, instead of `IO String`, which is a monad, we would have only a functor, then that property of being able to substitute something for a string along the way wouldn't be granted (like if the functor is some constant functor sending every type on the same constant type)
17:10:19 <sclv> as a general gripe, i'm tired of people thinking "infrequently updated" means "unmaintained" as opposed to the cases when it can mean "stable, and working, so not being actively worked on"
17:10:43 <ski> (but `par :: a -> b -> b' is not, i think)
17:11:29 <dolio> carter, ski: That kind of explains why it's related to functions, too. You have two branches: the code in the function, and the code that uses the function's results, and they both happen.
17:11:42 <ski> zebrag : (nitpick, `IO' is the monad. not `IO String', and not `getLine') .. we could still substitute something for all zero occurances of `String's
17:12:20 × Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 256 seconds)
17:12:28 Lord_of_Life_ is now known as Lord_of_Life
17:12:33 igghibu joins (~igghibu@37.120.201.90)
17:13:00 <ski> dolio : yes. also explains the `A -> B' being equivalent to `not A (+) B' thing
17:13:16 <dolio> Yeah.
17:14:45 MorrowM joins (~max@bzq-110-168-31-106.red.bezeqint.net)
17:15:44 <ski> (reminds me of a language (MPD,cf. SR) where, conceptually at least, every function call spawned a thread. depending on how you spawned it, and interacted with it, it could die after delivering back a result message, or persist to receive more messaged along the channel (the name of the function))
17:16:09 <zebrag> ski: (yes, I'm ok with the nitpick, it was only an abuse of language)
17:16:50 <geekosaur> sounds like Icon coroutines
17:17:31 × rihards quits (~rihards@balticom-142-78-50.balticom.lv) (Quit: rihards)
17:17:32 knupfer joins (~Thunderbi@200116b82cb61c00e890525b81038fc7.dip.versatel-1u1.de)
17:17:51 rihards joins (~rihards@balticom-142-78-50.balticom.lv)
17:17:55 howdoi joins (uid224@gateway/web/irccloud.com/x-nrdufpvhwzpziwxu)
17:18:46 ephemeron parts (~ephemeron@unaffiliated/ephemeron) ()
17:20:02 <ski> well, i guess in Icon the thread wouldn't continue executing semi-independently, preemptive concurrence
17:20:40 <ski> zebrag : but yes, you couldn't "substitute" in the manner that `>>=' does it, if that was what you had in mind
17:20:48 <geekosaur> not as normally implemented. I don't know offhand if there's a concurrent Icon
17:21:23 Saten-san joins (~Saten-san@ip-81-11-153-184.dsl.scarlet.be)
17:23:54 ski nods
17:24:11 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: Textual IRC Client: www.textualapp.com)
17:24:11 <ski> (i probably should look into Icon, sometime)
17:24:55 <dolio> It doesn't need to be concurrent either, of course. Laziness is a particular choice of which order to process the 'branches that all must happen' in, and call-by-value is another.
17:25:56 wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
17:27:07 Lycurgus joins (~niemand@98.4.96.130)
17:27:08 × tomsmeding quits (~tomsmedin@tomsmeding.com) (Quit: ZNC 1.7.5 - https://znc.in)
17:27:36 ski nods
17:27:39 × mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Remote host closed the connection)
17:31:21 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
17:32:31 × ph88 quits (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) (Quit: Leaving)
17:32:35 × alp_ quits (~alp@2a01:e0a:58b:4920:102b:86e3:d072:38a0) (Ping timeout: 272 seconds)
17:34:59 <zebrag> ski: yes, it is what I had in mind
17:36:24 <geekosaur> lazy won't work in the case of icon coroutines because you yield a value to the coroutine (think of it as being connected with a pair of MVars, and yield is putMVar on one followed by takeMVar on the other)
17:36:53 mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:fcb4:8a4:b249:c1d3)
17:36:54 <ski> zebrag : you could still do `fmap even (Const "hello" :: Const String Integer)', though
17:37:47 <geekosaur> although there's the degenerate case where what's yielded to the coroutine is the equivalent of Nothing… but then Icon isn't pure so laziness has potential problems
17:38:00 <ski> geekosaur : hmm .. i remember i figured out how to make `zipWith' a "good consumer" of both its list parameters, by thinking of it in terms of coroutines
17:38:25 <dolio> geekosaur: It won't? The general point is that until one of them blocks, nothing forces an ordering.
17:38:45 <dolio> So you can eagerly execute the one that will put, or you can execute the one that will take until it blocks on the take.
17:39:01 × eric quits (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) (Remote host closed the connection)
17:40:10 <dolio> And it doesn't necessarily matter as long as when something blocks you can go do other stuff to unblock it.
17:40:26 <monochrom> I don't want to perpetuate "c :: F Int menas c contains an Int", because it is not always true, and sometimes it is not even wrong. (In what sense does stf :: S -> (S, Int) contains an Int?) But "pure" is one of the big differences between Functor and Applicative.
17:40:42 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
17:41:05 eric joins (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f)
17:41:07 cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
17:41:13 × eric quits (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) (Remote host closed the connection)
17:41:27 eric joins (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f)
17:41:34 × dyeplexer quits (~lol@unaffiliated/terpin) (Read error: Connection reset by peer)
17:41:47 × eric quits (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) (Remote host closed the connection)
17:42:01 kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz)
17:42:27 <monochrom> To understand how "pure" is special, I take inspiration from how Moggi uses monads. For his use case, he wants to rule out boring examples like Const, so he adds an extra law that's so strong it implies that "pure" is injective. (Now OK, in his time, there was no applicative, only monad, he would be saying "unit" or "eta" or "mu", I forgot which.)
17:42:54 <monochrom> For most useful Applicative instances, pure is indeed injective.
17:44:18 <monochrom> Now if pure is injective, if "pure 4" has to be somehow distinguishable from "pure 5", it does mean that your F Int type has to have at least as much information as Int, internally.
17:44:43 <monochrom> In Shannon's sense of information.
17:46:32 nan` joins (~nan`@unaffiliated/nan/x-5405850)
17:46:52 tomsmeding joins (~tomsmedin@2a03:b0c0:0:1010::767:3001)
17:47:04 × bicho_rastrero quits (~cerdito@154.85-87-39.dynamic.clientes.euskaltel.es) (Quit: leaving)
17:47:16 × kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 272 seconds)
17:47:22 <monochrom> If you further throw in "pure is a natural transformation from Identity to F", then not just as much information, but also as much structure, i.e., the information is not even all that scrambled up badly.
17:47:42 <monochrom> s/throw in/recall/
17:51:37 <dolio> Category theorists might say that whether a value of `Identity Int` contains a value of Int is a nonsense question.
17:51:42 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds)
17:52:20 <dolio> Or, more accurately, it is an evil question.
17:52:25 <monochrom> Yeah, at the objects-and-morphisms level, there is not supposed to be "elements".
17:53:08 × finkata quits (~dpetrov@83.222.188.39) (Read error: Connection reset by peer)
17:53:15 <dolio> Well, you would know it is a functor on sets, or types.
17:53:28 <dolio> Which have elements/values.
17:54:35 <dolio> But of course, it is also evil to distinguish between Int and other types/sets isomorphic to it.
17:54:51 juuandyy joins (~juuandyy@90.166.144.65)
17:55:28 <monochrom> heh
17:56:25 <monochrom> Then my joke yesterday about "mathematicians, category theorists, Haskellers" was wrong.
17:56:27 glguy hopes dolio doesn't start passing around a collection plate
17:57:15 <monochrom> Category theorists should be put on the other side. The joke should go like: Category theorists say: "beware of mathematicians and Haskeller's, they're evil"
17:57:31 × Lycurgus quits (~niemand@98.4.96.130) (Quit: Exeunt)
17:57:58 <monochrom> St. Augustine was the first category theorist! Change my mind.
17:58:18 <dolio> Category theorists aren't so great about not being evil either, really.
17:58:26 <monochrom> OK!
17:58:31 <ski> "wants to rule out boring examples" :(
17:59:02 <ski> ("mu" is for `join'. probably "eta", i'd guess. when / from where did "unit" come to be used ?)
17:59:23 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
17:59:31 alp_ joins (~alp@2a01:e0a:58b:4920:98d3:8430:dd:99e)
17:59:37 <phadej> eta is unit
17:59:46 <dumptruckman> Can I make a typeclass that pulls the first parameter of a value where it's type may have other parameters?
18:00:02 × wgolden quits (~wgolden@178.162.204.238) ()
18:00:04 <phadej> though I forget which way counit/unit in adjunctions are named
18:00:08 <phadej> eta/eps there
18:00:17 <phadej> need more distinct greek letters
18:00:35 <dolio> Unit goes way back to terms from abstract algebra, I imagine.
18:00:39 <ski> phadej : the way that makes the monad one the unit
18:01:23 <ski> dumptruckman : sorry, i didn't understand that, can you elaborate ?
18:01:35 <dumptruckman> like... `class Named a` with a associated function like name :: a -> String
18:01:57 <dumptruckman> and it's expected that instances of that type have a String as the first parameter of their values
18:02:03 <phadej> ski: makes sense
18:02:06 <dolio> Unit being another name for identity element.
18:02:14 <ski> what does "the first parameter of their values" mean ?
18:02:25 <dumptruckman> data Something = Something String a deriving (Named)
18:02:50 <dumptruckman> and so the name function pulls the string out
18:02:54 <ski> dolio : hm, yea. it makes sense, with the monoid connections
18:03:24 <monochrom> dumptruckman: No.
18:03:55 <ski> dumptruckman : if you really want such a type class, you could make it. however, are you going to define any functions that are polymorphic over types that are instances of this type class ? are you going to have more than one instance of the type class
18:04:14 × igghibu quits (~igghibu@37.120.201.90) (Ping timeout: 256 seconds)
18:04:27 <dumptruckman> yes
18:04:46 <ski> what's some example of such polymorphic operations ?
18:04:49 <dumptruckman> so I guess each instance would have to define implement name itself?
18:04:57 <dumptruckman> s/define/
18:04:59 <ski> yes, that's how instances work
18:05:05 <dumptruckman> well yeah..
18:05:07 <tomsmeding> well, like, there's generics
18:05:31 <dumptruckman> but like, i don't have to implement anything to use Show for most stuff
18:05:42 <tomsmeding> because Show is hard-wired :)
18:05:43 <dumptruckman> so it has some kind of default implementation that "just works"?
18:05:43 <ski> because `Show' can be derived
18:05:55 <tomsmeding> you can use generics to do what you want, I think
18:06:02 <ski> (and, usually, should be derived)
18:06:03 <tomsmeding> but it's not very pretty
18:06:04 <geekosaur> but you must derive it for it to be there
18:06:14 <dumptruckman> right
18:06:28 <dumptruckman> so i guess it's not an instance of the typeclass if i simply derive that typeclass
18:06:55 <dumptruckman> so i suppose i'm wondering if there's a way to do this without making my data types an instance of it
18:07:05 <monochrom> Rather, "deriving" is not for arbitrary classes of your own design.
18:07:25 <tomsmeding> except for obscure ghc extensions mumble mumble
18:07:40 eric joins (~eric@2804:431:c7d4:b75:69f1:6cfd:8841:8fad)
18:07:54 <tomsmeding> but, yes, in vanilla haskell, "deriving" is only for built-in things
18:08:42 <tomsmeding> dumptruckman: alternative track: what if you define a type 'data CachedShow a = CachedShow String a'
18:08:44 <dumptruckman> ahh
18:08:52 nyd joins (~nyd@unaffiliated/elysian)
18:09:17 <tomsmeding> and then define 'data Something a = Something (CachedShow a)'
18:09:20 <dumptruckman> ahhh
18:09:23 <dumptruckman> that's a good idea
18:09:25 <tomsmeding> where that 'a' is whatever you want of course
18:09:30 <sm[m]> I got an SDL app working in GHCI by using -fno-ghci-sandbox per https://stackoverflow.com/questions/61842338/creating-an-sdl2-window-inside-ghci . But I'm having trouble getting rid of the window when the app exits. destroyWindow having no effect. Has anyone got this working ?
18:09:49 <tomsmeding> then if you say 'instance Show (CachedShow a) where show (CachedShow s _) = s'
18:09:57 <tomsmeding> and just use 'deriving (Show)' on Something
18:10:14 <tomsmeding> then you get 'Something [whatever that string has]', which is not exactly what you asked, but it's close
18:10:31 <tomsmeding> downside is that now there's a CachedShow constructor in between the Something constructor and the contained data
18:10:41 <dumptruckman> or i could simply do: `data Name = Name String` `name :: Name -> String` ` name (Name s) = s` `data Something = Something name a b c`
18:10:43 <dumptruckman> i think
18:10:43 <tomsmeding> but if you're okay with that, this is a very vanilla way of sort-of getting that :)
18:11:09 <tomsmeding> well 'Something Name a b c', not 'Something name a b c', but yes
18:11:17 <dumptruckman> yes
18:11:20 <dumptruckman> that's what i meant
18:11:22 <tomsmeding> but then you still need to implement Show for Something yourself
18:11:22 <dumptruckman> oh but wait
18:11:29 <tomsmeding> so you haven't won anything
18:11:32 <dumptruckman> and i'd still have to implement name
18:11:40 <dumptruckman> name :: Show -> String
18:11:48 <dumptruckman> er, name :: Something -> String
18:11:49 <ski> tomsmeding : that would be bad, imho :)
18:11:55 fendor joins (~fendor@77.119.129.27.wireless.dyn.drei.com)
18:11:59 Gigabitten joins (~Somn@ip-99-203-18-60.pools.cgn.spcsdns.net)
18:12:01 <tomsmeding> the point of my solution, with wrapping the rest of the Something contents _inside_ that Name, you can just 'deriving (Show)' and it works
18:12:18 <tomsmeding> ski: yes you haven't won anything and you've made it more complicated :p
18:12:25 <tomsmeding> or are you referring to my CachedShow thing
18:12:26 <ski> (imho, that `Show' instance is incorrect)
18:12:27 <ski> yes
18:12:29 × eric quits (~eric@2804:431:c7d4:b75:69f1:6cfd:8841:8fad) (Ping timeout: 272 seconds)
18:12:32 <tomsmeding> sure
18:12:41 × z0 quits (~z0@bl15-162-186.dsl.telepac.pt) (Quit: leaving)
18:12:43 <tomsmeding> was just trying to satisfy dumptruckman's wishes :p
18:12:53 <tomsmeding> but I guess yes, perhaps this shouldn't be Show, dumptruckman
18:12:56 <ski> well .. they didn't seem to ask for `name' to be related to `show'
18:13:01 × Gigabitten quits (~Somn@ip-99-203-18-60.pools.cgn.spcsdns.net) (Client Quit)
18:13:02 <tomsmeding> OW
18:13:10 <tomsmeding> my bad
18:13:27 <tomsmeding> okay fair point gimme 1min
18:14:47 <dumptruckman> yeah, i just have a bunch of different data types that all have a name
18:14:57 <dumptruckman> and instead of having a separate name function for each i'd like to just use name
18:15:02 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
18:15:37 <tomsmeding> okay so am I allowed to cheat and use GeneralizedNewtypeDeriving
18:15:45 <monochrom> Do you really have an algorithm that cannot be written if every type has a separate name function?
18:15:46 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net)
18:15:54 <dumptruckman> no
18:16:00 <dumptruckman> it's more of a clarity thing i guess
18:16:00 <monochrom> Then YAGNI
18:16:16 livvy joins (~livvy@gateway/tor-sasl/livvy)
18:16:28 <monochrom> "clarity by overloading names" is in perpetual controversy.
18:16:33 <dumptruckman> so i don't have to do `worldName world` `playerName player` `sharableName sharable` etc
18:16:54 <dumptruckman> it maybe be a case of YAGNI but at the same time, i'd love to learn how to do this
18:17:08 <tomsmeding> dumptruckman: implementation of my wacked idea: https://paste.tomsmeding.com/bSSsxieh
18:17:20 <tomsmeding> 1. the newtype is crucial, 2. you need that HasName in between
18:17:36 <tomsmeding> if you don't want the HasName, you need to use generics
18:17:43 <tomsmeding> or not do this at all :)
18:17:46 <geekosaur> this sounds like the kind of record field problem lens packages are designed for
18:17:53 frdg joins (~user@pool-71-184-143-249.bstnma.fios.verizon.net)
18:17:58 <ski> dumptruckman : "i just have a bunch of different data types that all have a name","and instead of having a separate name function for each i'd like to just use name" -- that's what i figured possibly was the case :)
18:18:24 <dumptruckman> sorry, i should've just said that but it wasn't immediately obvious to myself
18:18:24 ahmr88 joins (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
18:18:37 <dumptruckman> tomsmeding: only thing is the tuple feels weird
18:18:40 <monochrom> For learning purpose, just handwrite every instance. You said it, "learning".
18:18:48 <tomsmeding> yeah the tuple is "whatever data you want there"
18:18:58 <tomsmeding> had to put something :)
18:18:59 <ski> dumptruckman : so .. since it seems you don't want to write overloaded polymorphic operations wrt this type class, i'd suggest that it's probably better to not make such a type class
18:19:06 <tomsmeding> RT monochrom
18:19:13 <monochrom> For thinking purpose, http://www.cs.utoronto.ca/~trebla/CSCC24-2020-Summer/05-haskell-types-2.html#why
18:19:19 × pingiun quits (~pingiun@ip-213-124-184-182.ip.prioritytelecom.net) (Quit: Textual IRC Client: www.textualapp.com)
18:19:28 <dumptruckman> i'd still like to be able to use the format like `Player { playerName :: String }`
18:19:49 <dumptruckman> i tried to do it where each type was like `Player { name :: String }` but it yelled at me
18:20:24 <dumptruckman> monochrom: haha nice
18:21:32 <ski> monochrom : the law thing is a good point to bring up. perhaps you'd want to add the "have overloaded polymorphic operations defined in terms of methods" point to that, as well ?
18:21:53 <monochrom> That's "can be used to build useful general algorithms"
18:21:58 <ski> tomsmeding : "RT" ?
18:22:01 <tomsmeding> retweet
18:22:08 <ski> mhm
18:22:12 <dolio> I don't see what's wrong with using type classes to overload something like this.
18:22:14 <tomsmeding> except I don't actually use twitter
18:22:17 <ski> (so, i guess, "seconded")
18:22:18 <dolio> I've done it.
18:22:20 <tomsmeding> yes
18:23:22 × __Joker_ quits (~Joker@180.151.105.86) (Ping timeout: 272 seconds)
18:23:29 ski . o O ( `Default' )
18:23:42 Sunblaze21 parts (~sanjay@116.72.71.64) ()
18:24:33 <frdg> I am trying to install a package with stack: https://dpaste.org/6kxx , how do I know what base versions different ghc's have?
18:24:47 <monochrom> You can still set the bar lower or higher regarding how much expectation you expect out of your type class.
18:25:04 bahamas joins (~lucian@unaffiliated/bahamas)
18:25:35 <monochrom> For example for a field-name type class like HasName, you still have some expectation, even though it's not as high as Ord's.
18:25:42 acidjnk_new3 joins (~acidjnk@p200300d0c736587164f46f145ae9b6a7.dip0.t-ipconnect.de)
18:26:12 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
18:27:13 <monochrom> In this case the expectation being "the method X -> String behaves like field projection".
18:28:08 Sheilong joins (uid293653@gateway/web/irccloud.com/x-wnvbbxjsydmfebcp)
18:28:09 <monochrom> You can keep it informal like that, or you can go further formalize it.
18:28:38 <monochrom> You reckon that it doesn't lead to very powerful algorithms.
18:28:58 irc_user joins (uid423822@gateway/web/irccloud.com/x-rnfyabrjtddmocvm)
18:29:14 <geekosaur> (…and then you discover lens)
18:30:07 × tomsmeding quits (~tomsmedin@2a03:b0c0:0:1010::767:3001) (Quit: ZNC 1.7.5 - https://znc.in)
18:30:08 <monochrom> But lens's potential for powerful algorithms doesn't come from classes like HasName.
18:30:29 <monochrom> It comes from being able to pass a lens as a parameter.
18:31:10 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
18:31:23 <monochrom> Regarding HasName it's the other way round. The power of lens leads to HasName. HasName leads to not much (apart from what I said), really.
18:32:31 tomsmeding joins (~tomsmedin@2a03:b0c0:0:1010::767:3001)
18:33:11 <monochrom> In the case of Default, you have to set the bar pretty low, but it is still not dead zero.
18:33:42 × v0d1ch quits (~v0d1ch@cable-178-148-120-241.dynamic.sbb.rs) (Ping timeout: 260 seconds)
18:33:43 <sm[m]> frdg: memorise https://wiki.haskell.org/Base_package#Versions or https://www.fosskers.ca/en/blog/base in your browser
18:34:01 <monochrom> An expectation is "it's a legal value of your type X, and in a very strong sense: it's also a legal value for all of your functions that take X parameters"
18:34:12 <dolio> Just having things like `HasName` is very useful.
18:34:35 <monochrom> In some cases you also get to expect the default value is also the identity element of a suitable monoid.
18:34:48 __Joker joins (~Joker@180.151.105.86)
18:35:26 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 246 seconds)
18:35:26 <dolio> They're more useful when they're lens type stuff than just `X -> String`, but not necessarily because you can pass them as parameters.
18:36:15 <dolio> Or, well, they're useful because lenses are more useful than projection functions.
18:36:36 <dumptruckman> well how about this... can you explain why `data Player = Player { name :: String }` and `data World = World { name :: String }` can't coexist?
18:36:57 <geekosaur> becuase "name" is defined automatcially as a function
18:36:58 <monochrom> "name" doubles as a function name.
18:37:17 <geekosaur> and it can't simultaneously have type Player -> String and World -> String
18:37:22 <sm[m]> frdg: looks like you should use a newer resolver
18:37:42 × dbmikus quits (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Remote host closed the connection)
18:37:50 <dumptruckman> geekosaur: why not? can't the compiler know which is being called?
18:38:06 <dolio> Not in general.
18:38:14 × supercoven quits (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi) (Ping timeout: 256 seconds)
18:38:18 <geekosaur> there are arguments about type-directed name resolution on the wiki iirc
18:38:39 <geekosaur> it comes up every time this is discussed
18:38:43 <frdg> thanks sm[m]
18:38:44 <monochrom> The compiler knows if you make it a class method.
18:38:47 <tomsmeding> dumptruckman: automatically deriving Named using Generics; please do not do this! :) https://paste.tomsmeding.com/XkbAiiRJ
18:38:52 <geekosaur> and the solution is, basically, lens packages which do HasField
18:38:53 <tomsmeding> wanted to flex my Generics muscles
18:39:20 <dolio> The problem is that TDNR makes very little sense, because type classes are the sensible type for type-directed name resolution, if you ignore the gatekeeping people have been trying to force on you.
18:39:39 <geekosaur> (I recommend fclabels or microlens if you do want to play with that; beware of https://ro-che.info/ccc/23)
18:39:46 × __Joker quits (~Joker@180.151.105.86) (Ping timeout: 260 seconds)
18:41:10 × stiell quits (~stian@fsf/member/stiell) (Ping timeout: 260 seconds)
18:41:25 × knupfer quits (~Thunderbi@200116b82cb61c00e890525b81038fc7.dip.versatel-1u1.de) (Ping timeout: 240 seconds)
18:41:51 <dolio> You don't need any lens packages to just overload 'name' to apply to a bunch of different types.
18:42:05 coot joins (~coot@37.30.53.120.nat.umts.dynamic.t-mobile.pl)
18:42:07 <dolio> If that's really what you want to do.
18:42:35 <dumptruckman> neat
18:42:43 <dumptruckman> I'll have to read about generics cause that looks crazy
18:42:51 <tomsmeding> again, this is killing a musquito with a bazooka :)
18:42:52 exodrifter joins (~exodrifte@cpe-173-172-173-93.tx.res.rr.com)
18:42:54 <monochrom> I am not against having HasName. I am against having HasName and ending up not actually using it.
18:42:55 <dumptruckman> particularly all the "junk"
18:43:25 <monochrom> If you don't have an algorithm of type "HasName t => ... t ..." then you don't need HasName.
18:44:01 stiell joins (~stian@fsf/member/stiell)
18:44:03 <dolio> Why? I have overloaded stuff that I don't use generically like that.
18:44:19 <dolio> Because I want to write `peek ustk` and `peek bstk`.
18:44:21 <frdg> it is not clear to me what a resolver is, and which different one I should choose with stack.
18:44:26 <dolio> Where those are different types of stacks.
18:44:33 <monochrom> OK, well, even when I'm against it, it is not 100% against, there are exceptions.
18:45:09 <dolio> I mean, by definition, if you have the class, you have at least one thing like that.
18:45:22 <monochrom> It then comes down to whether overloading the method name improves or impairs clarity.
18:45:35 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Ping timeout: 246 seconds)
18:46:01 <dumptruckman> I guess I look at SNR with this
18:46:42 <dumptruckman> in Java I would have an interface Person with method getPersonName and World with getWorldName, i'd have Person with getName and World with getName because it is less noise
18:46:48 <monochrom> No there is no noise here. What you are really looking at is redundancy.
18:46:58 <dumptruckman> s/would/wouldn't
18:47:09 <dumptruckman> how is that not noise
18:47:25 <monochrom> how is that noise instead of redundancy
18:47:28 <dumptruckman> redundancy that doesn't aid with readability, impo
18:47:30 <dumptruckman> imo*
18:47:48 <dumptruckman> it impairs readability by becoming eye strain
18:48:16 <dumptruckman> also it may lead you to wonder if they represent similar things
18:48:22 <dumptruckman> or if WorldName is something different than PersonNAme
18:49:34 <exodrifter> I think "eye strain" is a weak argument? You could install a different color scheme like Solarized. A stronger argument might be "I want to get the name of this entity, and i don't really care what kind of entity it is."
18:49:42 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
18:49:48 <tomsmeding> what if you define this Named class, giving a 'name' function, but then concede that Generics is too big a gun, and just hand-implement 'name' for each type you want it for
18:50:06 <tomsmeding> 1. you get your noise-less name function, 2. no weird overengineering
18:50:08 × DavidEichmann quits (~david@43.240.198.146.dyn.plus.net) (Remote host closed the connection)
18:50:23 <tomsmeding> downside is a little boilerplate when you define the type, but IMO that's minor
18:50:38 <exodrifter> you'd have to do that in java anyway if you implemented an interface
18:50:56 <tomsmeding> indeed :)
18:51:08 <geekosaur> you still need some boilerplate even with Generics
18:51:17 <tomsmeding> true, but less
18:51:59 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
18:52:02 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Client Quit)
18:52:02 <monochrom> Like I said, I'm not 100% against it, it depends, there are case-by-case ad hoc judgments to be made.
18:52:21 <monochrom> If you rule that the redundancy helps, keep it. If you rule that the redundancy hurts, remove it.
18:52:24 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
18:52:58 <monochrom> If you're the sole author and audience, you rule on your own. If you are collaborating with people, you get a consensus.
18:54:14 <dumptruckman> Yeah. Good points. I think individual implementations is probably what I'll go with. It's definitely simple and there's only like 3 types
18:54:15 <monochrom> But me, having learned how people write explicit types even when types are inferred, how people write pointful code even when it could be pointfree, and most importantly how in both cases the more redundant ways actually help,
18:54:22 nan` joins (~nan`@unaffiliated/nan/x-5405850)
18:54:33 <monochrom> I decided that in general I keep the redundancy.
18:54:48 <frdg> I am having trouble figuring out how to just say `stack install --with_ghc=8.6.5 somepackage`
18:56:03 <geekosaur> frdg, in general you don't. you say: stack install --with-resolver=<some resolver based on ghc-8.6.5> <somepackage>
18:56:25 × fendor quits (~fendor@77.119.129.27.wireless.dyn.drei.com) (Remote host closed the connection)
18:56:49 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
18:56:54 <geekosaur> a resolver combines a ghc version with a collection of libraries with versions known to work with each other and that ghc version
18:57:29 <frdg> ok. This must be a big difference from cabal?
18:57:34 petrus joins (~petrus@unaffiliated/petrus)
18:57:53 × immae_ quits (~immae@static.233.10.9.176.clients.your-server.de) (Quit: WeeChat 2.9)
18:58:16 immae joins (~immae@2a01:4f8:141:53e7::)
18:59:08 raehik joins (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net)
18:59:28 <tomsmeding> in my limited experience with stack, it is _the_ most important difference from cabal
19:00:08 <tomsmeding> shoving stuff like "it's a yaml file, not a cabal file (or also a cabal file)" under the ru
19:00:08 <tomsmeding> g
19:00:28 × mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:fcb4:8a4:b249:c1d3) (Remote host closed the connection)
19:01:01 <Boarders> does anyone know if it is possible with earley to easily have "1 + 2 * 3" parse into all possible disambiguations/bracketings?
19:01:23 wroathe_ joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:01:34 <phadej> doesn't it give you all parsing by default if you specify ambiguous grammar
19:01:39 × wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
19:01:47 <Boarders> I thought so yes, I haven't used it before
19:01:59 <monochrom> I don't know earley, but I know that if a parser supports ambiguous grammars, then "E ::= E + E | E * E | Literal" ought to do.
19:02:06 × Saten-san quits (~Saten-san@ip-81-11-153-184.dsl.scarlet.be) (Quit: WeeChat 2.8)
19:02:21 <Boarders> monochrom: not helpful
19:02:34 <monochrom> Fine
19:02:56 <monochrom> I'm done with askers playing adjudicators and playing GOd.
19:03:14 <Boarders> sounds good
19:03:16 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds)
19:03:36 alp joins (~alp@2a01:e0a:58b:4920:10b8:e9e6:f1db:edd0)
19:03:40 <phadej> using Earley is not much more different than parsec. https://github.com/ollef/Earley/blob/master/examples/Expr.hs
19:03:47 × alp_ quits (~alp@2a01:e0a:58b:4920:98d3:8430:dd:99e) (Ping timeout: 272 seconds)
19:03:49 <phadej> not hard to find examples either.
19:04:03 fendor joins (~fendor@77.119.129.27.wireless.dyn.drei.com)
19:04:10 <phadej> (that example is in README, fwiw)
19:04:44 <Boarders> yeah, I don't know how that example can be made ambiguous
19:06:22 × wroathe_ quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
19:06:50 × Rudd0 quits (~Rudd0@185.189.115.103) (Ping timeout: 260 seconds)
19:08:01 × bennofs quits (~quassel@dslb-188-103-036-188.188.103.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
19:08:07 <sm[m]> frdg: https://www.stackage.org shows which resolvers to pick for desired ghc versions
19:08:14 <dolio> What happens if you make it into one binding, like `x <- rule $ Add <$> x <* namedToken "+" <*> x <|> Mul <$> x ...`?
19:08:29 bennofs joins (~quassel@dslb-188-106-228-057.188.106.pools.vodafone-ip.de)
19:10:34 <frdg> sm[m]: I struggle with stack. I know that I want to use the lts-14.27 resolver. I cannot say `stack install --with-resolver=lts-14.27 somepackage`
19:11:25 <sm[m]> it's stack install --resolver=lts-14.27 somepackage[-VERSION]
19:11:30 eric joins (~eric@2804:431:c7d4:402a:8db3:9561:773:fb8e)
19:11:45 <sm[m]> if somepackage is not in lts-14.27 but only in hackage, then you need to add -VERSION
19:12:15 <frdg> thank you
19:12:33 <sm[m]> (because stack's raison d'etre is reproducible builds, so one way or another all versions must be specified)
19:12:47 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
19:13:59 <sm[m]> also, if not only somepackage but some of its deps are not in the stackage snapshot, specify those on the command line too (if there's not too many)
19:17:05 × stiell quits (~stian@fsf/member/stiell) (Ping timeout: 272 seconds)
19:17:34 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
19:17:54 <frdg> after installing about 140 packages, right at the end I get this error: https://dpaste.org/rkw3
19:18:55 <sm[m]> that looks like a keter bug then, it probably doesn't have correct bounds
19:19:23 <sm[m]> stack guarantees a valid build plan with all bounds satisfied, but it doesn't guarantee all the packages compile
19:20:17 <frdg> ill try a different resolver
19:20:19 <sm[m]> a typical next move is to check keter's issue tracker or maybe search for the error
19:20:33 <phadej> thy find a snapshot which has keter
19:20:42 <phadej> it's one of the sad packages
19:20:51 <phadej> https://matrix.hackage.haskell.org/#/package/keter
19:20:59 stiell joins (~stian@fsf/member/stiell)
19:21:21 <sm[m]> https://github.com/snoyberg/keter/issues/207
19:22:45 <frdg> hmm. To be honest I dont understand stack at all.
19:23:16 <frdg> Ill try cabal
19:23:49 <phadej> you'll get similar-ish failure :)
19:24:19 <frdg> is all lost with keter?
19:24:29 <sm[m]> if you have a look around the issue tracker you'll see lots of such issues. https://github.com/snoyberg/keter/issues/201 has some folks that might help, and maybe a newer branch
19:24:46 <frdg> ok thanks for the help
19:25:33 <dolio> Boarders: https://paste.tomsmeding.com/eFARmyei
19:25:44 <phadej> you need process <1.6
19:26:18 <phadej> which means using GHC-8.0
19:26:26 <phadej> OR downgrading process library
19:26:34 <phadej> which is probably not a good idea
19:26:54 <phadej> but might work too
19:27:11 × nyd quits (~nyd@unaffiliated/elysian) (Quit: nyd)
19:27:13 <phadej> cabal install keter --constraint='process<1.6'
19:27:50 <frdg> Do any other libraries do what keter does?
19:28:02 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
19:28:10 × juuandyy quits (~juuandyy@90.166.144.65) (Quit: Konversation terminated!)
19:28:17 × AlterEgo- quits (~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving)
19:28:54 <phadej> I guess what keter does is handled by modern infrastructure for you
19:29:09 Tops2 joins (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de)
19:29:23 notzmv` joins (~user@177.103.86.92)
19:29:24 × petrus quits (~petrus@unaffiliated/petrus) (Read error: Connection reset by peer)
19:29:41 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:30:05 petrus joins (~petrus@unaffiliated/petrus)
19:30:38 × notzmv quits (~user@unaffiliated/zmv) (Ping timeout: 260 seconds)
19:30:56 davidfischer joins (~davidfisc@193.56.252.210)
19:31:25 <frdg> I have a Yesod web-app that I am ready to deploy.
19:32:58 <frdg> I am just going by the yesod documentation which reccomends using keter, but it seems that there are other options. I do not know the tradeoffs.
19:33:25 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core)
19:33:33 × Tops21 quits (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de) (Ping timeout: 272 seconds)
19:33:37 × petrus quits (~petrus@unaffiliated/petrus) (Client Quit)
19:33:43 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
19:33:45 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
19:33:52 nan` joins (~nan`@unaffiliated/nan/x-5405850)
19:34:30 notzmv` is now known as notzmv
19:34:40 × notzmv quits (~user@177.103.86.92) (Changing host)
19:34:40 notzmv joins (~user@unaffiliated/zmv)
19:34:56 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
19:35:08 <sm[m]> frdg: IIRC keter helps minimise downtime and dropped requests while upgrading. If you're fine with just installing the new binary and restarting your app, you don't need keter
19:35:51 <frdg> sm[m]: Yes I am fine with that.
19:35:58 <sm[m]> where are you deploying ? if it has systemd, that's a way to keep your app running
19:36:27 <sm[m]> or you can just run it yourself in a shell session made persistent by dtach or screen
19:36:28 <frdg> I would like to run it from my laptop running opensuse
19:36:32 geekosaur considers that if it hasn't been updated since ghc-8.0 then it must not be used very much
19:36:38 × ahmr88 quits (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Read error: Connection reset by peer)
19:37:03 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Client Quit)
19:37:05 finkata joins (~dpetrov@83.222.188.39)
19:37:12 knupfer joins (~Thunderbi@mue-88-130-61-060.dsl.tropolys.de)
19:37:13 <sm[m]> frdg: so.. just run it then ? Am I missing something
19:37:24 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
19:37:27 ahmr88 joins (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
19:38:00 <frdg> well that is what I have been doing...but that only runs on localhost.
19:38:24 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds)
19:38:24 <sm[m]> for others to access it, you'll run it on a server, like a VPS, right ?
19:38:34 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
19:38:46 <frdg> oh I have to use a vps?
19:38:53 <frdg> I wanted to just use my computer.
19:39:35 × geekosaur quits (42d52102@66.213.33.2) (Remote host closed the connection)
19:39:49 <sm[m]> are you wanting other people to access it ?
19:39:51 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:39:52 <frdg> yes
19:40:24 <sm[m]> while it's running on your laptop, and while your laptop is connected ? that's possible, but not easy and not usual
19:40:31 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 272 seconds)
19:41:01 geekosaur joins (42d52102@66.213.33.2)
19:41:07 <frdg> oh really
19:41:23 <koz_> If statistical profiling gives me a lot of variance due to outliers, how do I deal with it?
19:41:27 <sm[m]> "hey frdg, open your laptop so I can access the app!"
19:42:11 <frdg> so usually people use a vps.
19:42:20 <frdg> Only ones I have seen are paid.
19:42:24 <geekosaur> not only that but you won't have a fixed address others could use to access it (I just got booted by my local address changing, for an example)
19:42:51 eric_ joins (~eric@2804:431:c7d4:402a:e9bd:254c:fe89:5831)
19:42:58 kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz)
19:43:16 <geekosaur> names yes, but you'r unlikely to have a name either and if you do it'll be based on the address
19:44:50 <sm[m]> frdg: sometimes people run their own physical server, eg a raspberry pi in a cupboard connected 24/7
19:45:01 <koz_> sm[m]: Or, in my case, an old Eee-PC.
19:45:06 <sm[m]> but yes a vps is by far the easiest
19:45:16 <sm[m]> aha, koz_ knows how
19:45:28 <koz_> I've been on the self-hosting train for a while, lol.
19:45:40 <koz_> Best thing for a starting self-hoster is actually an old laptop IMHO.
19:45:41 <geekosaur> eee pc re-users represent!
19:46:03 <koz_> They're easy to set up, easy to fix if stuff breaks, and have a built-in UPS.
19:46:13 <frdg> I have an old macbook
19:46:13 × eric quits (~eric@2804:431:c7d4:402a:8db3:9561:773:fb8e) (Ping timeout: 272 seconds)
19:46:59 <koz_> frdg: An old Macbook would work.
19:47:03 <sm[m]> koz_: what's the way to ensure a fixed ip address ? use an ISP that will provide that ?
19:47:18 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal)
19:47:20 <nineonine> hey all, I am trying to use hi all, I am trying to use https://hackage.haskell.org/package/process-1.6.10.0/docs/src/System.Process.html#withCreateProcess and sometimes no cleanup is happening
19:47:23 <nineonine> is this expected?
19:47:28 <koz_> sm[m]: That's what I do - mine charges me 10 bucks a month.
19:47:33 <sm[m]> or is a fixed dns name good enough ?
19:47:45 <frdg> koz_: Do I just need to get linux on it?
19:47:46 <koz_> DNS name needs an IP address to aim at.
19:47:51 <koz_> frdg: Yeah, any Linux will do.
19:47:54 × kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 260 seconds)
19:48:22 <sm[m]> koz_: well there's the dynamic ones where the machine runs a client to update the record on boot
19:48:24 <frdg> ok this may fall perfectly into place.
19:48:30 × machinedgod quits (~machinedg@45.78.189.122) (Ping timeout: 256 seconds)
19:48:31 × heatsink quits (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection)
19:48:34 <koz_> sm[m]: Perhaps, but I've never needed it.
19:48:54 <glguy> My ISP has kept my "dynamic" IP address the same on the scale of years
19:49:03 <nineonine> the process is not getting killed for some reason
19:49:25 notzmv` joins (~user@177.103.86.92)
19:49:39 <koz_> glguy: Mine flipped my supposedly static one on me once.
19:49:44 <koz_> (that was _real_ fun)
19:50:02 <koz_> (both to diagnose and to subsequently inform customer service in _no uncertain terms_ that this was not good enough)
19:50:08 <nineonine> ok I see this comment in code
19:50:11 <nineonine> terminateProcess does not guarantee that it terminates the process.
19:50:15 <geekosaur> right
19:50:17 <nineonine> which answers my question
19:50:28 <koz_> terminateProcessMaybe :P
19:50:46 <sm[m]> discourageProcess
19:50:48 <geekosaur> was just about to point out it does terminateProcess and then forkIO-s the following waitForProcess, so in fact it's not cleaned up synchronously at all
19:51:00 × shafox quits (~shafox@106.51.234.111) (Remote host closed the connection)
19:51:04 <koz_> sm[m]:
19:51:11 <koz_> kindlySuggestProcessDie
19:51:13 <nineonine> this is quite deceiving
19:51:33 <koz_> nineonine: Not much we can do about it. Unkillable processes are possible, and Haskell can't really save you.
19:51:33 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
19:51:43 <koz_> (I had this happen many times due to dodgy drivers)
19:51:48 <geekosaur> ^
19:51:53 <koz_> (ended up with a process even the _OS_ couldn't kill)
19:51:58 <nineonine> makes sense, my hopes were too high!
19:52:22 <davean> well, what OS - a processing being killable or not is an OS thing and some OSes do guarrentee they can
19:52:27 <nineonine> so I guess this is an OS quirk
19:52:32 <davean> its specificly POSIXy systems that usually have an issue with it.
19:52:35 <Boarders> dolio: thanks for your help!
19:53:02 × notzmv quits (~user@unaffiliated/zmv) (Ping timeout: 260 seconds)
19:53:25 <geekosaur> there's also a harder kill than SIGTERM, not that it's guaranteed either — but some processes do ignore SIGTERM for no good reason
19:53:25 <sm[m]> btw there's no reason frdg has to install linux on their macbook megaserver I assume
19:53:29 <koz_> davean: Well, it was a Linux thing, so yeah. Who guarantees process death?
19:53:42 <koz_> sm[m]: No _specific_ reason, no.
19:53:53 <koz_> I'd say it's easier for me to self-host on a Linux, but YMMV.
19:54:09 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core)
19:54:27 mirrorbird joins (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71)
19:54:28 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
19:54:28 <monochrom> I think it's easiest if the OS used for compiling is the same OS used for running.
19:54:31 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
19:54:59 <monochrom> For example totally don't go "I dev on Windows, deploy on MacOS", that's insanity.
19:55:51 <monochrom> You really don't need one more gratuitous variable in your journey.
19:56:17 × geekosaur quits (42d52102@66.213.33.2) (Remote host closed the connection)
19:56:33 notzmv`` joins (~user@177.103.86.92)
19:57:09 <sm[m]> frdg has an old working macbook and is a bit over their head already, personally for me installing linux on a mac would be a nightmare
19:57:46 <koz_> monochrom: Yeah, you're right. I'm merely speaking from my own experience here, and I'm Linux through-and-through.
19:57:52 <koz_> (both personally and for work)
19:58:14 <sm[m]> getting offtopic here, but I think the real challenge here will be the connectivity (getting through firewalls, setting up dns or static ip)
19:58:26 <nineonine> so any idea how can I ensure the process is being killed?
19:58:32 <davean> koz_: well its a permissions issue on some OSs (suposibly windows), and others lack the IO hole POSIX systems tend to have (embeded OSs)
19:58:43 <nineonine> can I do something nasty like grep by process name and kill it?
19:58:48 <nineonine> using shell
19:58:56 <koz_> nineonine: That might not necessarily work either.
19:58:56 <nineonine> (just in case)
19:59:00 <nineonine> doh!
19:59:02 <frdg> in the end Ill figure something out. All I want is to avoid pain.
19:59:08 <koz_> As I said - I've managed to get an unkillable process even at the OS level.
19:59:14 <koz_> (due to bad driver)
19:59:15 <nineonine> this is horrible
19:59:16 <monochrom> I think it's useful to first find out why the process is not terminating.
19:59:22 × Jesin quits (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving)
19:59:24 <sm[m]> nineonine: pgrep & pkill are your friends!
19:59:30 <davean> nineonine: is that the *kernel* can't kill it
19:59:37 <davean> often
19:59:37 <sm[m]> oh sorry.. carry on
19:59:38 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
19:59:44 × notzmv` quits (~user@177.103.86.92) (Ping timeout: 258 seconds)
19:59:53 <davean> for example Linux can't kill a process blocked on IO (This is basicly the POSIX OS issue in general)
19:59:57 <nineonine> it is pretty hard to reproduce
20:00:04 × incertia quits (~incertia@d60-65-215-180.col.wideopenwest.com) (Ping timeout: 256 seconds)
20:00:08 petrus joins (~petrus@unaffiliated/petrus)
20:00:21 × finkata quits (~dpetrov@83.222.188.39) (Remote host closed the connection)
20:00:33 <sm[m]> frdg: what's more painful, $5/mo or 5-50 hours of system administration :)
20:00:51 <monochrom> I don't know if you already know, but if Unix, terminateProcess is just SIGTERM.
20:00:55 <davean> nineonine: if you want to generate an unkillable process on POSIX its generally pretty easy using NFS and just removing the server ;)
20:00:56 mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:fcb4:8a4:b249:c1d3)
20:00:59 incertia joins (~incertia@d60-65-215-180.col.wideopenwest.com)
20:01:47 notzmv`` is now known as notzmv
20:01:53 × notzmv quits (~user@177.103.86.92) (Changing host)
20:01:53 notzmv joins (~user@unaffiliated/zmv)
20:01:55 <nineonine> right, that makes sense. the fact that there is no guarantee about terminating the process is quite surprising to me :D
20:02:04 <monochrom> Haha NFS brings fond memory.
20:02:12 <davean> nineonine: really its the "worse is better" issue
20:02:32 <davean> Infact the only OS family I know that has this issue *is* POSIX
20:02:40 <davean> I don't know of this being able to happen anywhere else.
20:03:57 <monochrom> Old school lab used to be like, every last day of semester, reliably, NFS crashed by overloading, all processes blocked and unkillable, you couldn't even log out. (Because, like, logging out requires checking your home directory for .logout but it's through NFS but NFS is not responding...)
20:05:11 × mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:fcb4:8a4:b249:c1d3) (Ping timeout: 244 seconds)
20:05:25 <sm[m]> there is a way to guarantee termination, and that's to reboot the machine
20:05:44 <glguy> cut power; I've had reboots fail :)
20:05:46 <sm[m]> right ? or is even that impossible, without a hardware switch ?
20:06:12 <sm[m]> ack
20:07:14 <monochrom> We students didn't bother to power cycle for many reasons. In this case, turning off would be OK, but turn on would be pointless.
20:07:33 <glguy> It would be pretty nifty if having a process stalled on an NFS mount make it so that not even cutting power was enough to kill the process.
20:07:45 × ggole quits (~ggole@2001:8003:8119:7200:7c4d:5b32:3cf7:fd63) (Quit: Leaving)
20:07:45 <glguy> you just were left with a permanently on computer!
20:08:04 <monochrom> That's like defy the 2nd law of thermodynamics.
20:08:14 <davean> sm[m]: you can't guarrentee a reboot :(
20:08:17 <glguy> sure, but we're talking about NFS
20:08:27 <monochrom> hahaha OK fine just cause!
20:08:30 eric joins (~eric@2804:431:c7d4:402a:218c:8374:598c:5968)
20:08:44 <monochrom> "NFS solves the halting problem!"
20:08:46 <davean> You know they use to write persistent OSs?
20:08:57 <davean> you removed power, you plugged it back in, and it would be exactly where you left it
20:09:02 <davean> that was a thing in the 70s
20:09:12 <davean> The entire OS was transactional.
20:09:30 <davean> There were a few of them, I forget which at this point though
20:09:54 sm[m] gets itchy for new OSs
20:10:26 <monochrom> Well yeah, more seriously you could say "turn off" means use a bit of reserve battery to save state and then turn off.
20:11:04 <monochrom> Or even you always have autosave so it's close enough.
20:11:32 monochrom thanks AoE2 DE for having frequent autosave, like only 2 minutes lost in the worst case
20:11:45 <davean> Yah no the processes couldn't tell
20:11:49 <davean> The memory came back the same.
20:11:58 hackage uniqueness-periods-vector-examples 0.4.0.0 - Examples of usage for the uniqueness-periods-vector series of packages https://hackage.haskell.org/package/uniqueness-periods-vector-examples-0.4.0.0 (OleksandrZhabenko)
20:12:04 <davean> well the same as the last consistent state, which you couldn't have observed past
20:12:48 × coot quits (~coot@37.30.53.120.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
20:12:49 × eric_ quits (~eric@2804:431:c7d4:402a:e9bd:254c:fe89:5831) (Ping timeout: 272 seconds)
20:13:06 frdg` joins (~user@pool-71-184-143-249.bstnma.fios.verizon.net)
20:13:09 × mmohammadi9812 quits (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻)
20:14:10 acarrico joins (~acarrico@pppoe-209-99-203-201.greenmountainaccess.net)
20:14:34 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) (Ping timeout: 260 seconds)
20:14:35 × frdg quits (~user@pool-71-184-143-249.bstnma.fios.verizon.net) (Ping timeout: 240 seconds)
20:14:38 notzmv` joins (~user@177.103.86.92)
20:15:23 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
20:16:19 juuandyy joins (~juuandyy@90.166.144.65)
20:16:27 × frdg` quits (~user@pool-71-184-143-249.bstnma.fios.verizon.net) (Client Quit)
20:16:28 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
20:16:41 × acarrico quits (~acarrico@pppoe-209-99-203-201.greenmountainaccess.net) (Client Quit)
20:17:01 acarrico joins (~acarrico@pppoe-209-99-203-201.greenmountainaccess.net)
20:18:14 × notzmv quits (~user@unaffiliated/zmv) (Ping timeout: 260 seconds)
20:20:06 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
20:20:54 machinedgod joins (~machinedg@d67-193-126-196.home3.cgocable.net)
20:22:28 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core)
20:22:49 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
20:23:54 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
20:24:33 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
20:25:02 eric_ joins (~eric@2804:431:c7d4:402a:5d9b:3471:cb46:d9c6)
20:27:54 bitmagie joins (~Thunderbi@200116b80679150051a84e8093abf52a.dip.versatel-1u1.de)
20:28:39 × eric quits (~eric@2804:431:c7d4:402a:218c:8374:598c:5968) (Ping timeout: 272 seconds)
20:29:29 × knupfer quits (~Thunderbi@mue-88-130-61-060.dsl.tropolys.de) (Quit: knupfer)
20:29:30 knupfer1 joins (~Thunderbi@200116b82cb61c005dd142b43233f9e3.dip.versatel-1u1.de)
20:31:40 lembot joins (~lembot@191.126.227.174)
20:31:54 knupfer1 is now known as knupfer
20:32:51 × juuandyy quits (~juuandyy@90.166.144.65) (Quit: Konversation terminated!)
20:33:43 juuandyy joins (~juuandyy@90.166.144.65)
20:34:53 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
20:35:28 hackage stratosphere 0.59.1 - EDSL for AWS CloudFormation https://hackage.haskell.org/package/stratosphere-0.59.1 (jdreaver)
20:36:17 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
20:36:28 × heatsink quits (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection)
20:36:58 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
20:37:01 × bitmagie quits (~Thunderbi@200116b80679150051a84e8093abf52a.dip.versatel-1u1.de) (Quit: bitmagie)
20:40:21 Jesin joins (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
20:41:06 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
20:41:17 × tomsmeding quits (~tomsmedin@2a03:b0c0:0:1010::767:3001) (Quit: ZNC 1.7.5 - https://znc.in)
20:41:53 tomsmeding joins (~tomsmedin@2a03:b0c0:0:1010::767:3001)
20:43:30 eric joins (~eric@2804:431:c7d4:402a:95f4:860f:d661:3a21)
20:45:13 × knupfer quits (~Thunderbi@200116b82cb61c005dd142b43233f9e3.dip.versatel-1u1.de) (Quit: knupfer)
20:45:28 knupfer joins (~Thunderbi@200116b82cb61c0074d6b96e7872775f.dip.versatel-1u1.de)
20:47:01 × eric_ quits (~eric@2804:431:c7d4:402a:5d9b:3471:cb46:d9c6) (Ping timeout: 272 seconds)
20:50:41 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
20:50:54 × mirrorbird quits (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Remote host closed the connection)
20:51:22 mirrorbird joins (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71)
20:52:45 × lembot quits (~lembot@191.126.227.174) (Ping timeout: 240 seconds)
20:53:22 × iteratee quits (~kyle@162.211.154.4) (Remote host closed the connection)
20:53:28 hackage esqueleto 3.3.4.0 - Type-safe EDSL for SQL queries on persistent backends. https://hackage.haskell.org/package/esqueleto-3.3.4.0 (parsonsmatt)
20:53:54 × dhouthoo quits (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.8)
20:54:28 hackage RtMidi 0.4.0.0 - Haskell wrapper for RtMidi, the lightweight, cross-platform MIDI I/O library. https://hackage.haskell.org/package/RtMidi-0.4.0.0 (ejconlon)
20:55:51 DavidEichmann joins (~david@43.240.198.146.dyn.plus.net)
20:57:22 × xff0x_ quits (~fox@2001:1a81:5306:e200:5d84:8198:9ead:fb9f) (Ping timeout: 244 seconds)
20:57:56 × thc202 quits (~thc202@unaffiliated/thc202) (Ping timeout: 240 seconds)
20:58:19 xff0x_ joins (~fox@2001:1a81:5306:e200:1455:ac5b:134:42e8)
20:58:37 × p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core)
20:58:58 p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz)
20:59:04 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
21:00:02 × davidfischer quits (~davidfisc@193.56.252.210) ()
21:00:56 eric_ joins (~eric@2804:431:c7d4:402a:d77:f3e2:c0b:b49a)
21:01:14 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
21:03:36 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) (Client Quit)
21:04:07 × eric quits (~eric@2804:431:c7d4:402a:95f4:860f:d661:3a21) (Ping timeout: 272 seconds)
21:05:09 × juuandyy quits (~juuandyy@90.166.144.65) (Quit: Konversation terminated!)
21:06:38 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
21:06:39 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 272 seconds)
21:06:39 × danvet quits (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
21:07:55 <dumptruckman> what is happening... getting this: `name' is not a (visible) method of class `NamedEntity'
21:08:16 <dumptruckman> class NamedEntity a where name :: a -> String
21:08:23 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
21:08:28 <dumptruckman> instance NamedEntity Sharable where name (Sharable s) = s
21:08:38 <ski> you only exported the type class, not its method
21:08:43 <dumptruckman> ohh
21:09:03 <ski> use `module Blah (....,NamedEntity (name)) where
21:09:06 <ski> '
21:09:23 <dumptruckman> sweet, thanks
21:09:36 <exodrifter> (or wherever you imported it `import Blah (NamedEntity (name))`)
21:09:55 <ski> (that too, if you have an explicit import list)
21:10:20 <exodrifter> right, if you have an implicit import like `import Blah`, should be fine.
21:10:27 × Kaivo quits (~Kaivo@ec2-15-222-231-32.ca-central-1.compute.amazonaws.com) (Ping timeout: 272 seconds)
21:12:05 × eric_ quits (~eric@2804:431:c7d4:402a:d77:f3e2:c0b:b49a) (Remote host closed the connection)
21:12:27 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
21:12:35 × hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 246 seconds)
21:12:38 Kaivo joins (~Kaivo@104-200-86-99.mc.derytele.com)
21:13:09 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit)
21:13:39 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
21:17:02 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit)
21:17:05 __monty__ joins (~toonn@unaffiliated/toonn)
21:17:40 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
21:17:46 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
21:18:33 × knupfer quits (~Thunderbi@200116b82cb61c0074d6b96e7872775f.dip.versatel-1u1.de) (Ping timeout: 244 seconds)
21:21:55 izaki joins (~izaki@217.146.82.202)
21:22:19 izaki is now known as Guest55194
21:22:36 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
21:24:55 × rihards quits (~rihards@balticom-142-78-50.balticom.lv) (Quit: rihards)
21:25:20 × tomsmeding quits (~tomsmedin@2a03:b0c0:0:1010::767:3001) (Quit: ZNC 1.7.5 - https://znc.in)
21:25:46 tomsmeding joins (~tomsmedin@2a03:b0c0:0:1010::767:3001)
21:28:09 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
21:29:57 ericsagnes joins (~ericsagne@2405:6580:0:5100:d0ba:8658:2de8:699c)
21:34:16 nan` joins (~nan`@unaffiliated/nan/x-5405850)
21:38:57 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds)
21:43:01 × DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...)
21:43:36 sfvm joins (~sfvm@37.228.215.148)
21:43:44 Nahra joins (~Nahra@unaffiliated/nahra)
21:43:46 kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz)
21:43:50 × exodrifter quits (~exodrifte@cpe-173-172-173-93.tx.res.rr.com) (Quit: Leaving.)
21:43:56 gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
21:45:17 × Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds)
21:48:26 × tomsmeding quits (~tomsmedin@2a03:b0c0:0:1010::767:3001) (Quit: ZNC 1.7.5 - https://znc.in)
21:48:48 tomsmeding joins (~tomsmedin@tomsmeding.com)
21:49:12 × kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 272 seconds)
21:49:54 × petrus quits (~petrus@unaffiliated/petrus) (Quit: WeeChat 2.9)
21:51:11 Sgeo_ joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
21:54:48 falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
21:54:54 × stiell quits (~stian@fsf/member/stiell) (Ping timeout: 272 seconds)
21:54:54 × Sgeo quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 272 seconds)
21:55:12 × puffnfresh quits (~puffnfres@180-150-38-83.b49626.bne.nbn.aussiebb.net) (Ping timeout: 265 seconds)
21:56:40 Sgeo__ joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
21:57:03 × LKoen quits (~LKoen@81.255.219.130) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
21:59:21 stiell joins (~stian@fsf/member/stiell)
21:59:38 eric joins (~eric@2804:431:c7d4:402a:d77:f3e2:c0b:b49a)
22:00:09 × Sgeo_ quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 260 seconds)
22:00:46 Rudd0 joins (~Rudd0@185.189.115.118)
22:01:58 × eric quits (~eric@2804:431:c7d4:402a:d77:f3e2:c0b:b49a) (Remote host closed the connection)
22:03:46 HarveyPwca joins (~HarveyPwc@2601:246:c180:a570:29df:3b00:ad0e:3a06)
22:04:08 notzmv` is now known as notzmv
22:04:14 × notzmv quits (~user@177.103.86.92) (Changing host)
22:04:14 notzmv joins (~user@unaffiliated/zmv)
22:07:06 Sgeo_ joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
22:07:18 × ahmr88 quits (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Remote host closed the connection)
22:07:35 ahmr88 joins (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
22:07:37 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
22:08:05 × ahmr88 quits (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Remote host closed the connection)
22:08:07 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
22:08:21 ahmr88 joins (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
22:08:29 wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
22:08:48 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit)
22:08:52 × ahmr88 quits (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Remote host closed the connection)
22:09:28 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
22:09:29 × sfvm quits (~sfvm@37.228.215.148) (Quit: off to the basement, mixing up the medicine)
22:10:05 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
22:10:17 sfvm joins (~sfvm@37.228.215.148)
22:11:22 × Sgeo__ quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 272 seconds)
22:13:18 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
22:14:18 Kaeipi joins (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net)
22:17:13 DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
22:17:18 nan` joins (~nan`@unaffiliated/nan/x-5405850)
22:17:39 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) (Ping timeout: 260 seconds)
22:18:07 iteratee joins (~kyle@162.211.154.4)
22:19:05 × falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 244 seconds)
22:21:10 DirefulSalt joins (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt)
22:21:11 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
22:21:29 Guest_79 joins (b0a73c1f@176.167.60.31)
22:21:31 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
22:21:40 <Guest_79> Hi all
22:21:54 × nan` quits (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds)
22:22:08 <Guest_79> got an issue with installing haskell on Debian 10
22:22:23 <Guest_79> [ ghc-configure ] checking for gsed... sed
22:22:25 <Guest_79> with NonZeroExit 1 "./configure" ["--prefix=/home/user/.ghcup/ghc/8.8.4"]
22:22:56 × borne quits (~fritjof@200116b8641fc4005e981dab12496c3b.dip.versatel-1u1.de) (Ping timeout: 240 seconds)
22:24:37 Guest_79 parts (b0a73c1f@176.167.60.31) ()
22:25:13 borne joins (~fritjof@200116b860a1170098dc34007173c00b.dip.versatel-1u1.de)
22:25:42 × wei quits (~wei@66.42.41.89) (Ping timeout: 256 seconds)
22:26:26 × sfvm quits (~sfvm@37.228.215.148) (Quit: off to the basement, mixing up the medicine)
22:26:41 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
22:26:45 sfvm joins (~sfvm@37.228.215.148)
22:27:16 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
22:27:41 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
22:28:04 × xerox_ quits (~xerox@unaffiliated/xerox) (Ping timeout: 265 seconds)
22:29:09 × heatsink quits (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection)
22:31:38 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds)
22:32:44 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
22:33:37 × sfvm quits (~sfvm@37.228.215.148) (Quit: off to the basement, mixing up the medicine)
22:34:04 sfvm joins (~sfvm@37.228.215.148)
22:36:08 × borne quits (~fritjof@200116b860a1170098dc34007173c00b.dip.versatel-1u1.de) (Ping timeout: 244 seconds)
22:38:31 × sfvm quits (~sfvm@37.228.215.148) (Client Quit)
22:38:54 sfvm joins (~sfvm@37.228.215.148)
22:39:06 × fendor quits (~fendor@77.119.129.27.wireless.dyn.drei.com) (Read error: Connection reset by peer)
22:40:13 notzmv` joins (~user@177.103.86.92)
22:41:41 puffnfresh joins (~puffnfres@180-150-38-83.b49626.bne.nbn.aussiebb.net)
22:43:01 fissureman_ joins (~quassel@c-73-163-84-25.hsd1.dc.comcast.net)
22:43:03 × fissureman quits (~quassel@c-73-163-84-25.hsd1.dc.comcast.net) (Ping timeout: 265 seconds)
22:43:39 borne joins (~fritjof@200116b8644961005e981dab12496c3b.dip.versatel-1u1.de)
22:44:01 × notzmv quits (~user@unaffiliated/zmv) (Ping timeout: 265 seconds)
22:45:27 × mirrorbird quits (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Ping timeout: 272 seconds)
22:46:33 rprije joins (~rprije@27.143.220.203.dial.dynamic.acc01-myal-dub.comindico.com.au)
22:46:42 × Nahra quits (~Nahra@unaffiliated/nahra) (Quit: leaving)
22:46:43 × alp quits (~alp@2a01:e0a:58b:4920:10b8:e9e6:f1db:edd0) (Ping timeout: 272 seconds)
22:47:36 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
22:47:43 × HarveyPwca quits (~HarveyPwc@2601:246:c180:a570:29df:3b00:ad0e:3a06) (Quit: Leaving)
22:49:02 notzmv` is now known as notzmv
22:49:10 × notzmv quits (~user@177.103.86.92) (Changing host)
22:49:10 notzmv joins (~user@unaffiliated/zmv)
22:49:15 × puffnfresh quits (~puffnfres@180-150-38-83.b49626.bne.nbn.aussiebb.net) (Ping timeout: 272 seconds)
22:49:26 × sfvm quits (~sfvm@37.228.215.148) (Quit: off to the basement, mixing up the medicine)
22:49:53 × gmt quits (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 272 seconds)
22:50:22 puffnfresh joins (~puffnfres@180-150-38-83.b49626.bne.nbn.aussiebb.net)
22:51:15 sfvm joins (~sfvm@37.228.215.148)
22:51:18 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
22:51:23 × __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving)
22:52:14 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 258 seconds)
22:52:46 × chele quits (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection)
22:56:13 × DavidEichmann quits (~david@43.240.198.146.dyn.plus.net) (Ping timeout: 272 seconds)
22:57:07 × sfvm quits (~sfvm@37.228.215.148) (Quit: off to the basement, mixing up the medicine)
22:57:51 xerox_ joins (~xerox@unaffiliated/xerox)
22:58:11 × son0p quits (~son0p@181.136.122.143) (Quit: leaving)
23:01:10 sfvm joins (~sfvm@37.228.215.148)
23:02:02 × puffnfresh quits (~puffnfres@180-150-38-83.b49626.bne.nbn.aussiebb.net) (Ping timeout: 272 seconds)
23:04:11 puffnfresh joins (~puffnfres@180-150-38-83.b49626.bne.nbn.aussiebb.net)
23:04:25 × cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Ping timeout: 240 seconds)
23:04:28 hackage aeson-injector 1.1.4.0 - Injecting fields into aeson values https://hackage.haskell.org/package/aeson-injector-1.1.4.0 (NCrashed)
23:04:36 × wavemode quits (~wavemode@097-070-075-143.res.spectrum.com) (Read error: Connection reset by peer)
23:04:56 wavemode joins (~wavemode@097-070-075-143.res.spectrum.com)
23:05:53 × sfvm quits (~sfvm@37.228.215.148) (Client Quit)
23:06:14 sfvm joins (~sfvm@37.228.215.148)
23:08:08 × jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Quit: WeeChat 2.9)
23:08:11 × stiell quits (~stian@fsf/member/stiell) (Ping timeout: 240 seconds)
23:08:24 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
23:09:02 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 260 seconds)
23:13:18 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 256 seconds)
23:13:20 eric joins (~eric@2804:431:c7d4:402a:d77:f3e2:c0b:b49a)
23:14:31 ransom joins (~c4264035@2601:285:201:6720:d45b:68f7:e08a:3c24)
23:14:38 heatsink joins (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece)
23:14:56 falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
23:15:16 alp joins (~alp@2a01:e0a:58b:4920:d75:c49c:4f8c:919d)
23:19:41 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
23:22:24 stiell joins (~stian@fsf/member/stiell)
23:25:28 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
23:26:08 <sshine> that point in the night when you realize DeriveFunctor will not give you (>>=).
23:29:15 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
23:32:21 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
23:33:23 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds)
23:36:07 × alp quits (~alp@2a01:e0a:58b:4920:d75:c49c:4f8c:919d) (Ping timeout: 272 seconds)
23:37:07 <koz_> sshine: DeriveMonad is, AFAIK, not a thing. :P
23:37:16 <davean> sshine: really a failing of the extension and a critique of Haskell as a language.
23:37:32 <davean> koz_: why would you need it with the other deriving stuff we have now? :)
23:37:42 <koz_> davean: Lol.
23:37:43 <davean> also why would you use DerivingFunctor now that we have the nice tools?
23:37:49 <davean> we cleaned that mess up
23:37:57 <koz_> You can derive Traversable, what else do you possibly need? After all, traverse does everything. :P
23:39:09 × mdunnio quits (~mdunnio@208.59.170.5) (Remote host closed the connection)
23:42:36 alp joins (~alp@2a01:e0a:58b:4920:64d4:d8e0:6287:786d)
23:42:48 Sgeo joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
23:44:40 kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz)
23:44:54 Sgeo__ joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
23:45:47 × Sgeo_ quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 240 seconds)
23:47:38 × Sgeo quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 272 seconds)
23:47:49 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 258 seconds)
23:47:59 pera joins (~pera@unaffiliated/pera)
23:49:49 × kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 260 seconds)
23:50:05 gestone joins (~gestone@c-73-97-137-216.hsd1.wa.comcast.net)
23:52:37 × Tops2 quits (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de) (Read error: Connection reset by peer)
23:53:08 <monochrom> DeriveWhatIMean = DWIM :)
23:53:14 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
23:54:43 <koz_> DeriveAllOfTheThings
23:55:38 × gestone quits (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 256 seconds)
23:57:54 × wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
23:58:53 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)

All times are in UTC on 2020-09-17.