Logs: liberachat/#haskell
| 2026-01-17 19:05:40 | × | Zemy_ quits (~Zemy@2600:100c:b0a9:6e2b:6cfa:f4ff:fe48:ea2e) (Ping timeout: 246 seconds) |
| 2026-01-17 19:14:45 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 19:19:15 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-17 19:30:31 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 19:33:21 | × | confusedalex quits (~confuseda@user/confusedalex) (Ping timeout: 250 seconds) |
| 2026-01-17 19:33:43 | × | spew quits (~spew@user/spew) (Ping timeout: 240 seconds) |
| 2026-01-17 19:35:25 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-01-17 19:35:35 | → | spew joins (~spew@user/spew) |
| 2026-01-17 19:38:23 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 2026-01-17 19:39:19 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
| 2026-01-17 19:39:44 | Lord_of_Life_ | is now known as Lord_of_Life |
| 2026-01-17 19:40:22 | → | confusedalex joins (~confuseda@user/confusedalex) |
| 2026-01-17 19:45:52 | × | remexre quits (~remexre@user/remexre) (Remote host closed the connection) |
| 2026-01-17 19:45:59 | → | remexre joins (~remexre@user/remexre) |
| 2026-01-17 19:46:19 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 19:47:31 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Ping timeout: 244 seconds) |
| 2026-01-17 19:49:15 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 2026-01-17 19:50:31 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-17 19:59:57 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 20:01:33 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 2026-01-17 20:01:37 | → | Guest63 joins (~Guest63@mm-240-37-215-37.mfilial.dynamic.pppoe.byfly.by) |
| 2026-01-17 20:02:49 | × | Guest63 quits (~Guest63@mm-240-37-215-37.mfilial.dynamic.pppoe.byfly.by) (Client Quit) |
| 2026-01-17 20:05:25 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-17 20:15:47 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 20:22:33 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-01-17 20:27:08 | → | pavonia joins (~user@user/siracusa) |
| 2026-01-17 20:33:46 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 20:35:04 | × | trickard quits (~trickard@cpe-82-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-17 20:35:17 | → | trickard_ joins (~trickard@cpe-82-98-47-163.wireline.com.au) |
| 2026-01-17 20:38:35 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-17 20:49:32 | × | spew quits (~spew@user/spew) (Quit: nyaa~) |
| 2026-01-17 20:49:37 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 20:54:10 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-01-17 21:05:10 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 21:09:22 | trickard_ | is now known as trickard |
| 2026-01-17 21:09:55 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-01-17 21:18:53 | → | peterbecich joins (~Thunderbi@71.84.33.135) |
| 2026-01-17 21:20:56 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 21:25:35 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-01-17 21:29:01 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 2026-01-17 21:32:24 | × | karenw quits (~karenw@user/karenw) (Ping timeout: 244 seconds) |
| 2026-01-17 21:32:37 | × | hololeap quits (~quassel@user/hololeap) (Quit: Bye) |
| 2026-01-17 21:33:18 | → | hololeap joins (~quassel@user/hololeap) |
| 2026-01-17 21:34:16 | × | trickard quits (~trickard@cpe-82-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 2026-01-17 21:34:28 | → | trickard_ joins (~trickard@cpe-82-98-47-163.wireline.com.au) |
| 2026-01-17 21:36:41 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 21:39:40 | trickard_ | is now known as trickard |
| 2026-01-17 21:41:43 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-01-17 21:46:07 | × | peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 240 seconds) |
| 2026-01-17 21:52:29 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 21:58:04 | × | weary-traveler quits (~user@user/user363627) (Quit: Konversation terminated!) |
| 2026-01-17 21:58:19 | → | weary-traveler joins (~user@user/user363627) |
| 2026-01-17 21:58:55 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-17 22:10:30 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 22:15:00 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-01-17 22:18:55 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2026-01-17 22:22:44 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 2026-01-17 22:24:38 | → | weary-traveler joins (~user@user/user363627) |
| 2026-01-17 22:25:54 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 22:30:35 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 2026-01-17 22:36:45 | → | Zemy_ joins (~Zemy@2600:100c:b04a:cc3c:d838:d5ff:fe1f:3ebe) |
| 2026-01-17 22:40:05 | × | Zemy quits (~Zemy@72.178.108.235) (Ping timeout: 244 seconds) |
| 2026-01-17 22:41:34 | → | Zemy joins (~Zemy@72.178.108.235) |
| 2026-01-17 22:41:40 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 22:43:33 | × | Inline quits (~User@2001-4dd6-dd24-0-886a-5b51-ee9-3d0b.ipv6dyn.netcologne.de) (Ping timeout: 256 seconds) |
| 2026-01-17 22:45:44 | × | Zemy_ quits (~Zemy@2600:100c:b04a:cc3c:d838:d5ff:fe1f:3ebe) (Ping timeout: 260 seconds) |
| 2026-01-17 22:46:36 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 2026-01-17 22:46:56 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-01-17 22:47:47 | → | Inline joins (~User@2001-4dd6-dd24-0-d5a6-802e-e6e6-ce59.ipv6dyn.netcologne.de) |
| 2026-01-17 22:54:24 | <Leary> | Man of Letters (Mikolaj): That's a big improvement, but there's still a lot of duplication. Consider something like this: https://gist.github.com/LSLeary/4db7ad8d3068ee493d3d075df02b01e7 |
| 2026-01-17 22:57:24 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 22:58:13 | <haskellbridge> | <Man of Letters (Mikolaj)> Leary: yay, that's impressive; I may use this for something in the future, but |
| 2026-01-17 22:58:48 | <haskellbridge> | <Man of Letters (Mikolaj)> but the hacks in my code are actually poor man's monomorphisation, so they need to be so crude |
| 2026-01-17 23:00:53 | <haskellbridge> | <Man of Letters (Mikolaj)> the idea is (and it works and speeds up runtime considerably) that I add lots of INLINEs and INLINEABLE and then in each line starting with "Is @<some type>" a function is either inlined or called (but with unfolding available), which GHC now sees operating at concrete type, so it specializes the function (or its inlining) to that specific type |
| 2026-01-17 23:01:30 | <haskellbridge> | <Man of Letters (Mikolaj)> this is a code base with a huge amount of existential types, which totally block any sane ways of specializing code |
| 2026-01-17 23:01:44 | <haskellbridge> | <Man of Letters (Mikolaj)> * specializing/monomorphizing |
| 2026-01-17 23:02:06 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...) |
| 2026-01-17 23:02:38 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 2026-01-17 23:02:52 | <haskellbridge> | <Man of Letters (Mikolaj)> but if anybody has any other ideas how to avoid passing around explicit dictionaries but maintain the very abstract API, I'm all ears |
| 2026-01-17 23:05:18 | <haskellbridge> | <Man of Letters (Mikolaj)> because what I'm currently doing is seriously embarrassing |
| 2026-01-17 23:05:34 | <EvanR> | any time you pass around explicit dictionaries, can't it also be passing (perhaps hidden inside a data type) a record of things doing the implementation |
| 2026-01-17 23:06:38 | <haskellbridge> | <Man of Letters (Mikolaj)> that makes sense; let me think why not |
| 2026-01-17 23:07:35 | → | ethantwardy joins (~user@user/ethantwardy) |
| 2026-01-17 23:09:58 | × | ethantwardy quits (~user@user/ethantwardy) (Client Quit) |
| 2026-01-17 23:11:40 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 2026-01-17 23:13:13 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-01-17 23:14:14 | → | ethantwardy joins (~user@user/ethantwardy) |
| 2026-01-17 23:15:01 | × | ethantwardy quits (~user@user/ethantwardy) (Client Quit) |
| 2026-01-17 23:16:51 | <haskellbridge> | <Man of Letters (Mikolaj)> so, the only argument against I can find is circularity: say, I'm implementing indexing in fancy nested arrays (which is called 12! times in the benchmark I'm working on), the code for the indexing takes a dictionary for storable vectors (the arrays are represented as tuples of such vectors) and it's terribly slow when it has to access the dictionary each time it's called |
| 2026-01-17 23:17:26 | <haskellbridge> | <Man of Letters (Mikolaj)> if I understand your idea correctly, the nested array indexing code should instead take a dictionary that directly works on nested arrays, not vectors |
| 2026-01-17 23:18:13 | <haskellbridge> | <Man of Letters (Mikolaj)> but the nested array indexing code implements what should be in that dictionary --- I'd need a way to somehow boostrap this, recurse across a dictionary |
| 2026-01-17 23:18:24 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 2026-01-17 23:18:34 | <EvanR> | holy moly |
| 2026-01-17 23:21:01 | <EvanR> | if you're combining implementations in a way to implement another implementation, you do want to use prudent "let" bindings to make sure you only access the dependent implementation once |
| 2026-01-17 23:21:14 | <EvanR> | instead of every time it's accessed |
| 2026-01-17 23:21:38 | <EvanR> | this assumes the dependent implementation isn't dynamically changing for the same data structure |
| 2026-01-17 23:22:27 | <EvanR> | dependency isn't dynamically changing* |
| 2026-01-17 23:22:50 | <monochrom> | Oh, like "f x = f (x - 1) + f (x - 1)" vs "f x = let y = f (x - 1) in y + y"? |
| 2026-01-17 23:22:54 | <EvanR> | as far as knot typing I don't know about this |
| 2026-01-17 23:22:58 | <EvanR> | tying |
All times are in UTC.