parent
266793a287
commit
10fe907c50
|
@ -231,6 +231,7 @@ builtinsList = sequence [
|
|||
, add2 Normal "lessThan" lessThan
|
||||
, add Normal "listToAttrs" listToAttrs
|
||||
, add2 TopLevel "map" map_
|
||||
, add2 TopLevel "mapAttrs" mapAttrs_
|
||||
, add2 Normal "match" match_
|
||||
, add2 Normal "mul" mul_
|
||||
, add0 Normal "null" (return $ nvConstant NNull)
|
||||
|
@ -566,6 +567,16 @@ map_ fun xs = fun >>= \f ->
|
|||
. (f `callFunc`) . force')
|
||||
<=< fromValue @[NThunk m] $ xs
|
||||
|
||||
mapAttrs_ :: forall e m. MonadNix e m
|
||||
=> m (NValue m) -> m (NValue m) -> m (NValue m)
|
||||
mapAttrs_ fun xs = fun >>= \f ->
|
||||
fromValue @(AttrSet (NThunk m)) xs >>= \aset -> do
|
||||
let pairs = M.toList aset
|
||||
values <- traverse (thunk . withFrame Debug
|
||||
(ErrorCall "While applying f in mapAttrs:\n")
|
||||
. (f `callFunc`) . force') (map snd pairs)
|
||||
toNix . M.fromList . zip (map fst pairs) $ values
|
||||
|
||||
filter_ :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)
|
||||
filter_ fun xs = fun >>= \f ->
|
||||
toNix <=< filterM (fromValue <=< callFunc f . force')
|
||||
|
|
|
@ -328,6 +328,14 @@ case_rec_path_attr =
|
|||
constantEqualText "10"
|
||||
"let src = 10; x = rec { passthru.src = src; }; in x.passthru.src"
|
||||
|
||||
case_mapattrs_builtin =
|
||||
constantEqualText' "{ a = 6; b = 7; }" [i|
|
||||
(builtins.mapAttrs (x: x+5) {
|
||||
a = 1;
|
||||
b = 2;
|
||||
})
|
||||
|]
|
||||
|
||||
-----------------------
|
||||
|
||||
tests :: TestTree
|
||||
|
|
Loading…
Reference in a new issue