-
Notifications
You must be signed in to change notification settings - Fork 44
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Consider module-system -> typed-functions #745
Comments
another option could be not having a makes.nix at all, and configuring everything under /makes, this way users don't have to write the full path, just create a directory structure. Maybe some things like the cache configuration can be implemented in |
In general after solving this issue Makes will be a more welcoming place for adoption |
what exactly do you mean by "type-functions" seeing as Nix has no builtin type system. Do you mean a system similar to what the Nix module system employs, i.e. runtime type checks? |
typed-functions, function with types
Yes, exactly this, I don't know how that would be implemented but nixpkgs.lib.types expose function that perform the validation logic and return a boolean. Maybe we can leverage that or build our own. It should be simple anyway as we use basic types most of the times |
That was just a typo, I know what you intended to say 😅 There is |
Yeah, we would not use that then, that one is expensive because it verifies the function return value, we don't need to verify the return value in this case as we are the ones who specify it, just the function arguments are user-supplied data subject to type verification |
That might be a tricky problem to solve then 🤔 |
let
types.int = elem: builtins.typeOf elem == "int";
func = { age }:
assert types.int age;
"Your age is ${builtins.toString age}";
in
func { age = "13"; } error: while evaluating 'func' at /data/gitlab/fluidattacks/product/example.nix:4:10, called from /data/gitlab/fluidattacks/product/example.nix:8:1:
assertion ((types).int age) failed at /data/gitlab/fluidattacks/product/example.nix:5:5 we could improve the error message using |
I was very excited when I originally discovered we can use the NixOS module system for other things beyond configuring NixOS. I found quite simple for being able to configure things with a meere
enable = true;
and further customize generated code by just giving values to the optionsI really think it works great and allows us to achieve modularity, declarative programming, easy to read code.
Its problems are more the following:
Instead, I propose to replace the module system with typed functions:
So we would write
makes.nix
as follows:this will also make easier to organize code to prepare for future releases of nix, a.k.a. https://github.com/fluidattacks/makes/milestone/2
The text was updated successfully, but these errors were encountered: