2022-01-24 00:02:02 +0100 | Constraintegic | (~thomasbul@2001:a61:1307:2b01:3d2f:ad9e:d1f8:1d5d) (Ping timeout: 240 seconds) |
2022-01-24 00:04:37 +0100 | LukeHoersten | (~LukeHoers@user/lukehoersten) (Quit: Textual IRC Client: www.textualapp.com) |
2022-01-24 00:06:17 +0100 | chomwitt | (~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 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-166.elisa-laajakaista.fi) (Quit: Leaving.) |
2022-01-24 00:18:31 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection) |
2022-01-24 00:22:53 +0100 | klimnbrk | (~barakvoid@2a02:14f:4:90c3:5267:c24a:c393:429d) (Ping timeout: 268 seconds) |
2022-01-24 00:26:29 +0100 | tavares | (~tavares@user/tavares) (Ping timeout: 256 seconds) |
2022-01-24 00:27:46 +0100 | ksqsf | (~user@2001:da8:d800:611:88d2:4501:124e:aebc) |
2022-01-24 00:29:08 +0100 | mcgroin | (~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 +0100 | ksqsf | (~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 +0100 | Akiva | (~Akiva@user/Akiva) |
2022-01-24 00:35:18 +0100 | <monochrom> | "StateTransitionFunction" is too long |
2022-01-24 00:35:45 +0100 | notzmv | (~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 +0100 | yauhsien | (~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 +0100 | neceve | (~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 +0100 | bitdex | (~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 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-01-24 00:40:57 +0100 | yauhsien | (~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 +0100 | bitdex | (~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 +0100 | alp | (~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 +0100 | Gurkenglas | (~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 +0100 | Hao | (~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 +0100 | mvk | (~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 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2022-01-24 00:58:27 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:5d8e:db89:f241:b6e3) |
2022-01-24 00:58:50 +0100 | edrx | (~Eduardo@2804:56c:d2f8:7700:812f:d393:2bf3:f7a6) (Killed buffer) |
2022-01-24 00:59:17 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
2022-01-24 00:59:21 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 01:02:22 +0100 | max22- | (~maxime@2a01cb0883359800e05a099bb642ef66.ipv6.abo.wanadoo.fr) (Remote host closed the connection) |
2022-01-24 01:02:37 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:5d8e:db89:f241:b6e3) (Ping timeout: 240 seconds) |
2022-01-24 01:10:17 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds) |
2022-01-24 01:10:42 +0100 | burnsidesLlama | (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection) |
2022-01-24 01:12:13 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4) |
2022-01-24 01:13:37 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Ping timeout: 240 seconds) |
2022-01-24 01:15:59 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2022-01-24 01:16:16 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 01:24:08 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 01:24:17 +0100 | ProfSimm | (~ProfSimm@87.227.196.109) (Ping timeout: 256 seconds) |
2022-01-24 01:31:08 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) |
2022-01-24 01:33:48 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 01:37:21 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 01:37:21 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 01:37:21 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-24 01:37:30 +0100 | vglfr | (~vglfr@88.155.24.103) (Ping timeout: 268 seconds) |
2022-01-24 01:38:26 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:5d8e:db89:f241:b6e3) |
2022-01-24 01:41:59 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 01:43:39 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds) |
2022-01-24 01:45:20 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-01-24 01:45:53 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 01:46:28 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 01:49:23 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 01:49:32 +0100 | jgeerds | (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 240 seconds) |
2022-01-24 01:50:33 +0100 | burnsidesLlama | (~burnsides@dhcp168-027.wadham.ox.ac.uk) |
2022-01-24 01:50:54 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 01:57:21 +0100 | burnsidesLlama | (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Ping timeout: 256 seconds) |
2022-01-24 01:58:51 +0100 | ystael | (~ystael@user/ystael) (Ping timeout: 256 seconds) |
2022-01-24 02:00:35 +0100 | ystael | (~ystael@user/ystael) |
2022-01-24 02:01:58 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:554b:fd6:4afe:d593) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-01-24 02:02:55 +0100 | burnsidesLlama | (~burnsides@dhcp168-027.wadham.ox.ac.uk) |
2022-01-24 02:03:04 +0100 | jespada | (~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 +0100 | jespada | (~jespada@87.74.36.188) |
2022-01-24 02:07:41 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 02:07:50 +0100 | merijn | (~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 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
2022-01-24 02:09:28 +0100 | boxscape_ | (~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 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-01-24 02:11:19 +0100 | random-jellyfish | (~random-je@user/random-jellyfish) (Ping timeout: 256 seconds) |
2022-01-24 02:12:29 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 02:16:38 +0100 | cheater | (~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 +0100 | ec | (~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 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection) |
2022-01-24 02:23:48 +0100 | vglfr | (~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 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 02:25:46 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-01-24 02:25:51 +0100 | pretty_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 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-01-24 02:27:38 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection) |
2022-01-24 02:27:57 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds) |
2022-01-24 02:27:58 +0100 | vicfred | (~vicfred@user/vicfred) |
2022-01-24 02:28:43 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 02:30:13 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 02:32:55 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 02:33:03 +0100 | benin | (~benin@183.82.31.24) |
2022-01-24 02:36:03 +0100 | Guest|60 | (~Guest|60@109.175.155.97) |
2022-01-24 02:38:14 +0100 | yauhsien | (~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 +0100 | imalsogreg | (~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 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2022-01-24 02:44:14 +0100 | WingTillDie | (~quassel@2001-b400-e2db-1da8-4062-cd4e-8589-7aec.emome-ip6.hinet.net) (Ping timeout: 250 seconds) |
2022-01-24 02:45:06 +0100 | WingTillDie | (~quassel@2001-b400-e2db-1da8-f9e5-e949-9fe0-1fb9.emome-ip6.hinet.net) |
2022-01-24 02:45:52 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 02:46:46 +0100 | Guest|60 | (~Guest|60@109.175.155.97) (Quit: Connection closed) |
2022-01-24 02:47:11 +0100 | CiaoSen | (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
2022-01-24 02:50:42 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 02:51:02 +0100 | <albet70> | does String have encoding? |
2022-01-24 02:51:10 +0100 | leungbk | (~user@2603-8000-1201-2dd2-79c6-a2ee-55d6-42c7.res6.spectrum.com) |
2022-01-24 02:51:36 +0100 | WingTillDie | (~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 +0100 | vysn | (~vysn@user/vysn) |
2022-01-24 02:55:17 +0100 | alx741 | (~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 +0100 | WingTillDie | (~quassel@2001-b400-e2db-1da8-f9e5-e949-9fe0-1fb9.emome-ip6.hinet.net) |
2022-01-24 03:12:23 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2022-01-24 03:12:37 +0100 | mmhat | (~mmh@55d4124f.access.ecotel.net) (Ping timeout: 240 seconds) |
2022-01-24 03:13:14 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 03:16:36 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep) |
2022-01-24 03:17:34 +0100 | deadmarshal | (~deadmarsh@95.38.118.201) |
2022-01-24 03:17:34 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 03:19:20 +0100 | tomku | (~tomku@user/tomku) (Ping timeout: 250 seconds) |
2022-01-24 03:20:37 +0100 | tomku | (~tomku@user/tomku) |
2022-01-24 03:21:47 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
2022-01-24 03:21:47 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) (Ping timeout: 256 seconds) |
2022-01-24 03:21:48 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-24 03:22:09 +0100 | deadmarshal | (~deadmarsh@95.38.118.201) (Ping timeout: 256 seconds) |
2022-01-24 03:23:32 +0100 | xff0x | (~xff0x@2001:1a81:5332:3500:b49d:8e28:9fba:6720) (Ping timeout: 240 seconds) |
2022-01-24 03:24:33 +0100 | juhp | (~juhp@128.106.188.82) |
2022-01-24 03:24:49 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-24 03:25:23 +0100 | xff0x | (~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 +0100 | mmhat | (~mmh@55d400c1.access.ecotel.net) |
2022-01-24 03:27:08 +0100 | ridcully_ | (~ridcully@p508ac987.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
2022-01-24 03:27:23 +0100 | leungbk | (~user@2603-8000-1201-2dd2-79c6-a2ee-55d6-42c7.res6.spectrum.com) (Remote host closed the connection) |
2022-01-24 03:28:28 +0100 | mmhat | (~mmh@55d400c1.access.ecotel.net) (Client Quit) |
2022-01-24 03:28:48 +0100 | ridcully_ | (~ridcully@p508acc81.dip0.t-ipconnect.de) |
2022-01-24 03:29:39 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) |
2022-01-24 03:36:14 +0100 | ensyde | (~ensyde@2600:1700:2050:1040:bdf9:ef99:b73e:7a0a) |
2022-01-24 03:37:26 +0100 | lispy | (~lispy4@84.69.59.93) (Quit: Leaving) |
2022-01-24 03:40:14 +0100 | razetime | (~quassel@49.207.209.26) |
2022-01-24 03:41:46 +0100 | vicfred_ | (~vicfred@user/vicfred) |
2022-01-24 03:44:02 +0100 | vicfred | (~vicfred@user/vicfred) (Ping timeout: 250 seconds) |
2022-01-24 03:45:14 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-01-24 03:47:48 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-24 03:52:23 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
2022-01-24 03:56:54 +0100 | califax- | (~califax@user/califx) |
2022-01-24 04:00:48 +0100 | califax | (~califax@user/califx) (Ping timeout: 276 seconds) |
2022-01-24 04:00:48 +0100 | califax- | califax |
2022-01-24 04:01:24 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Remote host closed the connection) |
2022-01-24 04:02:13 +0100 | dibblego | (~dibblego@haskell/developer/dibblego) (Ping timeout: 250 seconds) |
2022-01-24 04:04:23 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 04:04:46 +0100 | lemonsnicks | (~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 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) |
2022-01-24 04:07:05 +0100 | dibblego | (~dibblego@122-199-1-30.ip4.superloop.com) |
2022-01-24 04:07:05 +0100 | dibblego | (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host) |
2022-01-24 04:07:05 +0100 | dibblego | (~dibblego@haskell/developer/dibblego) |
2022-01-24 04:07:08 +0100 | Jing | (~hedgehog@240e:390:7c53:a7e1:9c57:17b6:65b6:b182) |
2022-01-24 04:09:08 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4) |
2022-01-24 04:09:12 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) |
2022-01-24 04:11:41 +0100 | dibblego | (~dibblego@haskell/developer/dibblego) (Excess Flood) |
2022-01-24 04:11:54 +0100 | dibblego | (~dibblego@122-199-1-30.ip4.superloop.com) |
2022-01-24 04:11:54 +0100 | dibblego | (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host) |
2022-01-24 04:11:54 +0100 | dibblego | (~dibblego@haskell/developer/dibblego) |
2022-01-24 04:15:03 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2022-01-24 04:16:29 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2022-01-24 04:16:29 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2022-01-24 04:16:29 +0100 | finn_elija | FinnElija |
2022-01-24 04:17:06 +0100 | lemonsnicks | (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
2022-01-24 04:17:55 +0100 | burnsidesLlama | (~burnsides@dhcp168-027.wadham.ox.ac.uk) (Remote host closed the connection) |
2022-01-24 04:18:57 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds) |
2022-01-24 04:19:00 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-24 04:20:40 +0100 | ec | (~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 +0100 | td_ | (~td@94.134.91.105) (Ping timeout: 256 seconds) |
2022-01-24 04:31:52 +0100 | td_ | (~td@94.134.91.163) |
2022-01-24 04:34:18 +0100 | johnw | (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Ping timeout: 250 seconds) |
2022-01-24 04:35:10 +0100 | cyphase | (~cyphase@user/cyphase) (Ping timeout: 250 seconds) |
2022-01-24 04:36:18 +0100 | johnw | (~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0) |
2022-01-24 04:38:17 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-24 04:38:20 +0100 | vysn | (~vysn@user/vysn) (Remote host closed the connection) |
2022-01-24 04:40:24 +0100 | cyphase | (~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 +0100 | Hao | (~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 +0100 | log101 | (~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 +0100 | cynomys | (~cynomys@user/cynomys) (Ping timeout: 240 seconds) |
2022-01-24 04:51:00 +0100 | <EvanR> | UTF-3 |
2022-01-24 04:51:32 +0100 | cynomys | (~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 +0100 | ec | (~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 +0100 | Hao | (~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 +0100 | waleee | (~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 +0100 | ksqsf | (~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 +0100 | Hao | (~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 +0100 | flukiluke | (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) (Remote host closed the connection) |
2022-01-24 05:06:04 +0100 | flukiluke | (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) |
2022-01-24 05:07:23 +0100 | bravespear|2 | Ranhir |
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 +0100 | Ranhir | (~Ranhir@157.97.53.139) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/) |
2022-01-24 05:15:40 +0100 | razetime | (~quassel@49.207.209.26) (Read error: No route to host) |
2022-01-24 05:15:41 +0100 | Ranhir | (~Ranhir@157.97.53.139) |
2022-01-24 05:16:25 +0100 | Ranhir | Ranhir|NotHere |
2022-01-24 05:16:33 +0100 | Ranhir|NotHere | Ranhir |
2022-01-24 05:17:07 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) |
2022-01-24 05:17:17 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds) |
2022-01-24 05:19:16 +0100 | werneta | (~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 +0100 | log101 | (~log101@212.125.22.146) (Ping timeout: 240 seconds) |
2022-01-24 05:21:43 +0100 | yauhsien | (~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 +0100 | imalsogreg | (~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 +0100 | vicfred_ | (~vicfred@user/vicfred) (Quit: Leaving) |
2022-01-24 05:35:24 +0100 | euandreh | (~euandreh@2804:14c:33:9fe5:c17:d8ca:f795:73f0) (Ping timeout: 250 seconds) |
2022-01-24 05:35:27 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 05:35:32 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection) |
2022-01-24 05:36:04 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 05:38:14 +0100 | Hao | (~Hao@222-154-98-23-fibre.sparkbb.co.nz) |
2022-01-24 05:40:17 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) (Ping timeout: 240 seconds) |
2022-01-24 05:41:10 +0100 | log101 | (~log101@212.125.22.146) |
2022-01-24 05:44:04 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 250 seconds) |
2022-01-24 05:46:37 +0100 | mbuf | (~Shakthi@171.61.206.147) |
2022-01-24 05:48:41 +0100 | Hao | (~Hao@222-154-98-23-fibre.sparkbb.co.nz) (Quit: Client closed) |
2022-01-24 05:50:57 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) (Quit: leaving) |
2022-01-24 06:00:26 +0100 | deadmarshal | (~deadmarsh@95.38.118.201) |
2022-01-24 06:04:32 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) |
2022-01-24 06:06:04 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-24 06:06:37 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 06:07:15 +0100 | log101 | (~log101@212.125.22.146) (Ping timeout: 256 seconds) |
2022-01-24 06:11:17 +0100 | cynomys | (~cynomys@user/cynomys) (Ping timeout: 240 seconds) |
2022-01-24 06:11:38 +0100 | zebrag | (~chris@user/zebrag) (Remote host closed the connection) |
2022-01-24 06:17:38 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2022-01-24 06:18:18 +0100 | soxen | (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 250 seconds) |
2022-01-24 06:18:36 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2022-01-24 06:24:08 +0100 | soxen | (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) |
2022-01-24 06:30:08 +0100 | rusrushal13 | (~rusrushal@2401:4900:43a3:616e:36cb:f750:4e6b:4367) |
2022-01-24 06:35:07 +0100 | merijn | (~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 +0100 | cynomys | (~cynomys@user/cynomys) |
2022-01-24 06:40:36 +0100 | log101 | (~log101@88.255.77.33) |
2022-01-24 06:42:11 +0100 | rusrushal13 | (~rusrushal@2401:4900:43a3:616e:36cb:f750:4e6b:4367) (Ping timeout: 256 seconds) |
2022-01-24 06:56:02 +0100 | WingTillDie | (~quassel@2001-b400-e2db-1da8-f9e5-e949-9fe0-1fb9.emome-ip6.hinet.net) (Ping timeout: 240 seconds) |
2022-01-24 06:58:55 +0100 | rusrushal13 | (~rusrushal@2409:4056:15:9212:92a3:69cd:5ace:e40a) |
2022-01-24 06:59:41 +0100 | leibniz | (~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 +0100 | soxen | (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds) |
2022-01-24 07:02:56 +0100 | deadmarshal | (~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 +0100 | takuan | (~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 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-24 07:10:39 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) |
2022-01-24 07:14:57 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2022-01-24 07:16:02 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 240 seconds) |
2022-01-24 07:24:37 +0100 | zmt00 | (~zmt00@user/zmt00) (Ping timeout: 240 seconds) |
2022-01-24 07:27:44 +0100 | leibniz | (~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed) |
2022-01-24 07:28:17 +0100 | cynomys | (~cynomys@user/cynomys) (Ping timeout: 256 seconds) |
2022-01-24 07:28:19 +0100 | Constraintegic | (~thomasbul@2001:a61:130d:ed01:d880:8422:69cf:e05c) |
2022-01-24 07:31:05 +0100 | deadmarshal | (~deadmarsh@95.38.118.201) |
2022-01-24 07:32:37 +0100 | cynomys | (~cynomys@user/cynomys) |
2022-01-24 07:32:50 +0100 | Constraintegic | (~thomasbul@2001:a61:130d:ed01:d880:8422:69cf:e05c) (Ping timeout: 250 seconds) |
2022-01-24 07:33:02 +0100 | califax | (~califax@user/califx) (Remote host closed the connection) |
2022-01-24 07:33:15 +0100 | califax | (~califax@user/califx) |
2022-01-24 07:36:47 +0100 | wroathe | (~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 +0100 | ekai | (~xusr@bl18-111-231.dsl.telepac.pt) |
2022-01-24 07:40:45 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) |
2022-01-24 07:42:56 +0100 | zaquest | (~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 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds) |
2022-01-24 07:44:46 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 07:44:46 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 07:44:46 +0100 | wroathe | (~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 +0100 | boxscape_ | (~boxscape_@p4ff0b9d5.dip0.t-ipconnect.de) (Quit: Connection closed) |
2022-01-24 07:49:37 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-24 07:50:37 +0100 | chomwitt | (~chomwitt@2a02:587:dc06:be00:12c3:7bff:fe6d:d374) |
2022-01-24 07:52:53 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2022-01-24 07:54:34 +0100 | zaquest | (~notzaques@5.130.79.72) |
2022-01-24 07:57:34 +0100 | geekosaur | (~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 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2022-01-24 08:06:42 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Client Quit) |
2022-01-24 08:06:44 +0100 | michalz | (~michalz@185.246.204.58) |
2022-01-24 08:07:30 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Ping timeout: 250 seconds) |
2022-01-24 08:13:04 +0100 | ardell | (~ardell@user/ardell) |
2022-01-24 08:13:30 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-01-24 08:14:52 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 250 seconds) |
2022-01-24 08:15:25 +0100 | cheater | (~Username@user/cheater) |
2022-01-24 08:17:23 +0100 | rusrushal13 | (~rusrushal@2409:4056:15:9212:92a3:69cd:5ace:e40a) (Ping timeout: 256 seconds) |
2022-01-24 08:17:42 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-24 08:34:27 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2022-01-24 08:37:45 +0100 | prasad | (~user@c-73-170-49-136.hsd1.ca.comcast.net) |
2022-01-24 08:38:17 +0100 | yaroot | (~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953) (Ping timeout: 240 seconds) |
2022-01-24 08:39:09 +0100 | yaroot | (~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953) |
2022-01-24 08:45:35 +0100 | Midjak | (~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 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2022-01-24 08:55:05 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Client Quit) |
2022-01-24 08:55:37 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2022-01-24 08:56:29 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
2022-01-24 08:57:41 +0100 | prasad | (~user@c-73-170-49-136.hsd1.ca.comcast.net) (Remote host closed the connection) |
2022-01-24 08:58:15 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:25bb:89ab:830f:7e39) |
2022-01-24 09:01:44 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2022-01-24 09:01:45 +0100 | Constraintegic | (~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 +0100 | alp | (~alp@user/alp) |
2022-01-24 09:04:22 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) |
2022-01-24 09:04:24 +0100 | chele | (~chele@user/chele) |
2022-01-24 09:06:02 +0100 | Constraintegic | (~thomasbul@2001:a61:130d:ed01:8875:784f:ca4f:d8a2) (Ping timeout: 240 seconds) |
2022-01-24 09:09:58 +0100 | akegalj | (~akegalj@89-172-25-196.adsl.net.t-com.hr) |
2022-01-24 09:10:21 +0100 | akegalj | (~akegalj@89-172-25-196.adsl.net.t-com.hr) (Client Quit) |
2022-01-24 09:10:41 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 09:11:14 +0100 | Sgeo | (~Sgeo@ool-18b9875e.dyn.optonline.net) (Read error: Connection reset by peer) |
2022-01-24 09:11:59 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2022-01-24 09:12:56 +0100 | ekai | (~xusr@bl18-111-231.dsl.telepac.pt) (Ping timeout: 250 seconds) |
2022-01-24 09:14:12 +0100 | dhouthoo | (~dhouthoo@178-117-36-167.access.telenet.be) |
2022-01-24 09:16:56 +0100 | kuribas | (~user@ptr-25vy0i9v7xwr83cod1i.18120a2.ip6.access.telenet.be) |
2022-01-24 09:22:50 +0100 | jacoo | (~jacoo@121.131.39.82) |
2022-01-24 09:23:03 +0100 | jacoo | lionhairdino |
2022-01-24 09:28:01 +0100 | m4lvin | (~m4lvin@w4eg.de) (Quit: m4lvin) |
2022-01-24 09:28:25 +0100 | m4lvin | (~m4lvin@w4eg.de) |
2022-01-24 09:36:11 +0100 | tzh | (~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 +0100 | merijn | (~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 +0100 | max22- | (~maxime@2a01cb0883359800a4d68ab29ac6e773.ipv6.abo.wanadoo.fr) |
2022-01-24 09:43:27 +0100 | log101 | (~log101@88.255.77.33) (Remote host closed the connection) |
2022-01-24 09:43:44 +0100 | log101 | (~log101@88.255.77.33) |
2022-01-24 09:49:21 +0100 | log101 | (~log101@88.255.77.33) (Remote host closed the connection) |
2022-01-24 09:49:38 +0100 | log101 | (~log101@88.255.77.33) |
2022-01-24 09:50:30 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2022-01-24 09:51:15 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:d0b2:5a76:adf7:9a5a) |
2022-01-24 09:53:09 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2022-01-24 09:54:17 +0100 | log101 | (~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 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 10:00:50 +0100 | fef | (~thedawn@user/thedawn) |
2022-01-24 10:01:19 +0100 | neurocyte0917090 | (~neurocyte@45.93.108.138) |
2022-01-24 10:01:19 +0100 | neurocyte0917090 | (~neurocyte@45.93.108.138) (Changing host) |
2022-01-24 10:01:19 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) |
2022-01-24 10:04:56 +0100 | econo | (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 +0100 | zincy | (~zincy@host86-151-99-97.range86-151.btcentralplus.com) |
2022-01-24 10:07:14 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:d0b2:5a76:adf7:9a5a) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-01-24 10:08:30 +0100 | DNH | (~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 +0100 | mcgroin | (~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 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2022-01-24 10:17:44 +0100 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2022-01-24 10:17:47 +0100 | allbery_b | geekosaur |
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 +0100 | ensyde | (~ensyde@2600:1700:2050:1040:bdf9:ef99:b73e:7a0a) (Ping timeout: 240 seconds) |
2022-01-24 10:18:45 +0100 | razetime | (~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 +0100 | eggplantade | (~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 +0100 | Constraintegic | (~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 +0100 | pretty_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 +0100 | Jing | (~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 +0100 | fendor | (~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 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 250 seconds) |
2022-01-24 10:42:19 +0100 | DNH | (~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 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) |
2022-01-24 10:49:35 +0100 | polyphem_ | (~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 +0100 | polyphem | (~rod@2a02:810d:840:8754:f8cc:a01b:29d5:d0e1) (Ping timeout: 250 seconds) |
2022-01-24 10:52:03 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 10:52:03 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 10:52:03 +0100 | wroathe | (~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 +0100 | shriekingnoise | (~shrieking@201.231.16.156) (Quit: Quit) |
2022-01-24 10:53:02 +0100 | zincy | (~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 +0100 | mcgroin | (~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 +0100 | MajorBiscuit | (~MajorBisc@c-001-025-008.client.tudelft.eduvpn.nl) |
2022-01-24 10:56:49 +0100 | wroathe | (~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 +0100 | Jing | (~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 +0100 | mmhat | (~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 +0100 | cfricke | (~cfricke@user/cfricke) |
2022-01-24 11:05:08 +0100 | <merijn> | (also not convinced there isn't one) |
2022-01-24 11:05:10 +0100 | Akiva | (~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 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2022-01-24 11:09:10 +0100 | Constraintegic | (~thomasbul@2001:a61:130d:ed01:3ec8:65f2:fd2c:9b7e) (Quit: Leaving) |
2022-01-24 11:12:06 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2022-01-24 11:15:29 +0100 | razetime | (~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 +0100 | cynomys | (~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 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 11:22:51 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 11:22:51 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-24 11:24:13 +0100 | <lionhairdino> | maerwald: thanks for good paper. |
2022-01-24 11:24:17 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 240 seconds) |
2022-01-24 11:27:47 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-24 11:29:52 +0100 | vglfr | (~vglfr@46.96.147.122) (Ping timeout: 250 seconds) |
2022-01-24 11:29:57 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
2022-01-24 11:31:25 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d) |
2022-01-24 11:35:37 +0100 | eggplantade | (~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 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
2022-01-24 11:46:02 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
2022-01-24 11:48:01 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2022-01-24 11:50:59 +0100 | vglfr | (~vglfr@46.96.147.122) |
2022-01-24 11:53:38 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 11:53:38 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 11:53:38 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-24 11:57:13 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-01-24 11:58:35 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-24 12:01:08 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 12:02:43 +0100 | fef | (~thedawn@user/thedawn) (Quit: Leaving) |
2022-01-24 12:02:53 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2022-01-24 12:03:06 +0100 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
2022-01-24 12:10:00 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) |
2022-01-24 12:14:17 +0100 | yauhsien | (~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 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
2022-01-24 12:23:32 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-01-24 12:24:25 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 12:24:25 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 12:24:25 +0100 | wroathe | (~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 +0100 | akegalj | (~akegalj@89-172-25-196.adsl.net.t-com.hr) |
2022-01-24 12:28:27 +0100 | perrierjouet | (~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 +0100 | wroathe | (~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 +0100 | bjobjo | (~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 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:d0b2:5a76:adf7:9a5a) |
2022-01-24 12:38:13 +0100 | jackson99 | (~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 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-01-24 12:43:53 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 12:44:00 +0100 | leibniz | (~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 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 12:55:12 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 12:55:12 +0100 | wroathe | (~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 +0100 | wroathe | (~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 +0100 | jgeerds | (~jgeerds@55d4a547.access.ecotel.net) |
2022-01-24 13:13:12 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
2022-01-24 13:13:15 +0100 | jackson99 | (~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 +0100 | Jing | (~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 +0100 | ardell | (~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 +0100 | merijn | (~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 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 13:28:12 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 13:28:12 +0100 | wroathe | (~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 +0100 | merijn | (~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 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-01-24 13:32:52 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-24 13:33:01 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-24 13:33:37 +0100 | jackson99 | (~bc8147f2@cerf.good1.com) |
2022-01-24 13:34:38 +0100 | fef | (~thedawn@user/thedawn) |
2022-01-24 13:35:06 +0100 | leibniz | (~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed) |
2022-01-24 13:39:20 +0100 | slack1256 | (~slack1256@191.126.99.84) |
2022-01-24 13:39:57 +0100 | mcgroin | (~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 +0100 | lavaman | (~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 +0100 | wyrd | (~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 +0100 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) |
2022-01-24 13:47:42 +0100 | Guest|65 | (~Guest|65@203.192.207.134) |
2022-01-24 13:47:50 +0100 | Guest|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 +0100 | cyphase | (~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 +0100 | jgeerds | (~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 +0100 | soxen | (~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 +0100 | polezaivsani | (~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 +0100 | DNH | (~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 +0100 | fendor_ | (~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 +0100 | jackson99 | (~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 +0100 | bitdex | (~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 +0100 | dsrt^ | (~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 +0100 | fendor | (~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 +0100 | akegalj | (~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 +0100 | lavaman | (~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 +0100 | lavaman | (~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 +0100 | euandreh | (~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 +0100 | ksqsf | (~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 +0100 | ksqsf | (~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 +0100 | cfricke | (~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 +0100 | ksqsf | (~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 +0100 | slowButPresent | (~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 +0100 | jpds | (~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 +0100 | jpds | (~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 +0100 | davros | (~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 +0100 | ksqsf | (~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 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 250 seconds) |
2022-01-24 14:56:26 +0100 | unmanbearpig | (~unmanbear@user/unmanbearpig) |
2022-01-24 14:58:18 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-24 15:02:38 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 250 seconds) |
2022-01-24 15:05:39 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) |
2022-01-24 15:05:45 +0100 | slack1256 | (~slack1256@191.126.99.84) (Remote host closed the connection) |
2022-01-24 15:09:39 +0100 | bontaq | (~user@ool-45779fe5.dyn.optonline.net) |
2022-01-24 15:10:17 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 240 seconds) |
2022-01-24 15:11:51 +0100 | jgeerds | (~jgeerds@55d4a547.access.ecotel.net) |
2022-01-24 15:14:57 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) (Ping timeout: 240 seconds) |
2022-01-24 15:18:36 +0100 | imalsogreg | (~imalsogre@c-73-172-114-3.hsd1.md.comcast.net) |
2022-01-24 15:21:51 +0100 | imalsogreg | (~imalsogre@c-73-172-114-3.hsd1.md.comcast.net) (Remote host closed the connection) |
2022-01-24 15:24:06 +0100 | ksqsf | (~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 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 15:26:32 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 15:26:32 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-24 15:28:37 +0100 | ksqsf | (~user@2001:da8:d800:604:9875:4b6c:862:bfd4) (Ping timeout: 240 seconds) |
2022-01-24 15:29:10 +0100 | timCF | (~timCF@200-149-20-81.sta.estpak.ee) |
2022-01-24 15:29:10 +0100 | timCF | (~timCF@200-149-20-81.sta.estpak.ee) (Client Quit) |
2022-01-24 15:29:38 +0100 | timCF | (~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 +0100 | n3rdy1 | (~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 +0100 | leibniz | (~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 +0100 | cfricke | (~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 +0100 | soxen | (~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 +0100 | ph88^ | (~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 +0100 | kritzefitz | (~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 +0100 | alp | (~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 +0100 | kritzefitz | (~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 +0100 | soxen | (~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 +0100 | shriekingnoise | (~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 +0100 | iteratee | (~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 +0100 | shapr | (~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 +0100 | deadmarshal | (~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 +0100 | sha296 | (~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 +0100 | iteratee | (~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 +0100 | Jing | (~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 +0100 | shapr | gets 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 +0100 | max22- | (~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 +0100 | soxen | (~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 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 256 seconds) |
2022-01-24 16:06:01 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2022-01-24 16:06:19 +0100 | wombat875 | (~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 +0100 | waleee | (~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 +0100 | akegalj | (~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 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds) |
2022-01-24 16:17:37 +0100 | n3rdy1 | (~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 +0100 | soxen | (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) |
2022-01-24 16:21:07 +0100 | fendor_ | (~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 +0100 | coot | (~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 +0100 | akegalj | (~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 +0100 | mmalter | (~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 +0100 | sha296 | (~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 +0100 | Henson | (~kvirc@107-179-133-201.cpe.teksavvy.com) |
2022-01-24 16:29:54 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-24 16:30:36 +0100 | n3rdy1 | (~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 +0100 | polezaivsani | (~polezaivs@orangeshoelaces.net) (Ping timeout: 250 seconds) |
2022-01-24 16:34:16 +0100 | razetime | (~quassel@49.207.209.26) |
2022-01-24 16:34:17 +0100 | CHUD | (~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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 16:49:05 +0100 | ubert1 | (~Thunderbi@p200300ecdf0994d82e117d25e75bd889.dip0.t-ipconnect.de) |
2022-01-24 16:49:29 +0100 | ezyang | (~ezyang@ool-18b820e3.dyn.optonline.net) |
2022-01-24 16:49:39 +0100 | wroathe | (~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 +0100 | TheCoffeMaker | (~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 +0100 | xff0x | (~xff0x@2001:1a81:5370:cd00:aa5:136f:1b20:712a) (Ping timeout: 268 seconds) |
2022-01-24 16:56:16 +0100 | xff0x | (~xff0x@port-92-193-184-123.dynamic.as20676.net) |
2022-01-24 16:57:06 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) |
2022-01-24 16:57:34 +0100 | jgeerds | (~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 +0100 | CHUD | (~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 +0100 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds) |
2022-01-24 17:00:02 +0100 | leibniz | (~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed) |
2022-01-24 17:01:18 +0100 | coot | (~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 +0100 | alp | (~alp@user/alp) |
2022-01-24 17:06:46 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 17:08:15 +0100 | max22- | (~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 +0100 | akegalj | (~akegalj@89-172-25-196.adsl.net.t-com.hr) |
2022-01-24 17:10:06 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 17:10:46 +0100 | lortabac | (~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 +0100 | akegalj | (~akegalj@89-172-25-196.adsl.net.t-com.hr) (Client Quit) |
2022-01-24 17:13:57 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) |
2022-01-24 17:14:09 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 17:14:28 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) |
2022-01-24 17:14:35 +0100 | <romesrf> | hey everyone |
2022-01-24 17:16:14 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection) |
2022-01-24 17:16:26 +0100 | nattiestnate | (~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 +0100 | yauhsien | (~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 +0100 | fef | (~thedawn@user/thedawn) (Quit: Leaving) |
2022-01-24 17:21:57 +0100 | razetime | (~quassel@49.207.209.26) (Ping timeout: 256 seconds) |
2022-01-24 17:22:21 +0100 | CHUD | (~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 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-24 17:25:38 +0100 | lispy | (~lispy4@84.69.59.93) |
2022-01-24 17:25:41 +0100 | khanred | (~khanred@user/khanred) |
2022-01-24 17:26:47 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 17:28:40 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-24 17:29:19 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
2022-01-24 17:29:32 +0100 | emf_ | (~emf@2620:10d:c090:400::5:2d26) (Ping timeout: 250 seconds) |
2022-01-24 17:29:38 +0100 | khanred | (~khanred@user/khanred) (Leaving) |
2022-01-24 17:29:50 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-24 17:30:33 +0100 | alx741 | (~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 +0100 | lavaman | (~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 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d) |
2022-01-24 17:40:03 +0100 | justsomeguy | (~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 +0100 | eggplantade | (~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 +0100 | lionhairdino | (~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 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Ping timeout: 240 seconds) |
2022-01-24 17:48:24 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 17:50:04 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 17:51:15 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d) |
2022-01-24 17:53:41 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 268 seconds) |
2022-01-24 17:54:15 +0100 | CHUD | (~CHUD@edu7895.kent.ac.uk) (Ping timeout: 256 seconds) |
2022-01-24 17:54:26 +0100 | razetime | (~quassel@49.207.209.26) |
2022-01-24 17:57:13 +0100 | provorny_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 +0100 | justsomeguy | (~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 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) |
2022-01-24 17:59:57 +0100 | nattiestnate | (~nate@2001:448a:20a0:2d74:df0e:2d0:816:6977) (Quit: WeeChat 3.4) |
2022-01-24 18:00:18 +0100 | razetime | (~quassel@49.207.209.26) (Ping timeout: 250 seconds) |
2022-01-24 18:00:44 +0100 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.3) |
2022-01-24 18:01:14 +0100 | provorny_compsog | Sixto[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 +0100 | CHUD | (~CHUD@edu7895.kent.ac.uk) |
2022-01-24 18:02:05 +0100 | zmt00 | (~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 +0100 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) |
2022-01-24 18:03:01 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 18:05:10 +0100 | lispy | (~lispy4@84.69.59.93) (Quit: Leaving) |
2022-01-24 18:05:38 +0100 | lispy | (~lispy4@84.69.59.93) |
2022-01-24 18:06:36 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 18:08:02 +0100 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds) |
2022-01-24 18:08:41 +0100 | bjobjo | (~bjobjo@user/bjobjo) |
2022-01-24 18:09:06 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection) |
2022-01-24 18:10:54 +0100 | alx741 | (~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 +0100 | chele | (~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 +0100 | log101 | (~log101@212.125.22.146) |
2022-01-24 18:14:39 +0100 | ezyang | (~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 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-b88c-5e22-9d18-391e.res6.spectrum.com) |
2022-01-24 18:26:37 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
2022-01-24 18:27:02 +0100 | Hanicef | (~gustaf@81-229-9-108-no92.tbcn.telia.com) |
2022-01-24 18:27:11 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Read error: Connection reset by peer) |
2022-01-24 18:28:51 +0100 | raym_ | (~raym@user/raym) |
2022-01-24 18:28:58 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) |
2022-01-24 18:29:01 +0100 | raym | (~raym@user/raym) (Ping timeout: 256 seconds) |
2022-01-24 18:29:08 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 18:32:02 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 18:33:18 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.3) |
2022-01-24 18:34:23 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2022-01-24 18:35:16 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection) |
2022-01-24 18:35:54 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
2022-01-24 18:37:11 +0100 | ProfSimm | (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) |
2022-01-24 18:40:17 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-24 18:45:22 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection) |
2022-01-24 18:47:05 +0100 | deadmarshal | (~deadmarsh@95.38.118.201) |
2022-01-24 18:49:50 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 18:51:07 +0100 | econo | (uid147250@user/econo) |
2022-01-24 18:51:37 +0100 | MajorBiscuit | (~MajorBisc@c-001-025-008.client.tudelft.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-24 18:53:25 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 18:53:30 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Ping timeout: 268 seconds) |
2022-01-24 18:53:51 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 18:53:51 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 18:53:51 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-24 18:57:57 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 18:58:51 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-24 19:00:33 +0100 | CHUD | (~CHUD@edu7895.kent.ac.uk) (Ping timeout: 256 seconds) |
2022-01-24 19:00:39 +0100 | Jing | (~hedgehog@240e:390:7c53:a7e1:4860:ab29:df65:d349) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-01-24 19:00:57 +0100 | raym_ | (~raym@user/raym) (Ping timeout: 240 seconds) |
2022-01-24 19:01:56 +0100 | raym | (~raym@user/raym) |
2022-01-24 19:04:17 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-24 19:05:20 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 19:08:01 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 19:08:01 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 19:08:01 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-24 19:09:36 +0100 | geranim0 | (~geranim0@d-132-204-221-88.res.umontreal.ca) |
2022-01-24 19:10:32 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 240 seconds) |
2022-01-24 19:10:43 +0100 | mikoto-chan | (~mikoto-ch@213.177.151.239) |
2022-01-24 19:11:31 +0100 | log101 | (~log101@212.125.22.146) (Ping timeout: 256 seconds) |
2022-01-24 19:12:30 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-01-24 19:13:05 +0100 | hololeap | (~hololeap@user/hololeap) |
2022-01-24 19:13:25 +0100 | tom__ | (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) |
2022-01-24 19:15:32 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) |
2022-01-24 19:16:28 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 19:17:26 +0100 | soxen | (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 250 seconds) |
2022-01-24 19:17:33 +0100 | tom_ | (~tom@host86-151-99-97.range86-151.btcentralplus.com) (Ping timeout: 256 seconds) |
2022-01-24 19:18:55 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 19:19:49 +0100 | yauhsien | (~yauhsien@61-231-58-250.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2022-01-24 19:22:27 +0100 | Akiva | (~Akiva@user/Akiva) |
2022-01-24 19:22:37 +0100 | neceve | (~quassel@2.26.93.228) |
2022-01-24 19:23:07 +0100 | log101 | (~log101@212.125.22.146) |
2022-01-24 19:23:31 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Quit: ec) |
2022-01-24 19:24:24 +0100 | polyphem_ | polyphem |
2022-01-24 19:26:02 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-24 19:27:28 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2022-01-24 19:27:43 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) |
2022-01-24 19:30:28 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2022-01-24 19:30:35 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-24 19:31:55 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-01-24 19:32:35 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-24 19:33:00 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 19:34:28 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::5d55) (Remote host closed the connection) |
2022-01-24 19:35:34 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 19:35:47 +0100 | iteratee | (~kyle@162.218.222.107) (Read error: Connection reset by peer) |
2022-01-24 19:37:01 +0100 | log101 | (~log101@212.125.22.146) (Read error: Connection reset by peer) |
2022-01-24 19:37:35 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-24 19:38:27 +0100 | mbuf | (~Shakthi@171.61.206.147) (Quit: Leaving) |
2022-01-24 19:39:44 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 19:43:50 +0100 | Hanicef | (~gustaf@81-229-9-108-no92.tbcn.telia.com) (Quit: leaving) |
2022-01-24 19:44:33 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) |
2022-01-24 19:44:41 +0100 | alp | (~alp@user/alp) (Ping timeout: 268 seconds) |
2022-01-24 19:44:49 +0100 | imalsogreg | (~imalsogre@c-73-172-114-3.hsd1.md.comcast.net) |
2022-01-24 19:45:46 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 19:45:46 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 19:45:46 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-24 19:47:17 +0100 | imalsogreg | (~imalsogre@c-73-172-114-3.hsd1.md.comcast.net) (Remote host closed the connection) |
2022-01-24 19:47:30 +0100 | imalsogreg | (~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 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Ping timeout: 240 seconds) |
2022-01-24 19:49:59 +0100 | imalsogreg | (~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 +0100 | eruditass | (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2022-01-24 19:50:17 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2022-01-24 19:50:18 +0100 | iteratee | (~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 +0100 | imalsogreg | (~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 +0100 | gentauro | (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
2022-01-24 19:53:51 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) |
2022-01-24 19:54:57 +0100 | iteratee | (~kyle@162.218.222.107) (Ping timeout: 256 seconds) |
2022-01-24 19:55:14 +0100 | iteratee | (~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 +0100 | alx741 | (~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 +0100 | ec | (~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 +0100 | zaquest | (~notzaques@5.130.79.72) (Read error: Connection reset by peer) |
2022-01-24 19:58:46 +0100 | gentauro | (~gentauro@user/gentauro) |
2022-01-24 19:58:59 +0100 | alx741 | (~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 +0100 | polezaivsani | (~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 +0100 | merijn | (~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 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-24 20:00:24 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 20:01:09 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) |
2022-01-24 20:01:09 +0100 | Brandon_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 +0100 | riatre | (~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 +0100 | riatre | (~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 +0100 | benin | (~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 +0100 | merijn | (~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 +0100 | merijn | (~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 +0100 | soxen | (~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 +0100 | alp | (~alp@user/alp) |
2022-01-24 20:16:13 +0100 | zaquest | (~notzaques@5.130.79.72) |
2022-01-24 20:17:14 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 20:17:39 +0100 | burnsidesLlama | (~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 +0100 | alx741 | (~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 +0100 | cynomys | (~cynomys@user/cynomys) |
2022-01-24 20:20:02 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-24 20:20:05 +0100 | deadmarshal | (~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 +0100 | merijn | (~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 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-b88c-5e22-9d18-391e.res6.spectrum.com) (Remote host closed the connection) |
2022-01-24 20:26:57 +0100 | SwarmCollective | (~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 +0100 | ubert1 | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 20:37:02 +0100 | merijn | (~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 +0100 | merijn | (~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 +0100 | cynomys | (~cynomys@user/cynomys) (Quit: leaving) |
2022-01-24 20:39:47 +0100 | cynomys | (~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 +0100 | alx741 | (~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 +0100 | Hildegunst | (~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 +0100 | coot | (~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 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-24 20:46:58 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 268 seconds) |
2022-01-24 20:48:38 +0100 | cyphase | (~cyphase@user/cyphase) |
2022-01-24 20:50:36 +0100 | imalsogreg | (~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 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930:40c5:3263:848f:5ae1) |
2022-01-24 20:53:19 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-01-24 20:54:10 +0100 | merijn | (~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 +0100 | alx741 | (~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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 21:05:20 +0100 | juhp | (~juhp@128.106.188.82) (Ping timeout: 250 seconds) |
2022-01-24 21:06:46 +0100 | juhp | (~juhp@128.106.188.82) |
2022-01-24 21:11:53 +0100 | o-90 | (~o-90@gateway/tor-sasl/o-90) |
2022-01-24 21:12:18 +0100 | romesrf | (~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 +0100 | finsternis | (~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 +0100 | finsternis | (~X@23.226.237.192) |
2022-01-24 21:19:35 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-01-24 21:19:45 +0100 | jgeerds | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 21:24:00 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2022-01-24 21:24:30 +0100 | zincy | (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67) |
2022-01-24 21:24:35 +0100 | Hildegunst | (~luc@80.248.12.109.rev.sfr.net) (Ping timeout: 268 seconds) |
2022-01-24 21:25:45 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2022-01-24 21:26:10 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-01-24 21:26:38 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d) (Remote host closed the connection) |
2022-01-24 21:26:56 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 21:26:57 +0100 | Hildegunst | (~luc@80.248.12.109.rev.sfr.net) |
2022-01-24 21:27:35 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 21:27:35 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 21:27:35 +0100 | wroathe | (~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 +0100 | eggplantade | (~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 +0100 | imalsogreg | (~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 +0100 | imalsogreg | (~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 +0100 | wroathe | (~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 +0100 | Hildegunst | (~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 +0100 | yauhsien_ | (~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 +0100 | vicfred | (~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 +0100 | tomsmeding | wonders if wayland does this differently |
2022-01-24 21:39:56 +0100 | tomsmeding | knows ~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 +0100 | yauhsien_ | (~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 +0100 | ProfSimm | (~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 +0100 | ProfSimm | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 21:45:21 +0100 | <sm> | myShoggoth++ |
2022-01-24 21:46:17 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 21:46:49 +0100 | cosimone | (~user@93-34-132-251.ip49.fastwebnet.it) |
2022-01-24 21:47:09 +0100 | ProfSimm | (~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds) |
2022-01-24 21:49:15 +0100 | lavaman | (~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 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 21:57:55 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 21:57:55 +0100 | wroathe | (~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 +0100 | polyphem_ | (~rod@2a02:810d:840:8754:9996:52da:e8ad:1d27) |
2022-01-24 22:00:48 +0100 | polyphem | (~rod@2a02:810d:840:8754:a778:fc55:137:3e0) (Ping timeout: 250 seconds) |
2022-01-24 22:01:00 +0100 | polyphem_ | polyphem |
2022-01-24 22:01:53 +0100 | <geekosaur> | yeh |
2022-01-24 22:01:53 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2022-01-24 22:03:44 +0100 | geekosaur | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 22:04:43 +0100 | o-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 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-40df-b781-ef29-193a.res6.spectrum.com) (Remote host closed the connection) |
2022-01-24 22:09:22 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-3c68-95a2-3c50-c518.res6.spectrum.com) |
2022-01-24 22:10:21 +0100 | ProfSimm | (~ProfSimm@87.227.196.109) |
2022-01-24 22:10:30 +0100 | ensyde | (~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 +0100 | zincy | (~zincy@2a00:23c8:970c:4801:f0bc:c4cb:1665:1c67) (Remote host closed the connection) |
2022-01-24 22:12:42 +0100 | alx741 | (~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 +0100 | imalsogr_ | (~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 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:cceb:625b:cb9d:590d) (Remote host closed the connection) |
2022-01-24 22:19:36 +0100 | pavonia | (~user@user/siracusa) |
2022-01-24 22:20:18 +0100 | imalsogreg | (~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 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2022-01-24 22:22:53 +0100 | greenbourne277 | (~greenbour@2001:4b98:dc2:45:216:3eff:fe8a:bbf0) (Ping timeout: 250 seconds) |
2022-01-24 22:23:07 +0100 | haskellberryfinn | (~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 +0100 | mikoto-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 +0100 | alx741 | (~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 +0100 | ystael | (~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 +0100 | CHUD | (~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 +0100 | ystael | (~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 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 22:35:02 +0100 | wombat875 | (~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 +0100 | greenbourne277 | (~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 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-24 22:37:54 +0100 | eggplantade | (~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 +0100 | lrngystdlted^ | (~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 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds) |
2022-01-24 22:39:54 +0100 | thyriaen | (~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 +0100 | analognoise | (~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 +0100 | waleee | (~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 +0100 | analognoise1 | (~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 +0100 | waleee | (~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 +0100 | wombat875 | (~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 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-01-24 22:47:32 +0100 | analognoise1 | (~analognoi@185.202.221.105) (Client Quit) |
2022-01-24 22:47:49 +0100 | analognoise1 | (~analognoi@185.202.221.105) |
2022-01-24 22:48:37 +0100 | analognoise | (~analognoi@2600:8801:8c26:9e00:985c:5a64:faa:5347) (Ping timeout: 240 seconds) |
2022-01-24 22:48:48 +0100 | Pickchea | (~private@user/pickchea) |
2022-01-24 22:50:07 +0100 | analognoise1 | analognoise |
2022-01-24 22:50:57 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2022-01-24 22:52:52 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 22:53:37 +0100 | JoseC[m] | (~jmcardonm@2001:470:69fc:105::1:7539) |
2022-01-24 22:55:17 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
2022-01-24 22:56:28 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 22:57:03 +0100 | iteratee | (~kyle@162.218.222.107) (Ping timeout: 256 seconds) |
2022-01-24 22:57:04 +0100 | imalsogr_ | (~imalsogre@2601:147:300:f930::b46b) (Remote host closed the connection) |
2022-01-24 22:57:23 +0100 | iteratee | (~kyle@162.218.222.107) |
2022-01-24 22:57:36 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::b46b) |
2022-01-24 22:59:28 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-24 22:59:28 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-24 22:59:28 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-24 23:01:54 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::b46b) (Ping timeout: 250 seconds) |
2022-01-24 23:02:23 +0100 | yassernasc | (~yassernas@2804:29b8:505a:f33d:65bb:7e4c:2cd0:965) |
2022-01-24 23:03:03 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2022-01-24 23:04:25 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-24 23:04:29 +0100 | iteratee | (~kyle@162.218.222.107) (Ping timeout: 268 seconds) |
2022-01-24 23:06:14 +0100 | merijn | (~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 +0100 | burnsidesLlama | (~burnsides@dhcp168-037.wadham.ox.ac.uk) (Remote host closed the connection) |
2022-01-24 23:07:41 +0100 | Pickchea | (~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 +0100 | son0p | (~ff@2800:484:1d81:b700::5) |
2022-01-24 23:10:35 +0100 | iteratee | (~kyle@162.218.222.107) |
2022-01-24 23:11:30 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2022-01-24 23:14:29 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 23:15:18 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::b46b) |
2022-01-24 23:19:57 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 23:24:39 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev) |
2022-01-24 23:27:36 +0100 | burnsidesLlama | (~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 +0100 | michalz | (~michalz@185.246.204.58) (Remote host closed the connection) |
2022-01-24 23:32:22 +0100 | max22- | (~maxime@2a01cb0883359800fbaebbbb888c1e29.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
2022-01-24 23:36:30 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal) |
2022-01-24 23:36:33 +0100 | alx741 | (~alx741@157.100.93.160) |
2022-01-24 23:38:00 +0100 | vysn | (~vysn@user/vysn) |
2022-01-24 23:38:23 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-3c68-95a2-3c50-c518.res6.spectrum.com) (Remote host closed the connection) |
2022-01-24 23:38:46 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-b296-221b-2190-d11e.res6.spectrum.com) |
2022-01-24 23:40:06 +0100 | alx741 | (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
2022-01-24 23:40:37 +0100 | lispy | (~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 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) |
2022-01-24 23:41:59 +0100 | <maerwald> | `many` |
2022-01-24 23:42:44 +0100 | szkl | (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 +0100 | kjak | (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 240 seconds) |
2022-01-24 23:46:02 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 240 seconds) |
2022-01-24 23:47:09 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-24 23:48:53 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 268 seconds) |
2022-01-24 23:49:14 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2022-01-24 23:51:32 +0100 | iteratee | (~kyle@162.218.222.107) (Ping timeout: 240 seconds) |
2022-01-24 23:52:15 +0100 | gehmehgeh | (~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 +0100 | alx741 | (~alx741@157.100.93.160) |