[Nix-dev] An issue regarding the default parameters of a function
Sergey Mironov
grrwlf at gmail.com
Fri Feb 12 12:11:53 CET 2016
Hi. I have an issue regarding the combination of two Nix features:
default parameters ( f = {arg ? def } : ...) and arbitrary length
parameters (f = args@{arg, ...} : ...). It looks like they doesn't
work together silently. Here is the example from my code. I'd like the
function make-nk-parser to tweak some of it's arguments and pass them
downstream to the makeHaskell function. In particular, I want it to
add 'nk' to the list of dependencies or make it the only dependency.
make-nk-parser = args@{buildDepends ? [], ...} :
makeHaskell (args // {
pname = "nk-parser";
buildDepends = args.buildDepends ++ [nk];
isExecutable = true;
});
Unfortunately, this code doesn't work. I call make-nk-parser with
empty arguments and Nix errors with "error: attribute ‘buildDepends’
missing" near the args.buildDepends. In contrast, the following
workaround works:
make-nk-parser = args@{...} :
let
buildDepends = if args ? buildDepends then
args.buildDepends else [];
in
makeHaskell (args // {
pname = "nk-parser";
buildDepends = buildDepends ++ [nk];
isExecutable = true;
});
Is it a known bug or feature?
Regards,
Sergey
More information about the nix-dev
mailing list