diff --git a/Nix/Eval.hs b/Nix/Eval.hs index a1635ae..9d64f78 100644 --- a/Nix/Eval.hs +++ b/Nix/Eval.hs @@ -98,9 +98,10 @@ buildArgument paramSpec arg = either error id $ case paramSpec of let actualParamSet = case paramSet of FixedParamSet s -> s VariadicParamSet s -> s - maybeAddSet = case setName of - Just name -> Map.insert name arg - Nothing -> id + maybeAddSet attrsSet = case setName of + Just name -> let Fix (NVSet argSet) = arg + in Map.insert name (Fix (NVSet (argSet `Map.union` attrsSet))) attrsSet + Nothing -> attrsSet in maybeAddSet <$> lookupParamSet actualParamSet where go env k def = maybe (Left err) return $ Map.lookup k env <|> def diff --git a/tests/EvalTests.hs b/tests/EvalTests.hs index 2765524..d7655ae 100644 --- a/tests/EvalTests.hs +++ b/tests/EvalTests.hs @@ -42,6 +42,9 @@ case_function_atpattern = constantEqualStr "2" "(({a}@attrs:attrs) {a=2;}).a" case_function_ellipsis :: Assertion case_function_ellipsis = constantEqualStr "2" "(({a, ...}@attrs:attrs) {a=0; b=2;}).b" +case_function_default_value_in_atpattern :: Assertion +case_function_default_value_in_atpattern = constantEqualStr "2" "({a ? 2}@attrs:attrs.a) {}" + tests :: TestTree tests = $testGroupGenerator