| 11 Jul 2023 |
profpatsch | which gives yants the (partial) ability to type-check functions | 16:12:37 |
profpatsch | types-simple can only typecheck “data”, not functions | 16:14:19 |
profpatsch | depends on what you want to do, for checkMeta only checking data should be enough | 16:14:47 |
@piegames:matrix.org | Well ideally I'd like to use this for Nixpkgs configuration too, but merging :( | 16:16:05 |
profpatsch | merging is different from typechecking | 16:16:53 |
profpatsch | conflating the two is a big source of annoyance | 16:17:02 |
@piegames:matrix.org | I know | 16:17:13 |
@piegames:matrix.org | One thing that I'd really like to have is some type checking but with default values support. Because currently, there's only the module system which can do that, and instantiating a module system just for each package's meta is not something that is going to fly | 17:03:53 |
profpatsch | piegames: I haven’t thought in-depth about that, but to me a merging algorithm is just a monoidal thingy | 17:15:27 |
profpatsch | you can do a lot of things with that | 17:15:47 |
profpatsch | e.g. (//) and attributes form a monoid | 17:16:14 |
profpatsch | So does recursiveMerge and attrsets | 17:16:29 |
profpatsch | s/attributes/attrsets/ | 17:16:35 |
profpatsch | I bet you can fit defaults and mkForce etc in there, too | 17:17:03 |
@piegames:matrix.org | Actually merging itself, and having that in the type system isn't that big of a deal IMO. Problems arise if you expect to merge values with inter-dependencies. Like, Nixpkgs config requires merging as there are multiple places where the configuration can be but, but they are all independent from each other so it's a lot simpler | 17:18:26 |
profpatsch | priority is pretty simple to fit in, Priority { prio :: Int, value :: a } is a monoid by taking the value with the higher priority | 17:18:36 |
@piegames:matrix.org | Oh, what you're saying is "default values are just merging with priority"? | 17:19:54 |
@piegames:matrix.org | But how about default values without otherwise merging functionality | 17:20:11 |
@piegames:matrix.org | * But how about default values without otherwise merging functionality? | 17:20:13 |
profpatsch | so mkForce just becomes the function mkForce val = Priority { prio = highestPriority, value = val } | 17:20:20 |
profpatsch | actually not sure you want to use monoids here, since having an identity element might not be the default you want in most cases? | 17:22:40 |
profpatsch | so monoid sans empty element might be a better choice | 17:22:53 |
profpatsch | piegames: I guess default values could just be values with very low priority? | 17:23:59 |
profpatsch | idk | 17:24:01 |
profpatsch | I mean if you think about it nixos configs are very similar to CSS in that regard | 17:24:34 |
profpatsch | mkForce is !important | 17:24:38 |
@piegames:matrix.org | The thing I don't like priority for, is that now you have to track which values are actual values, and which values are priority annotation wrapping a value. | 17:25:18 |
profpatsch | thus is the tyranny of structured typesystems | 17:26:30 |
profpatsch | *structural | 17:26:38 |
| dish [Fox/It/She] changed their display name from Pyrox [ She/They/Xem ] to Pyrox [ It/She/They/Xem ]. | 20:43:38 |