4 ms·
Is a correct summary of what you're saying "static type systems may also give poor messages when types are inferred, not explicit"? If someone wrote "let x: Li
by TheDong 6y ago
Is a correct summary of what you're saying "static type systems may also give poor messages when types are inferred, not explicit"?
If someone wrote "let x: List<String> = [ 'foo', 'bar', func ]", it could certainly figure out the type.
In practice, it seems like what people in statically typed languages have settled on is "always write the types for function signatures", and that does seem to give a happy compromise.
In this case, the "toGNUCommandLine" function would specify that it takes in a list of strings, and from there the type-errors would be fine I think.
- pansa2 6y ago> the "toGNUCommandLine" function would specify that it takes in a list of strings The problem is that `List<String>` isn't the correct type for that function's parameter. It converts each item in the list to a string by calling `mkValueStringDefault` [0], which takes an argument that's of any type except list, attrset or function. So, the correct type for `toGNUCommandLine`'s parameter is something like `List<Any - {list, attrset, function}>`. Are there static type systems that make it easy to work with types like that? [0] https://github.com/NixOS/nixpkgs/blob/9b935b02e3775d95490f6586b88857a006e05fe5/lib/generators.nix#L33 https://github.com/NixOS/nixpkgs/blob/9b935b02e3775d95490f65...
- Measter 6y ago> Are there static type systems that make it easy to work with types like that? In Rust things that can be rendered to a string (in a user-friendly manner) implement the Display trait. A slice of things that can be rendered would have this type: `&[&dyn Display]`.