2025-02-01 00:01:07 +0100 | ubert | (~Thunderbi@p200300ecdf4e63eb92aaad72729f1b5d.dip0.t-ipconnect.de) (Quit: ubert) |
2025-02-01 00:01:42 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
2025-02-01 00:02:08 +0100 | alfiee | (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
2025-02-01 00:07:32 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 00:08:01 +0100 | ash3en | (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) ash3en |
2025-02-01 00:08:02 +0100 | ash3en | (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit) |
2025-02-01 00:11:39 +0100 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 265 seconds) |
2025-02-01 00:11:45 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-02-01 00:12:40 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 00:14:08 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) L29Ah |
2025-02-01 00:17:09 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
2025-02-01 00:19:39 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2025-02-01 00:20:08 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
2025-02-01 00:22:24 +0100 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod |
2025-02-01 00:28:07 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 00:28:30 +0100 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 244 seconds) |
2025-02-01 00:32:33 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-02-01 00:43:30 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 00:45:00 +0100 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds) |
2025-02-01 00:46:08 +0100 | jinsun | (~jinsun@user/jinsun) jinsun |
2025-02-01 00:46:50 +0100 | alfiee | (~alfiee@user/alfiee) alfiee |
2025-02-01 00:47:58 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-02-01 00:51:22 +0100 | alfiee | (~alfiee@user/alfiee) (Ping timeout: 272 seconds) |
2025-02-01 00:52:04 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) ezzieyguywuf |
2025-02-01 00:55:02 +0100 | <Leary> | kaol: Both ghcid and ghciwatch (given the right flags) allow you to effectively use the repl with `-- $> foo` comments in your code, though the latter is smarter about it---it actually loads the host module so its internals are in scope. |
2025-02-01 00:55:16 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 01:00:04 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-02-01 01:01:22 +0100 | jinsun | (~jinsun@user/jinsun) () |
2025-02-01 01:08:00 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 264 seconds) |
2025-02-01 01:09:01 +0100 | <haskellbridge> | <sm> Leary: could you expand that a little ? $> foo comments ? |
2025-02-01 01:10:40 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 01:12:09 +0100 | sawilagar | (~sawilagar@user/sawilagar) (Ping timeout: 260 seconds) |
2025-02-01 01:15:06 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-02-01 01:18:13 +0100 | <Leary> | sm: If you use the `--allow-eval` or `--enable-eval` flags in ghcid or ghciwatch respectively, they look for comments of the form `-- $> <code>` in your source to evaluate. |
2025-02-01 01:19:22 +0100 | malte | (~malte@mal.tc) (Remote host closed the connection) |
2025-02-01 01:22:52 +0100 | ljdarj1 | (~Thunderbi@user/ljdarj) ljdarj |
2025-02-01 01:23:12 +0100 | malte | (~malte@mal.tc) malte |
2025-02-01 01:23:17 +0100 | Guest96 | (~Guest96@81-207-104-14.fixed.kpn.net) |
2025-02-01 01:23:59 +0100 | Guest96 | (~Guest96@81-207-104-14.fixed.kpn.net) (Client Quit) |
2025-02-01 01:26:02 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 01:26:04 +0100 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
2025-02-01 01:26:05 +0100 | ljdarj1 | ljdarj |
2025-02-01 01:28:13 +0100 | <haskellbridge> | <sm> good to know! |
2025-02-01 01:30:44 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
2025-02-01 01:32:50 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-02-01 01:35:14 +0100 | alfiee | (~alfiee@user/alfiee) alfiee |
2025-02-01 01:39:45 +0100 | alfiee | (~alfiee@user/alfiee) (Ping timeout: 248 seconds) |
2025-02-01 01:44:04 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 01:48:37 +0100 | alp | (~alp@2001:861:8ca0:4940:291:464f:2c61:f1c2) (Remote host closed the connection) |
2025-02-01 01:48:54 +0100 | alp | (~alp@2001:861:8ca0:4940:be55:7820:aa2d:6e12) |
2025-02-01 01:52:34 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-02-01 01:52:36 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2025-02-01 01:53:11 +0100 | ec | (~ec@gateway/tor-sasl/ec) ec |
2025-02-01 01:53:44 +0100 | alp | (~alp@2001:861:8ca0:4940:be55:7820:aa2d:6e12) (Ping timeout: 260 seconds) |
2025-02-01 02:03:16 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 02:08:07 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
2025-02-01 02:09:50 +0100 | sprotte24 | (~sprotte24@p200300d16f06b9001d5c2b08794be0ce.dip0.t-ipconnect.de) (Quit: Leaving) |
2025-02-01 02:18:39 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 02:19:17 +0100 | otto_s | (~user@p5de2fd05.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
2025-02-01 02:21:12 +0100 | otto_s | (~user@p5b0448ee.dip0.t-ipconnect.de) |
2025-02-01 02:24:20 +0100 | alfiee | (~alfiee@user/alfiee) alfiee |
2025-02-01 02:24:29 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-02-01 02:28:54 +0100 | alfiee | (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
2025-02-01 02:35:03 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 02:39:21 +0100 | Guest22 | (~Guest62@c-73-217-79-154.hsd1.co.comcast.net) |
2025-02-01 02:39:26 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-02-01 02:45:22 +0100 | acidjnk_new3 | (~acidjnk@p200300d6e7283f83f8f1a3a9ad07643b.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
2025-02-01 02:50:25 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 02:54:57 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
2025-02-01 02:58:41 +0100 | Guest22 | (~Guest62@c-73-217-79-154.hsd1.co.comcast.net) (Quit: Client closed) |
2025-02-01 03:04:19 +0100 | xff0x | (~xff0x@ai096095.d.east.v6connect.net) (Ping timeout: 260 seconds) |
2025-02-01 03:06:07 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 03:10:36 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-02-01 03:13:06 +0100 | alfiee | (~alfiee@user/alfiee) alfiee |
2025-02-01 03:13:38 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 03:15:32 +0100 | weary-traveler | (~user@user/user363627) user363627 |
2025-02-01 03:16:01 +0100 | euleritian | (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
2025-02-01 03:16:19 +0100 | euleritian | (~euleritia@77.23.250.232) |
2025-02-01 03:16:50 +0100 | xff0x | (~xff0x@2405:6580:b080:900:9526:2be3:6fc8:68b2) |
2025-02-01 03:17:34 +0100 | alfiee | (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
2025-02-01 03:17:56 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-02-01 03:28:58 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 03:29:18 +0100 | vanishingideal | (~vanishing@user/vanishingideal) (Ping timeout: 252 seconds) |
2025-02-01 03:30:09 +0100 | tavare | (~tavare@user/tavare) tavare |
2025-02-01 03:31:19 +0100 | vanishingideal | (~vanishing@user/vanishingideal) vanishingideal |
2025-02-01 03:32:33 +0100 | euleritian | (~euleritia@77.23.250.232) (Remote host closed the connection) |
2025-02-01 03:32:51 +0100 | euleritian | (~euleritia@77.23.250.232) |
2025-02-01 03:33:02 +0100 | euouae | (~euouae@user/euouae) euouae |
2025-02-01 03:33:17 +0100 | <euouae> | Hello I was using Debug.Trace to check up on sharing |
2025-02-01 03:33:34 +0100 | <euouae> | but e.g. `let y = trace "y-demanded" 1 in (y, y)` will print two y-demanded messages. Why? I thought 'y' would be shared in the pair expression |
2025-02-01 03:33:42 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
2025-02-01 03:33:48 +0100 | <euouae> | Is it just because sharing (for some reason) didn't happen there? |
2025-02-01 03:34:10 +0100 | <geekosaur> | did you use optimization? |
2025-02-01 03:34:19 +0100 | <geekosaur> | (if you were doing it in ghci, you weren't) |
2025-02-01 03:34:24 +0100 | <int-e> | compare let y = trace "y-demanded" 1 :: Integer in (y, y) |
2025-02-01 03:34:38 +0100 | <int-e> | then figure out why adding a type signature makes a difference |
2025-02-01 03:34:45 +0100 | <geekosaur> | oh, right |
2025-02-01 03:35:29 +0100 | <int-e> | the remark about optimizations is valid too of course |
2025-02-01 03:36:07 +0100 | <EvanR> | that's so tricky |
2025-02-01 03:36:23 +0100 | <euouae> | because the type inference prevents it from being shared? |
2025-02-01 03:36:34 +0100 | <geekosaur> | type inference didn't happen |
2025-02-01 03:36:38 +0100 | <geekosaur> | there's a piece missing |
2025-02-01 03:36:50 +0100 | <geekosaur> | well, it did but it didn't reach a final result |
2025-02-01 03:36:55 +0100 | <int-e> | :t 1 |
2025-02-01 03:36:56 +0100 | <lambdabot> | Num p => p |
2025-02-01 03:37:09 +0100 | <euouae> | it being Num doesn't tell me much I don't know what to make of it |
2025-02-01 03:37:13 +0100 | <EvanR> | 1 is like a function waiting to be given a Num instance |
2025-02-01 03:37:24 +0100 | <EvanR> | rather than a number |
2025-02-01 03:37:33 +0100 | <geekosaur> | :t let y = 1 in (y,y) |
2025-02-01 03:37:34 +0100 | <lambdabot> | (Num a, Num b) => (a, b) |
2025-02-01 03:37:57 +0100 | <geekosaur> | think about that one for a bit |
2025-02-01 03:38:12 +0100 | <euouae> | well, so it is type inference right |
2025-02-01 03:38:18 +0100 | <euouae> | because I can do :: (Int, Double) |
2025-02-01 03:38:47 +0100 | <EvanR> | :t let y = 1 in (y,y) :: (Int, Double) |
2025-02-01 03:38:48 +0100 | <lambdabot> | (Int, Double) |
2025-02-01 03:38:53 +0100 | <EvanR> | now it's a pair of numbers |
2025-02-01 03:38:54 +0100 | <int-e> | well sharing and lack thereof is firmly a runtime phenomenon |
2025-02-01 03:39:03 +0100 | <int-e> | so it's not *just* type inference |
2025-02-01 03:39:25 +0100 | <euouae> | Yeah, `let x = trace "foo" 1 in (x :: Int, x :: Int)` will still print two foos |
2025-02-01 03:39:38 +0100 | <EvanR> | pair of numbers vs "like a function waiting for two different Num instances, that may or may not happen to be the same instance" |
2025-02-01 03:39:40 +0100 | <euouae> | it's something more than that |
2025-02-01 03:40:30 +0100 | <euouae> | when you say function do you mean type function |
2025-02-01 03:40:37 +0100 | <EvanR> | no |
2025-02-01 03:40:41 +0100 | <euouae> | the `p` argument in Num p => p? |
2025-02-01 03:40:50 +0100 | <EvanR> | no the => in Num p => p |
2025-02-01 03:41:07 +0100 | <geekosaur> | as long as it has a constraint, it's like a partially applied function. (=> looks like -> for a reason) the thing that needs to be applied is an instance dictionary |
2025-02-01 03:41:16 +0100 | <int-e> | Concretely at runtime, the argument is a Num dictionary for p. |
2025-02-01 03:41:18 +0100 | nitrix | (~nitrix@user/meow/nitrix) (Quit: ZNC 1.8.2 - https://znc.in) |
2025-02-01 03:41:31 +0100 | <euouae> | I haven't heard of dictionary before |
2025-02-01 03:41:32 +0100 | <geekosaur> | by the time you apply it to the tuple, it's too late to go back and do sharing. if you specify it in the let, it can share |
2025-02-01 03:42:03 +0100 | <int-e> | (Dictionaries are an implementation detail of type classes.) |
2025-02-01 03:42:12 +0100 | <geekosaur> | have you reached typeclasses yet? |
2025-02-01 03:42:26 +0100 | <euouae> | No I just roughly know they have to do with interfaces |
2025-02-01 03:42:32 +0100 | <EvanR> | D: |
2025-02-01 03:42:35 +0100 | <int-e> | (And there are alternatives... notably, JHC passed type descriptors instead.) |
2025-02-01 03:42:37 +0100 | nitrix | (~nitrix@user/meow/nitrix) nitrix |
2025-02-01 03:42:39 +0100 | tabaqui1 | (~root@87.200.129.102) tabaqui |
2025-02-01 03:43:24 +0100 | <EvanR> | is passing type descriptors tangibly different in practice |
2025-02-01 03:43:27 +0100 | <geekosaur> | "interfaces" is a flawed attempt to understand typeclasses in terms of something better known, much like all the failed monad tutorials floating around the internet |
2025-02-01 03:43:57 +0100 | <euouae> | failure does not worry me |
2025-02-01 03:44:17 +0100 | <EvanR> | > fail "monad tutorial failed" |
2025-02-01 03:44:18 +0100 | <lambdabot> | error: |
2025-02-01 03:44:18 +0100 | <lambdabot> | • Ambiguous type variables ‘m0’, |
2025-02-01 03:44:18 +0100 | <lambdabot> | ‘a0’ arising from a use of ‘show_M13899420735... |
2025-02-01 03:44:20 +0100 | <geekosaur> | it should, you will have problems if you insist on "thats good enlugh isnt it?" |
2025-02-01 03:44:28 +0100 | <geekosaur> | because it won't be good enough |
2025-02-01 03:44:31 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 03:45:34 +0100 | <euouae> | so anyway, sharing happens in concrete types? |
2025-02-01 03:45:40 +0100 | <int-e> | EvanR: Hmm I suspect it mostly affects optimization. But you can probably construct degenerate examples where type descriptors blow up (you construct an arbitrary sized type descriptor) but the functions associated with the class instances don't. (It's `coerce` all the way.) If you only worry about whether something is a function or not at runtime... no it makes no difference. |
2025-02-01 03:46:08 +0100 | <EvanR> | euouae, for sharing to be possible, the two expressions would have to be known to evaluate to the same value |
2025-02-01 03:46:11 +0100 | <EvanR> | then you can share the value |
2025-02-01 03:46:33 +0100 | <EvanR> | in your example they very well may not be the same value |
2025-02-01 03:46:35 +0100 | <EvanR> | or even the same type |
2025-02-01 03:46:47 +0100 | <euouae> | so what happens with (x :: Int, x :: Int) that still prevents it from being shared? |
2025-02-01 03:47:05 +0100 | <euouae> | that x::Int is unevaluated while x::Int evaluates to `x` (but Int now) and then _that_ thunk gets shared? |
2025-02-01 03:47:08 +0100 | <EvanR> | x was a polymorphic thing waiting to be told what Num instance to use |
2025-02-01 03:47:40 +0100 | <EvanR> | presumably a smart enough compiler could look at (x :: Int, x :: Int) and deduce they must evaluate to the same thing |
2025-02-01 03:47:46 +0100 | <EvanR> | but doesn't? |
2025-02-01 03:47:50 +0100 | <geekosaur> | as I said earlier, if you make them both Int when you are tupling them, it's too late; the decision was made that it couldn't share them |
2025-02-01 03:48:09 +0100 | <geekosaur> | because they might not be the same type when applied |
2025-02-01 03:48:12 +0100 | <euouae> | right but is there some deeper understanding to draw from that geekosaur ? |
2025-02-01 03:48:24 +0100 | <int-e> | euouae: there's *no* CSE |
2025-02-01 03:48:31 +0100 | <EvanR> | oh that's why |
2025-02-01 03:48:39 +0100 | <euouae> | not sure what CSE is |
2025-02-01 03:48:45 +0100 | <int-e> | in your context, which is GHCi (so unoptimized bytecode) |
2025-02-01 03:48:50 +0100 | <geekosaur> | "common subexpression elimination" |
2025-02-01 03:49:14 +0100 | <EvanR> | CSE could make let x = 1 in (x::Int,x::Int) into let x = 1 :: Int in (x,x) |
2025-02-01 03:49:14 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
2025-02-01 03:49:25 +0100 | <euouae> | ah I see. What is the subexpression? the x in the tuple? |
2025-02-01 03:49:29 +0100 | <EvanR> | x::Int |
2025-02-01 03:50:25 +0100 | <EvanR> | and then sharing would be an optimization on top of that |
2025-02-01 03:50:59 +0100 | <euouae> | thank you |
2025-02-01 03:52:23 +0100 | <EvanR> | you're in good shape if you don't care about sharing xD |
2025-02-01 03:52:34 +0100 | <EvanR> | otherwise D: |
2025-02-01 03:53:29 +0100 | <EvanR> | it's not represented in the semantics which is always fun |
2025-02-01 03:57:35 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal) |
2025-02-01 03:59:55 +0100 | merijn | (~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn |
2025-02-01 04:01:19 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) ezzieyguywuf |
2025-02-01 04:01:30 +0100 | alfiee | (~alfiee@user/alfiee) alfiee |