2022/05/05

2022-05-05 00:03:09 +0200 <energizer> if i wanted to make a MyFrac type that can be constructed with either `fracOfFloat 1.5` or `fracOfPair 3 2` i can do that. but it seems in some way unnecessary that these need different names. Is it possible to use the same name `fracOf` for both and apply type inference to figure out which implementation to use?
2022-05-05 00:04:05 +0200 <dminuoso> With a surrogate typeclass, yes.
2022-05-05 00:04:11 +0200 <dminuoso> It's not going to be pretty
2022-05-05 00:04:12 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
2022-05-05 00:04:22 +0200 <dminuoso> This gets a bit into printf territory here
2022-05-05 00:05:55 +0200fendor(~fendor@77.119.174.56.wireless.dyn.drei.com) (Remote host closed the connection)
2022-05-05 00:09:41 +0200son0p(~ff@181.136.122.143)
2022-05-05 00:12:06 +0200shapr(~user@184.81.59.2)
2022-05-05 00:13:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-05 00:13:40 +0200moonsheep(~user@185.154.9.192)
2022-05-05 00:16:20 +0200acidjnk(~acidjnk@p200300d0c7068b77514ff9727fbe3410.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-05 00:17:04 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-05 00:17:19 +0200CAT_S(apic@brezn3.muc.ccc.de) (Ping timeout: 256 seconds)
2022-05-05 00:17:33 +0200sleym(~sleym@user/sleym) (Quit: sleym)
2022-05-05 00:18:31 +0200CAT_S(apic@brezn3.muc.ccc.de)
2022-05-05 00:20:20 +0200lispy(~lispy@82.212.115.91) (Quit: Client closed)
2022-05-05 00:20:51 +0200CiaoSen(~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-05 00:24:41 +0200machinedgod(~machinedg@24.105.81.50)
2022-05-05 00:25:37 +0200Ram-Z_(~Ram-Z@li1814-254.members.linode.com)
2022-05-05 00:26:55 +0200Ram-Z(~Ram-Z@li1814-254.members.linode.com) (Ping timeout: 260 seconds)
2022-05-05 00:27:06 +0200moonsheep(~user@185.154.9.192) (ERC 5.4 (IRC client for GNU Emacs 28.1))
2022-05-05 00:27:52 +0200 <jackdk> I recommend not doing this thing
2022-05-05 00:30:10 +0200zincy(~zincy@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection)
2022-05-05 00:30:20 +0200xaotuk(~sasha@2a06:5b00:15fe:9b00::2) (Ping timeout: 260 seconds)
2022-05-05 00:32:17 +0200Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
2022-05-05 00:32:29 +0200tzh_(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2022-05-05 00:32:37 +0200Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-05-05 00:32:38 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-05 00:32:40 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
2022-05-05 00:32:48 +0200 <geekosaur> so do I
2022-05-05 00:33:32 +0200 <geekosaur> it's fragile, it breaks type inference, it breaks partial application, the implementation is ugly as sin
2022-05-05 00:39:53 +0200nut(~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
2022-05-05 00:43:39 +0200ec(~ec@gateway/tor-sasl/ec) (Quit: ec)
2022-05-05 00:45:58 +0200zeenk(~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d) (Quit: Konversation terminated!)
2022-05-05 00:46:15 +0200Ranhir(~Ranhir@157.97.53.139) (Remote host closed the connection)
2022-05-05 00:48:44 +0200Ranhir(~Ranhir@157.97.53.139)
2022-05-05 00:49:09 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 00:49:09 +0200dzdcnfzd(~dzdcnfzd@2600:387:5:803::8a) (Quit: Client closed)
2022-05-05 00:49:36 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
2022-05-05 00:50:03 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-05-05 00:50:31 +0200Ranhir(~Ranhir@157.97.53.139) (Client Quit)
2022-05-05 00:52:37 +0200hololeap(~hololeap@user/hololeap) (Read error: Connection reset by peer)
2022-05-05 00:53:41 +0200Ranhir(~Ranhir@157.97.53.139)
2022-05-05 00:55:22 +0200 <abastro[m]> Printf implementation meets my eye tho
2022-05-05 00:55:39 +0200 <abastro[m]> It looks good
2022-05-05 00:59:54 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-05 01:03:50 +0200Topsi(~Topsi@dyndsl-095-033-017-123.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2022-05-05 01:04:45 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2022-05-05 01:05:29 +0200werneta(~werneta@137.79.215.173) (Ping timeout: 256 seconds)
2022-05-05 01:05:55 +0200shapr(~user@184.81.59.2) (Ping timeout: 260 seconds)
2022-05-05 01:08:40 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-05-05 01:12:39 +0200 <abastro[m]> > printf "cpu-%03d" 35
2022-05-05 01:12:41 +0200 <lambdabot> error:
2022-05-05 01:12:41 +0200 <lambdabot> • Ambiguous type variable ‘a0’ arising from a use of ‘show_M735548023158...
2022-05-05 01:12:41 +0200 <lambdabot> prevents the constraint ‘(Show a0)’ from being solved.
2022-05-05 01:14:01 +0200tommd(~tommd@97-120-41-123.ptld.qwest.net)
2022-05-05 01:14:02 +0200 <geekosaur> > printf "cpu-%03d" 35 :: String -- remember what I said about type inference
2022-05-05 01:14:04 +0200 <lambdabot> "cpu-035"
2022-05-05 01:14:47 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-05-05 01:18:33 +0200CAT_S(apic@brezn3.muc.ccc.de) (Ping timeout: 276 seconds)
2022-05-05 01:18:35 +0200 <dminuoso> Honestly, that was quite ironic right there.
2022-05-05 01:18:36 +0200 <abastro[m]> Strange, type defaulting should work
2022-05-05 01:18:40 +0200 <dminuoso> "it looks good"
2022-05-05 01:18:55 +0200 <abastro[m]> Ye it still looks good
2022-05-05 01:19:08 +0200 <abastro[m]> Ambiguous type variable because type not defaultwd
2022-05-05 01:19:11 +0200 <dminuoso> *bam* ambiguous type variable, and some really obscure show_M735548023158...
2022-05-05 01:19:19 +0200 <dminuoso> Really good user experience.
2022-05-05 01:19:32 +0200 <abastro[m]> > printf "cpu-%03d" 35 :: IO ()
2022-05-05 01:19:34 +0200 <lambdabot> <IO ()>
2022-05-05 01:19:49 +0200 <abastro[m]> Oh so lambdabot really cannot execute?
2022-05-05 01:19:57 +0200 <geekosaur> really can't
2022-05-05 01:20:06 +0200 <geekosaur> yahb could but is still MIA
2022-05-05 01:20:13 +0200 <geekosaur> % "hello"
2022-05-05 01:20:30 +0200dcoutts__(~duncan@host81-156-211-196.range81-156.btcentralplus.com) (Ping timeout: 260 seconds)
2022-05-05 01:21:04 +0200 <geekosaur> also String is not among the default defaults unless OverloadedStrings is enabled
2022-05-05 01:21:30 +0200 <geekosaur> @let {-# LANGUAGE OverloadedStrings #-}
2022-05-05 01:21:31 +0200 <lambdabot> Defined.
2022-05-05 01:21:45 +0200 <geekosaur> > printf "cpu-%03d" 35
2022-05-05 01:21:47 +0200 <lambdabot> error:
2022-05-05 01:21:47 +0200 <lambdabot> • Ambiguous type variable ‘a0’ arising from a use of ‘show_M908856889501...
2022-05-05 01:21:47 +0200 <lambdabot> prevents the constraint ‘(Show a0)’ from being solved.
2022-05-05 01:22:31 +0200 <geekosaur> and still doesn't work anyway because it can't default through PrintfType, iirc
2022-05-05 01:22:46 +0200 <geekosaur> @let {-# LANGUAGE ExtendedDefaultRules #-}
2022-05-05 01:22:47 +0200 <lambdabot> Defined.
2022-05-05 01:22:50 +0200 <geekosaur> > printf "cpu-%03d" 35
2022-05-05 01:22:52 +0200 <lambdabot> error:
2022-05-05 01:22:52 +0200 <lambdabot> • Ambiguous type variable ‘a0’ arising from a use of ‘show_M292047623486...
2022-05-05 01:22:52 +0200 <lambdabot> prevents the constraint ‘(Show a0)’ from being solved.
2022-05-05 01:22:58 +0200 <geekosaur> right, no fixing this one
2022-05-05 01:23:41 +0200 <abastro[m]> Now that rather convinces me that we need better string formatting tools
2022-05-05 01:23:52 +0200 <abastro[m]> Perhaps built-in ones rather than defined in base
2022-05-05 01:24:24 +0200 <abastro[m]> `"foo " ++ show foo ++ " is ..."` is extremely unergonomic
2022-05-05 01:29:00 +0200 <sm> there are a bunch of packages adding interpolatable, multi line string literals. They mostly/all use TH/QQ though, limiting their usefulness (slowing compilation, reducing portability..). I sure would love to have python/js-like ergonomic interpolatable string literals just built in
2022-05-05 01:29:08 +0200inversed_(~inversed@176.248.27.211)
2022-05-05 01:29:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-05 01:29:48 +0200 <abastro[m]> Indeed, those implemented by libs would inherently suffer from type inference anyway
2022-05-05 01:29:59 +0200 <abastro[m]> But meh, haskell is not designed for practical industrial usage
2022-05-05 01:30:20 +0200CAT_S(apic@brezn3.muc.ccc.de)
2022-05-05 01:30:22 +0200inversed(~inversed@176.248.27.211) (Ping timeout: 272 seconds)
2022-05-05 01:30:25 +0200mmhat(~mmh@2001:4090:a242:802a:ee08:6bff:fe09:5315) (Quit: WeeChat 3.5)
2022-05-05 01:30:38 +0200 <sm> that would be a nice ghc improvement project for someone interested in improving haskell uptake
2022-05-05 01:30:53 +0200Tuplanolla(~Tuplanoll@91-159-68-39.elisa-laajakaista.fi) (Quit: Leaving.)
2022-05-05 01:31:37 +0200 <sm> I think that statement is partly true, partly false
2022-05-05 01:32:34 +0200 <sm> that was one of the explicit goals for the language, and that's why it is as practical as it is
2022-05-05 01:32:54 +0200grimey(~grimey@162.255.84.96)
2022-05-05 01:33:07 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-05 01:33:47 +0200 <sm> haskell's unique strengths make it best-in-class for practical industrial usage in some ways
2022-05-05 01:33:52 +0200 <dminuoso> 01:29:59 abastro[m] | But meh, haskell is not designed for practical industrial usage
2022-05-05 01:34:05 +0200 <dminuoso> It's beyond me how this misconception keeps making its way into peoples head.
2022-05-05 01:34:14 +0200 <dminuoso> What makes you think "it was not designed for practical industrial usage"?
2022-05-05 01:34:41 +0200 <abastro[m]> Its primary purpose is not industrial success
2022-05-05 01:35:24 +0200 <geekosaur> I'm unconvinced that wiring it into ghc can improve things greatly, unless it's e.g. done in a way that simply forbids the problematic uses
2022-05-05 01:35:27 +0200 <dminuoso> You mean in the beginning? Or now?
2022-05-05 01:35:35 +0200werneta(~werneta@137.79.199.110)
2022-05-05 01:35:41 +0200 <abastro[m]> Also nowadays everyone knows the "Avoid success at all costs"
2022-05-05 01:35:47 +0200 <geekosaur> inparticular anything that does the kind of interpolation the TH/QQ based stuff does will use the TH/QQ machinery anyway
2022-05-05 01:35:49 +0200 <dminuoso> That's a meme at best.
2022-05-05 01:36:04 +0200 <hpc> it's times like these i wish lambdabot still had @faq
2022-05-05 01:36:10 +0200 <abastro[m]> Associate in whichever way, it means the lang is not aimed at being successful
2022-05-05 01:36:17 +0200 <EvanR> abastro[m], when the string building needs grow beyond simply showing stuff, the ++ form ends up being relatively not bad
2022-05-05 01:36:39 +0200 <hpc> abastro[m]: it's meant as a joke, and means to not get stuck in a situation where improvement becomes impossible
2022-05-05 01:36:46 +0200 <geekosaur> abastro[m] wants their meme and you can't take it away from them
2022-05-05 01:36:47 +0200 <abastro[m]> Well, it indeed looks bad
2022-05-05 01:36:53 +0200 <hpc> like how python almost died going from 2 to 3
2022-05-05 01:36:58 +0200 <hpc> and how perl /did/ die going from 5 to 6
2022-05-05 01:37:11 +0200 <monochrom> People manufacture excuses.
2022-05-05 01:37:25 +0200 <abastro[m]> hpc: Well, didn't it make pointless changes like AMP possible?
2022-05-05 01:37:33 +0200q0r(~q0r@pool-108-26-33-153.syrcny.east.verizon.net)
2022-05-05 01:37:34 +0200 <monochrom> No FAQ can prevail over FUD rationalizations.
2022-05-05 01:37:37 +0200Kaiepi(~kaiepi@156.34.47.253) (Read error: Connection reset by peer)
2022-05-05 01:37:41 +0200 <EvanR> "foo %s bar" % whatever.str isn't much easier to type and is a bit gimmicky
2022-05-05 01:38:01 +0200 <monochrom> Just look at flatearthers. Has any roundearth FAQ ever changed their minds?
2022-05-05 01:38:28 +0200 <EvanR> >Haskell wasn't designed for industrial usage
2022-05-05 01:38:36 +0200 <EvanR> Indeed "haskell was discovered, not invented"
2022-05-05 01:38:44 +0200 <EvanR> "I think you can tell"
2022-05-05 01:38:59 +0200 <abastro[m]> See, one of the biggest reason ppl say haskell is unpractical is how often it makes breaking changes which looks pointless
2022-05-05 01:39:01 +0200 <dminuoso> Dont confuse "designed for" with "not suitable for"
2022-05-05 01:39:09 +0200 <dminuoso> Haskell is perfectly suitable for industrial usage.
2022-05-05 01:39:12 +0200 <sm> it's true that haskell appears not to care as much about developer ergonomics as say rust or ruby did. That's partly historical accident (slow growth, slow to find a killer app), partly that it's harder because haskell is doing more difficult things
2022-05-05 01:39:13 +0200 <abastro[m]> It does refactor the code, but does it hold practical value?
2022-05-05 01:39:29 +0200 <geekosaur> define practical value
2022-05-05 01:39:29 +0200 <abastro[m]> Yea, I meant "not designed for" dminuoso
2022-05-05 01:39:42 +0200 <dminuoso> So?
2022-05-05 01:39:44 +0200 <abastro[m]> sm: Exactly
2022-05-05 01:39:46 +0200 <dolio> This is complete nonsense.
2022-05-05 01:39:47 +0200 <hpc> monochrom: not only is the earth flat, it's dymaxion-shaped
2022-05-05 01:39:49 +0200 <geekosaur> you sound like the sort of person whose argumwnts will add up to "it's not javascript" in the end
2022-05-05 01:39:55 +0200 <dminuoso> It doesnt matter what the design goals are, it just matters what its suitable for.
2022-05-05 01:39:56 +0200 <monochrom> Here is what's really designed against industrial use: Spending time on repeatedly harping "not designed for industrial use".
2022-05-05 01:39:59 +0200 <hpc> spacetime is just magnificently odd to make it appear spherical :D
2022-05-05 01:40:05 +0200 <dminuoso> C was not designed for industrial usage either.
2022-05-05 01:40:08 +0200 <dminuoso> It was very successful
2022-05-05 01:40:13 +0200 <monochrom> Like, why waste time arguing.
2022-05-05 01:40:26 +0200 <abastro[m]> Well, I meant how it is often against practical change
2022-05-05 01:40:27 +0200 <hpc> you know what was actually designed for industrial usage? cobol
2022-05-05 01:40:32 +0200 <EvanR> does industrial usage mean web tech
2022-05-05 01:40:38 +0200q0r(~q0r@pool-108-26-33-153.syrcny.east.verizon.net) (Quit: Connection closed)
2022-05-05 01:40:41 +0200 <EvanR> or like, controlling factory robots
2022-05-05 01:40:50 +0200 <EvanR> no, they should not be the same thing
2022-05-05 01:41:03 +0200 <monochrom> You can invest time improving Haskell industrial use. Or you can invest time working with another language for industrial use. Either way is rational.
2022-05-05 01:41:06 +0200 <dminuoso> Facebook runs their global spam fighting engine processing millions of events per second, doing hundreds of millions of checks per second - all on Haskell.
2022-05-05 01:41:21 +0200 <monochrom> But keep whining about this topic? That I don't understand.
2022-05-05 01:41:27 +0200 <dminuoso> I think that's one hell of an example how useful Haskell is as a tool. *shrugs*
2022-05-05 01:41:28 +0200 <sm> perhaps a good time to link this excellent recent https://www.reddit.com/r/haskell/comments/uhdl5a/11_companies_that_use_haskell_in_production post
2022-05-05 01:41:29 +0200 <monochrom> Do you have a life?
2022-05-05 01:41:39 +0200 <geekosaur> "someone doesn't agree with me on the internet"
2022-05-05 01:41:52 +0200 <abastro[m]> Well
2022-05-05 01:42:28 +0200 <abastro[m]> This somewhat adds up to "elitism" they say
2022-05-05 01:42:38 +0200 <EvanR> ???
2022-05-05 01:42:47 +0200 <monochrom> Why should we care?
2022-05-05 01:42:50 +0200 <EvanR> that sounds out of the blue
2022-05-05 01:42:59 +0200 <EvanR> here's evidence against your claim.
2022-05-05 01:43:02 +0200 <EvanR> no, you're elitist
2022-05-05 01:43:03 +0200 <abastro[m]> Yea, you might not care
2022-05-05 01:43:32 +0200 <monochrom> I'm quite ready to ban. This is a waste of our time.
2022-05-05 01:43:36 +0200 <EvanR> or is elitist like "that's unsustainable" in that it's a polymorphic refutation against anything
2022-05-05 01:43:37 +0200 <abastro[m]> Just saying that how ppl get such impression on haskell
2022-05-05 01:43:38 +0200 <dolio> +1
2022-05-05 01:44:21 +0200geekosaurdeclines to repeat himself
2022-05-05 01:44:31 +0200 <EvanR> evidence against elitist haskell: forall is a key word
2022-05-05 01:44:34 +0200 <geekosaur> monochrom, agreed
2022-05-05 01:44:42 +0200 <monochrom> And BTW to answer those who said I was too trigger-happy last time: I saw good regulars leaving this channel precisely because we fed the trolls instead of banning.
2022-05-05 01:44:59 +0200 <monochrom> quchen was one of those who left, for example.
2022-05-05 01:45:03 +0200 <hpc> EvanR: haskell isn't real - evidence: exists is not a keyword
2022-05-05 01:45:07 +0200 <hpc> we've all been duped i tell you!
2022-05-05 01:45:09 +0200 <EvanR> lol
2022-05-05 01:45:14 +0200 <dminuoso> It's quite surprising how people without much knowledge of a language frequently seem to be the leading experts about why that language is good or bad.
2022-05-05 01:46:28 +0200 <EvanR> if you have too much knowledge, you're elitist
2022-05-05 01:46:29 +0200 <hpc> dminuoso: it's a zero-knowledge proof :P
2022-05-05 01:47:51 +0200 <dminuoso> I mean there is some truth in that the Haskell community can be intimidating, because we attract a far higher frequency of academics/very involved researchers.
2022-05-05 01:48:07 +0200 <hpc> oh, also on the topic of hasksell in industry, my coworkers wouldn't even know they've been running haskell code if i didn't tell them (shellcheck)
2022-05-05 01:48:27 +0200 <EvanR> best not to, tell them
2022-05-05 01:48:30 +0200 <dminuoso> shellcheck is written in Haskell? :o
2022-05-05 01:48:34 +0200 <EvanR> they might react like abastro[m]
2022-05-05 01:48:43 +0200 <hpc> https://github.com/koalaman/shellcheck
2022-05-05 01:48:57 +0200 <monochrom> Approximately only xmonad users are painfully aware that here is a program written in Haskell.
2022-05-05 01:49:15 +0200 <monochrom> Pandoc users don't notice, for example.
2022-05-05 01:49:22 +0200 <EvanR> yeah it's weird, "the only reason I care about haskell is I'm forced to use it for xmonad"
2022-05-05 01:49:24 +0200 <monochrom> ghcup users probably don't notice either, heh.
2022-05-05 01:49:33 +0200 <dminuoso> `here`?
2022-05-05 01:49:59 +0200 <EvanR> here: command not found
2022-05-05 01:50:00 +0200 <monochrom> Oh, as in "here is a program written in Haskell: xmonad"
2022-05-05 01:51:00 +0200 <monochrom> But the same can be said of Linux. How many people know that by now virtually all home routers run Linux?
2022-05-05 01:51:12 +0200 <dminuoso> Not just home routers.
2022-05-05 01:51:22 +0200 <hpc> also phones
2022-05-05 01:51:23 +0200 <dminuoso> Expensive 7 digit backbone routing plattforms run linux too.
2022-05-05 01:51:37 +0200 <hpc> all intel processors have an embedded copy of minix
2022-05-05 01:52:04 +0200 <hpc> and your car, and your tv, and your watch
2022-05-05 01:52:34 +0200 <hpc> your car might even have multiple instances of linux
2022-05-05 01:52:35 +0200 <EvanR> all intel processors include a slow, bug ridden, informally specified, implementation of half of minix?
2022-05-05 01:52:52 +0200 <hpc> EvanR: nope, they have the whole thing, it's part of their management engine stuff
2022-05-05 01:52:55 +0200 <dminuoso> IME
2022-05-05 01:53:06 +0200 <dminuoso> The absolutely disgusting dark side of modern processors.
2022-05-05 01:53:17 +0200 <EvanR> modern CPU is spooky big
2022-05-05 01:53:38 +0200 <hpc> although if you really want to use that quote, all intel instructions include a slow, bug ridden, informally specified implementation of half a turing machine
2022-05-05 01:53:44 +0200 <hpc> or a full one as the case may be
2022-05-05 01:54:21 +0200 <EvanR> can the instruction go into an infinite loop and be killed by a watchdog ? xD
2022-05-05 01:54:40 +0200 <hpc> almost, it can go through interrupt operations indefinitely
2022-05-05 01:55:11 +0200 <hpc> https://github.com/jbangert/trapcc
2022-05-05 01:56:49 +0200 <monochrom> Yikes haha.
2022-05-05 01:57:14 +0200 <hpc> https://www.youtube.com/playlist?list=PLowKtXNTBypGqImE405J2565dvjafglHU - the microcode stuff near the end of this playlist can give you a feel for how easy it is to happen
2022-05-05 01:57:14 +0200 <monochrom> But I'm curious about the "cc" part. trap-with-current-continuation? :)
2022-05-05 01:57:26 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 01:57:34 +0200 <hpc> (or how easy it would be if your cpu arch had intel's level of history attached to it)
2022-05-05 01:57:40 +0200 <hpc> but also the whole playlist is really interesting
2022-05-05 01:58:14 +0200 <hpc> accidental turing completeness is a hell of a thing
2022-05-05 01:58:33 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-05-05 01:58:58 +0200mvk(~mvk@2607:fea8:5ce3:8500::aa1d) (Ping timeout: 250 seconds)
2022-05-05 01:59:00 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 246 seconds)
2022-05-05 02:01:20 +0200werneta(~werneta@137.79.199.110) (Ping timeout: 260 seconds)
2022-05-05 02:02:47 +0200alp_(~alp@user/alp)
2022-05-05 02:04:24 +0200frost(~frost@user/frost)
2022-05-05 02:04:35 +0200Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (Quit: Ping timeout (120 seconds))
2022-05-05 02:04:54 +0200Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net)
2022-05-05 02:08:36 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 248 seconds)
2022-05-05 02:12:00 +0200frost(~frost@user/frost) (Quit: Client closed)
2022-05-05 02:12:35 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-05 02:12:35 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-05 02:12:35 +0200wroathe(~wroathe@user/wroathe)
2022-05-05 02:14:34 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
2022-05-05 02:14:46 +0200 <EvanR> in satisfactory there's an intermediate item called "AI limiter". Maybe we need "Turing completeness limiter"
2022-05-05 02:15:22 +0200 <monochrom> We have timeouts. Is that good enough? :)
2022-05-05 02:15:25 +0200 <dminuoso> Is that like a circuit board component I can solder on, EvanR?
2022-05-05 02:15:39 +0200 <EvanR> yes
2022-05-05 02:15:52 +0200 <monochrom> Right? If my computer is unresponsive for a minute, I unplug it. My limiter.
2022-05-05 02:16:10 +0200xff0x(~xff0x@om126167102105.29.openmobile.ne.jp)
2022-05-05 02:16:11 +0200 <monochrom> Except for laptops. That's harder.
2022-05-05 02:16:28 +0200 <EvanR> the level of automation there is also like satisfactory (low)
2022-05-05 02:16:35 +0200 <dminuoso> We actually did have turbo button many eons ago.
2022-05-05 02:16:47 +0200zyklotomic(~ethan@res380d-128-61-86-82.res.gatech.edu) (Ping timeout: 256 seconds)
2022-05-05 02:16:49 +0200 <dminuoso> A precursor to turing limiters.
2022-05-05 02:16:53 +0200 <monochrom> Oh w00t turbo button. Yeah I had one.
2022-05-05 02:17:06 +0200 <EvanR> people used it like a limiter
2022-05-05 02:17:10 +0200 <monochrom> Err wait how is that limiting haha
2022-05-05 02:17:19 +0200 <EvanR> by default you leave turbo on
2022-05-05 02:17:33 +0200 <dminuoso> Yes, the turbo button was just a limiter with an inverted name.
2022-05-05 02:17:33 +0200zyklotomic(~ethan@res380d-128-61-84-187.res.gatech.edu)
2022-05-05 02:17:36 +0200 <EvanR> then when necessary go "subturbo"
2022-05-05 02:17:39 +0200 <monochrom> OK that's throttling if you turn it off. But it doesn't stop.
2022-05-05 02:17:42 +0200 <dminuoso> Turbo sounds more positive than throttle.
2022-05-05 02:18:05 +0200 <monochrom> The reset button is closer to a limiter.
2022-05-05 02:18:12 +0200 <EvanR> they should bring back that marketing
2022-05-05 02:18:16 +0200 <dminuoso> The power button is a turing limiter.
2022-05-05 02:18:21 +0200 <monochrom> Yeah.
2022-05-05 02:18:24 +0200 <dminuoso> Press it, and turing completeness is limited to 0.
2022-05-05 02:18:33 +0200 <EvanR> your ISP will no longer throttle you, rather, they will take away your turbo
2022-05-05 02:20:04 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-05-05 02:20:18 +0200 <EvanR> you guys are joking about limiting turing completeness by turning it off, unplugging it, or activate the self destruct ordinance. And a great idea goes out the window xD
2022-05-05 02:21:52 +0200 <dminuoso> That was not a joke.
2022-05-05 02:22:07 +0200 <dminuoso> But an odinance turing limiter sounds exciting. Tell me more.
2022-05-05 02:22:09 +0200 <dminuoso> Do you have a video?
2022-05-05 02:23:45 +0200 <hpc> ah yes, the principle of explosion
2022-05-05 02:24:29 +0200 <monochrom> EvanR: What is the great idea?
2022-05-05 02:24:55 +0200 <monochrom> Ordinance has detonational semantics >:)
2022-05-05 02:25:35 +0200 <monochrom> https://mail.haskell.org/pipermail/haskell-cafe/2011-January/088315.html
2022-05-05 02:27:48 +0200tommd(~tommd@97-120-41-123.ptld.qwest.net) (Ping timeout: 248 seconds)
2022-05-05 02:27:49 +0200 <hpc> musical semantics is genius
2022-05-05 02:28:04 +0200 <dminuoso> @remember monochrom Ordinance has detonational semantics >:)
2022-05-05 02:28:04 +0200 <lambdabot> I will remember.
2022-05-05 02:29:46 +0200 <seydar> another day, another attempt to implement blurhash
2022-05-05 02:33:06 +0200 <seydar> Axman6 described it as "super compressed JPG", so now i'm trying to understand the JuicyPixels implementation of JPG encoding
2022-05-05 02:36:17 +0200shapr(~user@184.81.59.2)
2022-05-05 02:45:37 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 02:53:38 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-05 02:58:51 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-05-05 02:59:05 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 260 seconds)
2022-05-05 03:01:14 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 03:02:07 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-05 03:02:28 +0200CAT_S(apic@brezn3.muc.ccc.de) (Ping timeout: 248 seconds)
2022-05-05 03:06:11 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 03:06:24 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2022-05-05 03:06:27 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Ping timeout: 276 seconds)
2022-05-05 03:09:54 +0200kaiepi(~Kaiepi@156.34.47.253)
2022-05-05 03:12:23 +0200Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2022-05-05 03:12:35 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2022-05-05 03:12:35 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2022-05-05 03:12:38 +0200allbery_bgeekosaur
2022-05-05 03:15:29 +0200CAT_S(apic@brezn3.muc.ccc.de)
2022-05-05 03:20:36 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
2022-05-05 03:25:20 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
2022-05-05 03:29:11 +0200stackdroid18(14094@user/stackdroid) (Quit: hasta la vista... tchau!)
2022-05-05 03:29:17 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 03:35:27 +0200 <sm[i]> > <monochrom> And BTW to answer those who said I was too trigger-happy last time: I saw good regulars leaving this channel precisely because we fed the trolls instead of banning.
2022-05-05 03:35:28 +0200 <lambdabot> <hint>:1:1: error: parse error on input ‘<’
2022-05-05 03:36:02 +0200 <sm[i]> I am usually one of those. I get that it's a fine line and difficult to judge sometimes.
2022-05-05 03:36:33 +0200 <sm[i]> for me, when a channel becomes too intolerant and cliquish, it's the sign of an calcifying community and time to move on
2022-05-05 03:36:59 +0200 <sm[i]> avoid either extreme, and cool the temperature, is the goal for a channel op I think
2022-05-05 03:37:39 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 276 seconds)
2022-05-05 03:37:45 +0200shapr(~user@184.81.59.2) (Remote host closed the connection)
2022-05-05 03:38:03 +0200shapr(~user@184.81.59.2)
2022-05-05 03:38:24 +0200andrey_(~andrey@p200300dbcf1053000b1abd83a6152638.dip0.t-ipconnect.de)
2022-05-05 03:38:50 +0200 <sm[i]> monochrom, sometimes I get the feeling you enjoy the ban hammer a little more than a good op should. Just my humble and respectful 2c
2022-05-05 03:38:55 +0200 <EvanR> seydar, that was me, too at least
2022-05-05 03:40:51 +0200andrey__(~andrey@p508d5cc9.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2022-05-05 03:41:58 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 03:42:27 +0200shapr(~user@184.81.59.2) (Ping timeout: 256 seconds)
2022-05-05 03:42:56 +0200shapr(~user@184.81.59.2)
2022-05-05 03:43:00 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
2022-05-05 03:45:04 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-05-05 03:47:54 +0200 <EvanR> /mode +b nutter This hurts the community more than it hurts you
2022-05-05 03:47:58 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 03:48:35 +0200kaiepi(~Kaiepi@156.34.47.253) (Ping timeout: 256 seconds)
2022-05-05 03:52:36 +0200alp_(~alp@user/alp) (Ping timeout: 252 seconds)
2022-05-05 03:52:48 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 260 seconds)
2022-05-05 03:53:15 +0200tommd(~tommd@97-120-41-123.ptld.qwest.net)
2022-05-05 03:57:45 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 248 seconds)
2022-05-05 04:00:49 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Quit: Leaving)
2022-05-05 04:09:43 +0200shapr(~user@184.81.59.2) (Ping timeout: 260 seconds)
2022-05-05 04:15:14 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-05-05 04:15:14 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-05-05 04:15:14 +0200finn_elijaFinnElija
2022-05-05 04:19:42 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 04:19:50 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-05 04:19:54 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-05 04:19:54 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-05 04:19:54 +0200wroathe(~wroathe@user/wroathe)
2022-05-05 04:26:52 +0200AlexNoo_(~AlexNoo@178.34.163.12)
2022-05-05 04:27:43 +0200euandreh(~euandreh@2804:14c:33:9fe5:2165:73d6:1630:f174) (Quit: WeeChat 3.5)
2022-05-05 04:28:04 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-05 04:28:58 +0200AlexZenon(~alzenon@178.34.162.108) (Ping timeout: 272 seconds)
2022-05-05 04:29:12 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-05 04:30:12 +0200AlexNoo(~AlexNoo@178.34.162.108) (Ping timeout: 246 seconds)
2022-05-05 04:30:52 +0200Alex_test(~al_test@178.34.162.108) (Ping timeout: 272 seconds)
2022-05-05 04:32:09 +0200AlexZenon(~alzenon@178.34.163.12)
2022-05-05 04:34:23 +0200Alex_test(~al_test@178.34.163.12)
2022-05-05 04:36:48 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 276 seconds)
2022-05-05 04:41:39 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 04:45:21 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-05-05 04:52:35 +0200xff0x(~xff0x@om126167102105.29.openmobile.ne.jp) (Read error: Connection reset by peer)
2022-05-05 04:56:04 +0200td_(~td@muedsl-82-207-238-011.citykom.de) (Ping timeout: 248 seconds)
2022-05-05 04:57:55 +0200td_(~td@muedsl-82-207-238-115.citykom.de)
2022-05-05 04:58:40 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 260 seconds)
2022-05-05 05:00:00 +0200mvk(~mvk@2607:fea8:5ce3:8500::aa1d)
2022-05-05 05:00:05 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-05-05 05:00:15 +0200tommd(~tommd@97-120-41-123.ptld.qwest.net) (Ping timeout: 252 seconds)
2022-05-05 05:02:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-05 05:07:23 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-05 05:09:02 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 05:13:41 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
2022-05-05 05:18:15 +0200euandreh(~euandreh@2804:14c:33:9fe5:2165:73d6:1630:f174)
2022-05-05 05:19:12 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 05:19:45 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-05-05 05:24:52 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 248 seconds)
2022-05-05 05:29:25 +0200pavonia(~user@user/siracusa)
2022-05-05 05:29:33 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es) (Ping timeout: 256 seconds)
2022-05-05 05:34:39 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
2022-05-05 05:35:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-05-05 05:39:01 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2022-05-05 05:40:39 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 05:41:19 +0200img(~img@user/img)
2022-05-05 05:45:19 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
2022-05-05 05:48:09 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 05:51:13 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 05:53:15 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-05-05 05:54:53 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-05-05 05:55:00 +0200lechner(lechner@debian/lechner) (Quit: WeeChat 3.5)
2022-05-05 05:55:15 +0200lechner(lechner@debian/lechner)
2022-05-05 05:56:06 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 276 seconds)
2022-05-05 05:58:00 +0200lechner(lechner@debian/lechner) (Client Quit)
2022-05-05 05:58:14 +0200lechner(lechner@debian/lechner)
2022-05-05 05:59:07 +0200EvanR(~EvanR@user/evanr) (Remote host closed the connection)
2022-05-05 05:59:27 +0200EvanR(~EvanR@user/evanr)
2022-05-05 06:00:39 +0200benin(~benin@183.82.29.230)
2022-05-05 06:01:18 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 06:06:30 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 276 seconds)
2022-05-05 06:08:24 +0200notzmv(~zmv@user/notzmv)
2022-05-05 06:13:54 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-05-05 06:14:40 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-05-05 06:15:37 +0200coot(~coot@213.134.190.95)
2022-05-05 06:25:04 +0200bahamas(~lucian@84.232.141.55)
2022-05-05 06:32:43 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 06:35:08 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Client Quit)
2022-05-05 06:40:26 +0200zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-05-05 06:43:48 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 248 seconds)
2022-05-05 06:46:42 +0200zaquest(~notzaques@5.130.79.72)
2022-05-05 06:47:46 +0200mbuf(~Shakthi@27.58.129.52)
2022-05-05 06:50:54 +0200dunj3(~dunj3@kingdread.de) (Quit: ZNC 1.7.2+deb3 - https://znc.in)
2022-05-05 07:01:09 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2022-05-05 07:03:09 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-05-05 07:04:32 +0200Vajb(~Vajb@2001:999:400:9bc1:d5dd:7e53:33b:56)
2022-05-05 07:07:19 +0200jargon(~jargon@174-22-206-112.phnx.qwest.net) (Quit: Nini. ZZzz...)
2022-05-05 07:09:08 +0200Me-me(~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host)
2022-05-05 07:09:08 +0200Me-me(~me-me@user/me-me)
2022-05-05 07:11:39 +0200cdman(~dcm@user/dmc/x-4369397)
2022-05-05 07:35:55 +0200forell(~forell@user/forell) (Ping timeout: 256 seconds)
2022-05-05 07:41:55 +0200bliminse(~bliminse@host86-164-128-238.range86-164.btcentralplus.com) (Quit: leaving)
2022-05-05 07:46:44 +0200x_kuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2022-05-05 07:52:26 +0200gpncarl(~gpncarl@120.244.220.74)
2022-05-05 07:56:16 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 07:56:50 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-05-05 07:58:52 +0200[Leary](~Leary]@122-58-228-205-vdsl.sparkbb.co.nz) (Remote host closed the connection)
2022-05-05 07:59:16 +0200[Leary](~Leary]@122-58-228-205-vdsl.sparkbb.co.nz)
2022-05-05 08:00:48 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
2022-05-05 08:02:56 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-05-05 08:03:15 +0200michalz(~michalz@185.246.204.105)
2022-05-05 08:04:09 +0200gpncarl(~gpncarl@120.244.220.74) (Ping timeout: 276 seconds)
2022-05-05 08:06:05 +0200acidjnk(~acidjnk@p200300d0c7068b437523c7c9ae2c8004.dip0.t-ipconnect.de)
2022-05-05 08:08:30 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-05-05 08:12:46 +0200forell(~forell@user/forell)
2022-05-05 08:19:57 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-05-05 08:20:21 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-05-05 08:40:59 +0200Wstfgl0(~me-me@v.working.name)
2022-05-05 08:43:06 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:e8a7:5207:d6e5:3f9a)
2022-05-05 08:43:27 +0200Me-me(~me-me@user/me-me) (Killed (NickServ (GHOST command used by Wstfgl0!~me-me@v.working.name)))
2022-05-05 08:43:30 +0200Wstfgl0Me-me
2022-05-05 08:43:37 +0200Me-me(~me-me@v.working.name) (Changing host)
2022-05-05 08:43:37 +0200Me-me(~me-me@user/me-me)
2022-05-05 08:46:27 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-05-05 08:47:37 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-05 08:49:41 +0200kenran(~kenran@ip-037-024-119-190.um08.pools.vodafone-ip.de)
2022-05-05 08:56:55 +0200bitmapper(uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-05-05 09:02:34 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-05 09:05:03 +0200alp_(~alp@user/alp)
2022-05-05 09:05:41 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net)
2022-05-05 09:07:24 +0200jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 246 seconds)
2022-05-05 09:08:06 +0200bahamas(~lucian@84.232.141.55)
2022-05-05 09:16:44 +0200Gilbert189(~Gilbert18@user/Gilbert189)
2022-05-05 09:22:24 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-05-05 09:22:57 +0200shriekingnoise(~shrieking@201.231.16.156) (Quit: Quit)
2022-05-05 09:25:42 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-05 09:32:32 +0200jonathanx(~jonathan@dyn-5-sc.cdg.chalmers.se)
2022-05-05 09:33:12 +0200kaph(~kaph@net-2-42-128-205.cust.vodafonedsl.it)
2022-05-05 09:34:23 +0200chele(~chele@user/chele)
2022-05-05 09:35:45 +0200fendor(~fendor@91.141.58.225.wireless.dyn.drei.com)
2022-05-05 09:39:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-05 09:39:55 +0200nek0(~nek0@nek0.eu) (Quit: Ping timeout (120 seconds))
2022-05-05 09:40:13 +0200nek0(~nek0@nek0.eu)
2022-05-05 09:47:09 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-05 09:47:19 +0200mmhat(~mmh@2001:4090:a242:802a:ee08:6bff:fe09:5315)
2022-05-05 09:47:41 +0200sus(zero@user/zeromomentum) (Quit: the lounge - https://webirc.envs.net)
2022-05-05 09:47:43 +0200machinedgod(~machinedg@24.105.81.50)
2022-05-05 09:48:17 +0200sus(zero@user/zeromomentum)
2022-05-05 09:50:34 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-05-05 09:51:52 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-05-05 09:52:03 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 276 seconds)
2022-05-05 09:53:07 +0200kaiepi(~Kaiepi@156.34.47.253)
2022-05-05 09:53:12 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-05 09:53:16 +0200Gilbert189(~Gilbert18@user/Gilbert189) (Quit: Leaving)
2022-05-05 09:53:26 +0200dyeplexer(~dyeplexer@user/dyeplexer)
2022-05-05 09:54:25 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 260 seconds)
2022-05-05 09:57:45 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 09:58:32 +0200gehmehgeh(~user@user/gehmehgeh)
2022-05-05 10:02:12 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Ping timeout: 248 seconds)
2022-05-05 10:03:17 +0200tzh_(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-05-05 10:03:33 +0200 <absence> is it possible to enable GHC.Stats with a function call, or is passing the rts option -T the only way?
2022-05-05 10:03:49 +0200bgs(~bgs@cpe-212-85-160-171.cable.telemach.net) (Ping timeout: 256 seconds)
2022-05-05 10:03:51 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
2022-05-05 10:04:04 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-05-05 10:05:49 +0200bgs(~bgs@cpe-212-85-160-171.cable.telemach.net)
2022-05-05 10:06:43 +0200gpncarl(~gpncarl@120.244.220.74)
2022-05-05 10:07:55 +0200raym(~raym@user/raym) (Ping timeout: 260 seconds)
2022-05-05 10:09:35 +0200raym(~raym@user/raym)
2022-05-05 10:11:05 +0200gpncarl(~gpncarl@120.244.220.74) (Ping timeout: 248 seconds)
2022-05-05 10:12:51 +0200Midjak(~Midjak@82.66.147.146)
2022-05-05 10:12:52 +0200mvk(~mvk@2607:fea8:5ce3:8500::aa1d) (Ping timeout: 248 seconds)
2022-05-05 10:14:55 +0200__monty__(~toonn@user/toonn)
2022-05-05 10:16:19 +0200ubert(~Thunderbi@p200300ecdf1588a56901cfb4252abec6.dip0.t-ipconnect.de)
2022-05-05 10:16:47 +0200acidjnk(~acidjnk@p200300d0c7068b437523c7c9ae2c8004.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-05 10:16:53 +0200ccntrq(~Thunderbi@2a01:e34:eccb:b060:8a52:6111:fb65:b9eb)
2022-05-05 10:17:52 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-05-05 10:19:11 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-05-05 10:19:34 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2022-05-05 10:19:36 +0200kaiepi(~Kaiepi@156.34.47.253) (Read error: Connection reset by peer)
2022-05-05 10:22:42 +0200kaiepi(~Kaiepi@156.34.47.253)
2022-05-05 10:22:47 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-05 10:24:11 +0200ubert(~Thunderbi@p200300ecdf1588a56901cfb4252abec6.dip0.t-ipconnect.de) (Quit: ubert)
2022-05-05 10:26:26 +0200kaiepi(~Kaiepi@156.34.47.253) (Client Quit)
2022-05-05 10:26:48 +0200bahamas(~lucian@92.85.13.88)
2022-05-05 10:28:24 +0200kaiepi(~Kaiepi@156.34.47.253)
2022-05-05 10:28:36 +0200kenran(~kenran@ip-037-024-119-190.um08.pools.vodafone-ip.de) (Quit: WeeChat info:version)
2022-05-05 10:29:56 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-05 10:33:32 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net)
2022-05-05 10:34:25 +0200[Leary](~Leary]@122-58-228-205-vdsl.sparkbb.co.nz) (Remote host closed the connection)
2022-05-05 10:34:25 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl)
2022-05-05 10:36:48 +0200 <apache2> speaking of intel instructions
2022-05-05 10:37:40 +0200 <apache2> in the manuals for x86, x86_64, etc they have a description of what each assembly mnemonic does in a sort of pseudo-code language
2022-05-05 10:37:47 +0200 <apache2> does that have a name, and has anybody implemented it?
2022-05-05 10:40:07 +0200 <apache2> aand to get back on track: I managed to introduce some kind of bug in my code which resulted in an endless loop over an recursive list when trying to add a character to a Text string, the let binding stuff is pretty magical
2022-05-05 10:40:35 +0200 <apache2> I found it by bisection, commenting out parts until something worked again
2022-05-05 10:40:46 +0200[Leary](~Leary]@122-58-228-205-vdsl.sparkbb.co.nz)
2022-05-05 10:40:52 +0200 <apache2> is there some sort of profiler / debugger / something to help diagnose problems like that?
2022-05-05 10:49:09 +0200mjacob(~mjacob@adrastea.uberspace.de) (Ping timeout: 256 seconds)
2022-05-05 10:49:43 +0200tomku|two(~tomku@user/tomku) (Ping timeout: 256 seconds)
2022-05-05 10:49:51 +0200tomku(~tomku@user/tomku)
2022-05-05 10:49:56 +0200mjacob(~mjacob@adrastea.uberspace.de)
2022-05-05 10:52:11 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2022-05-05 10:52:32 +0200 <merijn> apache2: Depends how the endless loop happens :p
2022-05-05 10:53:02 +0200 <merijn> apache2: ghci has a built in debugger, but it's not used super much
2022-05-05 10:53:29 +0200 <merijn> Because
2022-05-05 10:53:34 +0200 <merijn> @quote cmccann stream.of.con
2022-05-05 10:53:35 +0200 <lambdabot> cmccann says: you want a debugger? GHC has one. Except that stepping through lazy evaluation is like listening to a stream of consciousness narrative told by a 5-year-old with ADHD.
2022-05-05 10:54:00 +0200 <merijn> There's also profiling support, but I dunno how well that works to catch infinite loops
2022-05-05 10:56:08 +0200teo(~teo@user/teo)
2022-05-05 10:57:27 +0200teo(~teo@user/teo) (Client Quit)
2022-05-05 10:58:18 +0200teo(~teo@user/teo)
2022-05-05 11:00:02 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-05-05 11:00:06 +0200corisco[m](~coriscokd@2001:470:69fc:105::1:dea6) (Quit: You have been kicked for being idle)
2022-05-05 11:00:23 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-05-05 11:02:04 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-05 11:02:32 +0200 <kuribas> the ghc debugger is also not how I want to debug.
2022-05-05 11:02:37 +0200ccntrq(~Thunderbi@2a01:e34:eccb:b060:8a52:6111:fb65:b9eb) (Remote host closed the connection)
2022-05-05 11:02:40 +0200 <kuribas> I don't care about the order ghc uses to evaluate things.
2022-05-05 11:03:01 +0200 <kuribas> So I would want to be able to specify what part of the eval tree to evaluate next.
2022-05-05 11:03:10 +0200 <kuribas> "stepping" feels to imperative.
2022-05-05 11:03:24 +0200ccntrq(~Thunderbi@2a01:e34:eccb:b060:8a52:6111:fb65:b9eb)
2022-05-05 11:04:27 +0200 <kuribas> As long as the debugger keeps the right semantics, so a bottom will not quit the whole evaluation.
2022-05-05 11:04:27 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-05 11:04:33 +0200gpncarl(~gpncarl@120.244.220.74)
2022-05-05 11:05:12 +0200 <kuribas> for example snd (undefined, 4), I should be able to evaluate the first argument, without it stopping evaluating the whole thing.
2022-05-05 11:05:17 +0200ubert(~Thunderbi@2a02:8109:9880:303c:ad62:b99:9259:5795)
2022-05-05 11:05:44 +0200 <sm> apache2: another way is to sprinkle the likely code with trace statements, inspecting output and code can get you pretty far
2022-05-05 11:06:20 +0200 <kuribas> yeah, Debug.Trace is the best
2022-05-05 11:06:52 +0200 <kuribas> when messing around on the repl didn't produce anything interesting.
2022-05-05 11:07:52 +0200 <sm> then there's setting stack/heap size artificially low to force termination, would that help here ?
2022-05-05 11:08:11 +0200 <merijn> Depends if it's actually leaking memory
2022-05-05 11:08:24 +0200frost(~frost@user/frost)
2022-05-05 11:09:03 +0200 <kuribas> ah an endless loop, those are the worst to debug.
2022-05-05 11:09:15 +0200 <merijn> hey!
2022-05-05 11:09:20 +0200 <merijn> you don't know it's endless! :D
2022-05-05 11:09:44 +0200 <sm> and is there a way to send it a signal/exception to force termination, with a traceback ?
2022-05-05 11:10:11 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-05-05 11:10:25 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-05-05 11:10:27 +0200 <merijn> Depends how picky you are about the definition of each of the words in that sentence :p
2022-05-05 11:10:35 +0200 <sm> heh
2022-05-05 11:10:51 +0200 <merijn> sm: async exception are only detected during allocation/GC
2022-05-05 11:10:53 +0200 <sm> figures it wouldn't be simple
2022-05-05 11:11:07 +0200 <merijn> It's possible to get code stuck in an allocationless loop that will thus never detect async exceptions
2022-05-05 11:11:23 +0200 <sm> good to know
2022-05-05 11:11:44 +0200 <merijn> sm: It should be possible to implement support for stacktraces of an active thread, but that'll be some engineering work
2022-05-05 11:11:50 +0200 <sm> ctrl c would probably work though ?
2022-05-05 11:11:53 +0200 <merijn> sm: hah
2022-05-05 11:11:57 +0200 <merijn> Absolutely not
2022-05-05 11:12:12 +0200 <merijn> Arguably ctrl-c doesn't work at all in the current state of things :p
2022-05-05 11:12:38 +0200 <sm> uh.. ctl z ? sometimes only that that works
2022-05-05 11:12:40 +0200 <merijn> There's something that approximately resembless "working" that has essentially no sensible semantics
2022-05-05 11:13:04 +0200 <merijn> sm: So ctrl-z from terminal does work, because that's handled in the kernel
2022-05-05 11:13:16 +0200 <merijn> And has actual sensible semantics
2022-05-05 11:14:02 +0200 <merijn> sm: The problem is that ctrl-c sends SIGINT and signals are delivered (non-deterministically!) to "a" thread in the process. So you have no clue which runtime thread gets the signal
2022-05-05 11:15:04 +0200 <sm> could you instrument haskell code with a handler for ctrl z ?
2022-05-05 11:15:40 +0200 <merijn> sm: No, because ctrl-z causes the kernel scheduler to stop scheduling your process, so there's no handler to run
2022-05-05 11:15:50 +0200 <merijn> Because the process itself gets suspended and doesn't execute anything
2022-05-05 11:16:20 +0200 <sm> thanks, makes sense
2022-05-05 11:16:29 +0200smgrasps at straws.. could you enable some RTS logging/real-time profiling to show some of the functions executing ?
2022-05-05 11:16:35 +0200 <merijn> sm: There's a bunch of issues on the GHC tracker on fixing the signal handling to be, you know, sensible and predictable. But since, as of yet, no one is paying me to hack on GHC it's "on my to do list"
2022-05-05 11:16:54 +0200 <merijn> Which is code for saying "I will never do it, because I don't have the energy/attention span for that" :p
2022-05-05 11:16:59 +0200dut(~dut@user/dut)
2022-05-05 11:17:08 +0200 <sm> 👍🏻
2022-05-05 11:18:23 +0200acidjnk(~acidjnk@p200300d0c7068b437523c7c9ae2c8004.dip0.t-ipconnect.de)
2022-05-05 11:18:45 +0200 <merijn> I outlined (I think I did, anyway?) what a "proper" approach would look like
2022-05-05 11:20:13 +0200 <sm> merijn: I'm not seeing that, just mention of the debugger and profiling ?
2022-05-05 11:20:28 +0200 <merijn> Man, gitlab doesn't have a way to list all issues I commented on?
2022-05-05 11:21:09 +0200 <sm> oh I assumed you were talking about this infinite loop debugging puzzle
2022-05-05 11:21:28 +0200 <merijn> sm: Well, I was more referring to "proper" signal handling. But that would also open the way for more complex operations like "getting stack trace dumped out from all threads"
2022-05-05 11:21:48 +0200 <merijn> Which sounds doable enough *iff* you have a sensible async infrastructure
2022-05-05 11:22:01 +0200pretty_d1(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-05 11:22:02 +0200 <sm> that sure sounds useful and good for "haskell in production"
2022-05-05 11:22:07 +0200pretty_d1(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit)
2022-05-05 11:22:35 +0200 <merijn> argh
2022-05-05 11:22:41 +0200 <merijn> I hate gitlab
2022-05-05 11:22:55 +0200 <sm> hope younger sponsored businesses HF or one of the big haskell using corps
2022-05-05 11:23:12 +0200 <sm> I hope you get ...
2022-05-05 11:23:30 +0200 <sm> dang it iphone
2022-05-05 11:23:34 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-05-05 11:23:35 +0200 <merijn> How can you not allow me to search for issues I commented on...I have no idea what this issue was named, just that I wrote some stuff
2022-05-05 11:23:38 +0200merijnsighs
2022-05-05 11:23:42 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 276 seconds)
2022-05-05 11:23:58 +0200smthrows his hands up at technology
2022-05-05 11:24:33 +0200 <merijn> Right, so a write-up exists somewhere, just don't ask me where... >.>
2022-05-05 11:27:13 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-05-05 11:29:21 +0200 <sm> haskell should have a periodic vote & funding round for projects, like cardano's project catalyst
2022-05-05 11:29:55 +0200jollygood(www-data@2607:5300:60:8be::1)
2022-05-05 11:31:55 +0200 <jollygood> hi.I tried 9.2.2 on stack on windows, and I am getting weird error:
2022-05-05 11:31:59 +0200 <jollygood> Stack has not been tested with GHC versions above 9.0, and using 9.2.2, this may fail. Found an invalid compiler at "ghc-9.2.2.exe": Received ExitFailure (-1073741515) when running Raw command: "ghc-9.2.2.exe" --info
2022-05-05 11:32:20 +0200 <jollygood> I am using nightly-2022-05-05 resolver
2022-05-05 11:33:23 +0200 <sm> the first sentence can usually be ignored. Try to run that exe yourself with that flag, does it work ?
2022-05-05 11:34:15 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-05 11:34:57 +0200 <jollygood> it doesn't give me any errors, or any output
2022-05-05 11:35:33 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
2022-05-05 11:36:33 +0200 <sm> what about --version, or --help ? does the exe file look ok ? is the date what you expect ? was it installed by stack ?
2022-05-05 11:37:15 +0200 <jollygood> no output no matter what arguments I pass to it
2022-05-05 11:37:41 +0200 <jollygood> yes it was installed by stack
2022-05-05 11:38:34 +0200 <sm> sounds invalid alright. I'd check stack and ghc issue trackers and maybe ask #ghc
2022-05-05 11:39:47 +0200 <sm> and maybe try installing it with ghcup and configuring stack to use that
2022-05-05 11:40:12 +0200 <jollygood> ghci doesn't work either, it just returns.
2022-05-05 11:40:56 +0200xaotuk(~sasha@2a06:5b00:15fe:9b00::2)
2022-05-05 11:41:36 +0200jonathanx(~jonathan@dyn-5-sc.cdg.chalmers.se) (Remote host closed the connection)
2022-05-05 11:42:18 +0200 <maerwald> what's the best book on haskell concurrency and performance?
2022-05-05 11:42:43 +0200 <sm> simon marlow's of course
2022-05-05 11:42:43 +0200 <merijn> The best book on concurrency is Simon Marlow's paralle and concurrent Haskell
2022-05-05 11:42:59 +0200 <kuribas> +1
2022-05-05 11:43:03 +0200 <Hecate> yeah that's the best you've got at the moment
2022-05-05 11:43:05 +0200 <merijn> it talks about *efficiency* for the things covered, but that's not the same as performance
2022-05-05 11:43:12 +0200 <sm> ack
2022-05-05 11:43:15 +0200 <merijn> I don't think there's really any book on Haskell performance
2022-05-05 11:43:38 +0200 <kuribas> first learn performance in a general sense.
2022-05-05 11:43:41 +0200 <merijn> That said, I don't think there's any decent book on performance in other languages either :p
2022-05-05 11:44:12 +0200 <merijn> Which is kinda a problem, I learned through osmosis, but then sometimes people ask me "where/how did you learn this stuff and how can I learn?" and then I don't have an answer
2022-05-05 11:44:17 +0200 <kuribas> optimize queries, use the right algorithms, then do linear optimizations (cache locality etc).
2022-05-05 11:44:35 +0200 <merijn> See, I actually think that's wrong :p
2022-05-05 11:44:44 +0200mbuf(~Shakthi@27.58.129.52) (Quit: Leaving)
2022-05-05 11:45:05 +0200 <kuribas> merijn: are you going to say, profile first? :-)
2022-05-05 11:45:05 +0200 <merijn> If you *truly* care about performance you can't write your code first and then optimise after. You gotta design your code "from the inner loop outwards"
2022-05-05 11:45:10 +0200 <sm> "hire me as coach for one meelleon dollars"
2022-05-05 11:45:32 +0200 <kuribas> merijn: also first, do you need to care about performance?
2022-05-05 11:45:33 +0200 <merijn> kuribas: Profiling is important, but you can't profile and optimise your way out of every performance problem
2022-05-05 11:45:36 +0200gensyst(gensyst@user/gensyst)
2022-05-05 11:45:59 +0200 <merijn> So, actually one of the most interesting and enlightening things I learned from Google was during my interview there
2022-05-05 11:46:04 +0200 <kuribas> you need a good architecture first.
2022-05-05 11:46:13 +0200 <merijn> One of the interviews was the "non-abstract large scale systems design" interview
2022-05-05 11:46:41 +0200 <merijn> Which was basically, "here's some ballpark requirements and numbers, design a ballpark system design"
2022-05-05 11:46:50 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-05 11:47:06 +0200 <merijn> i.e. estimate the required computational/latency stuff from some napkin math and estimate what'd you'd *roughly* need
2022-05-05 11:47:19 +0200 <sm> kuribas++
2022-05-05 11:47:55 +0200 <merijn> The architecture needs of high performance code can be radically different depending on the performance needed
2022-05-05 11:48:02 +0200 <merijn> So you can't just decide architecture first
2022-05-05 11:48:42 +0200 <sm> if you want a system to be fast, it's a good idea to think about the whole system first
2022-05-05 11:48:55 +0200 <gensyst> I want to create a "machine" with its own state, so I can do initMachine :: m state and then updateMachine :: MyDataType -> state -> m state and along the way queryMachine :: state -> SomeOutputType. How can I do this without exposing the state type to the outside world?
2022-05-05 11:48:55 +0200 <merijn> "hollistic systems design"
2022-05-05 11:49:02 +0200 <kuribas> merijn: first a prototype?
2022-05-05 11:49:09 +0200 <merijn> I will write that on my resume, next to "software zymurgist"
2022-05-05 11:49:28 +0200 <merijn> kuribas: I mean, you don't necessarily need a prototype to make decisions like that
2022-05-05 11:49:35 +0200 <merijn> IFF you know what you're doing
2022-05-05 11:49:51 +0200robosexual(~robosexua@92.248.229.56)
2022-05-05 11:49:53 +0200 <gensyst> AND in such a way that the state type is still known (internally by the type checker) to be the same across all those function calls.
2022-05-05 11:50:02 +0200 <merijn> Like, if you know the main computational load is "a bunch of matrix math" the architecture should be "how do I most efficiently feed data into BLAS"
2022-05-05 11:50:42 +0200 <merijn> gensyst: You can use a record with an existential type to get something like that
2022-05-05 11:51:16 +0200 <jollygood> issue is with ghc not with stack: https://gitlab.haskell.org/ghc/ghc/-/issues/21196
2022-05-05 11:52:13 +0200 <sm> aha, there's that 9.2 showstopper so was wondering about. nice one
2022-05-05 11:52:25 +0200bahamas(~lucian@92.85.13.88) (Ping timeout: 248 seconds)
2022-05-05 11:52:34 +0200 <kuribas> gensyst: not that if you want things to be checked at compile time, the *must* be exposed.
2022-05-05 11:54:02 +0200 <gensyst> So I ask for the impossible?
2022-05-05 11:54:12 +0200 <merijn> kuribas: Wrong
2022-05-05 11:54:15 +0200 <merijn> Hold on
2022-05-05 11:54:20 +0200 <merijn> I'm finishing a sketch
2022-05-05 11:54:27 +0200 <sm> Hold his beer
2022-05-05 11:54:49 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-05 11:55:21 +0200 <kuribas> merijn: well, putting the type in a GADT is still "exposing" the state.
2022-05-05 11:56:21 +0200 <merijn> hmm
2022-05-05 11:56:24 +0200 <merijn> pastebin is slow
2022-05-05 11:57:41 +0200 <merijn> Not tested, probably contains a typo, etc. but something like: https://dpaste.org/ppZAC
2022-05-05 11:58:18 +0200 <merijn> That way the internal state 's' can be any type not visible to users of StateMachine
2022-05-05 11:58:47 +0200 <merijn> But now it's time for my lunch walk, so I let the hard work of explanation to someone else :p
2022-05-05 11:59:19 +0200 <kuribas> you still have the same state type everywhere, so it doesn't check the states.
2022-05-05 11:59:31 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 12:00:05 +0200 <merijn> Either you or I misunderstood the question :p
2022-05-05 12:00:12 +0200 <kuribas> well, if he meant, parametrize over state, that your solution would work.
2022-05-05 12:00:24 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 248 seconds)
2022-05-05 12:03:15 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-05 12:03:53 +0200jonathanx(~jonathan@dyn-5-sc.cdg.chalmers.se)
2022-05-05 12:04:08 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Ping timeout: 248 seconds)
2022-05-05 12:04:20 +0200sweater(~sweater@206.81.18.26) (Remote host closed the connection)
2022-05-05 12:06:39 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.5)
2022-05-05 12:07:59 +0200sweater(~sweater@206.81.18.26)
2022-05-05 12:09:28 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 248 seconds)
2022-05-05 12:12:27 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-05-05 12:12:59 +0200 <gensyst> merijn, hmm the idea of combining such "internal" funcs with other "external" funcs didn't occur to me
2022-05-05 12:13:03 +0200 <gensyst> i'll try it out
2022-05-05 12:13:33 +0200flinner(~flinner@user/flinner)
2022-05-05 12:14:23 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-05 12:16:31 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-05-05 12:16:55 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-05 12:21:34 +0200flinner(~flinner@user/flinner) (Quit: Using Circe, the loveliest of all IRC clients)
2022-05-05 12:27:24 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 276 seconds)
2022-05-05 12:30:56 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-05-05 12:33:53 +0200mmhat(~mmh@2001:4090:a242:802a:ee08:6bff:fe09:5315) (Ping timeout: 256 seconds)
2022-05-05 12:34:53 +0200merijn(~merijn@86.86.29.250) (Ping timeout: 260 seconds)
2022-05-05 12:36:53 +0200crazazy(~user@130.89.171.62)
2022-05-05 12:47:00 +0200perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 248 seconds)
2022-05-05 12:47:04 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-05-05 12:47:30 +0200mmhat(~mmh@2001:4090:a242:800a:ee08:6bff:fe09:5315)
2022-05-05 12:48:03 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2022-05-05 12:48:21 +0200Lord_of_Life_Lord_of_Life
2022-05-05 12:54:02 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-05-05 12:56:22 +0200CiaoSen(~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-05-05 13:01:34 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-05-05 13:04:35 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-05 13:09:18 +0200 <gensyst> merijn, It's line 13 (utilizing the earlier pattern match) that perplexes me. Why does this work? Yet for some reason if you do the exact same thing without pattern matching, it stops working: https://dpaste.org/AM1WW
2022-05-05 13:09:24 +0200 <gensyst> because of "escaped type variables"
2022-05-05 13:09:27 +0200 <gensyst> but why.....
2022-05-05 13:09:38 +0200 <gensyst> why are they any less "escaped" with pattern matching
2022-05-05 13:15:08 +0200acidjnk(~acidjnk@p200300d0c7068b437523c7c9ae2c8004.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-05 13:19:17 +0200 <merijn> gensyst: That's part of ExistentialQuantification
2022-05-05 13:19:38 +0200 <merijn> gensyst: Basically, the type 's' is only "in scope" after you pattern match on StateMachine
2022-05-05 13:20:07 +0200 <merijn> gensyst: It's complaining about "escaping", because what you wrote makes 's' "visible" outside a pattern match, but the type system cannot deal with that
2022-05-05 13:20:59 +0200 <merijn> gensyst: So when you pattern match on StateMachine you (temporarily and in a limited scope) get a vision of 's', but you're not allowed to let anyone else notice 's', because then the type checker would have to know what it is
2022-05-05 13:21:32 +0200 <merijn> In my version, we make 's' visible by pattern matching, but then carefully pack things back up and hidden for the outside world before returning anything
2022-05-05 13:22:09 +0200bahamas(~lucian@84.232.141.55)
2022-05-05 13:23:04 +0200 <gensyst> merijn, ok but wouldn't it be possible to expose the stuff we got from the pattern match to the outside world? (I have tried and the compiler will complain similarly about "escaped type variables" if we try). So the point is that in my (incorrect) method, those things for some reason get escaped earlier, even if we don't really escape them in the end.
2022-05-05 13:23:09 +0200 <gensyst> Do you see what I mean?
2022-05-05 13:23:24 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
2022-05-05 13:23:34 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-05-05 13:23:41 +0200 <merijn> gensyst: You are allowed to expose anything *other than* 's' just fine
2022-05-05 13:24:29 +0200 <merijn> gensyst: Theoretically you could (maybe) make a complicated analysis to make that work, but then the question is: Is that worth the maintenance effort?
2022-05-05 13:24:43 +0200 <merijn> Especially since there's a simple workaround of "just write out the pattern match"
2022-05-05 13:25:22 +0200 <gensyst> merijn, hmm, but how does the pattern match makes this easier for the compiler?
2022-05-05 13:25:52 +0200briandaed(~briandaed@109.95.142.93.r.toneticgroup.pl)
2022-05-05 13:26:09 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl)
2022-05-05 13:28:09 +0200 <merijn> gensyst: The 'forall s' part says "there is *a* type 's', don't have to care what, but it's the same in all the bits of this datatype". When you pattern match the compiler plucks a temporary (opaque! so it doesn't know what it is) type out of thin air and checks the code as if you're using that in all the functions. If you would use "currentState myMachine :: s" (i.e. using the accessor function on a
2022-05-05 13:28:15 +0200 <merijn> StateMachine record) it does that too, but now it escapes
2022-05-05 13:29:05 +0200 <merijn> If you do it *twice* "querymachine myMachine (currenState myMachine)" then it creates *two* separate opaque type for each access and then goes "hey, these aren't the same" (because that type is only equivalent to itself)
2022-05-05 13:29:33 +0200 <merijn> gensyst: You'd need to somehow see in the compiler that "really, these two reifications of the opaque type 's' happen in the same scope and refer to the same 's'"
2022-05-05 13:29:37 +0200 <merijn> But that logic is *hard*
2022-05-05 13:30:02 +0200 <merijn> Well, except when you simply tie it to pattern matching and sharing the opaque type accross all field members when you do the pattern match! Then it's easy
2022-05-05 13:30:09 +0200 <merijn> So that's what's done
2022-05-05 13:30:59 +0200 <merijn> (to you it's obvious they *are* the same, but the compiler has no logic for proving that, it just temporarily inserts opaque types unequal to every other type)
2022-05-05 13:35:22 +0200robosexual(~robosexua@92.248.229.56) (Quit: WeeChat 3.5)
2022-05-05 13:35:23 +0200 <gensyst> merijn, But even in your code, doesn't a new s (s2) get created when you create a *new* StateMachine?
2022-05-05 13:35:37 +0200 <gensyst> so here it seems the compiler *can* deduce that those s are the same
2022-05-05 13:36:04 +0200 <merijn> gensyst: No? Because all the function types can be typechecked fine
2022-05-05 13:36:25 +0200 <merijn> gensyst: So it knows the result of 'updateInternalMachine' returns the *same* 's' as it received as input
2022-05-05 13:36:35 +0200chomwitt(~chomwitt@2a02:587:dc19:d600:6d5a:79e9:ac14:c3a8)
2022-05-05 13:36:58 +0200 <merijn> gensyst: Imagine all the 's' variables are replaced with an imaginary "concrete" (I dislike that word, but fine) S type
2022-05-05 13:37:27 +0200 <merijn> The compiler has no idea *what* S is, which constructors it has, etc. It just knows "type S exists and these functions take S as argument" and then typechecks that
2022-05-05 13:37:59 +0200 <merijn> So it knows the "new" state 'result' has the same type as the old currenState (because typechecking proves that)
2022-05-05 13:38:06 +0200 <merijn> It just has no idea what that is
2022-05-05 13:39:00 +0200 <merijn> gensyst: Without the pattern match you end up instead getting type S for the use of currentState and S' for the use of 'updateInternalMachine', and S and S' are not the same (at least, there's no way to prove that)
2022-05-05 13:40:12 +0200 <gensyst> ah! ok now i get what you mean by "twice"
2022-05-05 13:40:18 +0200 <gensyst> interesting.
2022-05-05 13:40:51 +0200 <gensyst> the pattern matching guarantees same for all
2022-05-05 13:41:01 +0200 <gensyst> in an easy way
2022-05-05 13:41:47 +0200 <merijn> gensyst: Right!
2022-05-05 13:43:08 +0200 <gensyst> Thank you very much.
2022-05-05 13:47:27 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds)
2022-05-05 13:47:27 +0200 <apache2> merijn: I guess profiling would work for this
2022-05-05 13:48:08 +0200 <apache2> kuribas: Debug.Trace is kind of hard to integrate though, I haven't gotten it to work reliably (and it's probably because I'm missing something)
2022-05-05 13:48:28 +0200 <apache2> sm: I set ulimit -v to get it to crash rather than bog down the whole machine
2022-05-05 13:48:52 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-05 13:49:47 +0200 <apache2> sorry I''m 200 years behind the backlog
2022-05-05 13:52:28 +0200mmhat(~mmh@2001:4090:a242:800a:ee08:6bff:fe09:5315) (Ping timeout: 260 seconds)
2022-05-05 13:53:41 +0200 <apache2> would be nice with a signal handler for ctrl+t like in bsd libc
2022-05-05 13:54:50 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Read error: Connection reset by peer)
2022-05-05 13:55:15 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-05 13:57:20 +0200zero(~z@user/zero)
2022-05-05 14:01:08 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 14:04:20 +0200dsrt^(~dsrt@173-160-94-253-atlanta.hfc.comcastbusiness.net)
2022-05-05 14:06:21 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-05-05 14:06:34 +0200stiell_(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds)
2022-05-05 14:06:40 +0200AlexNoo_AlexNoo
2022-05-05 14:07:03 +0200 <geekosaur> apache2, I keep wishing linux would add the necessary support for that, but they refuse
2022-05-05 14:07:55 +0200stiell_(~stiell@gateway/tor-sasl/stiell)
2022-05-05 14:08:30 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-05-05 14:10:00 +0200 <geekosaur> (it's not just libc, the tty driver needs tpgrp SIGSTAT support, but Linus considers it evil)
2022-05-05 14:11:05 +0200 <exarkun> someone just needs to build a userspace tty driver so it can stop being the kernel's business at all, right?
2022-05-05 14:11:32 +0200 <geekosaur> someone did: readline
2022-05-05 14:11:48 +0200 <geekosaur> but the kernel still needs to sort out who "owns" the tty and is active
2022-05-05 14:12:04 +0200 <geekosaur> ("who" being a process)
2022-05-05 14:13:24 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 248 seconds)
2022-05-05 14:13:49 +0200dcoutts__(~duncan@host81-156-211-196.range81-156.btcentralplus.com)
2022-05-05 14:14:39 +0200mmhat(~mmh@2001:4090:a246:806c:ee08:6bff:fe09:5315)
2022-05-05 14:15:03 +0200frost(~frost@user/frost) (Quit: Client closed)
2022-05-05 14:16:17 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-05-05 14:16:37 +0200 <kuribas> apache2: you don't "integrate" it, you just add trace statements, debug (on the repl), then remove the statements.
2022-05-05 14:17:22 +0200 <geekosaur> I can see Linus's point, the tty driver having to walk the processes in the tpgrp and determine the (most likely) active one is pretty grody and a bit unreliable. but damn would it be useful
2022-05-05 14:17:57 +0200 <[exa]> they're moving it finally?
2022-05-05 14:18:48 +0200 <geekosaur> ?
2022-05-05 14:18:59 +0200[exa]reads the rest of the scrollback
2022-05-05 14:19:10 +0200 <[exa]> ah ok no changes ._.
2022-05-05 14:20:16 +0200 <geekosaur> pretty sure it won't be happening while Linus is in charge
2022-05-05 14:20:23 +0200frost(~frost@user/frost)
2022-05-05 14:20:31 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 256 seconds)
2022-05-05 14:21:11 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-05 14:21:24 +0200 <exarkun> geekosaur: Yea I meant all of that other "grody" stuff should be userspace too.
2022-05-05 14:22:12 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es)
2022-05-05 14:22:50 +0200 <geekosaur> userspace doesn't have enough access, and shouldn't
2022-05-05 14:23:19 +0200 <[exa]> I hope they will eventually tie signals as OOB to file descriptors, as they should be
2022-05-05 14:23:36 +0200 <[exa]> ^ wishful thinking for next 50+ years
2022-05-05 14:23:54 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-05 14:24:01 +0200 <geekosaur> it requires determining when a process (that might be on your uid but not readable) is blocked
2022-05-05 14:24:11 +0200 <geekosaur> and what it's blocked on
2022-05-05 14:25:58 +0200acidjnk(~acidjnk@p200300d0c7068b43e18f8794d20d12cb.dip0.t-ipconnect.de)
2022-05-05 14:27:57 +0200 <apache2> geekosaur: I see
2022-05-05 14:28:03 +0200 <apache2> geekosaur: I guess the shell could do it too
2022-05-05 14:28:20 +0200 <apache2> find the pg of the pty slave and send a USRINFO1 or whatever
2022-05-05 14:28:48 +0200 <apache2> kuribas: oh, Debug.Trace shows up in the repl?
2022-05-05 14:29:20 +0200 <apache2> [exa]: they have signalfd which is how sensible programs handle signals in the last few years
2022-05-05 14:29:35 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
2022-05-05 14:30:39 +0200 <apache2> it's not quite oob
2022-05-05 14:30:51 +0200 <apache2> but close
2022-05-05 14:32:36 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-05 14:34:40 +0200 <kuribas> apache2: yes, it goes to stderr
2022-05-05 14:35:05 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 248 seconds)
2022-05-05 14:37:20 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 260 seconds)
2022-05-05 14:37:26 +0200Pickchea(~private@user/pickchea)
2022-05-05 14:37:48 +0200dcoutts__(~duncan@host81-156-211-196.range81-156.btcentralplus.com) (Ping timeout: 246 seconds)
2022-05-05 14:38:15 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-05 14:42:09 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-05 14:48:52 +0200zebrag(~chris@user/zebrag)
2022-05-05 14:49:14 +0200coot(~coot@213.134.190.95)
2022-05-05 14:50:10 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
2022-05-05 14:52:21 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 276 seconds)
2022-05-05 14:52:35 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-05 14:55:32 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net) (Ping timeout: 248 seconds)
2022-05-05 15:00:14 +0200 <[exa]> apache2: ah that is cool
2022-05-05 15:03:10 +0200bahamas(~lucian@84.232.141.55)
2022-05-05 15:04:15 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 15:07:48 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 248 seconds)
2022-05-05 15:07:48 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
2022-05-05 15:07:48 +0200xff0x(~xff0x@om126167084162.29.openmobile.ne.jp)
2022-05-05 15:09:37 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2022-05-05 15:11:43 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-05 15:11:53 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-05 15:12:00 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-05-05 15:13:09 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net)
2022-05-05 15:16:55 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-05-05 15:20:10 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net)
2022-05-05 15:23:42 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-05-05 15:27:14 +0200tlamer(~tlamer@ip-94-112-134-89.net.upcbroadband.cz)
2022-05-05 15:33:44 +0200Topsi(~Topsi@dyndsl-037-138-064-083.ewe-ip-backbone.de)
2022-05-05 15:33:59 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net)
2022-05-05 15:36:55 +0200gpncarl(~gpncarl@120.244.220.74) (Ping timeout: 260 seconds)
2022-05-05 15:37:58 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-05 15:37:59 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-05 15:37:59 +0200wroathe(~wroathe@user/wroathe)
2022-05-05 15:41:55 +0200bahamas(~lucian@84.232.141.55)
2022-05-05 15:42:00 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-05-05 15:42:19 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-05-05 15:46:43 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 260 seconds)
2022-05-05 15:48:22 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-05 15:51:02 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 15:55:43 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-05-05 16:00:16 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:e8a7:5207:d6e5:3f9a) (Quit: WeeChat 2.8)
2022-05-05 16:00:48 +0200acidjnk(~acidjnk@p200300d0c7068b43e18f8794d20d12cb.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-05 16:04:55 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2022-05-05 16:09:55 +0200xkuru(~xkuru@user/xkuru)
2022-05-05 16:15:09 +0200Sgeo(~Sgeo@user/sgeo)
2022-05-05 16:17:04 +0200kaiepi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-05-05 16:18:19 +0200kaiepi(~Kaiepi@156.34.47.253)
2022-05-05 16:20:00 +0200frost(~frost@user/frost) (Ping timeout: 252 seconds)
2022-05-05 16:20:39 +0200Pickchea(~private@user/pickchea) (Ping timeout: 256 seconds)
2022-05-05 16:21:52 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Quit: _)
2022-05-05 16:22:09 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-05-05 16:28:14 +0200odnes_(~odnes@5-203-254-76.pat.nym.cosmote.net)
2022-05-05 16:28:53 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net) (Read error: Connection reset by peer)
2022-05-05 16:30:47 +0200vicfred(~vicfred@user/vicfred)
2022-05-05 16:31:43 +0200xff0x(~xff0x@om126167084162.29.openmobile.ne.jp) (Read error: Connection reset by peer)
2022-05-05 16:37:07 +0200xff0x(~xff0x@om126167084162.29.openmobile.ne.jp)
2022-05-05 16:38:43 +0200CiaoSen(~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-05 16:39:18 +0200kaiepi(~Kaiepi@156.34.47.253) (Ping timeout: 260 seconds)
2022-05-05 16:49:01 +0200moonsheep(~user@iespladelestany.xtec.cat)
2022-05-05 16:51:08 +0200spacenautx(~spacenaut@user/spacenautx)
2022-05-05 16:52:11 +0200cdman(~dcm@user/dmc/x-4369397) (Quit: Leaving)
2022-05-05 16:52:48 +0200odnes_(~odnes@5-203-254-76.pat.nym.cosmote.net) (Read error: Connection reset by peer)
2022-05-05 16:53:11 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net)
2022-05-05 16:55:52 +0200vicfred(~vicfred@user/vicfred) (Quit: Leaving)
2022-05-05 16:57:02 +0200shriekingnoise(~shrieking@201.231.16.156)
2022-05-05 16:57:43 +0200 <juhp[m]> "(if ... then ... else ...)-syntax in pattern" <- never seen the error before - boggling - no idea how I managed to make it
2022-05-05 16:58:28 +0200 <juhp[m]> The code is just: return $ if ok then classified else []
2022-05-05 16:59:11 +0200 <juhp[m]> Completely perfluxed
2022-05-05 16:59:13 +0200 <geekosaur> would have to see a bit more, I think. sometimes it means the error is in whatever precedes it
2022-05-05 17:00:00 +0200 <juhp[m]> aha - following it says "Possibly caused by a missing 'do'?"
2022-05-05 17:00:33 +0200 <geekosaur> as written that doesn't require do, so I have to assume whatever precedes it does
2022-05-05 17:02:23 +0200 <juhp[m]> well it is in a do block: the preceding like is: ok <- prompt "install above"
2022-05-05 17:02:35 +0200 <dminuoso> % f (if c then a else b) = _
2022-05-05 17:03:12 +0200 <dminuoso> juhp[m]: is there an if-then-else before?
2022-05-05 17:03:15 +0200 <dminuoso> if yes, that would explain it
2022-05-05 17:03:40 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2022-05-05 17:03:40 +0200 <juhp[m]> let me check more carefully
2022-05-05 17:04:00 +0200 <dminuoso> Because if you remove the line break, then you have something like `if x then a else b ok <- prompt ...`
2022-05-05 17:04:16 +0200Ether17(~Ether17@45.248.151.237)
2022-05-05 17:04:21 +0200 <juhp[m]> basically it's something like https://github.com/juhp/koji-tool/blob/main/src/Install.hs#L204
2022-05-05 17:04:26 +0200 <dminuoso> Who knows in what state the parser is to consider this a pattern match
2022-05-05 17:04:51 +0200 <juhp[m]> Just I put similar do block under the All case and then this...
2022-05-05 17:05:10 +0200 <geekosaur> I was thinking of it's on the line it says then two lines in what was supposed to be a do, with the do missing, so the second is taken as a definition of $
2022-05-05 17:05:13 +0200 <juhp[m]> Let me try to revert back.... quite weird
2022-05-05 17:05:40 +0200 <juhp[m]> I tried replacing $ but it didn't seem to help
2022-05-05 17:06:14 +0200 <dminuoso> juhp[m]: ah yes, imagine you forget the do above
2022-05-05 17:06:58 +0200 <dminuoso> if yes == Yes then return install else do mapM_ printInstalled install ok <- prompt "install above"
2022-05-05 17:07:10 +0200 <dminuoso> I can see how this diagnostic might fire
2022-05-05 17:10:17 +0200 <juhp[m]> So what is the solution? I still don't see it
2022-05-05 17:10:35 +0200 <dminuoso> 17:00:00 juhp[m] | aha - following it says "Possibly caused by a missing 'do'?
2022-05-05 17:10:57 +0200 <juhp[m]> okay
2022-05-05 17:11:08 +0200moonsheep(~user@iespladelestany.xtec.cat) (Quit: ERC 5.4 (IRC client for GNU Emacs 28.1))
2022-05-05 17:12:47 +0200moonsheep(~user@iespladelestany.xtec.cat)
2022-05-05 17:13:11 +0200dsrt^(~dsrt@173-160-94-253-atlanta.hfc.comcastbusiness.net) (Remote host closed the connection)
2022-05-05 17:14:19 +0200 <juhp[m]> Sorry!! Afaict it was caused by an incorrect <- in the following case which should have been a let :-( ugghh
2022-05-05 17:14:40 +0200 <juhp[m]> s/case/pattern/
2022-05-05 17:14:51 +0200 <juhp[m]> Rather confusing error message
2022-05-05 17:15:18 +0200 <juhp[m]> Thanks a lot, dminuoso and geekosaur !
2022-05-05 17:15:34 +0200hololeap_(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-05 17:15:47 +0200 <juhp[m]> Never seen that before (apparently it was introduced in 2020)
2022-05-05 17:15:54 +0200 <dminuoso> juhp[m]: you might want to follow a different style
2022-05-05 17:16:10 +0200 <dminuoso> the kind of interleaved if-then-else + do-notation + early-return is not very idiomatic
2022-05-05 17:16:35 +0200 <dminuoso> it's hard to follow, even for yourself as you have just seen. :)
2022-05-05 17:16:41 +0200 <Athas> It is possible to get `cabal install` to behave more sanely (i.e. just copy the damn binaries built by 'cabal build'), or is there an alternative command I can run to do that?
2022-05-05 17:16:44 +0200 <juhp[m]> dminuoso: right - any pointers would be welcome
2022-05-05 17:16:46 +0200 <juhp[m]> indeed
2022-05-05 17:17:27 +0200 <juhp[m]> Athas: you mean not generate a tarball? dunno
2022-05-05 17:17:52 +0200 <dminuoso> Athas: cp $(cabal -v0 list-bin)
2022-05-05 17:17:52 +0200Vajb(~Vajb@2001:999:400:9bc1:d5dd:7e53:33b:56) (Read error: Connection reset by peer)
2022-05-05 17:18:01 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-05-05 17:18:36 +0200 <dminuoso> Depending on your cabal version, you might have to specify the cabal component for list-bin
2022-05-05 17:18:48 +0200 <juhp[m]> Athas: I started project on github called system-cabal but it is still alpha/beta-ish, which somewhat addresses this
2022-05-05 17:18:55 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 17:19:32 +0200 <dminuoso> I mean it can be as simple as some `cabal build foo:exe:bar && cp $(cabal -v0 list-bin foo:exe:bar) ~/.local/bin/` *shrugs*
2022-05-05 17:19:38 +0200 <Athas> dminuoso: I feared it would be something like that.
2022-05-05 17:19:40 +0200 <juhp[m]> Athas: otherwise stack install ;o) :)
2022-05-05 17:19:52 +0200 <Athas> Yes, that is the competition.
2022-05-05 17:20:05 +0200 <dminuoso> Athas: So I guess you're looking for a simple `cabal copy-bin`?
2022-05-05 17:20:09 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net) (Remote host closed the connection)
2022-05-05 17:20:30 +0200 <Athas> dminuoso: yes.
2022-05-05 17:20:46 +0200 <Athas> Maybe I'll just create a shell script in my project root that abbreviates these hopeless commands.
2022-05-05 17:21:07 +0200 <dminuoso> Haha, I was about to give you a command that was going to start `echo "#!/bin/bash\n ....`
2022-05-05 17:21:47 +0200 <Athas> I am trying to fully migrate my project to cabal, but I don't want to hugely inconvenience my collaborators.
2022-05-05 17:21:48 +0200 <dminuoso> Luckily we have list-bin nowadays, so the pipefitting is easy
2022-05-05 17:23:04 +0200hololeap_(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-05 17:23:36 +0200 <Athas> Hey, maybe I'll make it a Makefile and they can just pretend it's a C program.
2022-05-05 17:23:41 +0200 <juhp[m]> I still feel my parse error is almost a bug? - I mean why would it mistaken the next case pattern as some other pattern just because it is missing a do
2022-05-05 17:23:57 +0200 <juhp[m]> lol
2022-05-05 17:24:14 +0200 <geekosaur> indentation
2022-05-05 17:24:31 +0200 <geekosaur> I'd still like to see the whole context
2022-05-05 17:24:33 +0200 <dminuoso> juhp[m]: Its an LALR generated parser for a whitespace sensitive language. Parser errors are always harsh in this situhation.
2022-05-05 17:24:50 +0200 <juhp[m]> okay right, I see thanks
2022-05-05 17:25:22 +0200liz_(~liz@host109-151-128-120.range109-151.btcentralplus.com)
2022-05-05 17:25:36 +0200 <juhp[m]> geekosaur: I can push the code now that it compiles I guess :)
2022-05-05 17:26:18 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 17:31:48 +0200jonathanx(~jonathan@dyn-5-sc.cdg.chalmers.se) (Remote host closed the connection)
2022-05-05 17:39:39 +0200MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net)
2022-05-05 17:40:52 +0200Null_A(~null_a@2601:645:8700:2290:b1c9:2c49:e327:d981)
2022-05-05 17:41:49 +0200dcoutts__(~duncan@host81-156-211-196.range81-156.btcentralplus.com)
2022-05-05 17:45:45 +0200jinsun(~jinsun@user/jinsun)
2022-05-05 17:48:41 +0200kaiepi(~Kaiepi@156.34.47.253)
2022-05-05 17:50:28 +0200jinsun(~jinsun@user/jinsun) (Ping timeout: 248 seconds)
2022-05-05 17:52:37 +0200dzdcnfzd(~dzdcnfzd@2600:387:5:807::73)
2022-05-05 17:53:33 +0200xff0x(~xff0x@om126167084162.29.openmobile.ne.jp) (Read error: Connection reset by peer)
2022-05-05 17:53:36 +0200 <dzdcnfzd> Can anyone figure out how to write this function: `almostBind :: Monad m => FreeT f m a -> (FreeT f Identity a -> FreeT f m b) -> FreeT f m b`
2022-05-05 17:53:52 +0200 <dzdcnfzd> Sorry, `Functor f` too
2022-05-05 17:54:50 +0200 <dzdcnfzd> Also `Traversable f`
2022-05-05 17:55:13 +0200ubert(~Thunderbi@2a02:8109:9880:303c:ad62:b99:9259:5795) (Remote host closed the connection)
2022-05-05 17:55:32 +0200jinsun(~jinsun@user/jinsun)
2022-05-05 17:56:41 +0200jollygood(www-data@2607:5300:60:8be::1) (Quit: CGI:IRC (Session timeout))
2022-05-05 17:58:37 +0200 <monochrom> If it is not "\m k -> m >>= \a -> k (pure a)" then you need to say what it should do.
2022-05-05 17:59:24 +0200 <c_wraith> you might need a runIdentity in there
2022-05-05 18:00:06 +0200unclechu(~unclechu@2001:470:69fc:105::354) (Quit: You have been kicked for being idle)
2022-05-05 18:00:39 +0200 <c_wraith> oh, I see. that's more like almostAp than almostBind
2022-05-05 18:01:18 +0200kaiepi(~Kaiepi@156.34.47.253) (Read error: Connection reset by peer)
2022-05-05 18:01:31 +0200 <monochrom> I don't know what else "almost bind" could mean.
2022-05-05 18:01:44 +0200Ether17(~Ether17@45.248.151.237) (Quit: Client closed)
2022-05-05 18:02:43 +0200 <c_wraith> that type feels very monad-control
2022-05-05 18:03:07 +0200 <dzdcnfzd> I called it almostBind because the type signature looks like bind to me
2022-05-05 18:03:10 +0200 <dzdcnfzd> no deep reason
2022-05-05 18:03:17 +0200kaiepi(~Kaiepi@156.34.47.253)
2022-05-05 18:03:17 +0200 <c_wraith> it's closer to ap than bind
2022-05-05 18:03:32 +0200 <dzdcnfzd> But `"\m k -> m >>= \a -> k (pure a)"` works!
2022-05-05 18:03:39 +0200 <dzdcnfzd> Thanks monochrom!
2022-05-05 18:04:21 +0200 <geekosaur> well, it does something. but is that something what you needed?
2022-05-05 18:04:22 +0200 <dzdcnfzd> c_wraith: Yeah, it is, actually
2022-05-05 18:04:33 +0200 <dzdcnfzd> Yes, I think :)
2022-05-05 18:05:33 +0200 <dzdcnfzd> My specific use case is that I'm running in a transformer stack that looks like `FreeT f (Except String) ()` where `f` is a nice, well-behaved functor
2022-05-05 18:06:22 +0200 <dzdcnfzd> I have a function `foo` which returns values of type `FreeT f (Except String) ()`
2022-05-05 18:06:37 +0200jinsun(~jinsun@user/jinsun) (Read error: Connection reset by peer)
2022-05-05 18:06:50 +0200 <dzdcnfzd> I need to apply them to an action of type `FreeT f (Except String) ()` which expects an argument of type `FreeT f Identity ()`
2022-05-05 18:06:52 +0200jinsun(~jinsun@user/jinsun)
2022-05-05 18:07:17 +0200 <dzdcnfzd> But if I get a `Left` value from `foo` I want the whole computation to collapse
2022-05-05 18:07:46 +0200MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net) (Quit: WeeChat 3.4)
2022-05-05 18:08:57 +0200 <dzdcnfzd> I think this works
2022-05-05 18:09:03 +0200 <dzdcnfzd> the free monad still confuses me
2022-05-05 18:11:04 +0200 <dzdcnfzd> The only thing I'm worried about, and this might be dumb (like I said, free monad and monad transformers generally are new to me) is whether I'll end up with the `arg` left over in my computation
2022-05-05 18:11:22 +0200 <dzdcnfzd> whereas I really only want it to be applied to `k`
2022-05-05 18:11:30 +0200 <dzdcnfzd> Does that make any sense or no?
2022-05-05 18:12:38 +0200xaotuk(~sasha@2a06:5b00:15fe:9b00::2) (Ping timeout: 260 seconds)
2022-05-05 18:14:18 +0200xaotuk(~sasha@net224-32-245-109.mbb.telenor.rs)
2022-05-05 18:17:27 +0200 <dzdcnfzd> This is a comparison of what I'm doing with the suggestion: https://paste.tomsmeding.com/E9eWj957
2022-05-05 18:17:40 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 248 seconds)
2022-05-05 18:18:32 +0200 <dzdcnfzd> I actually think they may be different
2022-05-05 18:21:14 +0200MajorBiscuit(~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net)
2022-05-05 18:23:22 +0200benin(~benin@183.82.29.230) (Quit: The Lounge - https://thelounge.chat)
2022-05-05 18:23:50 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2022-05-05 18:24:26 +0200 <k`> So I get the feeling that `Pointed` is generally considered a mistake, but what about `Copointed` ? Seems like it's harder to get `copoint` 'wrong'.
2022-05-05 18:25:00 +0200 <geekosaur> it's not a mistake, it just doesn't pull its weight
2022-05-05 18:25:15 +0200 <k`> Sorry, that's what I meant by 'mistake'. 'Not worth it'.
2022-05-05 18:25:47 +0200 <geekosaur> if we were being strict about typeclasses, it'd be there and Applicative would be `Pointed f, Apply f => Applicative f` with no methods
2022-05-05 18:26:04 +0200 <geekosaur> but typeclasses have a cost that nobody wants to pay
2022-05-05 18:27:28 +0200 <k`> I really don't mind paying, but the price seems more like folks getting `point` wrong (e.g. creating a singleton for a zipping Apply).
2022-05-05 18:27:33 +0200 <c_wraith> Note that the cost isn't technical.
2022-05-05 18:28:39 +0200 <c_wraith> The cost is in communication. if Applicative was defined as Pointed + Apply and some laws, do you expect those laws to hold if Applicative doesn't appear in the type declaration?
2022-05-05 18:29:51 +0200 <c_wraith> If you compose two functions, one of which uses only Apply and the other uses only Pointed, does the result depend on Applicative?
2022-05-05 18:30:25 +0200dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 256 seconds)
2022-05-05 18:31:26 +0200 <c_wraith> none of these things are technical issues with whether it will compile or not. They're issues of communication and expectations.
2022-05-05 18:32:26 +0200 <k`> Clearly you need to put an Applicative constraint on the result if you want to be sure. Unless you're OK with documentation like 'If it's also Apply, it MUST follow these laws.' and 'If it's also Pointed, it must follow these laws.'.
2022-05-05 18:33:18 +0200 <k`> Then `Applicative` degrades to `class (Pointed m, Apply m)=> Applicative m; instance (Pointed m, Apply m)=> Applicative m`.
2022-05-05 18:33:56 +0200 <k`> And since all these laws are unenforced conventions, maybe that's OK. But folks already tend to get things wrong...
2022-05-05 18:34:13 +0200 <c_wraith> It's a very slippery slope to expect people to keep an MxN matrix of laws in their head
2022-05-05 18:34:34 +0200 <c_wraith> since as you say, it's hard enough to keep N sets of laws in your head
2022-05-05 18:34:47 +0200 <c_wraith> Why make it worse?
2022-05-05 18:35:12 +0200 <Bulby[m]> Pointed and Apply 😱
2022-05-05 18:35:13 +0200 <Bulby[m]> not real right
2022-05-05 18:35:42 +0200 <k`> Anyway, getting back to my original question, what about `Copointed`. I'm honestly not sure how to mess that up, even if you do have `instance (Copointed m, Extend m)=> Comonad m` .
2022-05-05 18:36:46 +0200 <Bulby[m]> k`: enum and bounded do something similar in its documentation
2022-05-05 18:36:46 +0200 <edwardk> k` i can come up with Copointed and Extend instances for the same type that are incompatible. we've had them emerge in practice.
2022-05-05 18:37:45 +0200 <edwardk> the scalaz community tried this at one point for the record.
2022-05-05 18:37:54 +0200 <k`> edwardk: Good to know! What kind of problems? First vs last element?
2022-05-05 18:38:34 +0200 <edwardk> Pointed still plays a role, but it is pretty hard to find useful instances. the main usecase that comes to mind is that a PointedFunctor is basically exactly what you want to quantify over for an 'affine traversal'
2022-05-05 18:38:46 +0200 <Bulby[m]> there are types that in conjunction with other types require new the laws to be compatible
2022-05-05 18:38:47 +0200 <Bulby[m]> not require, it's just a "law"
2022-05-05 18:39:00 +0200 <edwardk> first vs. last. vs. something that gives you back an infinite container
2022-05-05 18:39:29 +0200 <k`> So you extend, get an infinite container, copoint, and loop forever?
2022-05-05 18:40:24 +0200 <Bulby[m]> What is a pointed? Is that `pure`?
2022-05-05 18:40:41 +0200 <c_wraith> yes
2022-05-05 18:41:04 +0200 <Bulby[m]> where does that term come from
2022-05-05 18:41:12 +0200 <edwardk> it is easy to wind up with a set where you can pick a point in the set (pointed set), and another where you have a binary operation on the set (a magma), and not have magically picked the right point to be the unit of the magma when you stick those features together to get a unital magma, or that is the unit of the semigroup when you go to upgrade to a monoid. if you _only_ have the vocabulary for the operations and no vocabulary for the
2022-05-05 18:41:12 +0200 <edwardk> laws, you easily step wrong when you expect those laws to hold
2022-05-05 18:42:21 +0200 <edwardk> instance (Applicative f, Monoid a) => Monoid (f a) -- seems like a great idea until you go to realize it makes for a shit choice of monoid for [a], and precludes ever getting Maybe a to be the lifting of a semigroup with a fresh unit.
2022-05-05 18:43:27 +0200 <Bulby[m]> Where does the term pointed come from?
2022-05-05 18:43:33 +0200 <k`> That makes sense.
2022-05-05 18:43:44 +0200 <edwardk> https://en.wikipedia.org/wiki/Pointed_set
2022-05-05 18:43:55 +0200 <edwardk> a 'pointed functor' is the same idea
2022-05-05 18:44:15 +0200dyeplexer(~dyeplexer@user/dyeplexer)
2022-05-05 18:44:30 +0200moonsheep(~user@iespladelestany.xtec.cat) (Quit: ERC 5.4 (IRC client for GNU Emacs 28.1))
2022-05-05 18:45:18 +0200 <Bulby[m]> so `pure` "preserves the point"
2022-05-05 18:45:28 +0200 <k`> I've been wondering about the value of a 'lawless' class with `empty :: forall a. m a`, and it seems to do real well until you get to the possibility of somebody defining `empty = Const mempty`, when it needs to be `Const anihilatingElement` (with no inherent laws to tell you that).
2022-05-05 18:46:14 +0200Tuplanolla(~Tuplanoll@91-159-68-39.elisa-laajakaista.fi)
2022-05-05 18:46:34 +0200 <k`> Bulby[m]: But in practice, `point` often gets (mis)defined as `singleton`.
2022-05-05 18:47:27 +0200 <edwardk> Bulby[m]: a functor maps objects to objects, and provides a mapping of arrows to arrows. a pointed functor, gives you a mapping pure :: a -> f a -- with the obvious laws connecting that to the arrows in the category. pure . f = fmap f . pure
2022-05-05 18:47:27 +0200 <Bulby[m]> you can do whatever as long as it represents the input value?
2022-05-05 18:47:39 +0200 <edwardk> fortunately the latter is a free theorem in haskell so we don't need to tie it down
2022-05-05 18:48:12 +0200 <edwardk> so I don't even require it to be a Functor here, as there are Pointed structures that _aren't_ functors. e.g. Set
2022-05-05 18:48:25 +0200 <edwardk> the problem with Pointed culturally is that it leads to folks doing things like foldMap point
2022-05-05 18:48:28 +0200 <edwardk> er foldMap pure
2022-05-05 18:48:31 +0200 <edwardk> what does that mean?
2022-05-05 18:48:45 +0200 <edwardk> there's no law relating the monoid on 'f a' with the 'a' in any capacity
2022-05-05 18:48:55 +0200 <edwardk> when f = [] vs. Maybe vs. Set you get TOTALLY unrelated answers
2022-05-05 18:49:32 +0200 <edwardk> there's very little you can do parametrically in a given pointed functor usefully
2022-05-05 18:49:44 +0200 <k`> So you need `getAlt . foldMap (Alt . pure)`
2022-05-05 18:50:00 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-05-05 18:50:17 +0200 <edwardk> on the other hand, something that takes advantage of the 'associative' structure of say Applicative-without-pure, which is called 'Apply' in one of my packages, that? you can do lots with.
2022-05-05 18:50:45 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-05-05 18:50:59 +0200 <edwardk> the issue is haskell is generally bad at making classes that mix two such general extension directions, class Functor f => Applicative f. is what we have today
2022-05-05 18:51:11 +0200 <k`> (I'm still wishing that `Apply` would be slotted into the Functor hierarchy.)
2022-05-05 18:51:13 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-05 18:51:33 +0200arjun(~arjun@user/arjun)
2022-05-05 18:51:33 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-05-05 18:51:48 +0200 <edwardk> but if we wanted class (Apply f, Pointed f) => Applicative f -- we'd be dealing with the fact that almsot all the uses of it would infer the weaker (Apply f, Pointed f) constraint set, despite generally needing the laws of Applicative that tell us the point is related to the <*> to be useful or canonical
2022-05-05 18:52:30 +0200 <edwardk> so the best we can do is make new operations that have their own laws that re-export the ones from those superclasses in order to get inference to do the right thing
2022-05-05 18:52:34 +0200 <edwardk> which is a bit of a mess
2022-05-05 18:52:53 +0200dut(~dut@user/dut) (Ping timeout: 260 seconds)
2022-05-05 18:53:23 +0200 <edwardk> pure f <*> m = f <$> m -- works for Applicative, but not (Apply f, Pointed f)
2022-05-05 18:54:56 +0200 <k`> So what are your thoughts on just saying "If it's also `Apply`, it must obey the law `pure f <*> mx = fmap f m`?
2022-05-05 18:55:22 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-05 18:55:27 +0200 <Bulby[m]> what is a free theorm 😭
2022-05-05 18:56:00 +0200 <geekosaur> https://people.mpi-sws.org/~dreyer/tor/papers/wadler.pdf
2022-05-05 18:56:20 +0200 <k`> Bulby[m]: I think basically if your instance isn't a GADT, it's guaranteed to be true because you can't care about the element type.
2022-05-05 18:56:25 +0200 <geekosaur> it's a theorem that follows directly from a type
2022-05-05 18:56:31 +0200 <k`> In this case.
2022-05-05 18:57:00 +0200 <sclv> right. its a theorem about a function which holds for any function of that type, because any implementation that satisfies the type must satisfy the theorem.
2022-05-05 18:57:01 +0200zeenk(~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d)
2022-05-05 18:57:35 +0200Guest|68(~Guest|68@144.48.23.93)
2022-05-05 18:57:45 +0200econo(uid147250@user/econo)
2022-05-05 19:00:11 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-05-05 19:00:55 +0200 <monochrom> http://www.vex.net/~trebla/haskell/abs-type-param.html
2022-05-05 19:01:23 +0200 <k`> In this case, unless you're using a GADT or create an illegal Functor, it's impossible for `fmap f (point x)` to be anything other than `point (f x)`. GADTs mess it up because your 'x :: a' could actually be restricted to 'x :: (Integer ~ a)=> a'.
2022-05-05 19:01:53 +0200 <Bulby[m]> sorcery
2022-05-05 19:03:59 +0200Guest|68(~Guest|68@144.48.23.93) (Quit: Connection closed)
2022-05-05 19:07:09 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-05 19:08:00 +0200x_kuru(~xkuru@user/xkuru)
2022-05-05 19:11:33 +0200xkuru(~xkuru@user/xkuru) (Ping timeout: 260 seconds)
2022-05-05 19:12:52 +0200dzdcnfzd(~dzdcnfzd@2600:387:5:807::73) (Quit: Client closed)
2022-05-05 19:13:18 +0200euandreh(~euandreh@2804:14c:33:9fe5:2165:73d6:1630:f174) (Ping timeout: 260 seconds)
2022-05-05 19:17:28 +0200alx741(~alx741@host-181-198-243-150.netlife.ec)
2022-05-05 19:17:30 +0200alx741(~alx741@host-181-198-243-150.netlife.ec) (Client Quit)
2022-05-05 19:18:34 +0200ec(~ec@gateway/tor-sasl/ec)
2022-05-05 19:19:17 +0200alx741(~alx741@host-181-198-243-150.netlife.ec)
2022-05-05 19:19:33 +0200alx741(~alx741@host-181-198-243-150.netlife.ec) (Client Quit)
2022-05-05 19:19:33 +0200euandreh(~euandreh@2804:14c:33:9fe5:2165:73d6:1630:f174)
2022-05-05 19:23:58 +0200wroathe(~wroathe@user/wroathe)
2022-05-05 19:25:37 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-05-05 19:26:31 +0200arjun(~arjun@user/arjun) (Ping timeout: 256 seconds)
2022-05-05 19:26:58 +0200amesgen[m](~amesgenm]@2001:470:69fc:105::82b)
2022-05-05 19:28:19 +0200 <seydar> I'm having trouble translating some nested loops into Haskell
2022-05-05 19:28:20 +0200 <seydar> https://paste.tomsmeding.com/VGyql1tq
2022-05-05 19:30:18 +0200 <seydar> lines 53 and 63 are where I do some list comprehensions, and I feel like I'm getting them wrong, because when I swap the x and y declarations in line 63, I get a little bit closer to the right answer, but that's clearly not correct according to the C code
2022-05-05 19:31:37 +0200 <monochrom> I think a toy example helps understand the general case.
2022-05-05 19:31:56 +0200 <monochrom> > [(i, j) | i <- [0,1,2], j <- ['a', 'b', c']]
2022-05-05 19:31:58 +0200 <lambdabot> error:
2022-05-05 19:31:58 +0200 <lambdabot> • Variable not in scope: c' :: Char
2022-05-05 19:31:58 +0200 <lambdabot> • Perhaps you meant one of these:
2022-05-05 19:32:06 +0200 <monochrom> > [(i, j) | i <- [0,1,2], j <- ['a', 'b', 'c']]
2022-05-05 19:32:08 +0200 <lambdabot> [(0,'a'),(0,'b'),(0,'c'),(1,'a'),(1,'b'),(1,'c'),(2,'a'),(2,'b'),(2,'c')]
2022-05-05 19:32:12 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-05-05 19:32:29 +0200 <monochrom> It means that i is the outer loop.
2022-05-05 19:32:45 +0200 <dminuoso> Also
2022-05-05 19:33:03 +0200stackdroid18(14094@user/stackdroid)
2022-05-05 19:33:53 +0200 <seydar> monochrom: right, i agree, which is why i'm confused as to why my answer gets closer to correct when i mislabel the loops
2022-05-05 19:34:05 +0200 <monochrom> So the problem is elsewhere?
2022-05-05 19:34:57 +0200 <seydar> I... don't know. I'm convinced that the problem is in the list comprehensions, since everything else seems to be right, but I know that the `bases` variable is ultimately wrong
2022-05-05 19:35:02 +0200 <monochrom> "closer to correct (but still incorrect)" is code for very subtle and deep mistake.
2022-05-05 19:35:47 +0200 <seydar> my individual `basis` function is correct, i've tested that out
2022-05-05 19:36:05 +0200 <seydar> but then I'm unable to put together a larger `bases` list correctly
2022-05-05 19:40:35 +0200 <seydar> okay, i've confirmed that `bases` is getting produced correctly. i've compared outputs with a 5x4 image instead of playing guessing games on a 1199x1198 image
2022-05-05 19:41:23 +0200 <monochrom> And yet you can't argue against [(i, j) | i <- [0,1,2], j <- ['a', 'b', c']] = [(0,'a'),(0,'b'),(0,'c'),(1,'a'),(1,'b'),(1,'c'),(2,'a'),(2,'b'),(2,'c')]
2022-05-05 19:41:33 +0200 <monochrom> So the problem is elseelseelsewhere?
2022-05-05 19:42:16 +0200 <monochrom> Or a very hard to catch typo somewhere.
2022-05-05 19:43:05 +0200 <monochrom> This is when you throw in a lot of Debug.Trace stuff or split code into more units to perform actually seriously unit testing.
2022-05-05 19:43:08 +0200 <seydar> right, the C loop has x as the inner loop and y as the outer (lines 68 and 69 in the C), which matches the haskell (line 63)
2022-05-05 19:43:08 +0200AlexNoo(~AlexNoo@178.34.163.12) (Read error: Connection reset by peer)
2022-05-05 19:43:51 +0200AlexNoo(~AlexNoo@178.34.163.12)
2022-05-05 19:44:37 +0200 <monochrom> Also, use smaller inputs so you get smaller outputs so you don't just gross over "this is close enough".
2022-05-05 19:45:06 +0200 <seydar> you're right
2022-05-05 19:45:15 +0200 <seydar> gonna switch it to be 1x1 components
2022-05-05 19:45:21 +0200 <monochrom> Generally being a good scientist and using the scientific method.
2022-05-05 19:46:01 +0200 <seydar> i prefer to commune with the code and see if there's some middle ground between what the compiler wants and what i want
2022-05-05 19:46:27 +0200 <seydar> okay well turns out my code is wildly fucked up when i go to 1x1, so that's prolly a good place to start since it removes the problem of the list comprehension
2022-05-05 19:49:08 +0200AlexNoo(~AlexNoo@178.34.163.12) (Read error: Connection reset by peer)
2022-05-05 19:49:40 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-05 19:49:54 +0200AlexNoo(~AlexNoo@178.34.163.12)
2022-05-05 19:52:26 +0200 <seydar> fixed it for 1x1 -- there was an unrelated bug that wasn't converting the linear pixels back to sRGB
2022-05-05 19:53:32 +0200 <seydar> so now it's looking like the bug is back to the list comprehension part where i try to replicate nested loops
2022-05-05 19:53:46 +0200 <seydar> is there a better, more haskelly way to do nested loops?
2022-05-05 19:54:13 +0200 <monochrom> No.
2022-05-05 19:54:41 +0200 <monochrom> Worse and less haskelly ways, plenty.
2022-05-05 19:55:00 +0200agumonkey(~user@88.163.231.79)
2022-05-05 19:55:44 +0200 <k`> I usually end up writing `for t $ \ x -> ... for s $ \ y -> ...` -- probably worse and less Haskelly.
2022-05-05 19:56:38 +0200 <monochrom> Are you sure you want "for" as opposed to "for_"?
2022-05-05 19:56:57 +0200 <k`> Right, looping for effects only, `for_`.
2022-05-05 19:57:34 +0200 <monochrom> But it's incomparable to the [(i, j) | i <- [0,1,2], j <- ['a', 'b', c']] kind.
2022-05-05 19:58:35 +0200 <monochrom> So yes "for" is worse and less Haskelly than "for_" when effect-only.
2022-05-05 19:59:12 +0200 <k`> I mean, you can also use `t >>= \ x -> ... s >>= \ y -> ...` when you need Monadic powers.
2022-05-05 19:59:20 +0200crazazy(~user@130.89.171.62) (Ping timeout: 248 seconds)
2022-05-05 19:59:43 +0200 <k`> And I honestly can remember what list comprehension desurgars to `mzip`.
2022-05-05 19:59:46 +0200 <mrianbloom> Is there an easy way to do size-type wrappers for arrays in Haskell?
2022-05-05 20:00:36 +0200 <mrianbloom> These would be types that allow you to enforce that two arrays have the same dimensions.
2022-05-05 20:00:57 +0200jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-05-05 20:01:12 +0200raym(~raym@user/raym) (Ping timeout: 246 seconds)
2022-05-05 20:03:06 +0200raym(~raym@user/raym)
2022-05-05 20:07:26 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-05-05 20:08:27 +0200 <EvanR> you can use numbers at the type level, that's pretty easy
2022-05-05 20:08:42 +0200 <EvanR> doing anything more than using numbers at the type level, ymmv xD
2022-05-05 20:10:04 +0200MajorBiscuit(~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Quit: WeeChat 3.4)
2022-05-05 20:10:42 +0200 <EvanR> https://hackage.haskell.org/package/sized-vector-1.4.3.1
2022-05-05 20:10:56 +0200 <EvanR> deprecated in favor of
2022-05-05 20:14:31 +0200 <juhp[m]> geekosaur: I updated https://github.com/juhp/koji-tool/blob/main/src/Install.hs#L202 : I think it was indeed a missing do + some indentation issue, since I can't reproduce it again now
2022-05-05 20:15:35 +0200 <agumonkey> he\\o
2022-05-05 20:16:49 +0200 <juhp[m]> (it would be somewhere within the current last commit, but since corrected - I should have saved the broken code for reference)
2022-05-05 20:19:55 +0200x_kuru_(~xkuru@user/xkuru)
2022-05-05 20:21:29 +0200 <juhp[m]> Anyway has been some fun refactoring :-)
2022-05-05 20:23:51 +0200x_kuru(~xkuru@user/xkuru) (Ping timeout: 276 seconds)
2022-05-05 20:24:49 +0200 <sm> "With this paper we have tried to convey that some domain-driven design concepts are applicable and beneficial to functional languages, even strongly typed ones like Haskell. Types don’t replace proper design or GHC would have been modular to begin with."
2022-05-05 20:25:34 +0200hololeap_(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-05 20:25:55 +0200 <sm> I guess hsyl isn't here, but.. this paper is a gem 💎
2022-05-05 20:26:03 +0200 <sm> https://hsyl20.fr/home/files/papers/2022-ghc-modularity.pdf
2022-05-05 20:26:29 +0200 <mrianbloom> thanks EvanR
2022-05-05 20:27:46 +0200CiaoSen(~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-05-05 20:28:34 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2022-05-05 20:28:42 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 20:32:05 +0200x_kuru(~xkuru@user/xkuru)
2022-05-05 20:32:09 +0200x_kuru_(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2022-05-05 20:34:14 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-05-05 20:34:16 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net)
2022-05-05 20:37:52 +0200kenran(~kenran@200116b82b2708000a1d989028fc8790.dip.versatel-1u1.de)
2022-05-05 20:39:08 +0200zeenk(~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d) (Quit: Konversation terminated!)
2022-05-05 20:42:25 +0200Inoperable(~PLAYER_1@fancydata.science) (Quit: All your buffer are belong to us!)
2022-05-05 20:43:40 +0200xaotuk(~sasha@net224-32-245-109.mbb.telenor.rs) (Ping timeout: 260 seconds)
2022-05-05 20:43:48 +0200alp_(~alp@user/alp) (Ping timeout: 248 seconds)
2022-05-05 20:43:52 +0200Inoperable(~PLAYER_1@fancydata.science)
2022-05-05 20:45:31 +0200teddyc(theodorc@cassarossa.samfundet.no) (Quit: WeeChat 3.0)
2022-05-05 20:46:49 +0200dyeplexer(~dyeplexer@user/dyeplexer) (Remote host closed the connection)
2022-05-05 20:50:33 +0200Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2022-05-05 20:51:16 +0200hololeap_(~hololeap@user/hololeap) (Remote host closed the connection)
2022-05-05 20:53:38 +0200spacenautx(~spacenaut@user/spacenautx) (Quit: WeeChat 3.5)
2022-05-05 20:55:33 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net)
2022-05-05 20:56:36 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 21:03:12 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:6c7f:24ed:3788:2a1e)
2022-05-05 21:04:23 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-05 21:05:45 +0200coot(~coot@213.134.190.95)
2022-05-05 21:06:16 +0200yauhsien(~yauhsien@61-231-34-25.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-05 21:07:54 +0200mxs(~mxs@user/mxs) (Remote host closed the connection)
2022-05-05 21:08:02 +0200mxs(~mxs@user/mxs)
2022-05-05 21:13:12 +0200acidjnk(~acidjnk@p200300d0c7068b43f1a15e75027d04fd.dip0.t-ipconnect.de)
2022-05-05 21:14:31 +0200ec(~ec@gateway/tor-sasl/ec)
2022-05-05 21:16:52 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-05 21:18:07 +0200zerozzz
2022-05-05 21:21:42 +0200alp_(~alp@user/alp)
2022-05-05 21:24:36 +0200mxs(~mxs@user/mxs) (Remote host closed the connection)
2022-05-05 21:24:45 +0200mxs(~mxs@user/mxs)
2022-05-05 21:25:35 +0200bahamas(~lucian@84.232.141.55)
2022-05-05 21:26:54 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 276 seconds)
2022-05-05 21:27:07 +0200zer0bitz(~zer0bitz@2001:2003:f444:8f00:98db:b5ce:843:b259) (Ping timeout: 256 seconds)
2022-05-05 21:27:52 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-05 21:28:04 +0200hololeap_(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-05 21:31:15 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 21:31:39 +0200 <maerwald> sm: my opinion is that good design cannot happen up-front, unless you really do the same thing for the second time. Good codebases need a rewrite. I'd rather start with a monolith than with a very modular design, because a monolith is easier to grow and refactor.
2022-05-05 21:32:19 +0200agumonkey(~user@88.163.231.79) (Ping timeout: 256 seconds)
2022-05-05 21:32:34 +0200 <sm> I agree on the first part, certainly
2022-05-05 21:33:21 +0200 <sm> except for the kind of "obvious" design you can bring from experience with similar projects
2022-05-05 21:33:44 +0200abhinav(~abhinav@c-67-169-139-16.hsd1.ca.comcast.net)
2022-05-05 21:34:01 +0200 <maerwald> with overly modular design you easily navigate yourself into "API locks", where you suddenly can't make drastical changes anymore. That is fine if you're confident that your module boundaries are correct. But if you're wrong about your boundaries, god help you
2022-05-05 21:34:51 +0200abhinavabhixec
2022-05-05 21:34:51 +0200briandaed(~briandaed@109.95.142.93.r.toneticgroup.pl) (Ping timeout: 260 seconds)
2022-05-05 21:35:23 +0200quintasan(~quassel@quintasan.pl) ()
2022-05-05 21:35:33 +0200quintasan(~quassel@quintasan.pl)
2022-05-05 21:35:35 +0200 <sm> well, I think it's assumed that boundaries are part of what you can change
2022-05-05 21:35:59 +0200 <maerwald> but programmers don't like to be "wrong", so they get obsessed with up-front design and then do worse things
2022-05-05 21:36:04 +0200quintasan(~quassel@quintasan.pl) (Client Quit)
2022-05-05 21:36:16 +0200quintasan(~quassel@quintasan.pl)
2022-05-05 21:36:36 +0200 <sm> and if not, that's of course a problem, ideally solvable but if not, to be worked around (as with all the "expedient, safe" fixes to ghc over the years)
2022-05-05 21:37:22 +0200briandaed(~briandaed@109.95.142.93.r.toneticgroup.pl)
2022-05-05 21:37:46 +0200 <sm> often that's all we can afford at a point in time, or so it appears, but inevitably tech debt builds and eventually deeper cleanup is needed
2022-05-05 21:37:55 +0200 <maerwald> "this codebase needs a rewrite" is a success story... it means the codebase has survived so long and is so popular, that it *deserves* a rewrite!
2022-05-05 21:38:23 +0200 <maerwald> also, I'm not talking about GHC... I know nothing about it :)
2022-05-05 21:38:23 +0200 <sm> agreed!
2022-05-05 21:39:18 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-05 21:39:30 +0200 <sm> I know more after reading that paper ! might even understand some #ghc talk :)
2022-05-05 21:41:14 +0200 <dibblego> <edwardk> Pointed still plays a role, but it is pretty hard to find useful instances. the main usecase that comes to mind is that a PointedFunctor is basically exactly what you want to quantify over for an 'affine traversal'
2022-05-05 21:41:27 +0200 <dibblego> but what is the use-case for an affine traversal?
2022-05-05 21:41:34 +0200hololeap_(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-05 21:43:22 +0200 <dminuoso> AffineTraversal in the presence of Traversal is useful for the same reason that Maybe is useful in the presence of []/
2022-05-05 21:43:25 +0200xaotuk(~sasha@net224-32-245-109.mbb.telenor.rs)
2022-05-05 21:44:39 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 21:47:14 +0200michalz(~michalz@185.246.204.105) (Remote host closed the connection)
2022-05-05 21:47:34 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 240 seconds)
2022-05-05 21:47:39 +0200michalz(~michalz@185.246.204.101)
2022-05-05 21:48:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-05-05 21:48:24 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-05-05 21:48:31 +0200 <darkling> I'm new to Haskell, but what I'm having most trouble with at the moment is converting the marvellous new structures and intuitions into actual use-cases.
2022-05-05 21:49:28 +0200abhixec(~abhinav@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection)
2022-05-05 21:50:25 +0200 <darkling> I'm mostly OK with the maths-centric approaches -- I trained as a mathematician -- but linking the way I'd write the code "normally" to this new strangely-named zoo of magic is proving tricky.
2022-05-05 21:50:49 +0200 <Cale> hmm
2022-05-05 21:51:06 +0200 <geekosaur> have you looked at _Real World Haskell_?
2022-05-05 21:51:14 +0200 <geekosaur> @where rwh
2022-05-05 21:51:14 +0200 <lambdabot> http://www.realworldhaskell.org/blog/ http://book.realworldhaskell.org/read/
2022-05-05 21:51:47 +0200 <dminuoso> Perhaps it might be useful to dispel the magic. Every bit of Haskell code can easily be inspected, and since evaluation amounts to just substituting for a definition - very much like in math - you can trivially follow code.
2022-05-05 21:52:17 +0200 <darkling> Thanks. I'll add that to the reading list. I'm working through LYAH at the moment, in conjunction with "What I wish I knew when I started Haskell", and the Typeclassopedia, and a textbook on Category Theory.
2022-05-05 21:53:14 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-05 21:53:44 +0200 <darkling> dminuoso: I'm overstating the magic part here. It's more that I can't (yet) use those tools as building blocks, so they appear to stand alone.
2022-05-05 21:53:47 +0200 <Cale> darkling: I guess one thing you might start with is that a lot of imperative loops end up being frozen into lists
2022-05-05 21:53:51 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net) (Remote host closed the connection)
2022-05-05 21:54:15 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net)
2022-05-05 21:54:19 +0200roconnor(~roconnor@coq/roconnor) (Ping timeout: 240 seconds)
2022-05-05 21:54:36 +0200 <Cale> Just as a loop either doesn't occur (e.g. because its loop condition isn't met), or it consists of a single iteration followed by another loop, a list is either empty, or consists of a single element followed by another list.
2022-05-05 21:54:39 +0200 <dminuoso> darkling: Oh that. Just imagine this to be a natural language, its writing and reading that automatically builds up intuition.
2022-05-05 21:54:55 +0200 <darkling> I've done quite a bit of Erlang, so I'm happy with the functional idioms.
2022-05-05 21:54:57 +0200 <Cale> So, in some sense, lists are like "loops waiting to happen"
2022-05-05 21:55:08 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-05-05 21:55:13 +0200 <Cale> (and especially so if they're lazy lists)
2022-05-05 21:55:27 +0200 <darkling> The laziness is very attractive. :)
2022-05-05 21:55:29 +0200 <geekosaur> I would also mention that category theory is not as useful as some claim
2022-05-05 21:55:56 +0200 <darkling> geekosaur: I had the book a few years ago, independent of Haskell. This is just the impetus to read the book.
2022-05-05 21:56:00 +0200 <geekosaur> knowing CT won't help you one bit with understanding IO, in particular
2022-05-05 21:56:26 +0200 <dminuoso> darkling: Erlang is almost, but not quite, entirely unlike Haskell.
2022-05-05 21:56:31 +0200 <EvanR> so you want to write hello world in haskell, let me first introduce you to javascript's callback system
2022-05-05 21:56:48 +0200 <Cale> haha
2022-05-05 21:56:50 +0200 <darkling> EvanR: Please, don't. $day_job is mostly JS/TS. :)
2022-05-05 21:57:40 +0200 <dminuoso> 21:54:56 Cale | So, in some sense, lists are like "loops waiting to happen"
2022-05-05 21:57:48 +0200 <dminuoso> I file this under "monad tutorial fallacy"
2022-05-05 21:58:01 +0200 <Cale> hm?
2022-05-05 21:58:03 +0200 <darkling> dminuoso: I've already done the brain jump from imperative to functional, though. :)
2022-05-05 21:58:33 +0200 <Cale> darkling: I guess I'm confused about your original question in that case
2022-05-05 21:58:39 +0200odnes(~odnes@5-203-254-76.pat.nym.cosmote.net) (Client Quit)
2022-05-05 21:59:03 +0200 <Cale> Did you have specific Haskell gadgets that you wanted a use-case for?
2022-05-05 21:59:29 +0200 <geekosaur> there are still jumps to be made, though. I came in knowing enough SML/NJ to be able to understand programs written in it, but laziness and IO still made for a huge jump needed
2022-05-05 21:59:29 +0200 <dminuoso> Cale: So thinking of lists as loops is an intution that we develop after we already understand how to use them. It's similar to "Monads are Burritos", it's an intuition that only helps if you already understand it.
2022-05-05 22:00:09 +0200 <Cale> dminuoso: Well, that was the conclusion of a very specific analogy I was making, though perhaps it requires examples to really get.
2022-05-05 22:00:11 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
2022-05-05 22:00:17 +0200 <Cale> (but darkling already seems familiar)
2022-05-05 22:00:24 +0200 <EvanR> I knew about lazy wrappers in scheme, that made haskell not seem like a cold turkey
2022-05-05 22:00:55 +0200 <geekosaur> I don't think that's necessarily true, dminuoso. I mean, what do you do with a list in any language? You loop over it
2022-05-05 22:00:57 +0200 <dminuoso> Cale: Right, Im not sure examples really suffice. Without being very comfortable with laziness, Im not convinced most beginners would get the gist of it.
2022-05-05 22:01:03 +0200 <geekosaur> in Hasekll that's the whole point of a list
2022-05-05 22:01:05 +0200 <Cale> I will say that there are a lot of libraries of general abstract nonsense on Hackage that I would rarely or never use.
2022-05-05 22:01:44 +0200 <Cale> (but others that I would)
2022-05-05 22:02:00 +0200 <darkling> Cale: There's a lot made of the Functor/Applicative/Monad stuff, but I'm finding it hard to see where those things fit into the way I'd do things without them.
2022-05-05 22:02:10 +0200 <dminuoso> geekosaur: They are also very useful for other things like random access, keeping a bag of things - if your list implementation has nice asymptotics and ergonomics for that interface.
2022-05-05 22:02:29 +0200 <Cale> darkling: Ah, are you familiar with the general concept of a combinator library?
2022-05-05 22:02:34 +0200 <darkling> Maybe I just need to practice the basic language without them and then spot the patterns where they'd help reduce mess/boilerplate.
2022-05-05 22:02:38 +0200 <dminuoso> In Haskell they dont, which means the "loopy interface" is way more prominent, simply because you cant do much else with it if you intend to scale
2022-05-05 22:02:50 +0200 <dminuoso> And that might not be so obvious in other languages
2022-05-05 22:03:06 +0200 <sm> darkling: maybe it's a good time for a tour through some practical haskell code bases ?
2022-05-05 22:03:12 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:6c7f:24ed:3788:2a1e) (Quit: WeeChat 2.8)
2022-05-05 22:03:17 +0200 <dminuoso> In Haskell we actively construct lists for the purpose of deconstructing element by element, you rarely do this in most common traditional languages
2022-05-05 22:03:25 +0200 <darkling> Cale: Not entirely. I've brushed around the concept of combinators in (IIRC) lambda calculus, but never looked into it in detail.
2022-05-05 22:03:38 +0200 <geekosaur> we need an updated RWH that covers things like pandoc and hledger
2022-05-05 22:03:44 +0200 <darkling> I was a mathematician, not a formal computer scientist (despite lecturing as the latter).
2022-05-05 22:04:03 +0200 <darkling> All the CS I know is autodidactic.
2022-05-05 22:04:22 +0200 <k`> darkling: You could just take a look at how Text.ParserCombinators.ReadP does parsing.
2022-05-05 22:04:36 +0200 <Cale> darkling: Ah, this "combinator" is in a less technical sense. The idea is that you build a library where you start with a bunch of basic building block computations of some type, they may even be too simple to be useful on their own, and then you have a bunch of operations for combining them in various ways.
2022-05-05 22:05:12 +0200 <sm> ("practice the basic language and spot the patterns" is good too)
2022-05-05 22:05:17 +0200 <EvanR> code reuse in haskell is better than normal, and people blame how the basic nuts and bolts like lists and eithers are "very dumb"
2022-05-05 22:05:42 +0200 <EvanR> there's like no room for interpretation and so incompatible "cleverness" to proliferate
2022-05-05 22:05:46 +0200 <Cale> darkling: Functor/Applicative/Monad capture patterns that frequently arise when you're building libraries in that style
2022-05-05 22:06:05 +0200 <geekosaur> http://book.realworldhaskell.org/read/using-parsec.html
2022-05-05 22:06:14 +0200 <geekosaur> nice use of combinators
2022-05-05 22:06:16 +0200 <EvanR> darkling, I was trying to respond to your thing about boilerplate but then the phone wrong
2022-05-05 22:06:20 +0200 <EvanR> rang
2022-05-05 22:07:49 +0200 <Cale> For example, in the case of parsers, you might have a parametric type (Parser t) of parsers whose result(s) will have type t
2022-05-05 22:08:35 +0200 <Cale> and then that will be an instance of Functor, because if we have a function (a -> b), we can apply that function to the results of a parser of type Parser a to obtain a parser of type Parser b
2022-05-05 22:10:01 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 248 seconds)
2022-05-05 22:10:17 +0200 <darkling> If I've understood, that's the kind of thing where my immediate reaction is to first execute the Parser a to get an a, and then run the a -> b over that result.
2022-05-05 22:10:56 +0200 <darkling> But with the Functor, you can manipulate the Parser a directly to get the Parser b as a stand-alone thing.
2022-05-05 22:11:46 +0200 <darkling> So it's kind of an associative flip: transform(parse(input)) to (transform.parse)(input).
2022-05-05 22:13:16 +0200 <Cale> Yeah, depending on how the parser itself is encoded, it might be more or less involved. But with some of the simplest functional representations of parsers, it will be little more than function composition with a bit of dressing around it.
2022-05-05 22:14:04 +0200hololeap_(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-05 22:14:05 +0200 <darkling> That puts the tool (Functor) in a much better context, where I feel I could actually use one. :)
2022-05-05 22:14:40 +0200 <Cale> If we look at Monad, it'll provide us with return :: a -> Parser a which will construct a parser that consumes none of the input, but immediately returns the given value as its (sole) result
2022-05-05 22:14:59 +0200 <Cale> as well as (>>=) :: Parser a -> (a -> Parser b) -> Parser b
2022-05-05 22:15:01 +0200 <k`> Then up from Functor, Applicative lets you combine the results of two parsers or make a dummy parser that produces a result purely (without consuming input).
2022-05-05 22:15:06 +0200 <Cale> which will take a parser that has results of type a
2022-05-05 22:15:17 +0200 <Cale> and a function from values of type a to parsers with results of type b
2022-05-05 22:15:52 +0200 <Cale> and it will glue those together in the sensible way: making a parser which runs the first parser to get a value of type a, then applies the function to decide which parser to run next, and run that on whatever is left of the input
2022-05-05 22:16:42 +0200 <Cale> This sort of "deciding what to do next based on the result of a previous computation" is what characterises monads in this setting.
2022-05-05 22:17:30 +0200 <darkling> And that's the ordering dependency that's the intuition of the do-construct?
2022-05-05 22:17:35 +0200 <Cale> Yeah
2022-05-05 22:18:22 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 22:19:01 +0200Guest1767(~Polo@user/polo)
2022-05-05 22:19:10 +0200Guest1767(~Polo@user/polo) (Client Quit)
2022-05-05 22:19:11 +0200 <maerwald> well, applicative also decides on what to do next, in a sense, except not for the effect flow
2022-05-05 22:19:43 +0200 <maerwald> just for the values
2022-05-05 22:20:07 +0200kenran(~kenran@200116b82b2708000a1d989028fc8790.dip.versatel-1u1.de) (Quit: WeeChat info:version)
2022-05-05 22:20:13 +0200 <darkling> I think I should stop now, before my brain overflows.
2022-05-05 22:20:36 +0200 <Cale> Yeah, you can't wholesale decide what happens next with applicative, it's just that one computation gets to decide how to transform the result of another (but both are happening regardless of the results)
2022-05-05 22:20:36 +0200 <darkling> But many thanks for the conversation, ladies and gentlemen. I'm sure I'll be back.
2022-05-05 22:21:22 +0200 <darkling> I probably need to read through this conversation again tomorrow, and see if I can advance the rest of the reading based on it.
2022-05-05 22:21:52 +0200 <Cale> Yeah, this is the kind of thing that really you need 5 or 10 examples before you truly get it.
2022-05-05 22:22:13 +0200 <maerwald> yeah... with monad you can decide which parser to pick based on the previous value, with applicative the parsers you run are pre-defined
2022-05-05 22:23:02 +0200 <Cale> (i.e. different whole libraries that use the same operations, but do completely different things with them)
2022-05-05 22:23:28 +0200emanon42(~emanon42@103.120.19.44)
2022-05-05 22:23:30 +0200mixfix41(~sdenyninn@user/mixfix41)
2022-05-05 22:25:32 +0200 <seydar> yo this Debug.Trace thing is pretty cool
2022-05-05 22:25:37 +0200 <seydar> i feel so dirty using it
2022-05-05 22:25:42 +0200gpncarl(~gpncarl@120.244.220.74)
2022-05-05 22:25:45 +0200 <EvanR> it's quite impure
2022-05-05 22:27:21 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net)
2022-05-05 22:29:45 +0200gpncarl(~gpncarl@120.244.220.74) (Ping timeout: 248 seconds)
2022-05-05 22:30:47 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-05 22:32:33 +0200Polo(~Polo@user/polo)
2022-05-05 22:32:36 +0200 <Cale> It's really useful for extracting the arguments to a pure function in the case that something is going wrong (and the arguments are hard to guess), and then from there you can work out why it's producing an incorrect result.
2022-05-05 22:33:08 +0200briandaed(~briandaed@109.95.142.93.r.toneticgroup.pl) (Remote host closed the connection)
2022-05-05 22:36:59 +0200 <darkling> There's a lot to be said for a bunch of carefully-placed printfs. :)
2022-05-05 22:39:54 +0200coot(~coot@213.134.190.95)
2022-05-05 22:43:10 +0200Polo(~Polo@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-05-05 22:48:04 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
2022-05-05 22:49:11 +0200 <sm> seydar: it's an essential haskell dev tool, nothing to be ashamed of. You may want to add pretty-simple or pretty-show later
2022-05-05 22:53:25 +0200teddyc(theodorc@cassarossa.samfundet.no)
2022-05-05 22:56:39 +0200 <seydar> sm: ooh, good tip, thank you
2022-05-05 22:56:47 +0200 <seydar> what IO does trace* write to?
2022-05-05 22:57:03 +0200 <seydar> it doesn't appear to be writing to stdout or stderr
2022-05-05 22:57:06 +0200 <seydar> unless i'm high
2022-05-05 22:57:12 +0200 <sm> stderr
2022-05-05 22:57:19 +0200 <sm> some more ideas at https://hackage.haskell.org/package/hledger-lib-1.25/docs/Hledger-Utils-Debug.html
2022-05-05 22:59:06 +0200 <seydar> weird, i am unable to redirect 2>&1 the way i'd expect to
2022-05-05 22:59:37 +0200 <EvanR> wouldn't that have no effect usually
2022-05-05 22:59:44 +0200 <EvanR> still prints out
2022-05-05 23:01:19 +0200 <sm> eh.. you're writing 2>&1 at the right place (towards the end of the command line) ? bash is weird with that
2022-05-05 23:01:48 +0200 <geekosaur> what exactly are you doing and what are you expecting?
2022-05-05 23:02:00 +0200Pickchea(~private@user/pickchea)
2022-05-05 23:02:12 +0200 <seydar> `ghc Encode && ./Encode cat.jpg 2>&1 hs.out`
2022-05-05 23:02:23 +0200 <seydar> i'm expecting my output to all go to hs.out
2022-05-05 23:02:30 +0200 <Clint> then you have the syntax wrong
2022-05-05 23:02:53 +0200 <geekosaur> first off, you did not redirect into hs,out so it won't be stdout
2022-05-05 23:03:24 +0200 <geekosaur> second off, 2>&1 must follow a redirection of stdout, otherwise you redirect stderr to the old stdout and then redirect stdout to a different place
2022-05-05 23:03:42 +0200 <sm> aHA
2022-05-05 23:03:46 +0200 <seydar> AHHH
2022-05-05 23:05:21 +0200chele(~chele@user/chele) (Remote host closed the connection)
2022-05-05 23:05:33 +0200smremembers a command line is a small stateful procedural program
2022-05-05 23:06:12 +0200zyklotomic(~ethan@res380d-128-61-84-187.res.gatech.edu) (Ping timeout: 248 seconds)
2022-05-05 23:08:06 +0200zyklotomic(~ethan@res388d-128-61-89-205.res.gatech.edu)
2022-05-05 23:08:37 +0200 <seydar> https://paste.tomsmeding.com/IXOwurpv
2022-05-05 23:08:38 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 250 seconds)
2022-05-05 23:08:47 +0200 <seydar> i'm getting output that i don't expect. namely, things aren't happening in the order that i'd expect
2022-05-05 23:09:02 +0200 <seydar> i'd expect a tuple followed by 20 floats
2022-05-05 23:09:21 +0200 <seydar> going from (0, 0) -> (0, 1) -> (1, 0) -> (1, 1)
2022-05-05 23:09:26 +0200 <sm> welcome to the wacky world of haskell lazy evaluation
2022-05-05 23:09:29 +0200 <seydar> but that is not at _all_ what's happening
2022-05-05 23:09:46 +0200 <darkling> There's no synchronisation guarantee between stdout and stderr -- both can be buffered.
2022-05-05 23:10:16 +0200 <seydar> darkling: that is good to know, but all relevant output here is going to STDERR, so i don't think that's the issue
2022-05-05 23:10:21 +0200 <darkling> You pretty much always have to interpret the two streams' outputs with a certain amount of fuzz.
2022-05-05 23:11:02 +0200 <geekosaur> or set NoBuffering on both
2022-05-05 23:11:20 +0200 <darkling> If it's all going to the same stream, then it should be properly ordered, but I guess sm's observation takes over here, and "properly ordered" still has unexpected results.
2022-05-05 23:11:44 +0200 <seydar> how do i make something eager?
2022-05-05 23:12:05 +0200 <sm> a simple way is to print it
2022-05-05 23:12:06 +0200 <geekosaur> not guaranteed if you did it via redirection, because each Handle is still buffered independently even if they end up writing to the same place
2022-05-05 23:12:41 +0200 <sm> (not trace it)
2022-05-05 23:13:29 +0200 <seydar> sm: dammit, now i have to copy everything and move it to an IO () function
2022-05-05 23:14:23 +0200 <sm> ie, using print in the IO monad. There's also `seq`, deepseq, and such like
2022-05-05 23:14:28 +0200 <geekosaur> also, sadly, GNU stdbuf doesn't work on haskell programs because they don't use glibc's buffering stuff
2022-05-05 23:14:56 +0200 <sm> when you're just debugging, the lazy ordering usually isn't a big problem, in fact it gives good insight into program execution
2022-05-05 23:15:08 +0200 <sm> labeling the values can help
2022-05-05 23:15:32 +0200 <EvanR> % let x = trace "foo" 1; y = trace "bar" 2 in (x,y)
2022-05-05 23:15:40 +0200 <geekosaur> no yahb still
2022-05-05 23:15:46 +0200 <EvanR> YAAAAAHB
2022-05-05 23:16:13 +0200 <sm> if you really want guaranteed definite ordered output, then that's logging and yes requires IO
2022-05-05 23:16:13 +0200 <geekosaur> no mniip still. hope they're enjoying their vacation or whatever
2022-05-05 23:16:30 +0200 <geekosaur> (hoping it's that and not, say, a hospital stay)
2022-05-05 23:17:04 +0200hololeap_(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-05 23:17:06 +0200geekosaurwonders if there are enough pieces in mniip's github to assemble a new yahb
2022-05-05 23:17:30 +0200 <EvanR> if tony stark dies, no one is iron man
2022-05-05 23:17:57 +0200 <EvanR> (spoiler alert)
2022-05-05 23:18:25 +0200 <geekosaur> I found the bot core there and the sandboxing stuff, but I don't think it has how to glue them together into a yahb
2022-05-05 23:19:27 +0200 <EvanR> mniip's biosignature unlocks a hidden vault which release autoscripts to glue all the pieces together onto them (or whoever can fake access)
2022-05-05 23:19:36 +0200 <geekosaur> (or even how to sandbox a ghci)
2022-05-05 23:21:28 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 23:23:55 +0200eraziel(~eraziel@modemcable169.17-58-74.mc.videotron.ca)
2022-05-05 23:24:03 +0200 <seydar> "traceShow (y, x) `seq` traceShowId bases" did not have the effect i thought it would. only the second trace statement was executed
2022-05-05 23:25:58 +0200 <monochrom> (Mixing up conversations) So yahb is Iron Man??!!
2022-05-05 23:27:19 +0200 <sm> welcome to the second level of the wacky world of haskell lazy evaluation!
2022-05-05 23:27:46 +0200 <sm> replace seq with $ there I think
2022-05-05 23:28:37 +0200 <eraziel> what's a good way to ensure a small chunk of code runs uninterrupted ? doing this right now `finally (pure ()) thingIdLikeToRunUninterrupted`
2022-05-05 23:28:50 +0200 <eraziel> the `pure ()` part seems off
2022-05-05 23:30:12 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-05-05 23:30:28 +0200 <monochrom> Yeah this one seems to be a simple misunderstanding of traceShow. Consider giving it two arguments.
2022-05-05 23:30:29 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-05 23:30:31 +0200 <EvanR> before you complain that yahb was autonomous and could be commanded by anybody here, iron man has automated clones
2022-05-05 23:31:34 +0200 <monochrom> Ooohhh!!! So yahb is Jarvis...
2022-05-05 23:32:37 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-05-05 23:32:38 +0200gensyst(gensyst@user/gensyst) (Quit: Leaving)
2022-05-05 23:34:20 +0200 <seydar> okay so it looks like all of my life's woes come from the fact that i can't get the ordering right in this list comprehension
2022-05-05 23:34:33 +0200 <seydar> it is ordering... non-deterministically
2022-05-05 23:35:10 +0200 <seydar> it is ordering deterministically according to an unknown god
2022-05-05 23:35:41 +0200 <sm> trace more things to see what the heck it's doing
2022-05-05 23:35:42 +0200 <darkling> Did you forget to feed the shoggoths?
2022-05-05 23:36:34 +0200hololeap_(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-05 23:37:27 +0200 <seydar> sm: this is the result of my tracing
2022-05-05 23:37:27 +0200Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat)
2022-05-05 23:37:30 +0200 <EvanR> yeah don't confuse non-determinism with "not what I thought I ordered"
2022-05-05 23:38:06 +0200Katarushisu(~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net)
2022-05-05 23:38:09 +0200 <monochrom> Ugh list comprehension data order is orthogonal to evaluate order if that's what you mean.
2022-05-05 23:38:46 +0200 <monochrom> Or rather s/data order/linked list order/
2022-05-05 23:39:20 +0200 <seydar> okay i don't think this is the source of my bug
2022-05-05 23:39:30 +0200hololeap_(~hololeap@user/hololeap)
2022-05-05 23:39:40 +0200 <sm> I'd trace more till it makes sense. Things get evaluated when needed and not before, This is often surprising to a human
2022-05-05 23:40:02 +0200 <EvanR> unless the human was raised by lazy wolves or something
2022-05-05 23:41:02 +0200 <sm> unless raised by lazy wolves 🐺
2022-05-05 23:41:02 +0200 <seydar> what's that eager version of haskell called?
2022-05-05 23:41:07 +0200emanon42(~emanon42@103.120.19.44) (Quit: The Lounge - https://thelounge.chat)
2022-05-05 23:41:22 +0200 <EvanR> purescript
2022-05-05 23:43:18 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-05 23:43:21 +0200emanon42(~emanon42@103.120.19.44)
2022-05-05 23:43:25 +0200 <monochrom> sm: The context is effectless pure code that processes lists and number crunching, the observation is that the resulting numbers are wrong and/or the numbers are in a wrong order in the resulting lists. Lazy evaluation could be seen as nondeterministic but not to the point of being nondeterminitic in answers, we are not talking about unsafeInterleaveIO.
2022-05-05 23:43:30 +0200 <seydar> time for my favorite game: bug or floating point error
2022-05-05 23:44:10 +0200 <EvanR> floating point problem between chair and keyboard
2022-05-05 23:44:25 +0200 <monochrom> I did suggest using Debug.Trace but the purpose was to observe and check intermediate numbers, not to confuse wrong numbers with wrong evaluation order.
2022-05-05 23:44:42 +0200 <seydar> monochrom: this new level of hell is all thanks to Debug.Trace
2022-05-05 23:44:47 +0200 <sm> ah, thanks
2022-05-05 23:45:10 +0200 <EvanR> you realize purity was instituted because otherwise laziness would be ridiculous
2022-05-05 23:45:12 +0200 <monochrom> This case needs zero understanding of evaluation orders. It doesn't matter at all.
2022-05-05 23:45:56 +0200 <EvanR> but really Debug.Trace is really very mild in terms of side effects
2022-05-05 23:46:12 +0200 <seydar> monochrom: i'm coming around to that conclusion. i just had a moment of public panic
2022-05-05 23:48:27 +0200 <dibblego> dminuoso: show me the use-case
2022-05-05 23:49:09 +0200 <seydar> also you guys aren't gonna believe this but the evaluation order that i thought was crazy actually makes perfect sense
2022-05-05 23:49:17 +0200 <dibblego> (also, I have heard the []/Maybe argument before and after analysis, typically the claimant learns that it is not a good argument -- there are better arguments, though they also still fail)
2022-05-05 23:49:38 +0200zeenk(~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d)
2022-05-05 23:50:05 +0200 <sm> welcome to level 3!
2022-05-05 23:51:16 +0200 <EvanR> you're dangerously close to being unable to return to normal programming languages
2022-05-05 23:52:24 +0200 <EvanR> you can go back once you get to level 6
2022-05-05 23:52:27 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-05 23:52:31 +0200Polo(~Polo@user/polo)
2022-05-05 23:53:05 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-05-05 23:55:39 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-05 23:56:33 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-05-05 23:58:01 +0200 <seydar> i like the cthulu^H^H^H^H^H^Hhaskell forces you to write top-down
2022-05-05 23:58:57 +0200 <seydar> i'm reading some C code right now and constantly asking "what are you trying to say"
2022-05-05 23:59:04 +0200Topsi(~Topsi@dyndsl-037-138-064-083.ewe-ip-backbone.de) (Read error: Connection reset by peer)