2022/01/24

2022-01-24 00:02:02 +0100Constraintegic(~thomasbul@2001:a61:1307:2b01:3d2f:ad9e:d1f8:1d5d) (Ping timeout: 240 seconds)
2022-01-24 00:04:37 +0100LukeHoersten(~LukeHoers@user/lukehoersten) (Quit: Textual IRC Client: www.textualapp.com)
2022-01-24 00:06:17 +0100chomwitt(~chomwitt@2a02:587:dc06:be00:12c3:7bff:fe6d:d374) (Ping timeout: 240 seconds)
2022-01-24 00:17:12 +0100 <random-jellyfish> shouldn't Mealy be something like newtype Mealy in out = Mealy (in -> Mealy in out -> (out, Mealt in out)) ?
2022-01-24 00:17:32 +0100 <random-jellyfish> since output is determined by current state and input
2022-01-24 00:18:10 +0100Tuplanolla(~Tuplanoll@91-159-68-166.elisa-laajakaista.fi) (Quit: Leaving.)
2022-01-24 00:18:31 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection)
2022-01-24 00:22:53 +0100klimnbrk(~barakvoid@2a02:14f:4:90c3:5267:c24a:c393:429d) (Ping timeout: 268 seconds)
2022-01-24 00:26:29 +0100tavares(~tavares@user/tavares) (Ping timeout: 256 seconds)
2022-01-24 00:27:46 +0100ksqsf(~user@2001:da8:d800:611:88d2:4501:124e:aebc)
2022-01-24 00:29:08 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2022-01-24 00:29:36 +0100 <mcgroin> I find this naming extremely confusing: newtype State s a = State s -> (a, s)
2022-01-24 00:29:51 +0100 <mcgroin> This is a state transition action
2022-01-24 00:30:13 +0100 <mcgroin> why not name it something like StateTransition ?
2022-01-24 00:31:31 +0100 <mcgroin> State is static, and yet it contains a transition action... Similar naming abound in different libraries
2022-01-24 00:31:51 +0100 <sclv> in this case its because it models the effect of having state
2022-01-24 00:32:04 +0100ksqsf(~user@2001:da8:d800:611:88d2:4501:124e:aebc) (Ping timeout: 250 seconds)
2022-01-24 00:32:24 +0100 <sclv> so `State s a` is "an a in the context of a State s"
2022-01-24 00:32:40 +0100Akiva(~Akiva@user/Akiva)
2022-01-24 00:35:18 +0100 <monochrom> "StateTransitionFunction" is too long
2022-01-24 00:35:45 +0100notzmv(~zmv@user/notzmv)
2022-01-24 00:36:15 +0100 <mcgroin> monochrom: It is but these are things that really frustrates beginners I feel
2022-01-24 00:36:29 +0100 <geekosaur> only if they come from Java
2022-01-24 00:36:40 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 00:37:01 +0100 <sclv> i have heard many frustrations of beginners and, some tooling issues aside, they are far more diverse than you would imagine
2022-01-24 00:37:54 +0100 <mcgroin> geekosaur: so you think it's totally appropriate with this naming? I'm trying to bend my mind to look at it from various angles to make sense
2022-01-24 00:38:10 +0100 <monochrom> I am unsympathetic because no one complained that "class Person { String name; int age; }" is confusing. And it is. Along the same logic as yours.
2022-01-24 00:38:27 +0100 <geekosaur> I agree with sclv. <sclv> so `State s a` is "an a in the context of a State s"
2022-01-24 00:38:36 +0100 <sclv> i gave the example it makes sense from: the angle in which you see "having a State of type s" is an _effect_
2022-01-24 00:38:38 +0100 <monochrom> A record of name and age is clearly not a person.
2022-01-24 00:38:53 +0100 <geekosaur> newcomers don't have problems with that name, they have problems with the underlying concept
2022-01-24 00:38:56 +0100 <monochrom> A "non-confusing" name would be RecordOfPersonNameAndAge but who does that.
2022-01-24 00:39:00 +0100 <sclv> monochrom: full rights for records of name and age!
2022-01-24 00:39:09 +0100neceve(~quassel@2.26.93.228) (Ping timeout: 256 seconds)
2022-01-24 00:39:12 +0100 <sclv> i'm taking this one to the supreme court
2022-01-24 00:39:29 +0100 <sclv> if a corporation can be a person, well
2022-01-24 00:39:57 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
2022-01-24 00:40:17 +0100 <monochrom> Very early on everyone catches on the idea that you code up a model, you never have the real thing. And everyone has moved on.
2022-01-24 00:40:54 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-24 00:40:57 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-01-24 00:41:56 +0100 <mcgroin> so no one thinks StateTransition is better... I have to rethink the whole thing again
2022-01-24 00:42:01 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-01-24 00:42:41 +0100 <mcgroin> because that s in State s a is the actual state
2022-01-24 00:42:45 +0100 <monochrom> You get the OOP people to s/Person/RecordOfPersonNameAndAge/. After that, we can talk again.
2022-01-24 00:43:01 +0100 <sclv> if you're not comfortable with "the statement 'state is an effect'" you should start there
2022-01-24 00:43:16 +0100 <sclv> and consider also if "Reader r" and "Writer w" make more sense to you or less sense or the same sense
2022-01-24 00:43:20 +0100alp(~alp@user/alp) (Ping timeout: 250 seconds)
2022-01-24 00:43:53 +0100 <mcgroin> sclv: i can get comfortable with redefining state and bend my mind to fit its new definition as an effect with time
2022-01-24 00:44:36 +0100 <sclv> i mean that the names make sense only if you start with "these are names of monads which model effects" as _why_ they should make sense
2022-01-24 00:44:49 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2022-01-24 00:45:00 +0100 <sclv> like the name is giving some abstract characterization of some concrete data
2022-01-24 00:45:12 +0100Hao(~Hao@222-154-98-23-fibre.sparkbb.co.nz)
2022-01-24 00:45:36 +0100 <sclv> but the nature of the abstraction in question is important to understand why that name
2022-01-24 00:45:53 +0100 <mcgroin> among all the features of Haskell, i find the way how it makes abstractions the most elusive
2022-01-24 00:46:51 +0100 <geekosaur> haskell abstracts things nothing else can. naming won't help you understand them
2022-01-24 00:47:14 +0100 <geekosaur> your brain needs hooks to hang the names on, and only experience will get you those hooks
2022-01-24 00:47:45 +0100 <mcgroin> other languages make abstractions too of course. but some how haskell abstract data types, which is really hard to get and frankly doesn't seem to be relevant in real world programming. I wonder how many programmers can make abstractions like Monad
2022-01-24 00:49:04 +0100 <mcgroin> The M thing is hard to get when someone already lay it out for you, not to mention to make new abstractions like Comonad etc...
2022-01-24 00:49:50 +0100 <sclv> take it slow, only a few need to be learned at a time
2022-01-24 00:49:59 +0100 <sclv> and each one is really learning a whole new way to look at something familiar
2022-01-24 00:53:19 +0100 <c_wraith> random-jellyfish: the state is implicit in the function arrows in the definition of Mealy - the functions can close over whatever state they need. that's why the function returns a new Mealy machine - so it can close over new state.
2022-01-24 00:54:17 +0100mvk(~mvk@2607:fea8:5cdc:bf00::a2bf) (Ping timeout: 240 seconds)
2022-01-24 00:54:31 +0100 <mcgroin> sclv: Reader and Writer are more acceptable because they do imply an action in the names: the verbs read and write
2022-01-24 00:56:48 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-24 00:58:27 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5d8e:db89:f241:b6e3)
2022-01-24 00:58:50 +0100edrx(~Eduardo@2804:56c:d2f8:7700:812f:d393:2bf3:f7a6) (Killed buffer)
2022-01-24 00:59:17 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
2022-01-24 00:59:21 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 01:02:22 +0100max22-(~maxime@2a01cb0883359800e05a099bb642ef66.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-24 01:02:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5d8e:db89:f241:b6e3) (Ping timeout: 240 seconds)
2022-01-24 01:10:17 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds)
2022-01-24 01:10:42 +0100burnsidesLlama(~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-24 01:12:13 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
2022-01-24 01:13:37 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 240 seconds)
2022-01-24 01:15:59 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-24 01:16:16 +0100alx741(~alx741@157.100.93.160)
2022-01-24 01:24:08 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 01:24:17 +0100ProfSimm(~ProfSimm@87.227.196.109) (Ping timeout: 256 seconds)
2022-01-24 01:31:08 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net)
2022-01-24 01:33:48 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 01:37:21 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 01:37:21 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 01:37:21 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 01:37:30 +0100vglfr(~vglfr@88.155.24.103) (Ping timeout: 268 seconds)
2022-01-24 01:38:26 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5d8e:db89:f241:b6e3)
2022-01-24 01:41:59 +0100alx741(~alx741@157.100.93.160)
2022-01-24 01:43:39 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
2022-01-24 01:45:20 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-01-24 01:45:53 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 01:46:28 +0100alx741(~alx741@157.100.93.160)
2022-01-24 01:49:23 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 01:49:32 +0100jgeerds(~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 240 seconds)
2022-01-24 01:50:33 +0100burnsidesLlama(~burnsides@dhcp168-027.wadham.ox.ac.uk)
2022-01-24 01:50:54 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 01:57:21 +0100burnsidesLlama(~burnsides@dhcp168-027.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
2022-01-24 01:58:51 +0100ystael(~ystael@user/ystael) (Ping timeout: 256 seconds)
2022-01-24 02:00:35 +0100ystael(~ystael@user/ystael)
2022-01-24 02:01:58 +0100DNH(~DNH@2a02:8108:1100:16d8:554b:fd6:4afe:d593) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-24 02:02:55 +0100burnsidesLlama(~burnsides@dhcp168-027.wadham.ox.ac.uk)
2022-01-24 02:03:04 +0100jespada(~jespada@87.74.36.188) (Ping timeout: 250 seconds)
2022-01-24 02:03:57 +0100 <sshine> would it be better if it were StateKeeper?
2022-01-24 02:07:14 +0100jespada(~jespada@87.74.36.188)
2022-01-24 02:07:41 +0100alx741(~alx741@157.100.93.160)
2022-01-24 02:07:50 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
2022-01-24 02:08:16 +0100 <dsal> MuTator
2022-01-24 02:08:38 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-01-24 02:09:28 +0100boxscape_(~boxscape_@p4ff0b9d5.dip0.t-ipconnect.de)
2022-01-24 02:10:32 +0100 <boxscape_> Why don't Tuples have Storable instances in base? There is storable-tuple, but the fact that that package exists and seems to work without problems makes it even stranger that base doesn't have those instances
2022-01-24 02:10:33 +0100 <EvanR> random-jellyfish, the state is encoded in the Mealy value itself, hidden in a closure
2022-01-24 02:11:06 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-01-24 02:11:19 +0100random-jellyfish(~random-je@user/random-jellyfish) (Ping timeout: 256 seconds)
2022-01-24 02:12:29 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 02:16:38 +0100cheater(~Username@user/cheater)
2022-01-24 02:16:45 +0100 <sshine> boxscape_, the author seems to agree: https://hackage.haskell.org/package/storable-tuple-0.0.3.3/docs/src/Foreign-Storable-Tuple.html (line 2)
2022-01-24 02:18:34 +0100 <sshine> boxscape_, it seems like Storable a => Storable (Complex a) is in base. data Complex a = !a :+ !a, that's almost a tuple. :P
2022-01-24 02:19:10 +0100 <energizer> how does this syntax work https://i.imgur.com/6Ab4BJq.png what are `s` and `b` supposed to be?
2022-01-24 02:20:04 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-24 02:20:30 +0100 <energizer> like, are they allowed to be just any old type?
2022-01-24 02:20:44 +0100 <Axman6> yep
2022-01-24 02:20:50 +0100 <energizer> ok
2022-01-24 02:21:00 +0100 <boxscape_> sshine yeah, good point
2022-01-24 02:21:01 +0100 <Axman6> Value lets you make something of type FunC a, for any a
2022-01-24 02:21:39 +0100 <Axman6> and the combining constructors like If don't care what types the branches have, as long as they're the same
2022-01-24 02:22:45 +0100 <Axman6> energizer: The name of this syntax is GADT, or Generalised Algebraic Data Types
2022-01-24 02:23:05 +0100 <energizer> thanks
2022-01-24 02:23:46 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection)
2022-01-24 02:23:48 +0100vglfr(~vglfr@46.96.147.122)
2022-01-24 02:24:27 +0100 <boxscape_> energizer note btw that the "a" in "data FunC a where" has nothing to do with the "a"s everywhere else, that type variable name is completely decoupled from the rest. It's only purpose is to say that FunC takes one argument
2022-01-24 02:24:40 +0100 <energizer> oh
2022-01-24 02:24:53 +0100 <Axman6> yeah good point
2022-01-24 02:24:58 +0100 <boxscape_> s/It's/Its
2022-01-24 02:25:06 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 02:25:46 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-01-24 02:25:51 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit)
2022-01-24 02:25:55 +0100 <sshine> energizer, the "a" in "Fst :: FunC (a, b) -> FunC a" isn't the same as the "a" in "Snd :: FunC (a, b) -> FunC b", either.
2022-01-24 02:26:34 +0100 <energizer> yea i guessed that one
2022-01-24 02:26:39 +0100 <sshine> energizer, that's how each line gets away with an arbitrary choice of variable names.
2022-01-24 02:27:15 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-01-24 02:27:38 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection)
2022-01-24 02:27:57 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds)
2022-01-24 02:27:58 +0100vicfred(~vicfred@user/vicfred)
2022-01-24 02:28:43 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 02:30:13 +0100alx741(~alx741@157.100.93.160)
2022-01-24 02:32:55 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 02:33:03 +0100benin(~benin@183.82.31.24)
2022-01-24 02:36:03 +0100Guest|60(~Guest|60@109.175.155.97)
2022-01-24 02:38:14 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 02:38:19 +0100 <Sqaure> how does one make a Word8 form a Char, if at all possible?
2022-01-24 02:38:47 +0100 <EvanR> > fromIntegral (ord 'c') :: Word8
2022-01-24 02:38:48 +0100 <lambdabot> 99
2022-01-24 02:39:00 +0100 <EvanR> (ord returns an Int)
2022-01-24 02:39:45 +0100 <EvanR> (also I answered a more specific question, how to encode Char with something like ASCII)
2022-01-24 02:40:09 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection)
2022-01-24 02:40:32 +0100 <Sqaure> thanks!
2022-01-24 02:41:35 +0100 <EvanR> for general technically sloppy operations treating Char as bytes, there's Data.ByteString.Char8
2022-01-24 02:43:03 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-01-24 02:44:14 +0100WingTillDie(~quassel@2001-b400-e2db-1da8-4062-cd4e-8589-7aec.emome-ip6.hinet.net) (Ping timeout: 250 seconds)
2022-01-24 02:45:06 +0100WingTillDie(~quassel@2001-b400-e2db-1da8-f9e5-e949-9fe0-1fb9.emome-ip6.hinet.net)
2022-01-24 02:45:52 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 02:46:46 +0100Guest|60(~Guest|60@109.175.155.97) (Quit: Connection closed)
2022-01-24 02:47:11 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-01-24 02:50:42 +0100alx741(~alx741@157.100.93.160)
2022-01-24 02:51:02 +0100 <albet70> does String have encoding?
2022-01-24 02:51:10 +0100leungbk(~user@2603-8000-1201-2dd2-79c6-a2ee-55d6-42c7.res6.spectrum.com)
2022-01-24 02:51:36 +0100WingTillDie(~quassel@2001-b400-e2db-1da8-f9e5-e949-9fe0-1fb9.emome-ip6.hinet.net) (Ping timeout: 250 seconds)
2022-01-24 02:53:47 +0100 <EvanR> each Char is just the unicode number for that character
2022-01-24 02:53:59 +0100 <EvanR> even if it's technically "not a character"
2022-01-24 02:54:21 +0100 <EvanR> String = [Char]
2022-01-24 02:54:55 +0100vysn(~vysn@user/vysn)
2022-01-24 02:55:17 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 02:56:01 +0100 <EvanR> so String is a thing you encode rather than decode, as far as text processing goes
2022-01-24 02:58:41 +0100 <EvanR> > succ '\1114110'
2022-01-24 02:58:42 +0100 <lambdabot> '\1114111'
2022-01-24 02:58:45 +0100 <EvanR> > succ '\1114111'
2022-01-24 02:58:47 +0100 <lambdabot> *Exception: Prelude.Enum.Char.succ: bad argument
2022-01-24 02:59:19 +0100 <boxscape_> > pred '\0'
2022-01-24 02:59:20 +0100 <lambdabot> *Exception: Prelude.Enum.Char.pred: bad argument
2022-01-24 02:59:44 +0100 <EvanR> no (ab)using the extra space in the Char for fun and profit
2022-01-24 03:01:54 +0100WingTillDie(~quassel@2001-b400-e2db-1da8-f9e5-e949-9fe0-1fb9.emome-ip6.hinet.net)
2022-01-24 03:12:23 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-01-24 03:12:37 +0100mmhat(~mmh@55d4124f.access.ecotel.net) (Ping timeout: 240 seconds)
2022-01-24 03:13:14 +0100alx741(~alx741@157.100.93.160)
2022-01-24 03:16:36 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
2022-01-24 03:17:34 +0100deadmarshal(~deadmarsh@95.38.118.201)
2022-01-24 03:17:34 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 03:19:20 +0100tomku(~tomku@user/tomku) (Ping timeout: 250 seconds)
2022-01-24 03:20:37 +0100tomku(~tomku@user/tomku)
2022-01-24 03:21:47 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-01-24 03:21:47 +0100neurocyte0917090(~neurocyte@user/neurocyte) (Ping timeout: 256 seconds)
2022-01-24 03:21:48 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2022-01-24 03:22:09 +0100deadmarshal(~deadmarsh@95.38.118.201) (Ping timeout: 256 seconds)
2022-01-24 03:23:32 +0100xff0x(~xff0x@2001:1a81:5332:3500:b49d:8e28:9fba:6720) (Ping timeout: 240 seconds)
2022-01-24 03:24:33 +0100juhp(~juhp@128.106.188.82)
2022-01-24 03:24:49 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-24 03:25:23 +0100xff0x(~xff0x@2001:1a81:5370:cd00:aa5:136f:1b20:712a)
2022-01-24 03:26:03 +0100 <albet70> String to ByteString is encooding or decoding
2022-01-24 03:26:15 +0100 <EvanR> encoding
2022-01-24 03:26:57 +0100mmhat(~mmh@55d400c1.access.ecotel.net)
2022-01-24 03:27:08 +0100ridcully_(~ridcully@p508ac987.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-01-24 03:27:23 +0100leungbk(~user@2603-8000-1201-2dd2-79c6-a2ee-55d6-42c7.res6.spectrum.com) (Remote host closed the connection)
2022-01-24 03:28:28 +0100mmhat(~mmh@55d400c1.access.ecotel.net) (Client Quit)
2022-01-24 03:28:48 +0100ridcully_(~ridcully@p508acc81.dip0.t-ipconnect.de)
2022-01-24 03:29:39 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 03:36:14 +0100ensyde(~ensyde@2600:1700:2050:1040:bdf9:ef99:b73e:7a0a)
2022-01-24 03:37:26 +0100lispy(~lispy4@84.69.59.93) (Quit: Leaving)
2022-01-24 03:40:14 +0100razetime(~quassel@49.207.209.26)
2022-01-24 03:41:46 +0100vicfred_(~vicfred@user/vicfred)
2022-01-24 03:44:02 +0100vicfred(~vicfred@user/vicfred) (Ping timeout: 250 seconds)
2022-01-24 03:45:14 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
2022-01-24 03:47:48 +0100lavaman(~lavaman@98.38.249.169)
2022-01-24 03:52:23 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-24 03:56:54 +0100califax-(~califax@user/califx)
2022-01-24 04:00:48 +0100califax(~califax@user/califx) (Ping timeout: 276 seconds)
2022-01-24 04:00:48 +0100califax-califax
2022-01-24 04:01:24 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-24 04:02:13 +0100dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 250 seconds)
2022-01-24 04:04:23 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 04:04:46 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in)
2022-01-24 04:06:18 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net)
2022-01-24 04:07:05 +0100dibblego(~dibblego@122-199-1-30.ip4.superloop.com)
2022-01-24 04:07:05 +0100dibblego(~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
2022-01-24 04:07:05 +0100dibblego(~dibblego@haskell/developer/dibblego)
2022-01-24 04:07:08 +0100Jing(~hedgehog@240e:390:7c53:a7e1:9c57:17b6:65b6:b182)
2022-01-24 04:09:08 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
2022-01-24 04:09:12 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 04:11:41 +0100dibblego(~dibblego@haskell/developer/dibblego) (Excess Flood)
2022-01-24 04:11:54 +0100dibblego(~dibblego@122-199-1-30.ip4.superloop.com)
2022-01-24 04:11:54 +0100dibblego(~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
2022-01-24 04:11:54 +0100dibblego(~dibblego@haskell/developer/dibblego)
2022-01-24 04:15:03 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-01-24 04:16:29 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-01-24 04:16:29 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-01-24 04:16:29 +0100finn_elijaFinnElija
2022-01-24 04:17:06 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
2022-01-24 04:17:55 +0100burnsidesLlama(~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-24 04:18:57 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds)
2022-01-24 04:19:00 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2022-01-24 04:20:40 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-24 04:22:57 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds)
2022-01-24 04:27:24 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-24 04:30:21 +0100td_(~td@94.134.91.105) (Ping timeout: 256 seconds)
2022-01-24 04:31:52 +0100td_(~td@94.134.91.163)
2022-01-24 04:34:18 +0100johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Ping timeout: 250 seconds)
2022-01-24 04:35:10 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 250 seconds)
2022-01-24 04:36:18 +0100johnw(~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0)
2022-01-24 04:38:17 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-24 04:38:20 +0100vysn(~vysn@user/vysn) (Remote host closed the connection)
2022-01-24 04:40:24 +0100cyphase(~cyphase@user/cyphase)
2022-01-24 04:46:30 +0100 <Axman6> EvanR: not with that attitude
2022-01-24 04:47:31 +0100 <Axman6> % fromIntegral (maxBound :: Word64) `divMod` (fromIntegral $ ord maxBound)
2022-01-24 04:47:31 +0100 <yahb> Axman6: (16557366432706,1037249)
2022-01-24 04:47:40 +0100Hao(~Hao@222-154-98-23-fibre.sparkbb.co.nz) (Quit: Client closed)
2022-01-24 04:48:36 +0100 <EvanR> you can fit 2 Chars in 1
2022-01-24 04:48:39 +0100 <EvanR> (at least)
2022-01-24 04:48:58 +0100log101(~log101@212.125.22.146)
2022-01-24 04:49:04 +0100 <EvanR> > 64 / 21
2022-01-24 04:49:06 +0100 <lambdabot> 3.0476190476190474
2022-01-24 04:49:17 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 240 seconds)
2022-01-24 04:51:00 +0100 <EvanR> UTF-3
2022-01-24 04:51:32 +0100cynomys(~cynomys@user/cynomys)
2022-01-24 04:53:49 +0100 <Axman6> % fromIntegral (maxBound :: Word32) `divMod` (fromIntegral $ ord maxBound) -- what I should've written
2022-01-24 04:53:50 +0100 <yahb> Axman6: (3855,69390)
2022-01-24 04:54:06 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2022-01-24 04:55:26 +0100 <EvanR> apparently a unichar needs 20.08 bits to encode, what the hell were they thinking
2022-01-24 04:55:38 +0100Hao(~Hao@222-154-98-23-fibre.sparkbb.co.nz)
2022-01-24 04:56:04 +0100 <EvanR> a random char
2022-01-24 04:57:02 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
2022-01-24 04:58:05 +0100 <energizer> https://i.imgur.com/FbUZSdN.png What is `type Internal a`? i dont see anything like that in https://en.wikibooks.org/wiki/Haskell/Classes_and_types
2022-01-24 04:58:25 +0100 <EvanR> nice font
2022-01-24 04:58:38 +0100 <EvanR> Internal a is an associated type synonym family
2022-01-24 04:58:42 +0100 <EvanR> filed under type families
2022-01-24 04:59:27 +0100 <energizer> ok
2022-01-24 05:00:17 +0100 <EvanR> sometimes they are used instead of multi-param type class + fundeps
2022-01-24 05:01:13 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4)
2022-01-24 05:01:36 +0100 <Axman6> and often nicer to work with IMO
2022-01-24 05:04:39 +0100Hao(~Hao@222-154-98-23-fibre.sparkbb.co.nz) (Quit: Client closed)
2022-01-24 05:04:46 +0100 <jackdk> can associated type families have injectivity annotations?
2022-01-24 05:05:03 +0100flukiluke(~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) (Remote host closed the connection)
2022-01-24 05:06:04 +0100flukiluke(~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962)
2022-01-24 05:07:23 +0100bravespear|2Ranhir
2022-01-24 05:13:32 +0100 <EvanR> I think the latest ghc doc implies yes, but I'd try it
2022-01-24 05:13:58 +0100 <EvanR> >For open and closed type families it is OK to name the result but skip the injectivity annotation. This is not the case for associated type synonyms, where the named result without injectivity annotation will be interpreted as associated type synonym default.
2022-01-24 05:15:07 +0100Ranhir(~Ranhir@157.97.53.139) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/)
2022-01-24 05:15:40 +0100razetime(~quassel@49.207.209.26) (Read error: No route to host)
2022-01-24 05:15:41 +0100Ranhir(~Ranhir@157.97.53.139)
2022-01-24 05:16:25 +0100RanhirRanhir|NotHere
2022-01-24 05:16:33 +0100Ranhir|NotHereRanhir
2022-01-24 05:17:07 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 05:17:17 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
2022-01-24 05:19:16 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-01-24 05:20:23 +0100 <Axman6> Anyone ever wanted ... or patterns? case boorOrBarOrBaz of (Foo{} | Bar{}) -> one thing; Baz a b -> another; binding variables would be prohibited
2022-01-24 05:20:40 +0100 <dolio> Yes, they have been wanted.
2022-01-24 05:21:09 +0100 <Axman6> More specifically, anyone who isn't me =)
2022-01-24 05:21:32 +0100 <boxscape_> Axman6 https://github.com/ghc-proposals/ghc-proposals/pull/43
2022-01-24 05:21:37 +0100log101(~log101@212.125.22.146) (Ping timeout: 240 seconds)
2022-01-24 05:21:43 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-01-24 05:22:00 +0100 <dolio> I've definitely wanted the no-variables version.
2022-01-24 05:22:13 +0100 <dolio> Some people want one with variables, but that's a little harder to make sense of.
2022-01-24 05:22:22 +0100 <boxscape_> I think java is introducing them with variables
2022-01-24 05:22:24 +0100 <boxscape_> so
2022-01-24 05:22:36 +0100 <boxscape_> you know, not good to be behind java as a language that praised itself on features that java is copying
2022-01-24 05:23:01 +0100 <boxscape_> (I guess it's only "behind" if you're in favor of the variable version)
2022-01-24 05:23:01 +0100 <energizer> does `type Internal a` have to be inside the `where` or can it be outside?
2022-01-24 05:23:14 +0100 <Axman6> inside
2022-01-24 05:23:25 +0100 <energizer> what is the difference?
2022-01-24 05:23:35 +0100 <Axman6> but it can be defined as a type defined elsewhere
2022-01-24 05:24:25 +0100 <dibblego> is _Foo || is _Bar
2022-01-24 05:24:46 +0100 <Axman6> every instance of Syntactic must have an associated instance of Internal, and only instances can have definitions for Internal
2022-01-24 05:24:48 +0100 <boxscape_> Axman6 Anyway, I think variables are actually pretty straightforward if you just require that every pattern binds the same variables, with the same type
2022-01-24 05:25:21 +0100 <Axman6> yeah - the example binging the same name twoce to call show on makes me unhappy
2022-01-24 05:25:29 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection)
2022-01-24 05:25:54 +0100 <boxscape_> at different types? Yeah that could be confusing
2022-01-24 05:27:07 +0100 <Axman6> "233 hidden items" - well, that proposal must have been exciting!
2022-01-24 05:28:13 +0100 <boxscape_> ...I wish github had a "load all comments" feature
2022-01-24 05:28:20 +0100 <EvanR> energizer, type families can be defined on their own. But yours is in a class, so it's associated with a class and intended to map every type that's an instance to some type (and not be left undefined)
2022-01-24 05:29:08 +0100 <EvanR> moving it out makes it a regular type family with nothing to do with that class
2022-01-24 05:29:42 +0100vicfred_(~vicfred@user/vicfred) (Quit: Leaving)
2022-01-24 05:35:24 +0100euandreh(~euandreh@2804:14c:33:9fe5:c17:d8ca:f795:73f0) (Ping timeout: 250 seconds)
2022-01-24 05:35:27 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 05:35:32 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection)
2022-01-24 05:36:04 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 05:38:14 +0100Hao(~Hao@222-154-98-23-fibre.sparkbb.co.nz)
2022-01-24 05:40:17 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Ping timeout: 240 seconds)
2022-01-24 05:41:10 +0100log101(~log101@212.125.22.146)
2022-01-24 05:44:04 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 250 seconds)
2022-01-24 05:46:37 +0100mbuf(~Shakthi@171.61.206.147)
2022-01-24 05:48:41 +0100Hao(~Hao@222-154-98-23-fibre.sparkbb.co.nz) (Quit: Client closed)
2022-01-24 05:50:57 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2022-01-24 06:00:26 +0100deadmarshal(~deadmarsh@95.38.118.201)
2022-01-24 06:04:32 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4)
2022-01-24 06:06:04 +0100lavaman(~lavaman@98.38.249.169)
2022-01-24 06:06:37 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 06:07:15 +0100log101(~log101@212.125.22.146) (Ping timeout: 256 seconds)
2022-01-24 06:11:17 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 240 seconds)
2022-01-24 06:11:38 +0100zebrag(~chris@user/zebrag) (Remote host closed the connection)
2022-01-24 06:17:38 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-01-24 06:18:18 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 250 seconds)
2022-01-24 06:18:36 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2022-01-24 06:24:08 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
2022-01-24 06:30:08 +0100rusrushal13(~rusrushal@2401:4900:43a3:616e:36cb:f750:4e6b:4367)
2022-01-24 06:35:07 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 06:37:12 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2022-01-24 06:38:29 +0100cynomys(~cynomys@user/cynomys)
2022-01-24 06:40:36 +0100log101(~log101@88.255.77.33)
2022-01-24 06:42:11 +0100rusrushal13(~rusrushal@2401:4900:43a3:616e:36cb:f750:4e6b:4367) (Ping timeout: 256 seconds)
2022-01-24 06:56:02 +0100WingTillDie(~quassel@2001-b400-e2db-1da8-f9e5-e949-9fe0-1fb9.emome-ip6.hinet.net) (Ping timeout: 240 seconds)
2022-01-24 06:58:55 +0100rusrushal13(~rusrushal@2409:4056:15:9212:92a3:69cd:5ace:e40a)
2022-01-24 06:59:41 +0100leibniz(~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net)
2022-01-24 07:00:29 +0100 <leibniz> hi, i was wondering if anyone had any ideas about the idea about the monadic traversal?
2022-01-24 07:01:27 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
2022-01-24 07:02:56 +0100deadmarshal(~deadmarsh@95.38.118.201) (Ping timeout: 250 seconds)
2022-01-24 07:03:57 +0100 <leibniz> specifically, about the choice between 1. considering all applicatives, as per the usual traverse function, or 2. restricting to StateL to give the "scanner" class encapsulating the functionality of mapAccumL
2022-01-24 07:05:13 +0100 <leibniz> im not sure if offering that functionality (via the specification of the applicative) is "overly" restrictive, or actually beneficial
2022-01-24 07:06:03 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-01-24 07:06:53 +0100 <leibniz> iv never seen it done usefully with any other applicative, in terms of preserving lazyness, so the travsersals compose as if there were a "per element" rewrite, kind of factoring through the pattern matching on the constructor
2022-01-24 07:07:52 +0100 <leibniz> im not even sure if it works for anything other than StateL, since i dont really understand why the lazyness works in that case, other than it just not being StateR, which certainly wouldnt work for an infinite stream, or a blocking monadic tail call
2022-01-24 07:07:56 +0100 <leibniz> ...
2022-01-24 07:08:57 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-24 07:10:39 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 07:14:57 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-01-24 07:16:02 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 240 seconds)
2022-01-24 07:24:37 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 240 seconds)
2022-01-24 07:27:44 +0100leibniz(~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed)
2022-01-24 07:28:17 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 256 seconds)
2022-01-24 07:28:19 +0100Constraintegic(~thomasbul@2001:a61:130d:ed01:d880:8422:69cf:e05c)
2022-01-24 07:31:05 +0100deadmarshal(~deadmarsh@95.38.118.201)
2022-01-24 07:32:37 +0100cynomys(~cynomys@user/cynomys)
2022-01-24 07:32:50 +0100Constraintegic(~thomasbul@2001:a61:130d:ed01:d880:8422:69cf:e05c) (Ping timeout: 250 seconds)
2022-01-24 07:33:02 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-01-24 07:33:15 +0100califax(~califax@user/califx)
2022-01-24 07:36:47 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 07:40:02 +0100 <SrPx> what is the right way to install GHC on a new OSX Monteray Macbook? is `brew install ghc` still a terrible idea?
2022-01-24 07:40:18 +0100ekai(~xusr@bl18-111-231.dsl.telepac.pt)
2022-01-24 07:40:45 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4)
2022-01-24 07:42:56 +0100zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-01-24 07:43:26 +0100 <dsal> I use nix.
2022-01-24 07:43:33 +0100 <dsal> I've not used homebrew in a year or two. :)
2022-01-24 07:43:57 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
2022-01-24 07:44:46 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 07:44:46 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 07:44:46 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 07:45:33 +0100 <boxscape_> ghcup is supposed to be the universal installer, but I don't know if there are any issues on Monteray
2022-01-24 07:48:19 +0100 <dsal> I've not successfully used it for M1, but I think it's otherwise OK.
2022-01-24 07:48:53 +0100boxscape_(~boxscape_@p4ff0b9d5.dip0.t-ipconnect.de) (Quit: Connection closed)
2022-01-24 07:49:37 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 07:50:37 +0100chomwitt(~chomwitt@2a02:587:dc06:be00:12c3:7bff:fe6d:d374)
2022-01-24 07:52:53 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-01-24 07:54:34 +0100zaquest(~notzaques@5.130.79.72)
2022-01-24 07:57:34 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-24 07:59:36 +0100_ht(~quassel@2a02:a468:b619:1:b7fa:be1e:6eb0:5ee1)
2022-01-24 08:06:27 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-01-24 08:06:42 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Client Quit)
2022-01-24 08:06:44 +0100michalz(~michalz@185.246.204.58)
2022-01-24 08:07:30 +0100SummerSonw(~The_viole@203.77.49.232) (Ping timeout: 250 seconds)
2022-01-24 08:13:04 +0100ardell(~ardell@user/ardell)
2022-01-24 08:13:30 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-24 08:14:52 +0100cheater(~Username@user/cheater) (Ping timeout: 250 seconds)
2022-01-24 08:15:25 +0100cheater(~Username@user/cheater)
2022-01-24 08:17:23 +0100rusrushal13(~rusrushal@2409:4056:15:9212:92a3:69cd:5ace:e40a) (Ping timeout: 256 seconds)
2022-01-24 08:17:42 +0100lavaman(~lavaman@98.38.249.169)
2022-01-24 08:34:27 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2022-01-24 08:37:45 +0100prasad(~user@c-73-170-49-136.hsd1.ca.comcast.net)
2022-01-24 08:38:17 +0100yaroot(~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953) (Ping timeout: 240 seconds)
2022-01-24 08:39:09 +0100yaroot(~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953)
2022-01-24 08:45:35 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2022-01-24 08:47:01 +0100 <SrPx> ty
2022-01-24 08:52:38 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-24 08:55:05 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Client Quit)
2022-01-24 08:55:37 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-24 08:56:29 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-01-24 08:57:41 +0100prasad(~user@c-73-170-49-136.hsd1.ca.comcast.net) (Remote host closed the connection)
2022-01-24 08:58:15 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:25bb:89ab:830f:7e39)
2022-01-24 09:01:44 +0100gehmehgeh(~user@user/gehmehgeh)
2022-01-24 09:01:45 +0100Constraintegic(~thomasbul@2001:a61:130d:ed01:8875:784f:ca4f:d8a2)
2022-01-24 09:03:38 +0100 <hololeap> should there be a wiki for running ghc on mac somewhere? I see a lot of questions on that
2022-01-24 09:03:49 +0100alp(~alp@user/alp)
2022-01-24 09:04:22 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 09:04:24 +0100chele(~chele@user/chele)
2022-01-24 09:06:02 +0100Constraintegic(~thomasbul@2001:a61:130d:ed01:8875:784f:ca4f:d8a2) (Ping timeout: 240 seconds)
2022-01-24 09:09:58 +0100akegalj(~akegalj@89-172-25-196.adsl.net.t-com.hr)
2022-01-24 09:10:21 +0100akegalj(~akegalj@89-172-25-196.adsl.net.t-com.hr) (Client Quit)
2022-01-24 09:10:41 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 09:11:14 +0100Sgeo(~Sgeo@ool-18b9875e.dyn.optonline.net) (Read error: Connection reset by peer)
2022-01-24 09:11:59 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-01-24 09:12:56 +0100ekai(~xusr@bl18-111-231.dsl.telepac.pt) (Ping timeout: 250 seconds)
2022-01-24 09:14:12 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2022-01-24 09:16:56 +0100kuribas(~user@ptr-25vy0i9v7xwr83cod1i.18120a2.ip6.access.telenet.be)
2022-01-24 09:22:50 +0100jacoo(~jacoo@121.131.39.82)
2022-01-24 09:23:03 +0100jacoolionhairdino
2022-01-24 09:28:01 +0100m4lvin(~m4lvin@w4eg.de) (Quit: m4lvin)
2022-01-24 09:28:25 +0100m4lvin(~m4lvin@w4eg.de)
2022-01-24 09:36:11 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2022-01-24 09:39:32 +0100 <lionhairdino> Haskell betrayed me. I thought there was no pointer, no memory leak. but now I met space leak.
2022-01-24 09:40:07 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-24 09:40:17 +0100 <lionhairdino> eventlog2html show too short label. so I can't find exact point
2022-01-24 09:43:18 +0100max22-(~maxime@2a01cb0883359800a4d68ab29ac6e773.ipv6.abo.wanadoo.fr)
2022-01-24 09:43:27 +0100log101(~log101@88.255.77.33) (Remote host closed the connection)
2022-01-24 09:43:44 +0100log101(~log101@88.255.77.33)
2022-01-24 09:49:21 +0100log101(~log101@88.255.77.33) (Remote host closed the connection)
2022-01-24 09:49:38 +0100log101(~log101@88.255.77.33)
2022-01-24 09:50:30 +0100machinedgod(~machinedg@24.105.81.50)
2022-01-24 09:51:15 +0100DNH(~DNH@2a02:8108:1100:16d8:d0b2:5a76:adf7:9a5a)
2022-01-24 09:53:09 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-24 09:54:17 +0100log101(~log101@88.255.77.33) (Ping timeout: 256 seconds)
2022-01-24 09:55:13 +0100 <polyphem> lionhairdino: enable profiling , and look at the .prof file , it has a column on memory usage per costcenter, look for the highest numbers to get a cle where to look for your mem leak
2022-01-24 09:55:36 +0100 <polyphem> *clue
2022-01-24 09:58:49 +0100 <lionhairdino> thanks for replying. I already did. but If leaking slowly, It's not helpful.
2022-01-24 10:00:27 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 10:00:50 +0100fef(~thedawn@user/thedawn)
2022-01-24 10:01:19 +0100neurocyte0917090(~neurocyte@45.93.108.138)
2022-01-24 10:01:19 +0100neurocyte0917090(~neurocyte@45.93.108.138) (Changing host)
2022-01-24 10:01:19 +0100neurocyte0917090(~neurocyte@user/neurocyte)
2022-01-24 10:04:56 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-01-24 10:05:21 +0100 <lionhairdino> If I even find suspect at linechart tab, too short label is not helpful.
2022-01-24 10:05:50 +0100 <polyphem> lionhairdino: you could sprinkle BangPatters around "candidates" or use {-# LANGUAGE Strict #-} and {-# LANGUAHE StrictData #-} on suspect modules and see if it changes somthing to narrow down the spot
2022-01-24 10:07:04 +0100zincy(~zincy@host86-151-99-97.range86-151.btcentralplus.com)
2022-01-24 10:07:14 +0100DNH(~DNH@2a02:8108:1100:16d8:d0b2:5a76:adf7:9a5a) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-24 10:08:30 +0100DNH(~DNH@2a02:8108:1100:16d8:d0b2:5a76:adf7:9a5a)
2022-01-24 10:08:50 +0100 <lionhairdino> thanks, I haven't use StrictData yet. good idea!. and...is there option to add detail to the label of eventlog2html?
2022-01-24 10:09:35 +0100 <polyphem> about eventlog i dont' know , sorry
2022-01-24 10:11:37 +0100 <lionhairdino> You are my first contact in this channel. nice to meet you.
2022-01-24 10:12:33 +0100 <polyphem> its quite right now, usually there are more experienced people around that will give good advice :)
2022-01-24 10:13:38 +0100 <oak-> By the way, is the Strict language extension still experimental, or could it be considered usable for production code?
2022-01-24 10:13:45 +0100 <polyphem> i havent used eventlog2html , but maybe if you open web-console in browser and tinker with fontsizes of labels or so , you'd get more information ?
2022-01-24 10:14:16 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds)
2022-01-24 10:16:30 +0100 <lionhairdino> It's plausible? idea, but raw eventlog has short label too.
2022-01-24 10:16:58 +0100 <lortabac> oak-: it's not experimental, all it does is adding bang patterns to all the arguments in the module
2022-01-24 10:17:09 +0100 <merijn> oak-: Define "usable"
2022-01-24 10:17:09 +0100 <lionhairdino> eventlog2html is tool to convert raw eventlog to html
2022-01-24 10:17:15 +0100 <polyphem> oak-: ghc docs say they exist since ghc 8.0.1 , i dont see any statement that they are experimental , https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/strict.html
2022-01-24 10:17:44 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2022-01-24 10:17:44 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2022-01-24 10:17:47 +0100allbery_bgeekosaur
2022-01-24 10:17:54 +0100 <merijn> lionhairdino: Have you looked at speedscope yet?
2022-01-24 10:17:56 +0100 <merijn> lionhairdino: https://mpickering.github.io/posts/2019-11-07-hs-speedscope.html
2022-01-24 10:18:23 +0100 <lortabac> if you find yourself adding too many bang patterns, enabling Strict can save you some typing
2022-01-24 10:18:37 +0100ensyde(~ensyde@2600:1700:2050:1040:bdf9:ef99:b73e:7a0a) (Ping timeout: 240 seconds)
2022-01-24 10:18:45 +0100razetime(~quassel@49.207.209.26)
2022-01-24 10:19:17 +0100 <oak-> https://gitlab.haskell.org/ghc/ghc/-/wikis/language-strict This says "It's an experimental extension". But the page has been last modified 2 years ago, this is why I asked is it still experimental :)
2022-01-24 10:19:19 +0100 <merijn> tbh, most people treat Strict/StrictData as "I no longer have to think about strictness". Which at even the most casual consideration is wrong, since strict is wrong about as often (if not more so) than lazy.
2022-01-24 10:19:20 +0100 <lionhairdino> yes. I Have looked. but I can't get detail position. thanks to merijn
2022-01-24 10:20:00 +0100 <merijn> You still have to think *exactly* as much about strictness with Strict and StrictData as you do otherwise, all you've done is flipped the defaults
2022-01-24 10:20:27 +0100 <merijn> Which, honestly, might be harder, since I find it much easier to predict what I *definitely* want strict then what I definitely want lazy
2022-01-24 10:21:31 +0100 <maerwald[m]> Strict is a saner default for many applications
2022-01-24 10:22:19 +0100 <kuribas> I think lazyness is overrated.
2022-01-24 10:22:43 +0100 <polyphem> but the original problem that lionhairdino has was he couldnt use the output of eventlog2html , because the label are truncated , this is a bug , isn't it ?
2022-01-24 10:22:45 +0100 <kuribas> Some kind of optional lazyness is nice though.
2022-01-24 10:23:00 +0100 <kuribas> like infinite streams instead of infinite lists.
2022-01-24 10:23:34 +0100 <lionhairdino> I thought that if I crossed the Monad Mountain, the road would open up. but space leaks are nasty.
2022-01-24 10:24:04 +0100 <lionhairdino> polyphem understand me exactly.!
2022-01-24 10:24:21 +0100 <maerwald[m]> https://github.com/yesodweb/wai/pull/752#issuecomment-501531386
2022-01-24 10:24:23 +0100 <merijn> lionhairdino: tbh, I've never used the eventlog stuff too much, I usually generate graphs of heap usage
2022-01-24 10:25:46 +0100 <maerwald[m]> "For experience of 10-years network programming in Haskell, I don't see any benefits of lazy evaluation except..."
2022-01-24 10:26:57 +0100 <lionhairdino> I could find what module has leaks using tool like heap prof, eventlog.. but I couldn't find detail location.
2022-01-24 10:27:48 +0100 <lionhairdino> So now, I will try to use cachegrind, can it be a solution?
2022-01-24 10:29:36 +0100 <lortabac> lionhairdino: I know some people here don't agree, but IMHO enabling StrictData is a good default for many applications
2022-01-24 10:30:10 +0100 <lionhairdino> oh, I respect maerwald. 10 years network programming in "Haskell"
2022-01-24 10:30:34 +0100 <lortabac> if your data types are strict and you avoid tuples, I'm pretty sure you will never have leaks
2022-01-24 10:30:53 +0100 <merijn> lortabac: Thats's just replacing one form of "not thinking about strictness" with another form of "not thinking about strictness". IMO any form of "trying to avoid thinking about strictness" is doomed to failure
2022-01-24 10:30:57 +0100 <polyphem> lortabac: i only suggested strictness annotations to help lionhairdino narrow down the spot where his code leaks , cause eventlog2html isnt usefull in his case
2022-01-24 10:31:01 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5d8e:db89:f241:b6e3) (Remote host closed the connection)
2022-01-24 10:31:05 +0100 <lionhairdino> lortabac: thanks for the advice
2022-01-24 10:31:19 +0100 <merijn> lionhairdino: Do you have any of the heap profiling plots?
2022-01-24 10:31:33 +0100 <merijn> (and is the code in question public somewhere?)
2022-01-24 10:31:38 +0100Constraintegic(~thomasbul@2001:a61:130d:ed01:3ec8:65f2:fd2c:9b7e)
2022-01-24 10:31:50 +0100 <lortabac> merijn: it depends on the context, in an industrial setting you don't want to spend time chasing hard-to-spot bugs
2022-01-24 10:32:31 +0100 <lortabac> I'd rather sacrifice some performance than precious developer time
2022-01-24 10:33:23 +0100 <lionhairdino> No, I don't open yet. plz wait some minutes. I will upload
2022-01-24 10:33:30 +0100 <lionhairdino> eventlog
2022-01-24 10:35:31 +0100 <lortabac> in my toy projects I have the time and freedom to think about laziness carefully, I don't need the StrictData sledgehammer
2022-01-24 10:38:24 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-01-24 10:38:27 +0100 <lionhairdino> http://yearit.com/eventlog.png
2022-01-24 10:38:57 +0100 <lionhairdino> I uploaded eventlog2html screen capture
2022-01-24 10:40:01 +0100Jing(~hedgehog@240e:390:7c53:a7e1:9c57:17b6:65b6:b182) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-24 10:40:45 +0100 <lionhairdino> original html page is 200MB, It't could be too large.. http://yearit.com/eventlog.html
2022-01-24 10:41:03 +0100fendor(~fendor@91.141.65.21.wireless.dyn.drei.com)
2022-01-24 10:42:04 +0100 <merijn> lionhairdino: What does the heap view look like?
2022-01-24 10:42:12 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 250 seconds)
2022-01-24 10:42:19 +0100DNH(~DNH@2a02:8108:1100:16d8:d0b2:5a76:adf7:9a5a) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-24 10:42:19 +0100 <lionhairdino> I have seen many articles about eventlog2html, but nobody say about finding detail source location.
2022-01-24 10:43:44 +0100 <merijn> lionhairdino: The crucial first thing would be: "*what* are you leaking?" not where, but that's hard to see with the linechart view
2022-01-24 10:45:45 +0100 <lionhairdino> from some moment, it doesn't export heap tab. i don't know..
2022-01-24 10:46:29 +0100 <merijn> lionhairdino: https://ro-che.info/articles/2020-05-14-visualize-haskell-heap-profiles
2022-01-24 10:46:57 +0100 <lionhairdino> yellow line, pap. it grows slowly
2022-01-24 10:48:14 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4)
2022-01-24 10:49:35 +0100polyphem_(~rod@2a02:810d:840:8754:a778:fc55:137:3e0)
2022-01-24 10:49:44 +0100 <lionhairdino> thanks for advice. hp2ps can be helpful leak large, but leaks slowly..
2022-01-24 10:51:18 +0100polyphem(~rod@2a02:810d:840:8754:f8cc:a01b:29d5:d0e1) (Ping timeout: 250 seconds)
2022-01-24 10:52:03 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 10:52:03 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 10:52:03 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 10:52:59 +0100 <lionhairdino> why would people wonder that eventlog doesn't show detail position...
2022-01-24 10:53:01 +0100shriekingnoise(~shrieking@201.231.16.156) (Quit: Quit)
2022-01-24 10:53:02 +0100zincy(~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection)
2022-01-24 10:54:13 +0100 <lionhairdino> merijn: If you can see detailed
2022-01-24 10:54:20 +0100 <lionhairdino> "detailed tab"
2022-01-24 10:54:29 +0100 <lionhairdino> in http://yearit.com/eventlog.html
2022-01-24 10:54:38 +0100 <maerwald> lortabac: StrictData is a sane default, yes. I think it's rather uncontroversial in industry settings.
2022-01-24 10:54:45 +0100 <merijn> tbh, I've never really used the eventlog/eventlog2html
2022-01-24 10:54:57 +0100 <merijn> I can check if the full log loads
2022-01-24 10:55:07 +0100 <lionhairdino> you can align using slope
2022-01-24 10:55:16 +0100 <maerwald> especially since not all your laziness problems are actually space leak issues... they can also be allocation issues in hot loops due to unnecessary laziness in data types
2022-01-24 10:55:37 +0100 <maerwald> so even forcing at the call site as merijn frequently suggests doesn't fix it
2022-01-24 10:55:51 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2022-01-24 10:55:56 +0100 <maerwald> you have to force earlier
2022-01-24 10:56:34 +0100MajorBiscuit(~MajorBisc@c-001-025-008.client.tudelft.eduvpn.nl)
2022-01-24 10:56:49 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 10:57:09 +0100 <lionhairdino> a gentle slope say that there is little memory or space leaks..
2022-01-24 10:57:40 +0100 <merijn> lionhairdino: What's the max residency?
2022-01-24 10:58:04 +0100 <lionhairdino> label says about position in intermediate language core,
2022-01-24 10:58:06 +0100Jing(~hedgehog@240e:390:7c53:a7e1:41f6:c43f:4ee1:b9fb)
2022-01-24 10:58:18 +0100 <maerwald> and finding these very short temporary thunk buildups in hot loops is impossible to manually reason about and also pretty hard to debug
2022-01-24 10:58:33 +0100 <lionhairdino> about 85MB..
2022-01-24 10:58:50 +0100 <merijn> 85MB max residency hardly seems worth worrying about?
2022-01-24 10:58:59 +0100 <merijn> Unless you have some reason to believe it should be much less?
2022-01-24 11:00:03 +0100 <merijn> I'm not sure what the code is doing, so it's hard to say if 85MB is the right ballpark
2022-01-24 11:00:06 +0100 <lionhairdino> but it up slowly..
2022-01-24 11:01:19 +0100 <lionhairdino> I am making torrent client and tracker for prototype of some project.
2022-01-24 11:02:53 +0100 <lionhairdino> Server app should not have 0.1kB leak..
2022-01-24 11:03:54 +0100mmhat(~mmh@55d400c1.access.ecotel.net)
2022-01-24 11:04:27 +0100 <merijn> I'm not completely convinced there is a leak in these graphs, tbh
2022-01-24 11:04:41 +0100cfricke(~cfricke@user/cfricke)
2022-01-24 11:05:08 +0100 <merijn> (also not convinced there isn't one)
2022-01-24 11:05:10 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 250 seconds)
2022-01-24 11:05:46 +0100 <lionhairdino> merijn: thanks very much! now I will try to use "haskell code spot" and cachegrind, have you used it?
2022-01-24 11:08:55 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-24 11:09:10 +0100Constraintegic(~thomasbul@2001:a61:130d:ed01:3ec8:65f2:fd2c:9b7e) (Quit: Leaving)
2022-01-24 11:12:06 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-24 11:15:29 +0100razetime(~quassel@49.207.209.26) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-01-24 11:17:40 +0100 <maerwald> lionhairdino: did you try speedscope?
2022-01-24 11:18:37 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 240 seconds)
2022-01-24 11:20:33 +0100 <lionhairdino> merijn: https://github.com/well-typed/memory-usage-zurihac-2021 do you know hi new profiling?
2022-01-24 11:21:20 +0100 <lionhairdino> maerwald: yes, thank for advice!
2022-01-24 11:21:39 +0100 <maerwald> https://mpickering.github.io/posts/2019-11-07-hs-speedscope.html
2022-01-24 11:21:55 +0100 <lionhairdino> merijn: https://github.com/well-typed/memory-usage-zurihac-2021/raw/master/assets/eventlog2html-detailed-i… this image has detail location!
2022-01-24 11:22:51 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 11:22:51 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 11:22:51 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 11:24:13 +0100 <lionhairdino> maerwald: thanks for good paper.
2022-01-24 11:24:17 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2022-01-24 11:27:47 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 11:29:52 +0100vglfr(~vglfr@46.96.147.122) (Ping timeout: 250 seconds)
2022-01-24 11:29:57 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2022-01-24 11:31:25 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d)
2022-01-24 11:35:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d) (Ping timeout: 240 seconds)
2022-01-24 11:42:17 +0100__monty__(~toonn@user/toonn)
2022-01-24 11:45:39 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-24 11:46:02 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
2022-01-24 11:48:01 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-01-24 11:50:59 +0100vglfr(~vglfr@46.96.147.122)
2022-01-24 11:53:38 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 11:53:38 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 11:53:38 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 11:57:13 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-24 11:58:35 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 12:01:08 +0100alx741(~alx741@157.100.93.160)
2022-01-24 12:02:43 +0100fef(~thedawn@user/thedawn) (Quit: Leaving)
2022-01-24 12:02:53 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-24 12:03:06 +0100hololeap(~hololeap@user/hololeap) (Ping timeout: 276 seconds)
2022-01-24 12:10:00 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 12:14:17 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-01-24 12:20:16 +0100 <lionhairdino> polyphem, merijn, maerwald, lortabac thanks for advice! my original question is "why would not haskeller wonder that why eventlog has too short label". too short label doesn't help...
2022-01-24 12:21:03 +0100 <lionhairdino> but no article says about short label.
2022-01-24 12:21:37 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-01-24 12:23:32 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-24 12:24:25 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 12:24:25 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 12:24:25 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 12:26:25 +0100 <polyphem_> lionhairdino: you could still ask in #ghc why eventlog only generates "short labels"
2022-01-24 12:26:43 +0100akegalj(~akegalj@89-172-25-196.adsl.net.t-com.hr)
2022-01-24 12:28:27 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-01-24 12:29:04 +0100 <kitzman> is there a concatMap for all traversables?
2022-01-24 12:29:11 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 12:29:36 +0100 <kitzman> I was thinking to do a ((Int -> Maybe Int) `concatMap` [Int] ) :: [Int]
2022-01-24 12:29:48 +0100 <kitzman> i don't know if it's possible/makes sense
2022-01-24 12:32:11 +0100 <jackdk> :t concatMap
2022-01-24 12:32:12 +0100 <lambdabot> Foldable t => (a -> [b]) -> t a -> [b]
2022-01-24 12:32:34 +0100 <jackdk> :t (=<<)
2022-01-24 12:32:35 +0100 <lambdabot> Monad m => (a -> m b) -> m a -> m b
2022-01-24 12:32:50 +0100 <jackdk> kinda?
2022-01-24 12:33:53 +0100bjobjo(~bjobjo@user/bjobjo) (Quit: Lost terminal)
2022-01-24 12:34:24 +0100 <lionhairdino> polyphem: ;-) my question is "why would not haskeller wonder that"
2022-01-24 12:37:31 +0100 <lionhairdino> I thought that I am not the only one who wonder "short label"! . but many articles doesn't says that. it's very strange thing.
2022-01-24 12:37:37 +0100DNH(~DNH@2a02:8108:1100:16d8:d0b2:5a76:adf7:9a5a)
2022-01-24 12:38:13 +0100jackson99(~bc8147f2@cerf.good1.com)
2022-01-24 12:39:27 +0100 <kitzman> jackdk: hm, I was thinking something like, Foldable t, Foldable r => (a -> t b) -> r b -> r b . But either way, I can always just fold or match the Maybe
2022-01-24 12:39:55 +0100 <lionhairdino> I thought that profiling tool saying about source's location is important.
2022-01-24 12:41:32 +0100 <kitzman> ( i meant -> r a -> r b not -> r b -> r b , sorry )
2022-01-24 12:42:47 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-24 12:43:53 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 12:44:00 +0100leibniz(~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net)
2022-01-24 12:44:45 +0100 <leibniz> hi, i was wondering if anyone could help me with an example of a "monadic traversal" other than with StateL as the applicative, which is still lazy
2022-01-24 12:44:50 +0100 <leibniz> ?
2022-01-24 12:45:46 +0100 <leibniz> it has something to do with the applicatives sequencing in a way that is lazy, which i dont understand
2022-01-24 12:46:24 +0100 <leibniz> the only other example i have so far, is with StateR as the applicative, which is no lazy
2022-01-24 12:46:33 +0100 <leibniz> not lazy*
2022-01-24 12:47:11 +0100 <leibniz> could anyone suggest a different Applicative, and how it works in terms of lazy monadic traversals?
2022-01-24 12:47:48 +0100 <leibniz> or help me understand this idea more generally?
2022-01-24 12:49:18 +0100 <leibniz> kitzman: it looks like what your doing is almost like using the fold to implement bind
2022-01-24 12:50:30 +0100 <leibniz> not sure if there is a bind implementation for all traversals. certainly for a subset of them there is
2022-01-24 12:50:40 +0100 <leibniz> eg. listlike things
2022-01-24 12:51:31 +0100 <leibniz> basically your using (++) right?
2022-01-24 12:51:47 +0100 <leibniz> i guess for monoids more generally
2022-01-24 12:52:06 +0100 <leibniz> so yeah, for traversable monoids there is a bind implementation
2022-01-24 12:52:56 +0100 <leibniz> and you can get the monoid for listlike things with (++) usually implemented by folding with the constructor with the second list as the basecase of the fold
2022-01-24 12:53:45 +0100 <leibniz> i guess you can even relax traversable to foldable and say something like "foldable monoids are monads"
2022-01-24 12:54:18 +0100 <leibniz> though you might get mixed up with the return implementation
2022-01-24 12:54:31 +0100 <leibniz> certainly they have concatMap though
2022-01-24 12:54:58 +0100 <leibniz> the abstraction is usually thought of in terms of lenses
2022-01-24 12:55:10 +0100 <leibniz> somehow encoding pattern matching on the constructor
2022-01-24 12:55:12 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 12:55:12 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 12:55:12 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 12:55:47 +0100 <leibniz> this can even be generalised slightly to work for trees that require an (Int,Int) structure directing index as an extra argument to the constructor
2022-01-24 13:00:21 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 13:01:00 +0100 <leibniz> sorry, i slightly obscured my question by answering another
2022-01-24 13:01:36 +0100 <leibniz> could anyone give an example of a "monadic traversal" other than with StateL as the applicative which is still lazy
2022-01-24 13:01:41 +0100 <leibniz> ?
2022-01-24 13:11:12 +0100jgeerds(~jgeerds@55d4a547.access.ecotel.net)
2022-01-24 13:13:12 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-24 13:13:15 +0100jackson99(~bc8147f2@cerf.good1.com) (Quit: CGI:IRC)
2022-01-24 13:16:32 +0100 <[exa]> leibniz: well you can try a strict State right?
2022-01-24 13:17:10 +0100 <[exa]> I get it that you are searching for some examples of using `traverse` in a way that differs significantly from what can be achieved with lazy State ?
2022-01-24 13:18:12 +0100Jing(~hedgehog@240e:390:7c53:a7e1:41f6:c43f:4ee1:b9fb) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-24 13:22:45 +0100 <dminuoso> Is there a kind of concatMap for map that I'm not seeing? Map k a -> (k -> a -> Map k a) -> Map k a
2022-01-24 13:23:46 +0100 <dminuoso> Background is I want to do `Map (A, B) V -> Map A (B, V)` elegantly
2022-01-24 13:24:09 +0100 <dminuoso> Or should I just roundtrip through list and use concatMap there?
2022-01-24 13:26:04 +0100 <dminuoso> Mmm, given that information it wouldnt work actually.
2022-01-24 13:26:28 +0100 <[exa]> you might get key collisions on shrinking (A,B) to A right?
2022-01-24 13:27:28 +0100 <dminuoso> Yeah, come to think of it I want rather something like:
2022-01-24 13:27:33 +0100ardell(~ardell@user/ardell) (Quit: Konversation terminated!)
2022-01-24 13:27:41 +0100 <[exa]> anyway even in that case you may get the stuff sorted by (A,B), which should allow you to construct the stuff from sorted (and nubbed) list in O(n)
2022-01-24 13:27:51 +0100 <tomsmeding> \m f -> Map.unionsWith yourCombinationFunction (map (uncurry f) (Map.toList m))
2022-01-24 13:27:57 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-24 13:28:08 +0100 <tomsmeding> probably can't get that much better asymptotically
2022-01-24 13:28:12 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 13:28:12 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 13:28:12 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 13:28:22 +0100 <tomsmeding> unless the keys in the produced maps are very related to the input keys somehow
2022-01-24 13:28:38 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 13:28:49 +0100 <tomsmeding> s/toList/assocs/ probably
2022-01-24 13:28:53 +0100 <dminuoso> Ah yes, I think this has expressivity that I was looking for.
2022-01-24 13:28:55 +0100 <dminuoso> Thanks tomsmeding.
2022-01-24 13:31:40 +0100 <dminuoso> unionsWith is neat :)
2022-01-24 13:32:38 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-24 13:32:52 +0100lavaman(~lavaman@98.38.249.169)
2022-01-24 13:33:01 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 13:33:37 +0100jackson99(~bc8147f2@cerf.good1.com)
2022-01-24 13:34:38 +0100fef(~thedawn@user/thedawn)
2022-01-24 13:35:06 +0100leibniz(~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed)
2022-01-24 13:39:20 +0100slack1256(~slack1256@191.126.99.84)
2022-01-24 13:39:57 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds)
2022-01-24 13:41:47 +0100 <Gurkenglas> note that the f should come before the m in the argument order
2022-01-24 13:45:01 +0100 <Gurkenglas> to first order, because then you can say \f -> M.unionsWith foo . map (uncurry f) . M.toList
2022-01-24 13:45:10 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-24 13:45:37 +0100 <Gurkenglas> which can by the way be written as \f -> M.unionsWith foo . M.mapWithKey f
2022-01-24 13:46:28 +0100 <dminuoso> Oh that looks very nice indeed
2022-01-24 13:46:52 +0100 <Gurkenglas> tfw M.fromListWith only takes lists rather than any Foldable
2022-01-24 13:47:06 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds)
2022-01-24 13:47:23 +0100 <dminuoso> Though Im pondering whether I can actually get away with losing information, enabling me to write: shrinkWith f s = foldr go m.empty . map (first s) . m.tolist where go (k, v) = m.insertWith f k v
2022-01-24 13:47:40 +0100 <dminuoso> That would avoid intermediate maps
2022-01-24 13:47:41 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-24 13:47:42 +0100Guest|65(~Guest|65@203.192.207.134)
2022-01-24 13:47:50 +0100Guest|65(~Guest|65@203.192.207.134) (Client Quit)
2022-01-24 13:47:57 +0100 <dminuoso> (Not entirely sure whether that would make a difference, Id have to inspect unionsWith)
2022-01-24 13:48:09 +0100 <Gurkenglas> else it could have been "\f -> M.fromListWith foo . M.mapWithKey djinn", where djinn can be automatically derived using @djinn, which is beautiful
2022-01-24 13:48:44 +0100 <Gurkenglas> @djinn (a,b) -> c -> (a, (b,c))
2022-01-24 13:48:44 +0100 <lambdabot> f (a, b) c = (a, (b, c))
2022-01-24 13:49:47 +0100 <dminuoso> Gurkenglas: why is it monomorphized to lists though?
2022-01-24 13:50:30 +0100 <Gurkenglas> dminuoso, I'd *guess* because someone felt it'd be confusing to newbies if the name, which they feel should stay the same, implied a monomorphicity that isn't there
2022-01-24 13:50:39 +0100 <dminuoso> Fair
2022-01-24 13:50:57 +0100 <Gurkenglas> :(
2022-01-24 13:51:35 +0100 <Gurkenglas> at least make a new definition that doesn't have the name issue, then!
2022-01-24 13:52:17 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 240 seconds)
2022-01-24 13:52:18 +0100 <dminuoso> This is a fundamental problem really. I wish we had uniform automatic monomorphization support in both GHC and haddock.
2022-01-24 13:52:42 +0100 <Gurkenglas> Aka, let newbies work with simplified types until they're ready?
2022-01-24 13:52:46 +0100 <dminuoso> Yes.
2022-01-24 13:53:10 +0100 <dminuoso> Endless bikeshedding would ensue which primitives would receive that treatment.
2022-01-24 13:53:40 +0100 <dminuoso> And interaction with class methods. That is, would you have fmap monomorphized to lists?
2022-01-24 13:53:51 +0100 <Gurkenglas> I agree, I've previously wished this. The failed website https://arbital.com/ tried to have its math posts at multiple difficulty levels.
2022-01-24 13:54:06 +0100 <Gurkenglas> lens would benefit.
2022-01-24 13:54:25 +0100 <[exa]> what about extra "show me a less polymorphic example of this variable mess" button?
2022-01-24 13:54:25 +0100 <dminuoso> I think the better solution to the lens design space is what optics does.
2022-01-24 13:55:28 +0100 <Gurkenglas> Fortunately language model advances look like we'll get a fully general solution to "show me a less incomprehensible variant of this" one of these years.
2022-01-24 13:55:50 +0100 <dminuoso> GHC and haddock do this in a hardcoded fashion for levity polymorphism already
2022-01-24 13:56:26 +0100 <dminuoso> Gurkenglas: Dunno, with linear types things appear to be moving in the opposite direction.
2022-01-24 13:56:57 +0100 <dminuoso> So now you have levity polymorphism, multiciplity polymorphism, type polymorphism.. all interleaved.
2022-01-24 13:57:03 +0100 <Gurkenglas> dminuoso, linear types are an O(1) step in the wrong direction, the autocomplete engine wizardry that's coming about should solve the entire problem.
2022-01-24 13:57:40 +0100 <dminuoso> What autocomplete engine are you referring to?
2022-01-24 13:58:31 +0100jgeerds(~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 256 seconds)
2022-01-24 13:59:05 +0100 <Gurkenglas> imagine style transfer https://miro.medium.com/max/767/1*B5zSHvNBUP6gaoOtaIy4wg.jpeg but for text! dminuoso, GPT-3. Train a predict-the-next-word network on ~the entire internet and get magic tools like https://vimeo.com/427943407/98fe5258a7 for free
2022-01-24 14:00:33 +0100 <dminuoso> Okay, I so didn't get the sarcasm there before. :-)
2022-01-24 14:00:43 +0100 <Gurkenglas> no sarcasm :( where do you see any?
2022-01-24 14:01:57 +0100 <dminuoso> Maybe my detector is off, but I dont think throwing more AI is realistically a solution.
2022-01-24 14:02:05 +0100 <dminuoso> https://news.ycombinator.com/item?id=30015810
2022-01-24 14:02:09 +0100 <Gurkenglas> dminuoso, https://twitter.com/michaeltefula/status/1285505897108832257/photo/2 legalese->english
2022-01-24 14:02:13 +0100 <dminuoso> Fun recent related bit
2022-01-24 14:02:15 +0100 <dminuoso> :-)
2022-01-24 14:03:07 +0100 <dminuoso> Gurkenglas: It's funny, you always get these n=1 stories on twitter. What if GPT-3 gives you an inaccurate or plainly wrong summary?
2022-01-24 14:03:26 +0100 <dminuoso> But these dont generate as much social media attention I suppose
2022-01-24 14:03:44 +0100 <Gurkenglas> dminuoso, i suppose the output type signature will have a small chance of being incorrectly translated. But it seems easy enough for a compiler to verify whether it's right?
2022-01-24 14:04:23 +0100 <dminuoso> I prefer freely available, mechanical, verifiable systems.
2022-01-24 14:04:29 +0100 <dminuoso> GPT-3 is none of the above.
2022-01-24 14:05:00 +0100 <[exa]> +1 ^
2022-01-24 14:05:30 +0100 <Gurkenglas> I agree that it's a bad sign that not one human knows how GPT-3 makes its decisions. I predict anyway that the tools will appear, and be used, and work well.
2022-01-24 14:05:44 +0100 <dminuoso> My main beef is, when the features become so complex, that you need extreme powertools like GPT-3 to even make sense of them, perhaps the fault lies in making these complicated things.
2022-01-24 14:05:53 +0100 <merijn> I agree with the first two of your claims
2022-01-24 14:06:13 +0100 <merijn> I question whether they will indeed work well
2022-01-24 14:06:21 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
2022-01-24 14:06:37 +0100 <merijn> To me it sounds like "throwing even more complicated shit we don't understand on top of the already existing shit pile"
2022-01-24 14:06:54 +0100 <dminuoso> 13:54:25 [exa] | what about extra "show me a less polymorphic example of this variable mess" button?
2022-01-24 14:06:56 +0100 <merijn> There lies no hope in that direction
2022-01-24 14:06:59 +0100 <dminuoso> Perhaps this is the most pragmatic solution at the end.
2022-01-24 14:07:03 +0100 <Gurkenglas> merijn, does it count as working well if there's no compiler verification but the translation is wrong one in a hundred times? (which sounds like a higher success rate than when humans translate it in their head!)
2022-01-24 14:07:18 +0100 <dminuoso> Extra haddock (or even special type annotations) that provide multiple alternative monomorphized types, and beginners just need to learn about this.
2022-01-24 14:07:40 +0100 <merijn> Gurkenglas: If humans consistently get something wrong, the solution isn't "build a process that is slightly more accurate"
2022-01-24 14:07:46 +0100 <dminuoso> Then the author of a polymorphic thing can conceive one or more likely choices for a type variable of their type, and then just put them in
2022-01-24 14:07:55 +0100 <merijn> Gurkenglas: The solution is: fix the tools and process to prevent humans from making predictable fuck ups
2022-01-24 14:08:04 +0100 <Gurkenglas> merijn, self-driving cars.
2022-01-24 14:08:49 +0100 <merijn> Gurkenglas: I will go ahead that the Dutch "Sustainable Safety" policy for road design has saved *many* more lives thant self-driving cars ever will in a less principled road system
2022-01-24 14:08:59 +0100 <int-e> Gurkenglas: a million accidents waiting to happen
2022-01-24 14:09:27 +0100 <hpc> not just a million accidents
2022-01-24 14:09:31 +0100 <hpc> the same accident a million times
2022-01-24 14:09:59 +0100 <merijn> The guiding principle for road design is: "People will fuck up" and therefore two things should be done: 1) possibility of fuckups should be minimised and 2) negative outcomes of fuckups should be minimised
2022-01-24 14:10:02 +0100polezaivsani(~polezaivs@orangeshoelaces.net)
2022-01-24 14:10:08 +0100 <Gurkenglas> merijn, I will happily claim that if self-driving cars gets widely adopted they'll probably save even more lives.
2022-01-24 14:10:08 +0100 <hpc> there's a few roads that tesla owners know to just avoid because the sensors get confused and it consistently steers into oncoming traffic and such
2022-01-24 14:10:11 +0100 <merijn> Which, tbh, perfectly summarises my attitude to programming too
2022-01-24 14:10:25 +0100DNH(~DNH@2a02:8108:1100:16d8:d0b2:5a76:adf7:9a5a) (Read error: Connection reset by peer)
2022-01-24 14:10:28 +0100 <merijn> Gurkenglas: Not with the way Tesla is producing them :)
2022-01-24 14:10:48 +0100 <dminuoso> Heck, even on airplanes (which generally dont encounter other airplanes) with extremely uniform landing strips over the world, there's mostly no autopilot landing.
2022-01-24 14:10:49 +0100 <merijn> Gurkenglas: And the thing is, safer road design benefits self-driving cars too
2022-01-24 14:10:52 +0100 <Gurkenglas> I do admit it's plausible that it'll work fine and then one day some accident hits everyone at once.
2022-01-24 14:11:13 +0100fendor_(~fendor@91.141.44.222.wireless.dyn.drei.com)
2022-01-24 14:11:13 +0100 <Gurkenglas> That might even make it not be worth it in average lives saved on net.
2022-01-24 14:11:16 +0100 <merijn> Gurkenglas: Since the same things that prevent/reduce human fuckups and minimise damage of fuckup will have the same effect for self-driving cars
2022-01-24 14:11:21 +0100 <dminuoso> I find it curious why people are so eager for self driving cars before planes and trains have become widely completely automated..
2022-01-24 14:11:25 +0100jackson99(~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Ping timeout))
2022-01-24 14:11:39 +0100 <dminuoso> It's really a recipe for disaster. :)
2022-01-24 14:12:01 +0100 <int-e> dminuoso: are they, really, or is it mostly marketing?
2022-01-24 14:12:06 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-01-24 14:12:11 +0100 <merijn> My main objection to self-driving cars is: We haven't sorted out liability yet
2022-01-24 14:12:33 +0100 <dminuoso> merijn: Socialism to the rescue.
2022-01-24 14:12:52 +0100 <merijn> I don't think self-driving cars are massively more risky than some humans. But I feel manufacturers would be...let's say...more invested in safety if they were liable for errors by their self-driving cars
2022-01-24 14:12:53 +0100 <dminuoso> If society itself wants self driving cars, have the society be liable for its decisions.
2022-01-24 14:13:05 +0100 <maerwald> dminuoso: there's no autopilot that has ever saved lives in an airplane...
2022-01-24 14:13:06 +0100 <merijn> dminuoso: I'd prefer the manufacturer was
2022-01-24 14:13:14 +0100dsrt^(~dsrt@207.182.73.202) (Remote host closed the connection)
2022-01-24 14:13:18 +0100 <Gurkenglas> <dminuoso> Extra haddock (or even special type annotations) <- compromise: GPT-3-generated alternative haddock files, uploaded to hackage and verified by authors or the test of time
2022-01-24 14:13:25 +0100 <nshepperd2> aren't both planes and trains almost completely automated?
2022-01-24 14:13:32 +0100 <dminuoso> maerwald: Conceivably there were accidents that could have been saved by autopilots though?
2022-01-24 14:13:39 +0100 <maerwald> dminuoso: I don't think so
2022-01-24 14:13:40 +0100 <dminuoso> nshepperd2: Landings and startups on planes? No.
2022-01-24 14:13:47 +0100 <int-e> nshepperd2: they have humans in the loop at all times
2022-01-24 14:13:49 +0100fendor(~fendor@91.141.65.21.wireless.dyn.drei.com) (Ping timeout: 256 seconds)
2022-01-24 14:13:54 +0100 <dminuoso> nshepperd2: almost all airlines mandate their pilots land and takeoff by hand.
2022-01-24 14:14:02 +0100 <nshepperd2> the NYC train system still has drivers, mostly for hysterical raisins and it sometimes kills people
2022-01-24 14:14:11 +0100 <Gurkenglas> merijn, Tesla stock would crash if there was a serious series of accidents, isn't that plenty incentive?
2022-01-24 14:14:33 +0100 <dminuoso> Gurkenglas: Out of curiosity, do you happen to be working on GPT-3 related projects at the moment?
2022-01-24 14:14:51 +0100 <dminuoso> Trying to understand why you're pushing for it this hard.
2022-01-24 14:15:00 +0100 <merijn> Gurkenglas: Oh, no, I want manufacturers terrified of a *single* accident that's their fault, not just "massive worldwide failures"
2022-01-24 14:15:23 +0100akegalj(~akegalj@89-172-25-196.adsl.net.t-com.hr) (Ping timeout: 268 seconds)
2022-01-24 14:15:31 +0100 <nshepperd2> it's cost effective for airlines to have pilots "just in case" though
2022-01-24 14:15:36 +0100 <merijn> If companies are going to make life&death decisions I want them to have *serious* skin in the game
2022-01-24 14:15:38 +0100 <dminuoso> It's definitely not, nshepperd2.
2022-01-24 14:15:43 +0100lavaman(~lavaman@98.38.249.169)
2022-01-24 14:15:44 +0100 <Gurkenglas> merijn, that sounds like liability wouldn't do it but the PR-stockprice-hype angle could
2022-01-24 14:16:32 +0100 <nshepperd2> dminuoso: one salary vs however much profit tens of thousands of passengers bring in per year?
2022-01-24 14:16:36 +0100 <merijn> Gurkenglas: I mean, Tesla has already had several fuckups where their self-driving shit fucked up. Same with ubers experiments and their bottomline seems unaffected, so I have no faith in that
2022-01-24 14:16:48 +0100 <maerwald> nshepperd2: I don't think an autopilot could have done the landing on the Hudson River... because it was never done before
2022-01-24 14:16:59 +0100 <Gurkenglas> dminuoso, not quite? I'm working on math that'd let me measure and train for the readability of neural networks, because I do expect them to become really important and I worry what happens if we still can't read them by then.
2022-01-24 14:17:11 +0100 <merijn> If your company produces software that (potentially) makes life & death decisions the company being financially liable is the bare minimum
2022-01-24 14:17:19 +0100 <nshepperd2> maerwald: sure
2022-01-24 14:17:23 +0100 <dminuoso> nshepperd2: Its actually a curious case, because planes *can* takeoff, fly and land all by themselves with minimal intervention. In principle all the interaction on planes could happen remotely with a bunch of pilots sitting on their couch.
2022-01-24 14:17:28 +0100 <nshepperd2> planes having autopilot definitely saves lives though
2022-01-24 14:17:36 +0100 <nshepperd2> less pilot fatigue, etc
2022-01-24 14:17:45 +0100 <merijn> I don't think we should rule out criminal liability for people in charge of software like this
2022-01-24 14:18:29 +0100 <dminuoso> liability for software.
2022-01-24 14:18:31 +0100 <dminuoso> haha!
2022-01-24 14:18:36 +0100 <dminuoso> That'd be the day.
2022-01-24 14:18:39 +0100 <merijn> If your code provably (in a court of law) killed someone due to criminally negligent decisions, your company should be toast
2022-01-24 14:19:13 +0100 <Gurkenglas> We might want them to be required to buy insurance. Because a million crashes at once would bankrupt Tesla, and so would 10 million, so there's no reason for them to guard harder against 10 million than 1 million...
2022-01-24 14:19:17 +0100 <merijn> dminuoso: I'm not going to argue for industry wide software liability (although I sometimes think I should, maybe people would take this shit seriously, then...). But certainlty for control systems of cars/planes/trains/etc.
2022-01-24 14:19:22 +0100 <dminuoso> merijn: Germany had a woman die 1-2 years ago due to gross negligence in IT security, after some cryptoware infested the hospital and she couldn't receive urgent care.
2022-01-24 14:19:23 +0100 <maerwald> dminuoso: mixing concrete incorrectly in germany can get you into jail, so
2022-01-24 14:19:54 +0100 <dminuoso> merijn: But of course no criminal prosecution, blame was all put on "evil hackers".
2022-01-24 14:20:00 +0100 <merijn> Gurkenglas: I mean, you realise that "putting the CEO and other officers in jail" is something you can legally do, yeah?
2022-01-24 14:20:03 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-24 14:20:14 +0100 <dminuoso> maerwald: Yes, that's the funny bit.
2022-01-24 14:20:16 +0100 <merijn> Gurkenglas: It's not just about financial blowback
2022-01-24 14:20:30 +0100euandreh(~euandreh@2804:14c:33:9fe5:aa5f:93ea:3b88:5ff5)
2022-01-24 14:20:32 +0100 <Gurkenglas> merijn, we can include them being put in jail in the one-million-crashes-bankruptcy
2022-01-24 14:20:55 +0100 <Gurkenglas> aka, we still want them to guard harder against 10 million.
2022-01-24 14:21:30 +0100 <int-e> Gurkenglas: we *need* the jail part. bankruptcies largely don't hit management very hard... they just need to find a new job
2022-01-24 14:21:33 +0100 <Gurkenglas> and the insurance helps because then ten million would bankrupt the entire insurance industry when one million wouldn't
2022-01-24 14:21:33 +0100 <maerwald> and in automotive and related industries, there's already functional safety engineers overseeing every single software project
2022-01-24 14:21:41 +0100 <merijn> Gurkenglas: 10 million crashes due to the same error is not what I'm worried about
2022-01-24 14:21:49 +0100 <maerwald> so it wouldn't change that much
2022-01-24 14:22:01 +0100 <merijn> Gurkenglas: It's thousands of one-offs due to shitty engineering I worry about
2022-01-24 14:22:16 +0100 <merijn> And *nothing* I've heard about the software engineering at Tesla gives me *any* faith in them
2022-01-24 14:22:20 +0100 <maerwald> Daimler would just pour more money into formal methods
2022-01-24 14:22:34 +0100 <merijn> I wouldn't trust their software engineering process to run my laptop, let alone my car...
2022-01-24 14:22:57 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 240 seconds)
2022-01-24 14:23:18 +0100 <nshepperd2> int-e: that's why you require the company to buy insurance against it, so the ongoing insurance premiums are a blight on the CEO's bonuses each year
2022-01-24 14:23:29 +0100 <maerwald> the funny thing is... ISO 26262 already says your projects should use formal methods... but because it's "should", not one does it
2022-01-24 14:23:29 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4)
2022-01-24 14:23:34 +0100 <dminuoso> merijn: Would you trust Intel's process to design secure processors to execute code on your laptop? They have a stellar record of optimized silicon and super safe management engines...
2022-01-24 14:23:40 +0100 <nshepperd2> people are bad an assessing risk of rare events like going to jail and tend to discount it
2022-01-24 14:24:08 +0100 <merijn> dminuoso: I don't trust *anybody* in this goddamn industry >.<
2022-01-24 14:24:41 +0100 <merijn> The whole industry is *at best* wildly negligent
2022-01-24 14:24:45 +0100 <Gurkenglas> merijn, why do you think (afaic) they should be punished for accidents even when they have less accidents than there would be in the absence of self driving?
2022-01-24 14:24:50 +0100 <int-e> nshepperd2: *can* you insure that? The worst case scenario is, as hpc said, "the same accident a million times" (around the same time).
2022-01-24 14:24:51 +0100 <merijn> At worst it's criminally incompetent
2022-01-24 14:25:32 +0100cfricke(~cfricke@user/cfricke) (Ping timeout: 240 seconds)
2022-01-24 14:25:34 +0100 <dminuoso> If only incompetence was criminal
2022-01-24 14:25:37 +0100 <merijn> Gurkenglas: I don't think they should be punished for accidents. I think accidents should be investigated and they should be punished when investigation shows the accident happened due to negligent safety measures
2022-01-24 14:25:39 +0100 <maerwald> well, we're in a crisis, because we have no idea of what software engineering really is... and Haskell didn't fix it :p
2022-01-24 14:25:43 +0100 <int-e> dminuoso: ouch
2022-01-24 14:26:05 +0100 <merijn> dminuoso: Well, I don't know about Germany, but "gross negligence" is criminal in most jurisdictions :p
2022-01-24 14:26:08 +0100 <int-e> dminuoso: I mean, have you thought that through? :)
2022-01-24 14:26:20 +0100 <nshepperd2> hmm the insurance company would need to have deep pockets
2022-01-24 14:27:02 +0100 <merijn> I would argue most of the tech industry is maybe not outright in that section, but certainly "consistently skirting the edges of gross negligence"
2022-01-24 14:27:10 +0100 <Gurkenglas> the entire point of insurance companies is that they deepen your hypothetical pockets. if it were only about 1-1000 accidents they could be their own insurance
2022-01-24 14:28:02 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 240 seconds)
2022-01-24 14:28:20 +0100 <merijn> Gurkenglas: The point of liability legislation is to figure out who is responsible and punish them. Currently if you have a self-driving cars manufacturers can blindly shove blame to the driver (unless manufacturing defect/failure). If we get self-driving cars, clearly we can't hold the *driver* liable, it is a computer program
2022-01-24 14:28:25 +0100 <int-e> But insurance companies aren't bottomless either.
2022-01-24 14:28:33 +0100 <merijn> So who *should* be liable? The owner? The creator of said program?
2022-01-24 14:29:06 +0100 <maerwald> my manager
2022-01-24 14:29:13 +0100 <maerwald> =)
2022-01-24 14:31:49 +0100 <Gurkenglas> merijn, i suppose it should be specified in the contract that the owner signed when he bought the vehicle from the employer of the creator of the program. if it's not, a judge would have to extrapolate what it would have said... which shouldn't be a deterministic decision, so in that case I'd hope both parties must pay a portion of the damages corresponding to the probabilities of how the contract would have
2022-01-24 14:31:49 +0100 <Gurkenglas> looked.
2022-01-24 14:32:12 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2022-01-24 14:32:38 +0100 <merijn> You seem to only worry about money, which is in itself worrying, tbh
2022-01-24 14:32:57 +0100 <Gurkenglas> Money is the unit of caring!
2022-01-24 14:33:23 +0100 <merijn> Gurkenglas: Sure, but also a poor deterrent against crime
2022-01-24 14:33:30 +0100 <merijn> There's a reason we don't punish murder with a fine
2022-01-24 14:33:31 +0100 <geekosaur> merijn, if it doesn't come down to money, it doesn't happen in this world
2022-01-24 14:33:48 +0100 <merijn> geekosaur: I mean...criminal liability is generally not about money :)
2022-01-24 14:33:58 +0100 <merijn> Well, depending on how corrupt your country is...
2022-01-24 14:34:12 +0100 <Gurkenglas> Some countries used to. But sure, we can also proportionally split up the non-monetary punishment.
2022-01-24 14:34:22 +0100 <geekosaur> you can generally assume maximum corruption, it just takes different shapes
2022-01-24 14:34:30 +0100 <maerwald> merijn: hmm... pharma companies get fined all the time for things that might be actual crimes :p
2022-01-24 14:34:30 +0100 <Gurkenglas> 3 whip lashes for the driver, 7 for the CEO.
2022-01-24 14:35:10 +0100 <geekosaur> ahah. assume that gets reversed
2022-01-24 14:35:43 +0100 <dminuoso> And the CEO can also spend portions of CO2 certificates as a subsitute for lashes.
2022-01-24 14:36:13 +0100 <dminuoso> Deductible in his or her annual tax report
2022-01-24 14:36:14 +0100 <Gurkenglas> those can be bought with money. if the CEO thinks the programmer was responsible, he can lash the programmer in turn.
2022-01-24 14:36:55 +0100 <dminuoso> It's a good thing that the question of guilt is not decided by each individual then.
2022-01-24 14:37:08 +0100 <Gurkenglas> the programmer should have read the employment contract fine print.
2022-01-24 14:37:17 +0100 <dminuoso> Gurkenglas: Though amusingly, what you just described is exactly what happened at Volswagen.
2022-01-24 14:37:18 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-01-24 14:37:25 +0100 <nshepperd2> let's all lash each other preemptively
2022-01-24 14:37:42 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2022-01-24 14:37:53 +0100 <dminuoso> "We didn't know anything about the emission scandal. It was some evil mid level programmers"
2022-01-24 14:39:38 +0100 <maerwald> dminuoso: it's usually something in between... increased deadline pressure to the point that programmers can't deliver without cutting on e.g. safety processes. I've been in such a meeting, no one said directly "yes, cut on the safety process", but everyone knew that's what we have to do
2022-01-24 14:40:35 +0100 <Gurkenglas> if only we could whip the coordination problem.
2022-01-24 14:40:39 +0100 <dminuoso> maerwald: I specifically meant the official statements from VW leadership that "the management was completely unaware, and that it was petty criminal software people who came up with it"
2022-01-24 14:40:58 +0100 <dminuoso> That did happen at some point.
2022-01-24 14:41:23 +0100 <maerwald> dminuoso: well, you could say management told them to do something that isn't possible and the employees came up with a criminal solution that management didn't WANT to know about :p
2022-01-24 14:41:44 +0100 <maerwald> now the question is... did they really know the specifics? Maybe not
2022-01-24 14:42:07 +0100 <maerwald> But they knew something unorthodox was gonna happen
2022-01-24 14:42:48 +0100 <dminuoso> maerwald: Considering that seemingly half the other producers in the world came up with the same idea... it seems very unconvincing.
2022-01-24 14:43:59 +0100davros(~davros@host86-184-180-214.range86-184.btcentralplus.com)
2022-01-24 14:44:35 +0100 <Gurkenglas> when you always take the cheapest of three offers you will select for people willing to be criminal in order to be cheaper. maybe that itself should make you more liable.
2022-01-24 14:48:40 +0100 <merijn> btw
2022-01-24 14:49:16 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4)
2022-01-24 14:49:54 +0100 <merijn> Anyone know where Gabriella got the name Dhall from?
2022-01-24 14:50:55 +0100 <Taneb> It's a kind of curry I think
2022-01-24 14:51:17 +0100 <maerwald> Dal bhat? :o
2022-01-24 14:53:58 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 250 seconds)
2022-01-24 14:56:26 +0100unmanbearpig(~unmanbear@user/unmanbearpig)
2022-01-24 14:58:18 +0100lavaman(~lavaman@98.38.249.169)
2022-01-24 15:02:38 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
2022-01-24 15:05:39 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4)
2022-01-24 15:05:45 +0100slack1256(~slack1256@191.126.99.84) (Remote host closed the connection)
2022-01-24 15:09:39 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-01-24 15:10:17 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 240 seconds)
2022-01-24 15:11:51 +0100jgeerds(~jgeerds@55d4a547.access.ecotel.net)
2022-01-24 15:14:57 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Ping timeout: 240 seconds)
2022-01-24 15:18:36 +0100imalsogreg(~imalsogre@c-73-172-114-3.hsd1.md.comcast.net)
2022-01-24 15:21:51 +0100imalsogreg(~imalsogre@c-73-172-114-3.hsd1.md.comcast.net) (Remote host closed the connection)
2022-01-24 15:24:06 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4)
2022-01-24 15:25:36 +0100 <texasmynsted> naming is difficult
2022-01-24 15:26:32 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 15:26:32 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 15:26:32 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 15:28:37 +0100ksqsf(~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 240 seconds)
2022-01-24 15:29:10 +0100timCF(~timCF@200-149-20-81.sta.estpak.ee)
2022-01-24 15:29:10 +0100timCF(~timCF@200-149-20-81.sta.estpak.ee) (Client Quit)
2022-01-24 15:29:38 +0100timCF(~timCF@200-149-20-81.sta.estpak.ee)
2022-01-24 15:30:07 +0100 <timCF> Hello! Any ideas why it's like this? I don't see why this is logical or correct https://gist.github.com/tim2CF/e63c7ff792e26362f356e71c47319494
2022-01-24 15:30:32 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41)
2022-01-24 15:31:06 +0100 <merijn> interesting
2022-01-24 15:31:21 +0100 <merijn> @hoogle round
2022-01-24 15:31:21 +0100 <lambdabot> Prelude round :: (RealFrac a, Integral b) => a -> b
2022-01-24 15:31:21 +0100 <lambdabot> GHC.Real round :: (RealFrac a, Integral b) => a -> b
2022-01-24 15:31:21 +0100 <lambdabot> Test.Hspec.Discover round :: (RealFrac a, Integral b) => a -> b
2022-01-24 15:31:57 +0100 <merijn> oh
2022-01-24 15:32:40 +0100leibniz(~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net)
2022-01-24 15:32:43 +0100 <merijn> round's default implementation uses - the denominator
2022-01-24 15:32:46 +0100cfricke(~cfricke@user/cfricke)
2022-01-24 15:33:07 +0100 <leibniz> [exe] sorry i was afk, yes, not really used to doing traversals that are not mapAccumL
2022-01-24 15:33:09 +0100 <merijn> I suspect that underflows, since it results in a negative numerator/denominator, which you can't have with Natural
2022-01-24 15:33:29 +0100 <leibniz> not really sure how else traversals are actually used...
2022-01-24 15:33:32 +0100 <merijn> Rational works, because Rational is "Ratio Integer" and thus does allow negative numerators/denominators
2022-01-24 15:34:31 +0100 <leibniz> at least its the Applicative that in question, rather than the traversable itself, which is a "monadic list" (you could have ambiguity in terms of what that means, but for now lets just consider it to be a list where the tail is wrapped in a monda)
2022-01-24 15:34:32 +0100 <merijn> timCF: The only way to fix that would be to change the RealFrac instance of Ratio to not use signum
2022-01-24 15:34:43 +0100 <merijn> timCF: Which seems like a lot of work
2022-01-24 15:35:27 +0100 <leibniz> the point is that for IO, the blocking tail call, eg doing a stream of server requests, should not be used with strict State
2022-01-24 15:35:31 +0100 <merijn> timCF: Anyway, this is why Natural is generally considered a pretty bad type to use in "real" code
2022-01-24 15:35:32 +0100 <dminuoso> merijn: But round has a specific implementation for `instance (Integral a) => RealFrac (Ratio a) where` which does not use signum
2022-01-24 15:35:40 +0100 <dminuoso> Am I not seeing something here?
2022-01-24 15:35:53 +0100 <merijn> oh, I didn't check that far
2022-01-24 15:35:57 +0100 <merijn> But what does it use?
2022-01-24 15:36:05 +0100 <dminuoso> https://hackage.haskell.org/package/base-4.16.0.0/docs/src/GHC.Real.html#line-522
2022-01-24 15:36:23 +0100 <merijn> dminuoso: Yeah, that has an obvious underflow
2022-01-24 15:36:42 +0100 <timCF> merijn: yeah. Spent couple of hours wondering round why my code (pure part) is blowing up
2022-01-24 15:36:52 +0100 <merijn> ah, wait, no, it depends on how it gets evaluated
2022-01-24 15:37:02 +0100 <dminuoso> merijn: What line are you looking at in particular?
2022-01-24 15:37:14 +0100 <leibniz> i mean, what other applicatives do people even used during a traversal?
2022-01-24 15:37:19 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
2022-01-24 15:37:24 +0100 <lortabac> merijn: https://github.com/dhall-lang/dhall-lang#name
2022-01-24 15:37:55 +0100 <timCF> merijn: I actually like to use Natural. What is bad is not Natural itself, but Num instance of Natural..
2022-01-24 15:38:03 +0100 <dminuoso> leibniz: Can you restate that question?
2022-01-24 15:38:07 +0100 <merijn> dminuoso: I was thinking the -1 but that should be lazy
2022-01-24 15:38:07 +0100ph88^(~ph88@ip5f5af71f.dynamic.kabel-deutschland.de)
2022-01-24 15:38:16 +0100 <leibniz> i guess i want input since i dont want my lack of experience to lead me to think that mapAccumL is the only use case for monadic traversals, which is the current conclusion, and motivates the presentation as via "scanners" rather than the commuting constructor/monad issue
2022-01-24 15:38:43 +0100 <merijn> timCF: You *inevitably* want to subtract from Natural and then you're in Partialsville, population: bottom
2022-01-24 15:38:45 +0100 <leibniz> dminuoso: im not sure which part your referring too
2022-01-24 15:39:22 +0100 <leibniz> how else people coomonly use traversals?
2022-01-24 15:39:23 +0100kritzefitz(~kritzefit@debian/kritzefitz) (Ping timeout: 256 seconds)
2022-01-24 15:40:08 +0100 <leibniz> commonly*
2022-01-24 15:40:33 +0100 <dminuoso> leibniz: Dunno, the entire question is confusing and unclear to me.
2022-01-24 15:41:06 +0100alp(~alp@user/alp) (Ping timeout: 268 seconds)
2022-01-24 15:41:14 +0100 <leibniz> i want to know what other applicatives people use, other than StateL in mapAccumL, which is the only thing *I* use
2022-01-24 15:41:34 +0100 <leibniz> im not sure if there is a reason for that, based on the lazy consumption of monadic lists
2022-01-24 15:41:39 +0100 <leibniz> or if there is another example
2022-01-24 15:41:58 +0100 <lortabac> leibniz: what is StateL?
2022-01-24 15:42:00 +0100 <timCF> merijn: and there is no way to have simple (without Maybe/Either) subtract action over Naturals? Compiler just need to know that "a" is proven to be not less than "b"
2022-01-24 15:42:01 +0100 <dminuoso> Const, Identity, IO, State, List, plenty of monad transformer stacks..
2022-01-24 15:42:24 +0100kritzefitz(~kritzefit@debian/kritzefitz)
2022-01-24 15:42:32 +0100 <leibniz> ok, but those dont all lazily commute with the constructor
2022-01-24 15:42:42 +0100 <dminuoso> What does that even mean?
2022-01-24 15:42:44 +0100 <leibniz> so dont cout as "lazy applicatives" or something...
2022-01-24 15:43:05 +0100 <leibniz> leibniz: imagine your tail is wrapped in IO, because its a server call
2022-01-24 15:43:13 +0100 <leibniz> then the tail call is blocking
2022-01-24 15:43:28 +0100 <leibniz> so you need the constructor to commute with the applicative for it to be lazy
2022-01-24 15:43:33 +0100 <dminuoso> I do not understand what that means.
2022-01-24 15:43:35 +0100 <leibniz> otherwise it tries to traverse the whole list
2022-01-24 15:43:37 +0100 <leibniz> which blocks
2022-01-24 15:44:02 +0100 <leibniz> the "tail is on a server" ? basically its that you have a "get" request, which is like head
2022-01-24 15:44:12 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
2022-01-24 15:44:25 +0100 <leibniz> this is the whole use case for IO monadically wrapped tail lists that im working with with the scanners
2022-01-24 15:45:10 +0100 <leibniz> as you deconstruct it, because the tail is wrapped in IO, it captures this, since matching the tails head obviously has an IO
2022-01-24 15:45:26 +0100 <merijn> timCF: Just is doing *a lot* of work in that sentence ;)
2022-01-24 15:45:42 +0100 <dminuoso> leibniz: I give up, I can't make heads or tails (heh, that pun) of what you're sayiing.
2022-01-24 15:45:56 +0100shriekingnoise(~shrieking@201.231.16.156)
2022-01-24 15:45:57 +0100 <dminuoso> I dont mean this offensively, but to me this reads as gibberish.
2022-01-24 15:45:59 +0100 <leibniz> it would be a whole lot more useful if you could at least try to explain why
2022-01-24 15:46:12 +0100 <dminuoso> leibniz: The entirety of what you're saying reads gibberish.
2022-01-24 15:46:24 +0100 <dminuoso> I feel like Im being pranked by a markov chain.
2022-01-24 15:46:24 +0100 <leibniz> dminuoso: its not offensive, just unhelpful.
2022-01-24 15:46:37 +0100 <dminuoso> leibniz: Can you give a concrete example perhaps?
2022-01-24 15:46:50 +0100iteratee(~kyle@162.218.222.107) (Ping timeout: 250 seconds)
2022-01-24 15:47:05 +0100 <leibniz> well what i said before wasnt clear to you, which i think could be because you dont specify what your asking
2022-01-24 15:47:10 +0100 <merijn> leibniz: eh...*which* mapAccumL?
2022-01-24 15:47:19 +0100 <leibniz> so, a concrete example of *what*?
2022-01-24 15:47:26 +0100 <merijn> leibniz: Because the mapAccumL *I* look at doesn't even use Applicative?
2022-01-24 15:47:28 +0100 <dminuoso> Of anything amounting to your questions?
2022-01-24 15:47:44 +0100 <leibniz> yeah, im sorry that your not helping
2022-01-24 15:47:57 +0100 <leibniz> merijn: sure it does
2022-01-24 15:48:01 +0100 <merijn> leibniz: No?
2022-01-24 15:48:15 +0100 <leibniz> its implementation is in terms of StateL, right? ill find the source hang on
2022-01-24 15:48:22 +0100 <merijn> "Traversable t => (s -> a -> (s, b)) -> s -> t a -> (s, t b)"
2022-01-24 15:48:33 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2022-01-24 15:48:57 +0100 <leibniz> https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Data.Traversable.html#mapAccumL
2022-01-24 15:49:04 +0100 <leibniz> mapAccumL f s t = coerce (traverse @t @(StateL s) @a @b) (flip f) t s
2022-01-24 15:49:20 +0100 <merijn> leibniz: Which applicative do you see in that type?
2022-01-24 15:49:25 +0100 <leibniz> StateL
2022-01-24 15:49:40 +0100 <leibniz> er, or `StateL s'
2022-01-24 15:49:55 +0100 <merijn> That's the implementation of mapAccumL, not something you use *with* mapAccumL?
2022-01-24 15:50:00 +0100 <leibniz> StateR wouldnt work with the blocking tail call
2022-01-24 15:50:22 +0100 <leibniz> mapAccumL is a traversable using the StateL Applicative
2022-01-24 15:50:27 +0100 <leibniz> a traversal*
2022-01-24 15:50:32 +0100 <merijn> Ok, sure
2022-01-24 15:50:33 +0100 <merijn> And?
2022-01-24 15:50:39 +0100 <leibniz> and StateR isnt Lazy
2022-01-24 15:50:50 +0100 <merijn> These are statements, not really questions?
2022-01-24 15:50:51 +0100 <leibniz> and i need examples of other useful applicatives that are
2022-01-24 15:50:52 +0100 <dminuoso> First lets address accuracy of the language.
2022-01-24 15:50:56 +0100 <dminuoso> mapAccumL is not a traversable
2022-01-24 15:51:17 +0100 <leibniz> this wasnt implied
2022-01-24 15:51:17 +0100deadmarshal(~deadmarsh@95.38.118.201) (Ping timeout: 240 seconds)
2022-01-24 15:51:17 +0100 <dminuoso> It's `* -> *` kinded typed that can be traversable, not value level identifiers.
2022-01-24 15:51:27 +0100 <leibniz> im aware
2022-01-24 15:51:39 +0100 <dminuoso> I just want to raise some points to avoid potential confusoin down the line here.
2022-01-24 15:51:44 +0100 <leibniz> sure
2022-01-24 15:52:08 +0100 <leibniz> do you understand the question now?
2022-01-24 15:52:11 +0100 <merijn> leibniz: Are you asking "which Applicatives do people use with 'traverse'?", because then dminuoso already answered
2022-01-24 15:52:13 +0100sha296(~shakil@2409:4060:2e1a:fe17:1c57:6d0d:de58:2ca6)
2022-01-24 15:52:21 +0100 <merijn> i.e. "literally all of them"
2022-01-24 15:52:28 +0100 <leibniz> those ones arent lazy with blocking IO tails
2022-01-24 15:52:31 +0100 <merijn> Maybe, Either, IO, Const, State, etc.
2022-01-24 15:52:42 +0100iteratee(~kyle@162.218.222.107)
2022-01-24 15:52:44 +0100 <leibniz> right, im aware other applicatives exist
2022-01-24 15:52:46 +0100 <dminuoso> leibniz: The expression "blocking IO tails" still confuses the heck out of me.
2022-01-24 15:52:47 +0100 <merijn> What is "a blocking IO tail"?
2022-01-24 15:53:02 +0100 <leibniz> this was "where the tail is on a server"
2022-01-24 15:53:10 +0100 <merijn> What tail, what server
2022-01-24 15:53:22 +0100 <leibniz> thats an IO opperation, server communication
2022-01-24 15:53:28 +0100 <merijn> You seem to be skipping a whole lot of context that just exists in your brain?
2022-01-24 15:53:33 +0100 <leibniz> so eg it could issue values each second
2022-01-24 15:53:46 +0100 <merijn> leibniz: I have no clue how those things relate to traverse, tbh
2022-01-24 15:53:59 +0100 <leibniz> well because if its blocking you cant traverse from the right
2022-01-24 15:54:13 +0100 <leibniz> thats this lazyness ~ comuting the constructor with the applicative issue
2022-01-24 15:54:14 +0100 <merijn> If *what* is blocking?
2022-01-24 15:54:18 +0100 <leibniz> the tail call!
2022-01-24 15:54:23 +0100 <merijn> What tail call?
2022-01-24 15:54:33 +0100 <leibniz> implementing traverse matching on the head
2022-01-24 15:54:41 +0100 <merijn> ??
2022-01-24 15:54:44 +0100 <leibniz> which gets the next value from the server
2022-01-24 15:54:44 +0100 <dminuoso> leibniz: I urge you to start anew, you're using a lot of non-conforming terminology that seems bizarre without context.
2022-01-24 15:55:15 +0100 <merijn> leibniz: traverse is a method implemented for types that are Traversable. Whether there is a sensible interpretation depends on the type you implement Traversable for...
2022-01-24 15:55:17 +0100 <dminuoso> Present a code example of what you mean by "blocking IO tails"
2022-01-24 15:55:28 +0100 <lortabac> leibniz: I don't understand what you are saying, but are you sure you are not reinventing conduit/pipes/streaming?
2022-01-24 15:55:29 +0100 <dminuoso> And what problems you conceive
2022-01-24 15:55:36 +0100 <merijn> leibniz: You are mentioning things that aren't related to Traversable at all
2022-01-24 15:55:42 +0100 <dminuoso> lortabac: Interesting.
2022-01-24 15:55:43 +0100 <leibniz> well, currently the question being asked is "why have monadic lists in practice, when are they blocking, when do we need lazyness"
2022-01-24 15:55:44 +0100 <lortabac> this "blocking IO" thing makes me think of streaming
2022-01-24 15:55:50 +0100 <dminuoso> lortabac: What is a "monadic list"?
2022-01-24 15:55:54 +0100 <dminuoso> Err leibniz ^-
2022-01-24 15:56:01 +0100 <dminuoso> But yes
2022-01-24 15:56:05 +0100 <leibniz> you just wrap the tail in a monad
2022-01-24 15:56:11 +0100 <dminuoso> Sorry
2022-01-24 15:56:17 +0100 <dminuoso> This is too much gibberish for me now.
2022-01-24 15:56:27 +0100 <maerwald> "wrap the tail inn a monad"
2022-01-24 15:56:49 +0100 <merijn> Again, what tail? what monad?
2022-01-24 15:56:51 +0100 <dminuoso> I do believe you dont have bad intentions, but you're throwing so much gibberish intermixed with random haskell words around - I can literally feel the confusion in your head.
2022-01-24 15:56:53 +0100 <leibniz> data MList' m a = MNil | a `MCons` MList m a
2022-01-24 15:56:53 +0100 <leibniz> type MList m a = m (MList' m a)
2022-01-24 15:56:54 +0100 <leibniz> newtype ListT m a = ListT { runListT :: MList m a }
2022-01-24 15:57:00 +0100 <leibniz> https://wiki.haskell.org/ListT_done_right
2022-01-24 15:57:05 +0100Jing(~hedgehog@240e:390:7c53:a7e1:4860:ab29:df65:d349)
2022-01-24 15:57:10 +0100 <leibniz> the archetypal monadic list implementation
2022-01-24 15:57:21 +0100 <merijn> leibniz: If you are asking about ListT, you should probably mention that at the start
2022-01-24 15:57:31 +0100 <dminuoso> But yes, I do think lortabac is on a right track
2022-01-24 15:57:41 +0100 <leibniz> last time i did that people suggested many other equivalent implementations
2022-01-24 15:57:46 +0100 <dminuoso> If I put together all the fragments I did understand from leibniz, I think they are looking for streaming libraries.
2022-01-24 15:58:05 +0100 <leibniz> what i mean is any one of those, these are easily described as lists where the tail is wrapped in a monad
2022-01-24 15:58:21 +0100 <dminuoso> leibniz: You should stop using the term "tail" here.
2022-01-24 15:58:22 +0100 <leibniz> dminuoso: it would be misleading to suggest that
2022-01-24 15:58:28 +0100 <dminuoso> I dont know.
2022-01-24 15:58:30 +0100 <dminuoso> You're misleading.
2022-01-24 15:58:47 +0100 <maerwald> leibniz: https://github.com/composewell/streamly/blob/master/docs/streamly-vs-lists.md
2022-01-24 15:58:55 +0100 <leibniz> im asking for examples of lazy states... not streaming libraries, which would be "why does he not need his question answered"
2022-01-24 15:59:10 +0100 <leibniz> and promotes comments like maerwalds
2022-01-24 15:59:20 +0100 <leibniz> declining which makes me seem rude
2022-01-24 15:59:23 +0100 <leibniz> i appologise
2022-01-24 15:59:47 +0100 <leibniz> ill read the link, but i think its an asside
2022-01-24 16:00:03 +0100 <maerwald> you asked for lists
2022-01-24 16:00:27 +0100 <leibniz> i didnt! i specifically asked not to have alternative implementations, ListTdone right is fine
2022-01-24 16:00:48 +0100 <leibniz> we are talking about a class all such things would instantiate
2022-01-24 16:00:53 +0100 <leibniz> im not after other instances
2022-01-24 16:01:06 +0100shaprgets the spray bottle
2022-01-24 16:01:07 +0100 <leibniz> its about how to express the *class*
2022-01-24 16:01:35 +0100 <maerwald> a class that wraps tails in a Monad?
2022-01-24 16:01:43 +0100 <shapr> be nice peoples
2022-01-24 16:01:46 +0100 <dminuoso> leibniz: Mind my asking, what is your primary language?
2022-01-24 16:01:53 +0100 <dminuoso> I have a feeling we have a language barrier issue at work.
2022-01-24 16:02:05 +0100 <leibniz> english!
2022-01-24 16:02:08 +0100 <dminuoso> Interesting.
2022-01-24 16:02:17 +0100 <leibniz> no worries
2022-01-24 16:02:37 +0100 <leibniz> i think this article uses a different term for what is meant for "stream"
2022-01-24 16:02:41 +0100max22-(~maxime@2a01cb0883359800a4d68ab29ac6e773.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2022-01-24 16:03:00 +0100 <leibniz> which i have also seen used to mean "strictly infinite lists"
2022-01-24 16:03:20 +0100 <leibniz> which are actually a good example if you dont want to consider IO tails
2022-01-24 16:03:55 +0100 <leibniz> ie, it needs a "lazy applicative" (the thing im asking for other examples of other than StateL)
2022-01-24 16:04:02 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 240 seconds)
2022-01-24 16:04:06 +0100 <leibniz> since it also cannot be traversed from the right
2022-01-24 16:04:13 +0100 <leibniz> which is the common issue
2022-01-24 16:04:23 +0100 <leibniz> it not having a basecase if its strictly infinite
2022-01-24 16:04:34 +0100 <leibniz> similar to if the tail call is blocking
2022-01-24 16:04:50 +0100 <leibniz> so the constructor needs to commute with the applicative
2022-01-24 16:04:53 +0100 <leibniz> basically...
2022-01-24 16:05:12 +0100 <leibniz> im not even really sure why it works with StateL
2022-01-24 16:05:39 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 256 seconds)
2022-01-24 16:06:01 +0100Sgeo(~Sgeo@user/sgeo)
2022-01-24 16:06:19 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
2022-01-24 16:06:41 +0100 <lortabac> leibniz: when you say "traversing from the right", do you mean applying a right-associative operation as foldr does, or traversing the sequence backwards?
2022-01-24 16:07:38 +0100 <leibniz> i think actually im cheating when i say that, by failing to phrase this issue to do with not having access to the tail. basically what you want is that it doesnt try to traverse the whole thing
2022-01-24 16:08:21 +0100 <dminuoso> "access to the tail"
2022-01-24 16:08:22 +0100 <leibniz> for a strictly infinite list, the right associative operation would fail, right?
2022-01-24 16:08:44 +0100 <leibniz> dminuoso: yes, since its wrapped in a monad, it might block
2022-01-24 16:08:48 +0100 <leibniz> if that monad is IO
2022-01-24 16:08:49 +0100 <dminuoso> leibniz: No, it would not. In fact we can foldr over infinite lists just fine.
2022-01-24 16:08:57 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2022-01-24 16:09:05 +0100 <dminuoso> leibniz: What's wrong with blocking?
2022-01-24 16:09:17 +0100 <dminuoso> Seriously, can you present a concrete example?
2022-01-24 16:09:19 +0100 <dminuoso> Some data structure, some code
2022-01-24 16:09:26 +0100 <leibniz> thats what i was worried about, its not actually the right associative thing, its the "having to reach the basecase"
2022-01-24 16:09:38 +0100 <dminuoso> Whose basecase?
2022-01-24 16:09:56 +0100 <dminuoso> Let's make things less polymorphic, lets pick a particular traversable
2022-01-24 16:09:59 +0100 <dminuoso> Is lists okay?
2022-01-24 16:10:01 +0100 <leibniz> https://github.com/fog-hs/streaming-binary-files-take2
2022-01-24 16:10:24 +0100 <leibniz> lists is certainly not ok
2022-01-24 16:10:29 +0100 <leibniz> it doesnt have the issue
2022-01-24 16:10:52 +0100 <leibniz> if you dont like this "blocking" issue, with the IO monad, then just use a "strictly infinite list"
2022-01-24 16:11:17 +0100 <leibniz> data Infinite a = Cons a (Infinite a)
2022-01-24 16:11:39 +0100 <leibniz> the "lack of basecase" here is what i meant
2022-01-24 16:11:46 +0100 <leibniz> lack of empty list
2022-01-24 16:12:02 +0100 <leibniz> for the inductive recusion in the datatype definition, has no basecase
2022-01-24 16:12:29 +0100 <leibniz> sorry, i kind of assume things like that are obvious
2022-01-24 16:12:36 +0100 <leibniz> haskell being my first language
2022-01-24 16:13:07 +0100 <shapr> I'm slightly envious
2022-01-24 16:13:39 +0100 <merijn> Slight interlude: What's my best option for fixed-length containers with length in the type? sized-vector?
2022-01-24 16:13:49 +0100 <dminuoso> sized-vector is a good pick, yes
2022-01-24 16:14:10 +0100akegalj(~akegalj@89-172-25-196.adsl.net.t-com.hr)
2022-01-24 16:14:18 +0100 <dminuoso> merijn: Though ideally Id also ask what kind of library support you expect from functions interacting with that.
2022-01-24 16:14:22 +0100 <merijn> dminuoso: Ah, wrong package...I was thinking of a different one, but forget the name
2022-01-24 16:15:00 +0100 <dminuoso> vector-sized?
2022-01-24 16:15:12 +0100 <merijn> dminuoso: I am writing a data structure that needs to handle N-dimensional indices/vectors. I would like to statically enforce that a data structure operating on 3-dimensional points only accepts 3-dimensional arguments
2022-01-24 16:15:21 +0100 <dminuoso> Also fixed-vector
2022-01-24 16:15:38 +0100 <dminuoso> could be that I confused vector-sized with sized-vector as well
2022-01-24 16:15:46 +0100 <merijn> So I don't really need any inconvenient resizing operations
2022-01-24 16:16:42 +0100 <dminuoso> merijn: is this math heavy? Or could you just use a Map polymorphic over a key?
2022-01-24 16:17:12 +0100 <merijn> dminuoso: Map is a pain, need lots of pointwise numerics
2022-01-24 16:17:32 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
2022-01-24 16:17:37 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
2022-01-24 16:18:18 +0100 <dminuoso> merijn: What about https://hackage.haskell.org/package/tensor ?
2022-01-24 16:18:31 +0100 <dminuoso> havent taken a closer look, but it seems to match your description
2022-01-24 16:18:53 +0100 <merijn> dminuoso: vector-sized covers pretty much all I need and seems easier, though?
2022-01-24 16:19:19 +0100 <dminuoso> merijn: If that works, then great! :)
2022-01-24 16:19:59 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
2022-01-24 16:21:07 +0100fendor_(~fendor@91.141.44.222.wireless.dyn.drei.com) (Remote host closed the connection)
2022-01-24 16:21:48 +0100 <leibniz> the thing i dont understand is about which applicatives commute with the constructor like StateL does
2022-01-24 16:22:16 +0100 <leibniz> this is the reason for presenting it as scanners, basically just a monadic version of mapAccumL
2022-01-24 16:22:28 +0100 <leibniz> instead of with this commutation condition via a superclass
2022-01-24 16:22:39 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-24 16:22:40 +0100 <leibniz> if i had other examples, it might motivate the more general approach
2022-01-24 16:23:13 +0100 <leibniz> otherwise you basically lose Traversable, and just end up with Scannable (implement the monadic version of mapAccumL)
2022-01-24 16:24:11 +0100 <leibniz> the "proposal", if i cant find any other examples, then just uses this StateL/Scanner thing
2022-01-24 16:24:32 +0100akegalj(~akegalj@89-172-25-196.adsl.net.t-com.hr) (Ping timeout: 240 seconds)
2022-01-24 16:24:35 +0100 <leibniz> and says something like "you dont traverse monadic tailed lists, you scanner them"
2022-01-24 16:25:16 +0100 <leibniz> "unless something something applicative commutes with the constructor" (which i havent quite developed - not having the examples im asking for)
2022-01-24 16:26:07 +0100mmalter(~mmalter@88.126.10.237)
2022-01-24 16:26:22 +0100 <leibniz> obviously for something simple like Identity, you can write the commutation relation no bother
2022-01-24 16:26:32 +0100 <leibniz> but thats not a useful example
2022-01-24 16:27:20 +0100sha296(~shakil@2409:4060:2e1a:fe17:1c57:6d0d:de58:2ca6) (Quit: Leaving)
2022-01-24 16:27:46 +0100 <leibniz> https://github.com/fog-hs/streaming-binary-files-take2/blob/master/Stream/StackM.hs#L116
2022-01-24 16:28:52 +0100Henson(~kvirc@107-179-133-201.cpe.teksavvy.com)
2022-01-24 16:29:54 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-24 16:30:36 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
2022-01-24 16:32:36 +0100 <leibniz> i guess thats strictly infinite as well as monadic, since it requires (s -> a -> m ( b, s)), not (s -> a -> m (Maybe (b, s)))
2022-01-24 16:32:48 +0100 <leibniz> i think...
2022-01-24 16:33:21 +0100 <leibniz> no wait thats wrong nvm
2022-01-24 16:34:04 +0100polezaivsani(~polezaivs@orangeshoelaces.net) (Ping timeout: 250 seconds)
2022-01-24 16:34:16 +0100razetime(~quassel@49.207.209.26)
2022-01-24 16:34:17 +0100CHUD(~CHUD@edu7895.kent.ac.uk)
2022-01-24 16:34:33 +0100 <leibniz> basically i think the point is that its given f :: (s -> a -> m (b, s)), instead of phrasing this using the Applicative StateL
2022-01-24 16:35:25 +0100 <leibniz> and it maps into the monad on line 119, and does the get + set just fine using the function g, which uses f
2022-01-24 16:36:31 +0100 <leibniz> the problem would be if it were some other thing, not an f of this form, which i guess is that of the applicative function in StateL
2022-01-24 16:36:48 +0100 <leibniz> not sure if anyone is following at this point so ill hold back for a minute
2022-01-24 16:48:15 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 16:49:05 +0100ubert1(~Thunderbi@p200300ecdf0994d82e117d25e75bd889.dip0.t-ipconnect.de)
2022-01-24 16:49:29 +0100ezyang(~ezyang@ool-18b820e3.dyn.optonline.net)
2022-01-24 16:49:39 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 16:49:45 +0100 <ezyang> hey everyone, for a "modern" installation of haskell, should I expect mtl to be visible
2022-01-24 16:50:03 +0100 <ezyang> as in, if someone takes a hs file and just runs ghci on it
2022-01-24 16:50:37 +0100 <dminuoso> ezyang: Mmm, in my modern installation I assume nix-style cabal projects for everything.
2022-01-24 16:51:06 +0100 <ezyang> trying hard not to force my students to use cabal ^^"
2022-01-24 16:52:08 +0100 <dminuoso> The tooling for v2- is very inadequate for this basic exploration style of "make a hs file and run it through ghci" :(
2022-01-24 16:52:28 +0100 <ezyang> stepping back a moment: modern installation is using ghcup, right?
2022-01-24 16:52:37 +0100 <dminuoso> ezyang: Id expect boot libraries to be visible as a minimum
2022-01-24 16:52:52 +0100 <ezyang> yeah, I thought mtl was a boot library, but maybe not anymore?
2022-01-24 16:52:58 +0100 <lortabac> ezyang: on GHC 8.10.7 I don't need cabal to use mtl
2022-01-24 16:52:58 +0100 <dminuoso> ghcup seems to be the currently preferred method based on my highly based observational skills
2022-01-24 16:53:10 +0100 <ezyang> hmm ok
2022-01-24 16:53:14 +0100 <ezyang> useful data point
2022-01-24 16:53:19 +0100 <dminuoso> *highly biased
2022-01-24 16:53:21 +0100 <maerwald> even for ghc 9.2.1, mtl is still packaged with GHC
2022-01-24 16:53:33 +0100 <ezyang> on my jank ghcup install mtl was hidden
2022-01-24 16:53:40 +0100 <ezyang> but I had an environment file smh
2022-01-24 16:53:56 +0100 <ezyang> so maybe that was just self inflicted
2022-01-24 16:53:58 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-24 16:54:04 +0100 <ezyang> I also managed to install quickcheck twice into the environment file T.T
2022-01-24 16:54:26 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-01-24 16:55:40 +0100 <ezyang> oh nooo my template haskell code needs updating lol
2022-01-24 16:55:43 +0100xff0x(~xff0x@2001:1a81:5370:cd00:aa5:136f:1b20:712a) (Ping timeout: 268 seconds)
2022-01-24 16:56:16 +0100xff0x(~xff0x@port-92-193-184-123.dynamic.as20676.net)
2022-01-24 16:57:06 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net)
2022-01-24 16:57:34 +0100jgeerds(~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 268 seconds)
2022-01-24 16:58:36 +0100 <merijn> ezyang: There's a compat library that's fairly easy
2022-01-24 16:58:43 +0100CHUD(~CHUD@edu7895.kent.ac.uk) (Ping timeout: 256 seconds)
2022-01-24 16:58:51 +0100 <merijn> @hackage th-compat
2022-01-24 16:58:51 +0100 <lambdabot> https://hackage.haskell.org/package/th-compat
2022-01-24 16:59:57 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds)
2022-01-24 17:00:02 +0100leibniz(~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed)
2022-01-24 17:01:18 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-24 17:03:43 +0100 <SrPx> Can I configure Rust to just show the panic message when it panics on release, instead of a long: << thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "PANIC_MESSAGE"', src/file.rs:xx:yy >>
2022-01-24 17:04:18 +0100 <ezyang> wrong channel
2022-01-24 17:04:33 +0100 <SrPx> ops, sorry
2022-01-24 17:05:01 +0100alp(~alp@user/alp)
2022-01-24 17:06:46 +0100alx741(~alx741@157.100.93.160)
2022-01-24 17:08:15 +0100max22-(~maxime@2a01cb0883359800fbaebbbb888c1e29.ipv6.abo.wanadoo.fr)
2022-01-24 17:09:54 +0100 <ezyang> is there an easy way to tell what template-haskell version corresponds to what ghc version
2022-01-24 17:10:00 +0100akegalj(~akegalj@89-172-25-196.adsl.net.t-com.hr)
2022-01-24 17:10:06 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 17:10:46 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:25bb:89ab:830f:7e39) (Quit: WeeChat 2.8)
2022-01-24 17:11:08 +0100 <maerwald> ezyang: https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history
2022-01-24 17:11:10 +0100 <ezyang> ah the changelog
2022-01-24 17:11:13 +0100 <ezyang> thx!
2022-01-24 17:11:37 +0100 <maerwald> ghcup shows the corresponding base version only
2022-01-24 17:12:27 +0100akegalj(~akegalj@89-172-25-196.adsl.net.t-com.hr) (Client Quit)
2022-01-24 17:13:57 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 17:14:09 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 17:14:28 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt)
2022-01-24 17:14:35 +0100 <romesrf> hey everyone
2022-01-24 17:16:14 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection)
2022-01-24 17:16:26 +0100nattiestnate(~nate@2001:448a:20a0:2d74:df0e:2d0:816:6977)
2022-01-24 17:17:26 +0100 <romesrf> I was just now thinking about how my dad was saying haskell wasn't readable for programmers without functional experience, and he was looking at some program that in between some other things did: addValue x \n updateValue id y
2022-01-24 17:18:02 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-01-24 17:18:10 +0100 <romesrf> then i wrote updateValue' = uncurry updateValue (out of sight)
2022-01-24 17:18:27 +0100 <romesrf> and rewrote addValue(x) \n updateValue(id, y), and he said "oh that's much better"
2022-01-24 17:18:34 +0100 <romesrf> :p
2022-01-24 17:20:00 +0100fef(~thedawn@user/thedawn) (Quit: Leaving)
2022-01-24 17:21:57 +0100razetime(~quassel@49.207.209.26) (Ping timeout: 256 seconds)
2022-01-24 17:22:21 +0100CHUD(~CHUD@edu7895.kent.ac.uk)
2022-01-24 17:24:15 +0100 <ezyang> merijn: actually, turns out I hadn't even gotten here yet lol
2022-01-24 17:24:36 +0100 <ezyang> now I'm at ghc 9 compat and ... I kind of don't wanna do it haha
2022-01-24 17:25:30 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2022-01-24 17:25:38 +0100lispy(~lispy4@84.69.59.93)
2022-01-24 17:25:41 +0100khanred(~khanred@user/khanred)
2022-01-24 17:26:47 +0100alx741(~alx741@157.100.93.160)
2022-01-24 17:28:40 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-24 17:29:19 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-01-24 17:29:32 +0100emf_(~emf@2620:10d:c090:400::5:2d26) (Ping timeout: 250 seconds)
2022-01-24 17:29:38 +0100khanred(~khanred@user/khanred) (Leaving)
2022-01-24 17:29:50 +0100lavaman(~lavaman@98.38.249.169)
2022-01-24 17:30:33 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 17:31:48 +0100 <merijn> ezyang: It was fairly painless for me, but I only had fairly simple code
2022-01-24 17:32:22 +0100 <merijn> ezyang: Mostly adding the th-compat dependency and sprinkle a handful of type synonyms/lift functions throughout
2022-01-24 17:34:37 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-24 17:36:17 +0100 <Hecate> https://twitter.com/jckarter/status/1485651876825559041
2022-01-24 17:36:18 +0100 <Hecate> hahahaha
2022-01-24 17:36:19 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d)
2022-01-24 17:40:03 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-01-24 17:40:11 +0100 <ezyang> ok it turns out
2022-01-24 17:40:16 +0100 <ezyang> I was not broken by typed splice changes
2022-01-24 17:40:24 +0100 <ezyang> but by the generalization of quasiquote monad signature
2022-01-24 17:40:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d) (Ping timeout: 240 seconds)
2022-01-24 17:41:08 +0100 <Hecate> oh hey ezyang :)
2022-01-24 17:41:20 +0100 <ezyang> sup
2022-01-24 17:42:06 +0100lionhairdino(~jacoo@121.131.39.82) (Ping timeout: 250 seconds)
2022-01-24 17:43:00 +0100 <merijn> ezyang: That's what I was assuming :p
2022-01-24 17:43:02 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-01-24 17:43:15 +0100 <merijn> th-compat should make that easy to fix, though
2022-01-24 17:44:28 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-24 17:46:02 +0100SummerSonw(~The_viole@203.77.49.232) (Ping timeout: 240 seconds)
2022-01-24 17:48:24 +0100alx741(~alx741@157.100.93.160)
2022-01-24 17:50:04 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 17:51:15 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d)
2022-01-24 17:53:41 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 268 seconds)
2022-01-24 17:54:15 +0100CHUD(~CHUD@edu7895.kent.ac.uk) (Ping timeout: 256 seconds)
2022-01-24 17:54:26 +0100razetime(~quassel@49.207.209.26)
2022-01-24 17:57:13 +0100provorny_compsog(~provornyc@2001:470:69fc:105::1:74df)
2022-01-24 17:58:17 +0100 <EvanR> romesrf, actually i have similar experience, before they even get to laziness, type systems, purely functionalism, immutable algebraic data types, etc etc etc etc, they can't get past the fact that foo(x,y,z) is written f x y z
2022-01-24 17:58:27 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-01-24 17:58:45 +0100 <EvanR> *if you think that's bad, don't try lisp*
2022-01-24 17:59:46 +0100lbseale(~ep1ctetus@user/ep1ctetus)
2022-01-24 17:59:57 +0100nattiestnate(~nate@2001:448a:20a0:2d74:df0e:2d0:816:6977) (Quit: WeeChat 3.4)
2022-01-24 18:00:18 +0100razetime(~quassel@49.207.209.26) (Ping timeout: 250 seconds)
2022-01-24 18:00:44 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2022-01-24 18:01:14 +0100provorny_compsogSixto[m]
2022-01-24 18:01:42 +0100 <EvanR> I there was some backlash in recent years at how ruby lets you write f x, y, z OR f(x,y,z) and now people demand the second one for there's one way to do it sake
2022-01-24 18:01:53 +0100CHUD(~CHUD@edu7895.kent.ac.uk)
2022-01-24 18:02:05 +0100zmt00(~zmt00@user/zmt00)
2022-01-24 18:02:16 +0100 <maerwald> at least you can have a decent formatter then
2022-01-24 18:02:34 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-01-24 18:03:01 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 18:05:10 +0100lispy(~lispy4@84.69.59.93) (Quit: Leaving)
2022-01-24 18:05:38 +0100lispy(~lispy4@84.69.59.93)
2022-01-24 18:06:36 +0100alx741(~alx741@157.100.93.160)
2022-01-24 18:08:02 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds)
2022-01-24 18:08:41 +0100bjobjo(~bjobjo@user/bjobjo)
2022-01-24 18:09:06 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection)
2022-01-24 18:10:54 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 18:11:07 +0100 <dsal> I thought the "no parens" thing was kind of silly as well until I realized you could also write `g = f x` and then later do stuff like `map g zs` -- the sort of thing you can' sensibly do in the languages that were more "comfortable" due to parentheses.
2022-01-24 18:12:47 +0100 <c_wraith> you mean in that automatic currying is weirder in languages that require parens on function calls?
2022-01-24 18:13:10 +0100chele(~chele@user/chele) (Remote host closed the connection)
2022-01-24 18:13:42 +0100 <EvanR> function f(x,y,z){...}, f.pleaseAutomaticallyCurry(x,y)...
2022-01-24 18:13:51 +0100 <EvanR> since f(x,y) makes z undefined
2022-01-24 18:14:12 +0100log101(~log101@212.125.22.146)
2022-01-24 18:14:39 +0100ezyang(~ezyang@ool-18b820e3.dyn.optonline.net) (Ping timeout: 256 seconds)
2022-01-24 18:15:49 +0100 <dsal> c_wraith: Yeah. Like, purescript does it, but you end up writing f(x)(y)(z) which is… better?
2022-01-24 18:16:24 +0100 <dsal> (not purescript the language, just the way it compiles to javascript so your JS code calling PS looks like that)
2022-01-24 18:16:52 +0100 <EvanR> that can't be a good way to implement curried functions in js...
2022-01-24 18:16:58 +0100 <EvanR> efficiency wise
2022-01-24 18:18:07 +0100 <dsal> The translation seems to be really straightforward. The JS code looks a lot like how you'd imagine the PS code looking, just with more ()s and {}s. But it did seem weird.
2022-01-24 18:21:32 +0100 <c_wraith> EvanR: in the case of compiling to JS, it seems like the approach that would keep your code the smallest. Otherwise you'd need different wrappers for each arity
2022-01-24 18:22:11 +0100 <EvanR> each arity and the eventual "unknown arity arity" like ghc
2022-01-24 18:23:20 +0100 <c_wraith> unknown arity gets taken care of by the 1-arity case
2022-01-24 18:24:25 +0100SwarmCollective(~joseph@2603-6011-bc02-b600-b88c-5e22-9d18-391e.res6.spectrum.com)
2022-01-24 18:26:37 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
2022-01-24 18:27:02 +0100Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com)
2022-01-24 18:27:11 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Read error: Connection reset by peer)
2022-01-24 18:28:51 +0100raym_(~raym@user/raym)
2022-01-24 18:28:58 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2022-01-24 18:29:01 +0100raym(~raym@user/raym) (Ping timeout: 256 seconds)
2022-01-24 18:29:08 +0100alx741(~alx741@157.100.93.160)
2022-01-24 18:32:02 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 18:33:18 +0100justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3)
2022-01-24 18:34:23 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-01-24 18:35:16 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2022-01-24 18:35:54 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-24 18:37:11 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-01-24 18:40:17 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-24 18:45:22 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2022-01-24 18:47:05 +0100deadmarshal(~deadmarsh@95.38.118.201)
2022-01-24 18:49:50 +0100alx741(~alx741@157.100.93.160)
2022-01-24 18:51:07 +0100econo(uid147250@user/econo)
2022-01-24 18:51:37 +0100MajorBiscuit(~MajorBisc@c-001-025-008.client.tudelft.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-24 18:53:25 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 18:53:30 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Ping timeout: 268 seconds)
2022-01-24 18:53:51 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 18:53:51 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 18:53:51 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 18:57:57 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 18:58:51 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 19:00:33 +0100CHUD(~CHUD@edu7895.kent.ac.uk) (Ping timeout: 256 seconds)
2022-01-24 19:00:39 +0100Jing(~hedgehog@240e:390:7c53:a7e1:4860:ab29:df65:d349) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-24 19:00:57 +0100raym_(~raym@user/raym) (Ping timeout: 240 seconds)
2022-01-24 19:01:56 +0100raym(~raym@user/raym)
2022-01-24 19:04:17 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-24 19:05:20 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 19:08:01 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 19:08:01 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 19:08:01 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 19:09:36 +0100geranim0(~geranim0@d-132-204-221-88.res.umontreal.ca)
2022-01-24 19:10:32 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
2022-01-24 19:10:43 +0100mikoto-chan(~mikoto-ch@213.177.151.239)
2022-01-24 19:11:31 +0100log101(~log101@212.125.22.146) (Ping timeout: 256 seconds)
2022-01-24 19:12:30 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
2022-01-24 19:13:05 +0100hololeap(~hololeap@user/hololeap)
2022-01-24 19:13:25 +0100tom__(~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
2022-01-24 19:15:32 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net)
2022-01-24 19:16:28 +0100alx741(~alx741@157.100.93.160)
2022-01-24 19:17:26 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 250 seconds)
2022-01-24 19:17:33 +0100tom_(~tom@host86-151-99-97.range86-151.btcentralplus.com) (Ping timeout: 256 seconds)
2022-01-24 19:18:55 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 19:19:49 +0100yauhsien(~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-01-24 19:22:27 +0100Akiva(~Akiva@user/Akiva)
2022-01-24 19:22:37 +0100neceve(~quassel@2.26.93.228)
2022-01-24 19:23:07 +0100log101(~log101@212.125.22.146)
2022-01-24 19:23:31 +0100ec(~ec@gateway/tor-sasl/ec) (Quit: ec)
2022-01-24 19:24:24 +0100polyphem_polyphem
2022-01-24 19:26:02 +0100CHUD(~CHUD@host-80-41-89-108.as13285.net)
2022-01-24 19:27:28 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2022-01-24 19:27:43 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55)
2022-01-24 19:30:28 +0100machinedgod(~machinedg@24.105.81.50)
2022-01-24 19:30:35 +0100CHUD(~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds)
2022-01-24 19:31:55 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-24 19:32:35 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-24 19:33:00 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 19:34:28 +0100imalsogreg(~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection)
2022-01-24 19:35:34 +0100alx741(~alx741@157.100.93.160)
2022-01-24 19:35:47 +0100iteratee(~kyle@162.218.222.107) (Read error: Connection reset by peer)
2022-01-24 19:37:01 +0100log101(~log101@212.125.22.146) (Read error: Connection reset by peer)
2022-01-24 19:37:35 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 19:38:27 +0100mbuf(~Shakthi@171.61.206.147) (Quit: Leaving)
2022-01-24 19:39:44 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 19:43:50 +0100Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com) (Quit: leaving)
2022-01-24 19:44:33 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2022-01-24 19:44:41 +0100alp(~alp@user/alp) (Ping timeout: 268 seconds)
2022-01-24 19:44:49 +0100imalsogreg(~imalsogre@c-73-172-114-3.hsd1.md.comcast.net)
2022-01-24 19:45:46 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 19:45:46 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 19:45:46 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 19:47:17 +0100imalsogreg(~imalsogre@c-73-172-114-3.hsd1.md.comcast.net) (Remote host closed the connection)
2022-01-24 19:47:30 +0100imalsogreg(~imalsogre@2601:147:300:f930:5437:e43a:e44a:1d0d)
2022-01-24 19:47:50 +0100 <polyphem> i have this code, how could one improve it ? https://paste.tomsmeding.com/eJrHywZc
2022-01-24 19:49:57 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Ping timeout: 240 seconds)
2022-01-24 19:49:59 +0100imalsogreg(~imalsogre@2601:147:300:f930:5437:e43a:e44a:1d0d) (Remote host closed the connection)
2022-01-24 19:50:09 +0100 <lagash> Rewrite it in Rust! /s
2022-01-24 19:50:13 +0100eruditass(uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-24 19:50:17 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-24 19:50:18 +0100iteratee(~kyle@162.218.222.107)
2022-01-24 19:50:37 +0100 <[exa]> polyphem: you may remove BangPatterns by using 'det () `seq` pure ()` but well, why improve?
2022-01-24 19:52:12 +0100imalsogreg(~imalsogre@c-73-172-114-3.hsd1.md.comcast.net)
2022-01-24 19:52:17 +0100 <[exa]> also the \()-> is const
2022-01-24 19:53:13 +0100 <polyphem> ok improve, was wrong wording , maybe "extend" ... ?
2022-01-24 19:53:13 +0100gentauro(~gentauro@user/gentauro) (Read error: Connection reset by peer)
2022-01-24 19:53:51 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2022-01-24 19:54:57 +0100iteratee(~kyle@162.218.222.107) (Ping timeout: 256 seconds)
2022-01-24 19:55:14 +0100iteratee(~kyle@162.218.222.107)
2022-01-24 19:55:57 +0100 <tomsmeding> polyphem: why produce a function taking () ?
2022-01-24 19:56:11 +0100 <maerwald> could GHC rewrite all function of the form `f x y = ...` to `f = \x -> \y -> ...`?
2022-01-24 19:56:24 +0100 <monochrom> Each "\()" can be replaced by "\_" for both generality and non-strictness.
2022-01-24 19:56:38 +0100 <tomsmeding> maerwald: iirc that difference has an influence on inlining behaviour
2022-01-24 19:56:44 +0100 <maerwald> tomsmeding: yes
2022-01-24 19:56:44 +0100alx741(~alx741@157.100.93.160)
2022-01-24 19:56:46 +0100 <maerwald> that's why I ask
2022-01-24 19:57:27 +0100 <[exa]> polyphem: extend in what direction? (you might autoderive Enum for the fail cases and autoselect a random one, but still, why)
2022-01-24 19:57:35 +0100 <geekosaur> also the monomorphism restriction
2022-01-24 19:57:36 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2022-01-24 19:58:10 +0100 <monochrom> You can also delete all of the "`seq` ()", and instead, in explode, use "evaluate (arm d)".
2022-01-24 19:58:42 +0100zaquest(~notzaques@5.130.79.72) (Read error: Connection reset by peer)
2022-01-24 19:58:46 +0100gentauro(~gentauro@user/gentauro)
2022-01-24 19:58:59 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 19:59:15 +0100 <monochrom> Or rather, "evaluate (arm d ())"
2022-01-24 19:59:17 +0100polezaivsani(~polezaivs@orangeshoelaces.net)
2022-01-24 19:59:31 +0100 <geekosaur> anyway I think currently ghc is careful *not* to do such rewriting
2022-01-24 19:59:41 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-24 19:59:47 +0100 <geekosaur> you might ask in #ghc about why/what you might do about it
2022-01-24 20:00:13 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-24 20:00:24 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 20:01:09 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2022-01-24 20:01:09 +0100Brandon_IX(~brandon@178-79-138-117.ip.linodeusercontent.com)
2022-01-24 20:01:44 +0100 <polyphem> geekosaur: monomorphism restriction ?
2022-01-24 20:02:23 +0100riatre(~quassel@2001:310:6000:f::5198:1) (Quit: No Ping reply in 180 seconds.)
2022-01-24 20:03:14 +0100 <geekosaur> if a binding has no parameters it will be forced to be monomorphic instead of polymorphic by default, so that sharing works
2022-01-24 20:03:30 +0100 <tomsmeding> % :set -XMonomorphismRestriction
2022-01-24 20:03:30 +0100 <yahb> tomsmeding:
2022-01-24 20:03:35 +0100 <tomsmeding> % f x = x + 1
2022-01-24 20:03:35 +0100 <yahb> tomsmeding:
2022-01-24 20:03:39 +0100 <tomsmeding> % g = \x -> x + 1
2022-01-24 20:03:39 +0100 <yahb> tomsmeding:
2022-01-24 20:03:40 +0100 <geekosaur> https://wiki.haskell.org/Monomorphism_restriction
2022-01-24 20:03:40 +0100riatre(~quassel@2001:310:6000:f::5198:1)
2022-01-24 20:03:41 +0100 <tomsmeding> % :t f
2022-01-24 20:03:41 +0100 <yahb> tomsmeding: Num a => a -> a
2022-01-24 20:03:42 +0100 <tomsmeding> % :t g
2022-01-24 20:03:42 +0100 <yahb> tomsmeding: Integer -> Integer
2022-01-24 20:04:00 +0100 <tomsmeding> (the monomorphism restriction is off by default in ghci, but on by default in a source file)
2022-01-24 20:08:44 +0100benin(~benin@183.82.31.24) (Quit: The Lounge - https://thelounge.chat)
2022-01-24 20:09:00 +0100 <polyphem> https://paste.tomsmeding.com/yBWgK3C0
2022-01-24 20:09:37 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-24 20:10:00 +0100 <polyphem> monomorphism restriction is "default typing" ?!
2022-01-24 20:10:32 +0100 <geekosaur> defaulting is default typing. it helps ghc when it wants to monomorphize and can't do so otherwise
2022-01-24 20:10:56 +0100 <geekosaur> `default (Integer, Double)` is the "default default"
2022-01-24 20:11:21 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 20:11:44 +0100 <geekosaur> ghci adds () so the empty list typechecks as *something* when it'd otherwise be ambiguous (see ExtendedDefaultRules)
2022-01-24 20:12:07 +0100 <polyphem> ok i see ghc does default typing becase monomorphism restriction has to monomorphize to a concrete type and if none can be infered ghc defaults , right ?
2022-01-24 20:12:28 +0100 <geekosaur> there are also some rules as to which typeclasses defaulting will operate through, which are relaxed under ExtendedDefaultRules
2022-01-24 20:12:33 +0100 <geekosaur> yes
2022-01-24 20:12:45 +0100soxen(~bob@pool-173-54-217-168.nwrknj.fios.verizon.net)
2022-01-24 20:13:16 +0100 <polyphem> i had an vague intuition already, no it has come clear
2022-01-24 20:13:22 +0100 <polyphem> now
2022-01-24 20:13:23 +0100alp(~alp@user/alp)
2022-01-24 20:16:13 +0100zaquest(~notzaques@5.130.79.72)
2022-01-24 20:17:14 +0100alx741(~alx741@157.100.93.160)
2022-01-24 20:17:39 +0100burnsidesLlama(~burnsides@dhcp168-037.wadham.ox.ac.uk)
2022-01-24 20:17:53 +0100 <geekosaur> defaulting is also used when ghc or ghci needs to assign *some* type and can't for some reason, e.g. a simple program that does math but never specifies any type signature will get inferred as Integer or Double depending on whether it does division (Double) or not (Integer)
2022-01-24 20:18:25 +0100 <geekosaur> since ghc usually can't proceed without assigning some type to an expression
2022-01-24 20:18:47 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 20:19:19 +0100 <polyphem> geekosaur: yeah , once in a while it has to stick to concrete types
2022-01-24 20:19:42 +0100cynomys(~cynomys@user/cynomys)
2022-01-24 20:20:02 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-24 20:20:05 +0100deadmarshal(~deadmarsh@95.38.118.201) (Ping timeout: 256 seconds)
2022-01-24 20:21:17 +0100 <geekosaur> ultimately it has to resolve to a concrete type. for example (+) for Integer is different from (+) for Int is different from (+) for Float is different from (+) for Double. so defaulting helps it resolve the type(s) down to something concrete there is a dictionary for
2022-01-24 20:21:47 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 20:22:10 +0100 <geekosaur> very rarely you will see situations where it doesn't actually need a concrete type, and a weird "type" called Any will pop up
2022-01-24 20:22:11 +0100 <polyphem> i had a map of exitential values with some typeclass constraints , and wanted to return the values and pass it on to a polymorphic function with the same constraints , but it didn't let me do it i had to coerce it to a concrete type first ....
2022-01-24 20:23:15 +0100 <polyphem> :t Any
2022-01-24 20:23:16 +0100 <lambdabot> Bool -> Any
2022-01-24 20:23:47 +0100 <geekosaur> not the same Any, that one is a newtype wrapper for a monoid iirc
2022-01-24 20:24:02 +0100 <geekosaur> GHC.Types.Any is a magic type family these days, but used to be even mroe magical
2022-01-24 20:24:08 +0100 <polyphem> ok , i wondered for a moment
2022-01-24 20:24:12 +0100 <polyphem> :9
2022-01-24 20:26:15 +0100 <geekosaur> it's not supposed to be exposed, but every so often it leaks out
2022-01-24 20:26:34 +0100SwarmCollective(~joseph@2603-6011-bc02-b600-b88c-5e22-9d18-391e.res6.spectrum.com) (Remote host closed the connection)
2022-01-24 20:26:57 +0100SwarmCollective(~joseph@2603-6011-bc02-b600-40df-b781-ef29-193a.res6.spectrum.com)
2022-01-24 20:27:41 +0100 <geekosaur> https://downloads.haskell.org/ghc/latest/docs/html/libraries/ghc-prim-0.8.0/GHC-Types.html#t:Any
2022-01-24 20:27:59 +0100 <polyphem> i am reading the documentation, right now with hdc : unsafeCoerce (unsafeCoerce x :: Any) :: t is equivalent to x.
2022-01-24 20:28:56 +0100 <polyphem> do you know hdc , https://lazamar.github.io/haskell-documentation-in-the-command-line/ its fantastic
2022-01-24 20:30:14 +0100 <[exa]> ok that's cute
2022-01-24 20:30:56 +0100 <polyphem> tmux 3 panes vim/ghcid/hdc ... best ide ever :)
2022-01-24 20:34:41 +0100 <xerox> polyphem: what's hdc?
2022-01-24 20:35:19 +0100 <polyphem> xerox: haskell-documentation-in-the-command-line ^
2022-01-24 20:35:35 +0100ubert1(~Thunderbi@p200300ecdf0994d82e117d25e75bd889.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-01-24 20:36:14 +0100 <xerox> ah very nice, gonna try it out
2022-01-24 20:37:01 +0100alx741(~alx741@157.100.93.160)
2022-01-24 20:37:02 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-24 20:37:05 +0100 <monochrom> Ugh "solving" the window-switching problem by the terminal-switching "solution".
2022-01-24 20:37:17 +0100 <polyphem> one can pich up its usage , quite easy ..
2022-01-24 20:37:48 +0100 <polyphem> monochrom: hmm
2022-01-24 20:37:59 +0100 <monochrom> I say that https://hackage.haskell.org/package/manatee is the only thing that comes close to being a solution.
2022-01-24 20:38:04 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 20:38:31 +0100 <monochrom> One single environment that has an editor, a browser, and an IRC client so you can talk to #haskell.
2022-01-24 20:38:54 +0100 <xerox> cute!
2022-01-24 20:39:32 +0100cynomys(~cynomys@user/cynomys) (Quit: leaving)
2022-01-24 20:39:47 +0100cynomys(~cynomys@user/cynomys)
2022-01-24 20:39:53 +0100 <monochrom> It has probably bitrotted. The author landed a real-world job.
2022-01-24 20:40:30 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 20:40:36 +0100 <xerox> 🪦
2022-01-24 20:41:06 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net)
2022-01-24 20:41:07 +0100 <maerwald> monochrom: that's usually the worst that can happen to hackers, yes
2022-01-24 20:41:47 +0100 <monochrom> But anyone today who want to solve the too-much-switching problem should be doing something similar to manatee, not shoehorning more things into 1960s terminals.
2022-01-24 20:41:54 +0100 <monochrom> Think outside the terminal.
2022-01-24 20:42:00 +0100 <maerwald> but honestly... it's kinda pointless when using a good tiling wm
2022-01-24 20:42:05 +0100 <sm> vs code + hoogle extension + terminal pane running emacs, erc or whatever can also work well, even if not maximally integrated
2022-01-24 20:43:04 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-24 20:43:35 +0100 <sm> (the gtoolkit thing I posted on reddit goes further away from terminals)
2022-01-24 20:44:25 +0100 <sm> maybe manatee should be revived ?
2022-01-24 20:44:55 +0100 <polyphem> whats also nice is GOYO for vim : https://github.com/junegunn/goyo.vim
2022-01-24 20:45:41 +0100lavaman(~lavaman@98.38.249.169)
2022-01-24 20:46:58 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 268 seconds)
2022-01-24 20:48:38 +0100cyphase(~cyphase@user/cyphase)
2022-01-24 20:50:36 +0100imalsogreg(~imalsogre@c-73-172-114-3.hsd1.md.comcast.net) (Remote host closed the connection)
2022-01-24 20:51:34 +0100 <polyphem> i have no mouse only touchpad, i like not switching mouse/keyboard
2022-01-24 20:52:04 +0100imalsogreg(~imalsogre@2601:147:300:f930:40c5:3263:848f:5ae1)
2022-01-24 20:53:19 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-24 20:54:10 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 20:54:10 +0100 <maerwald> sm: too much work for something that a window manager does better
2022-01-24 20:54:29 +0100 <geekosaur> yes, it's bitrotted. I tried to build it a year ago
2022-01-24 20:54:44 +0100 <geekosaur> looked really neat, but sadly…
2022-01-24 20:55:08 +0100 <maerwald> polyphem: and mouse use is really unhealthy
2022-01-24 20:55:48 +0100 <sm> I'm talking about a highly integrated environment, not just managing windows
2022-01-24 20:56:15 +0100 <maerwald> well, that's the same problem
2022-01-24 20:56:21 +0100 <sm> the haskell version of smalltalk or a lisp machine or emacs
2022-01-24 20:56:32 +0100 <maerwald> emacs is a window manager
2022-01-24 20:56:51 +0100 <geekosaur> pretty lousy one imo
2022-01-24 20:56:54 +0100 <polyphem> https://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar
2022-01-24 20:57:16 +0100alx741(~alx741@157.100.93.160)
2022-01-24 21:02:35 +0100 <sm> I find it a pretty useful one! in the specific situation of remote shells. Combined with workgroups2 for saving layouts and dtach/mosh for
2022-01-24 21:02:35 +0100 <sm> connecting
2022-01-24 21:04:27 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 21:05:20 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 250 seconds)
2022-01-24 21:06:46 +0100juhp(~juhp@128.106.188.82)
2022-01-24 21:11:53 +0100o-90(~o-90@gateway/tor-sasl/o-90)
2022-01-24 21:12:18 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt)
2022-01-24 21:13:24 +0100 <maerwald> hmm... I think I need a GHC 7.2.2 for manatee
2022-01-24 21:14:06 +0100 <monochrom> Yeah it's pretty old. cabal-v2 didn't exist.
2022-01-24 21:14:14 +0100 <monochrom> (for example)
2022-01-24 21:14:32 +0100 <monochrom> and gtk2hs was all the rage, as another example.
2022-01-24 21:18:10 +0100 <EvanR> what's the current state of the art for gtk in haskell?
2022-01-24 21:18:27 +0100 <geekosaur> gi?
2022-01-24 21:18:55 +0100finsternis(~X@23.226.237.192) (Quit: Changing server)
2022-01-24 21:19:00 +0100 <geekosaur> https://hackage.haskell.org/package/gi-gtk
2022-01-24 21:19:19 +0100finsternis(~X@23.226.237.192)
2022-01-24 21:19:35 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-24 21:19:45 +0100jgeerds(~jgeerds@55d4a547.access.ecotel.net)
2022-01-24 21:20:14 +0100 <EvanR> gnarly
2022-01-24 21:21:58 +0100 <maerwald> I like gtk2hs better
2022-01-24 21:22:07 +0100 <maerwald> there are some API differences
2022-01-24 21:22:45 +0100alx741(~alx741@157.100.93.160)
2022-01-24 21:24:00 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-24 21:24:30 +0100zincy(~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67)
2022-01-24 21:24:35 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net) (Ping timeout: 268 seconds)
2022-01-24 21:25:45 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-01-24 21:26:10 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-01-24 21:26:38 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d) (Remote host closed the connection)
2022-01-24 21:26:56 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 21:26:57 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net)
2022-01-24 21:27:35 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 21:27:35 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 21:27:35 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 21:27:46 +0100 <monochrom> Haha nice https://github.com/haskell-gi/haskell-gi/wiki/Using-threads-in-Gdk-and-Gtk--programs references my threading-and-FFI article
2022-01-24 21:28:26 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d)
2022-01-24 21:29:21 +0100 <EvanR> "gdk and by extension gtk+ are not thread safe" good to know
2022-01-24 21:30:12 +0100 <monochrom> The GUI community has basically given up on concurrency.
2022-01-24 21:31:02 +0100 <monochrom> They began with caring a lot yes. So they added a lot of locking and mutexes. Then they found that it was too slow.
2022-01-24 21:31:07 +0100 <EvanR> isn't GUI a thing that necessarily must be concurrent
2022-01-24 21:31:11 +0100imalsogreg(~imalsogre@2601:147:300:f930:40c5:3263:848f:5ae1) (Remote host closed the connection)
2022-01-24 21:31:11 +0100 <geekosaur> that's only part of it
2022-01-24 21:31:46 +0100 <geekosaur> you can lock/mutex the data structures all you want, or go the xcb route and put it all on the programmer
2022-01-24 21:31:52 +0100imalsogreg(~imalsogre@2601:147:300:f930:40c5:3263:848f:5ae1)
2022-01-24 21:31:59 +0100 <geekosaur> the connectionb to the X server can't be shared between threads
2022-01-24 21:32:25 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 21:32:33 +0100 <geekosaur> it's a unix socket. if two threads read from the socket for X server events, who wins?
2022-01-24 21:32:56 +0100 <tomsmeding> if two threads _write_ to the socket, what happens?
2022-01-24 21:33:01 +0100 <geekosaur> that too
2022-01-24 21:33:40 +0100 <geekosaur> in any case the point is you still lose when it comes to concurrency, so there's really no point in trying
2022-01-24 21:33:57 +0100 <monochrom> Concurrency was "solved" in the 1970s unix by select-loops. So that's what GUIs do today.
2022-01-24 21:34:06 +0100 <EvanR> I'm mildly flabbergasted
2022-01-24 21:34:47 +0100 <EvanR> access to some socket needs to be synchronized, so the entire field of research must be single threaded
2022-01-24 21:35:04 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net) (Ping timeout: 268 seconds)
2022-01-24 21:35:31 +0100 <tomsmeding> I guess it also just... works like this
2022-01-24 21:35:43 +0100 <tomsmeding> no one had a pressing enough need for concurrent UI access
2022-01-24 21:35:57 +0100 <myShoggoth> I'm very excited to announce that the Haskell Foundation has a DevOps position available, supporting GHC and core open source Haskell projects!
2022-01-24 21:35:57 +0100 <myShoggoth> Please take a look at https://haskell.foundation/careers/devops.html and spread it around. This position is central in the Haskell ecosystem and is an opportunity to make a huge impact.
2022-01-24 21:36:07 +0100 <geekosaur> EvanR, at some point you get a server response that mustr be directed to a particular thread
2022-01-24 21:36:13 +0100 <geekosaur> which is why I used the read example
2022-01-24 21:36:15 +0100 <EvanR> particular files that are open shouldn't be wildly accessed by various threads, but we still have multi-threaded programs that use files?
2022-01-24 21:36:20 +0100 <geekosaur> it doesn't happen by magic
2022-01-24 21:36:37 +0100yauhsien_(~yauhsien@61-231-17-3.dynamic-ip.hinet.net)
2022-01-24 21:37:22 +0100 <monochrom> Ugh unix presents a lot of non-file things with file-like interfaces, so yeah...
2022-01-24 21:37:51 +0100 <EvanR> it's just that gtk+ is a huge thing, and a unix socket is a small thing. So the small thing dictacts the entire nature of the huge thing, is what I'm hearing
2022-01-24 21:37:57 +0100vicfred(~vicfred@user/vicfred)
2022-01-24 21:38:21 +0100 <monochrom> The precise wording is stream interfaces but you get what I mean, it talks of reading and writing a handle.
2022-01-24 21:39:11 +0100 <tomsmeding> EvanR: I invite you to submit a proposal to change the interface of the X server :p
2022-01-24 21:39:21 +0100 <EvanR> I doubt that matters at this point
2022-01-24 21:39:24 +0100 <maerwald> O.o
2022-01-24 21:39:24 +0100 <tomsmeding> yeah
2022-01-24 21:39:41 +0100 <tomsmeding> maybe people began caring when it was too late
2022-01-24 21:39:51 +0100tomsmedingwonders if wayland does this differently
2022-01-24 21:39:56 +0100tomsmedingknows ~nothing about wayland
2022-01-24 21:40:36 +0100 <maerwald> wayland is great... unless you use nvidia... or use voice control desktop software... or want properly working window icons in your WM, or...
2022-01-24 21:40:56 +0100 <tomsmeding> yeah I tried sway, then it wouldn't start because I have nvidia, then I went back to i3
2022-01-24 21:40:57 +0100yauhsien_(~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-01-24 21:41:13 +0100 <monochrom> A select-loop has its convenience. Namely, nothing to lock because until you call select next time, you have monopoly.
2022-01-24 21:41:16 +0100 <tomsmeding> (yes, also wouldn't start with the --fuck-you-start-please flag)
2022-01-24 21:41:30 +0100 <monochrom> Or rather, no need to think what needs to be locked.
2022-01-24 21:41:51 +0100 <tomsmeding> monochrom: isn't that the whole deal with single-threaded concurrency? Not having to deal with two things running at the same time?
2022-01-24 21:41:51 +0100 <monochrom> (As usual, the hardest part of programming is to have to think.)
2022-01-24 21:41:59 +0100 <monochrom> Yeah!
2022-01-24 21:42:05 +0100 <monochrom> Royally convenient.
2022-01-24 21:42:14 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-01-24 21:42:18 +0100 <tomsmeding> part of why nodejs is so nice to program in (if you don't dislike js as a language)
2022-01-24 21:42:32 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-01-24 21:42:50 +0100 <monochrom> For the price of very contorted logics, in those cases when multi-threading is easier to follow.
2022-01-24 21:43:55 +0100alx741(~alx741@157.100.93.160)
2022-01-24 21:45:21 +0100 <sm> myShoggoth++
2022-01-24 21:46:17 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 21:46:49 +0100cosimone(~user@93-34-132-251.ip49.fastwebnet.it)
2022-01-24 21:47:09 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
2022-01-24 21:49:15 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
2022-01-24 21:55:01 +0100 <geekosaur> sigh. I wish…
2022-01-24 21:55:14 +0100 <geekosaur> a decade ago I would have jumped at that
2022-01-24 21:56:16 +0100 <EvanR> similarly in lambdamoo only 1 object runs at a given time, blocking the server from doing anything else. A timer kills the instance if it takes too long, leaving whatever effects half finished xD. Concurrency!
2022-01-24 21:57:55 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 21:57:55 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 21:57:55 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 21:59:41 +0100_ht(~quassel@2a02:a468:b619:1:b7fa:be1e:6eb0:5ee1) (Remote host closed the connection)
2022-01-24 22:00:06 +0100 <janus> geekosaur: what would you have jumped onto? the devops role?
2022-01-24 22:00:46 +0100polyphem_(~rod@2a02:810d:840:8754:9996:52da:e8ad:1d27)
2022-01-24 22:00:48 +0100polyphem(~rod@2a02:810d:840:8754:a778:fc55:137:3e0) (Ping timeout: 250 seconds)
2022-01-24 22:01:00 +0100polyphem_polyphem
2022-01-24 22:01:53 +0100 <geekosaur> yeh
2022-01-24 22:01:53 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-01-24 22:03:44 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-24 22:04:18 +0100 <geekosaur> sadly I can no longer guarantee availability, becuase while I'm in treatment it's not doing enough :(
2022-01-24 22:04:34 +0100 <geekosaur> \(also I "love" the timing of my router falling over)
2022-01-24 22:04:37 +0100alx741(~alx741@157.100.93.160)
2022-01-24 22:04:43 +0100o-90(~o-90@gateway/tor-sasl/o-90) (Quit: Leaving)
2022-01-24 22:06:34 +0100 <polyphem> geekosaur: did your router fall over or did you type at the shell prompt :(){:|:&};:
2022-01-24 22:06:37 +0100 <janus> i hope the treatment will work better soon!
2022-01-24 22:07:00 +0100 <janus> > :(){:|:&};:
2022-01-24 22:07:01 +0100 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
2022-01-24 22:07:16 +0100 <monochrom> I think it was +++ATH >:)
2022-01-24 22:07:23 +0100 <monochrom> err, s/think/thought/ !
2022-01-24 22:08:59 +0100SwarmCollective(~joseph@2603-6011-bc02-b600-40df-b781-ef29-193a.res6.spectrum.com) (Remote host closed the connection)
2022-01-24 22:09:22 +0100SwarmCollective(~joseph@2603-6011-bc02-b600-3c68-95a2-3c50-c518.res6.spectrum.com)
2022-01-24 22:10:21 +0100ProfSimm(~ProfSimm@87.227.196.109)
2022-01-24 22:10:30 +0100ensyde(~ensyde@2600:1700:2050:1040:505d:6d63:cb2e:fb52)
2022-01-24 22:11:36 +0100 <polyphem> monochrom: thats modem AT Command AT HangUp iirc
2022-01-24 22:11:46 +0100 <monochrom> Yeah!
2022-01-24 22:12:13 +0100 <monochrom> So, "did your router fall over, or did you accidentally tell it to hang up" :)
2022-01-24 22:12:42 +0100zincy(~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67) (Remote host closed the connection)
2022-01-24 22:12:42 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 22:12:43 +0100 <polyphem> i did the fork bomb :)
2022-01-24 22:13:09 +0100 <monochrom> Oh!
2022-01-24 22:16:37 +0100imalsogr_(~imalsogre@2601:147:300:f930::b46b)
2022-01-24 22:18:45 +0100 <polyphem> i also rebootet my android phone with the fork bomb on termux right now , hehehe
2022-01-24 22:19:16 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d) (Remote host closed the connection)
2022-01-24 22:19:36 +0100pavonia(~user@user/siracusa)
2022-01-24 22:20:18 +0100imalsogreg(~imalsogre@2601:147:300:f930:40c5:3263:848f:5ae1) (Ping timeout: 250 seconds)
2022-01-24 22:20:51 +0100 <geekosaur> no, my router failed to survive a couple of years in storage and occasionally locks up
2022-01-24 22:21:26 +0100 <geekosaur> someday I'll save up enough money to replace it (I do have one in reserve but it's 2.4 only so I'd have to be pretty desperate to use it)
2022-01-24 22:21:39 +0100 <polyphem> ATZ ATDT 0800-....
2022-01-24 22:22:12 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-24 22:22:53 +0100greenbourne277(~greenbour@2001:4b98:dc2:45:216:3eff:fe8a:bbf0) (Ping timeout: 250 seconds)
2022-01-24 22:23:07 +0100haskellberryfinn(~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2022-01-24 22:24:28 +0100 <haskellberryfinn> how to understand data definition where there is forall x . on the right hand side
2022-01-24 22:24:44 +0100 <haskellberryfinn> and x is not on the left hand side
2022-01-24 22:25:03 +0100 <EvanR> one way is via existential quantification, or another way which can be easier is GADT syntax
2022-01-24 22:25:10 +0100 <haskellberryfinn> data Fold a b = forall x . Fold a b
2022-01-24 22:25:23 +0100 <haskellberryfinn> data Fold a b = forall x . Fold (x->a) b
2022-01-24 22:25:23 +0100 <EvanR> e.g. data Fold :: * -> * -> * where
2022-01-24 22:25:42 +0100 <davean> geekosaur: Why don't you use the reliable router as a router and your unreliable one mearly as an AP for anything that isn't wired?
2022-01-24 22:25:53 +0100 <EvanR> Fold :: (x -> a) -> b -> Fold a b
2022-01-24 22:26:02 +0100mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds)
2022-01-24 22:26:33 +0100 <EvanR> that x doesn't appear in the type constructor is fine, you just can't rely on it later
2022-01-24 22:26:35 +0100 <haskellberryfinn> EvanR: so semantically it is meaningful
2022-01-24 22:27:00 +0100 <EvanR> the x becomes an unknown type
2022-01-24 22:27:03 +0100 <geekosaur> (1) out of outlets on the power strip (2) wouldn't really solve this problem since this computer is also on wifi (can't run a cable across the room)
2022-01-24 22:27:26 +0100 <haskellberryfinn> EvanR: and I have to use forall on all type variables that are not on the left hand side
2022-01-24 22:27:41 +0100 <davean> Oh I just usually shove a fiber under the baseboard.
2022-01-24 22:27:46 +0100 <geekosaur> at some point I'll probably become annoyed enough to switch to the 2.4 router/AP
2022-01-24 22:27:55 +0100 <EvanR> the type variables need to be introduced somewhere
2022-01-24 22:28:09 +0100 <EvanR> often there's an implicit forall on the very outside
2022-01-24 22:28:15 +0100 <EvanR> when you put your own, it takes priority
2022-01-24 22:28:16 +0100 <geekosaur> I'm in an apartment, don't get to do things like that
2022-01-24 22:28:21 +0100 <geekosaur> sadly
2022-01-24 22:28:26 +0100 <haskellberryfinn> EvanR: i see
2022-01-24 22:28:30 +0100 <davean> geekosaur: oh, I do it *because* I'm in an appartment
2022-01-24 22:28:48 +0100 <davean> I just take a fiber and a spatula and push it under the wall joint, pull it out when I leave
2022-01-24 22:29:17 +0100 <ProfSimm> Is implicit returns sometimes more inconvenient than explicit returns
2022-01-24 22:29:32 +0100 <geekosaur> at one point I had a long enough cable to run around the room but it wasn't long enough for this room.
2022-01-24 22:29:34 +0100 <davean> ProfSimm: what are you talking about?
2022-01-24 22:29:46 +0100 <davean> geekosaur: Oh, I just have a 100m long OM5 cable
2022-01-24 22:29:57 +0100 <geekosaur> don't I wish
2022-01-24 22:30:17 +0100 <ProfSimm> davros: I'm comparing FP to imperative languages with "return" statements
2022-01-24 22:31:15 +0100alx741(~alx741@157.100.93.160)
2022-01-24 22:31:18 +0100 <EvanR> haskell doesn't have return statements implicit or explicit
2022-01-24 22:31:34 +0100 <EvanR> the thing called return is something else
2022-01-24 22:31:36 +0100ystael(~ystael@user/ystael) (Read error: Connection reset by peer)
2022-01-24 22:31:40 +0100 <ProfSimm> Well it has implicit return semantics doesn't
2022-01-24 22:31:41 +0100 <ProfSimm> it
2022-01-24 22:31:46 +0100 <EvanR> no
2022-01-24 22:31:47 +0100CHUD(~CHUD@host-80-41-89-108.as13285.net)
2022-01-24 22:31:49 +0100 <davean> This doesn't make conceptual sense
2022-01-24 22:32:02 +0100 <ProfSimm> :/
2022-01-24 22:32:05 +0100 <davean> This shows a deep missunderstanding
2022-01-24 22:32:15 +0100 <ProfSimm> All right, please teach me
2022-01-24 22:32:34 +0100 <davean> ProfSimm: Ok, why do you think it would have that?
2022-01-24 22:32:36 +0100ystael(~ystael@user/ystael)
2022-01-24 22:32:54 +0100 <hololeap> where can I find the docs for cabal-3.2?
2022-01-24 22:33:14 +0100 <hololeap> oh, nvm
2022-01-24 22:33:23 +0100 <EvanR> ProfSimm, in haskell you like to think you are holding an expression that is being evaluated, lazily
2022-01-24 22:33:24 +0100 <davean> https://cabal.readthedocs.io/en/3.2/
2022-01-24 22:33:40 +0100 <EvanR> ProfSimm, i.e. 2 + 2 becomes 4, rather than returning 4
2022-01-24 22:33:54 +0100 <EvanR> fst (2,2) becomes 2 rather than returning 2
2022-01-24 22:34:14 +0100 <davean> its a definition of a value
2022-01-24 22:34:33 +0100 <davean> Theres nothing about how its computed, etc
2022-01-24 22:34:48 +0100 <EvanR> on some level yes
2022-01-24 22:34:57 +0100 <ProfSimm> Well, becomes, returns...
2022-01-24 22:34:57 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 22:35:02 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
2022-01-24 22:35:03 +0100 <EvanR> operationally holding a value that is being evaluated helps sometimes
2022-01-24 22:35:17 +0100 <davean> ProfSimm: No, no return. The value doesn't "go" anywhere
2022-01-24 22:35:19 +0100 <EvanR> the point is that returning from a function is not really related to this
2022-01-24 22:35:24 +0100 <davean> it may never even exit
2022-01-24 22:35:26 +0100 <davean> *exist
2022-01-24 22:35:27 +0100 <EvanR> we're not even talking about functions
2022-01-24 22:35:30 +0100 <davean> or exit for that matter
2022-01-24 22:35:32 +0100 <polyphem> ProfSimm: f p = fst p <=> f p is fst p
2022-01-24 22:35:35 +0100greenbourne277(~greenbour@2001:4b98:dc2:45:216:3eff:fe8a:bbf0)
2022-01-24 22:35:57 +0100 <davean> You could use it to rewrite, you could ... whatever
2022-01-24 22:36:05 +0100 <davean> they're mathematical definitions
2022-01-24 22:36:05 +0100 <geekosaur> is this where I point them to graph reduction?
2022-01-24 22:36:10 +0100 <EvanR> implicit or explicit return from a subroutine implies some kind of call stack
2022-01-24 22:36:20 +0100 <davean> EvanR: it implies a subroutine
2022-01-24 22:36:35 +0100 <EvanR> yeah none of which is happening here
2022-01-24 22:36:58 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-24 22:37:54 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d)
2022-01-24 22:37:54 +0100 <davean> ProfSimm: so
2022-01-24 22:38:03 +0100 <davean> ProfSimm: You're familiar with inlining for example?
2022-01-24 22:38:20 +0100lrngystdlted^(~lrngystdl@50-207-160-170-static.hfc.comcastbusiness.net)
2022-01-24 22:38:20 +0100 <davean> Whats the return sematnics when we inline a function and reduce instead of actually running it>?
2022-01-24 22:38:30 +0100 <davean> what if we never evalaute it?
2022-01-24 22:39:40 +0100 <davean> ProfSimm: What are the return semantics of the algebraic law of associativity?
2022-01-24 22:39:49 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
2022-01-24 22:39:54 +0100thyriaen(~thyriaen@dynamic-078-055-124-059.78.55.pool.telefonica.de)
2022-01-24 22:40:04 +0100 <davean> The question doesn't make sense, does it?
2022-01-24 22:40:08 +0100 <[exa]> "implicit return" is the thing from Scheme and R?
2022-01-24 22:40:19 +0100 <[exa]> (and julia)
2022-01-24 22:40:22 +0100 <EvanR> ruby
2022-01-24 22:40:38 +0100 <haskellberryfinn> EvanR: why not add the left-handed variable also on the right-hand side?
2022-01-24 22:41:04 +0100 <EvanR> haskellberryfinn, you mean like data Hmm = forall a b . Hmm a b ?
2022-01-24 22:41:04 +0100 <haskellberryfinn> EvanR: since it's used by the data constructor anyway
2022-01-24 22:41:23 +0100 <EvanR> so if you have a value of type Hmm, you won't know what types are in it
2022-01-24 22:41:40 +0100 <haskellberryfinn> EvanR: I mean data F a b = forall x . F (x->b) a
2022-01-24 22:41:58 +0100 <[exa]> haskellberryfinn: you want the type to be "complete" and usable (be in kind *) without specifying the `x`, but still valid for many different choices of `x`.
2022-01-24 22:42:20 +0100 <EvanR> F a b = forall x a b . F (x -> b) a would be introducing the same variables twice
2022-01-24 22:42:37 +0100 <EvanR> F = forall x a b . F (x -> b) a would work but cripple F, kind of
2022-01-24 22:43:06 +0100 <haskellberryfinn> data FoldShell a b = forall x . FoldShell (x -> a -> IO x) x (x -> IO b)
2022-01-24 22:43:16 +0100 <EvanR> cool
2022-01-24 22:43:28 +0100analognoise(~analognoi@2600:8801:8c26:9e00:985c:5a64:faa:5347)
2022-01-24 22:43:28 +0100 <EvanR> everything is accounted for somewhere
2022-01-24 22:44:04 +0100 <EvanR> again, try writing that definition with GADT syntax to maybe see if it makes more sense
2022-01-24 22:44:08 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 250 seconds)
2022-01-24 22:44:15 +0100 <haskellberryfinn> Ok
2022-01-24 22:44:27 +0100 <EvanR> it doesn't involve a weird forall
2022-01-24 22:44:32 +0100 <EvanR> (necessarily)
2022-01-24 22:45:03 +0100analognoise1(~analognoi@185.202.221.105)
2022-01-24 22:45:21 +0100 <haskellberryfinn> the forall doesn't bother me. What's weird for me is x doesn't appear on the right hand side
2022-01-24 22:45:41 +0100 <EvanR> it does appear on the right
2022-01-24 22:45:50 +0100 <haskellberryfinn> i mean on the left
2022-01-24 22:45:58 +0100 <EvanR> yes, that's the whole point
2022-01-24 22:46:11 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2022-01-24 22:46:26 +0100 <EvanR> two values of FoldShell A B could have used different x and then placed in the same list for example
2022-01-24 22:46:28 +0100 <haskellberryfinn> anyway [exa] comment makes some sense to me
2022-01-24 22:46:38 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
2022-01-24 22:46:44 +0100 <EvanR> which is impossible if x were also in the type constructor
2022-01-24 22:46:56 +0100 <haskellberryfinn> i see
2022-01-24 22:47:05 +0100 <haskellberryfinn> that's quite flexible
2022-01-24 22:47:10 +0100 <EvanR> yeah
2022-01-24 22:47:17 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-24 22:47:32 +0100analognoise1(~analognoi@185.202.221.105) (Client Quit)
2022-01-24 22:47:49 +0100analognoise1(~analognoi@185.202.221.105)
2022-01-24 22:48:37 +0100analognoise(~analognoi@2600:8801:8c26:9e00:985c:5a64:faa:5347) (Ping timeout: 240 seconds)
2022-01-24 22:48:48 +0100Pickchea(~private@user/pickchea)
2022-01-24 22:50:07 +0100analognoise1analognoise
2022-01-24 22:50:57 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-24 22:52:52 +0100alx741(~alx741@157.100.93.160)
2022-01-24 22:53:37 +0100JoseC[m](~jmcardonm@2001:470:69fc:105::1:7539)
2022-01-24 22:55:17 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2022-01-24 22:56:28 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 22:57:03 +0100iteratee(~kyle@162.218.222.107) (Ping timeout: 256 seconds)
2022-01-24 22:57:04 +0100imalsogr_(~imalsogre@2601:147:300:f930::b46b) (Remote host closed the connection)
2022-01-24 22:57:23 +0100iteratee(~kyle@162.218.222.107)
2022-01-24 22:57:36 +0100imalsogreg(~imalsogre@2601:147:300:f930::b46b)
2022-01-24 22:59:28 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-24 22:59:28 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-24 22:59:28 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 23:01:54 +0100imalsogreg(~imalsogre@2601:147:300:f930::b46b) (Ping timeout: 250 seconds)
2022-01-24 23:02:23 +0100yassernasc(~yassernas@2804:29b8:505a:f33d:65bb:7e4c:2cd0:965)
2022-01-24 23:03:03 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-01-24 23:04:25 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-24 23:04:29 +0100iteratee(~kyle@162.218.222.107) (Ping timeout: 268 seconds)
2022-01-24 23:06:14 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
2022-01-24 23:06:35 +0100 <ph88> https://www.stackage.org/ down ?
2022-01-24 23:07:15 +0100 <maerwald> finally they shut down
2022-01-24 23:07:22 +0100 <ph88> haha
2022-01-24 23:07:39 +0100burnsidesLlama(~burnsides@dhcp168-037.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-24 23:07:41 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-01-24 23:08:01 +0100 <EvanR> the page loads for me
2022-01-24 23:08:24 +0100 <ph88> ok thanks, maybe slow load on my side
2022-01-24 23:08:30 +0100son0p(~ff@2800:484:1d81:b700::5)
2022-01-24 23:10:35 +0100iteratee(~kyle@162.218.222.107)
2022-01-24 23:11:30 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-24 23:14:29 +0100alx741(~alx741@157.100.93.160)
2022-01-24 23:15:18 +0100imalsogreg(~imalsogre@2601:147:300:f930::b46b)
2022-01-24 23:19:57 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 23:24:39 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev)
2022-01-24 23:27:36 +0100burnsidesLlama(~burnsides@dhcp168-037.wadham.ox.ac.uk)
2022-01-24 23:29:29 +0100 <Henson> is there a pipes library to be able to do processing in parallel? Not concurrently with threads, but in parallel using functions in the "parallel" library.
2022-01-24 23:30:12 +0100michalz(~michalz@185.246.204.58) (Remote host closed the connection)
2022-01-24 23:32:22 +0100max22-(~maxime@2a01cb0883359800fbaebbbb888c1e29.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2022-01-24 23:36:30 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Quit: Lost terminal)
2022-01-24 23:36:33 +0100alx741(~alx741@157.100.93.160)
2022-01-24 23:38:00 +0100vysn(~vysn@user/vysn)
2022-01-24 23:38:23 +0100SwarmCollective(~joseph@2603-6011-bc02-b600-3c68-95a2-3c50-c518.res6.spectrum.com) (Remote host closed the connection)
2022-01-24 23:38:46 +0100SwarmCollective(~joseph@2603-6011-bc02-b600-b296-221b-2190-d11e.res6.spectrum.com)
2022-01-24 23:40:06 +0100alx741(~alx741@157.100.93.160) (Read error: Connection reset by peer)
2022-01-24 23:40:37 +0100lispy(~lispy4@84.69.59.93) (Quit: Leaving)
2022-01-24 23:41:13 +0100 <ph88> how can i have allow more of the same option in optparse-applicative ? like myprogram --input file1.txt --input file2.txt
2022-01-24 23:41:32 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2022-01-24 23:41:59 +0100 <maerwald> `many`
2022-01-24 23:42:44 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-24 23:45:42 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2022-01-24 23:45:57 +0100kjak(~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2022-01-24 23:46:02 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2022-01-24 23:47:09 +0100wroathe(~wroathe@user/wroathe)
2022-01-24 23:48:53 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 268 seconds)
2022-01-24 23:49:14 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-24 23:51:32 +0100iteratee(~kyle@162.218.222.107) (Ping timeout: 240 seconds)
2022-01-24 23:52:15 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-01-24 23:52:29 +0100 <ph88> thanks
2022-01-24 23:52:57 +0100 <maerwald> there's also `some` (0 or more)
2022-01-24 23:53:04 +0100 <maerwald> eh, one or more
2022-01-24 23:58:10 +0100alx741(~alx741@157.100.93.160)