| 12 Dec 2025 |
emily | I suspect Nickel might be doing something closer | 13:48:59 |
Arian | Depends on what you mean with dynamically typed. It’s a lattice. So you can do static analysis by merging with an abstracter lattice | 13:51:34 |
emily | (I know types-as-values/more general dependent typing can make this a fuzzy question already because you have type-checking recursing into evaluation, so for clarity I mean "you cannot type-check an expression with a free variable of known type but unknown value, right?" - but I could be wrong.) | 13:52:22 |
Arian | the static-ness of a defintion is a nice partial order with types at the top and uninhabited values at the bottom. Slice the lattice was much as yo need | 13:52:23 |
emily | right... I guess you can try evaluating by just setting the variable to its type. hmm... | 13:52:46 |
Arian | yes… or to a static constraint | 13:53:03 |
emily | IIRC CUE has limited control flow, right? I am not sure if the properties would scale to making it a "real PL" | 13:53:45 |
emily | e.g. I don't see how you could typeck a recursive branching function in this way | 13:54:15 |
emily | which sort of scuppers it as a model for Nix | 13:54:24 |
emily | eh, maybe you could with enough memoization. wouldn't work for polymorphic recursion but that's a high bar. | 13:55:11 |
Arian | cue doesn’t have functions. it’s more a model of the NixOS module system; not of nix | 13:55:12 |
Arian | my thesis is that nix is a terrible host language for the NixOS module system :P | 13:55:20 |
emily | yeah | 13:56:08 |
emily | well I don't like the module system anyway, it's too global. throws away half of the properties that make Nix nice for package graphs. | 13:56:34 |
KFears (they/them) | I really like modules. Functional package graphs get weird and very global when splicing and pkgsStatic and build variants become a thing | 16:06:05 |
emily | I don't think the module system solves the issue of variant sets | 16:24:52 |