lib.attrsets.foldlAttrs: Make stricter
See the parent commit for the same change to lib.lists.foldl'
This commit is contained in:
parent
3b6169f87b
commit
dd72ff27f7
3 changed files with 9 additions and 7 deletions
|
@ -338,7 +338,7 @@ rec {
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Like builtins.foldl' but for attribute sets.
|
Like [`lib.lists.foldl'`](#function-library-lib.lists.foldl-prime) but for attribute sets.
|
||||||
Iterates over every name-value pair in the given attribute set.
|
Iterates over every name-value pair in the given attribute set.
|
||||||
The result of the callback function is often called `acc` for accumulator. It is passed between callbacks from left to right and the final `acc` is the return value of `foldlAttrs`.
|
The result of the callback function is often called `acc` for accumulator. It is passed between callbacks from left to right and the final `acc` is the return value of `foldlAttrs`.
|
||||||
|
|
||||||
|
@ -372,9 +372,9 @@ rec {
|
||||||
123
|
123
|
||||||
|
|
||||||
foldlAttrs
|
foldlAttrs
|
||||||
(_: _: v: v)
|
(acc: _: _: acc)
|
||||||
(throw "initial accumulator not needed")
|
3
|
||||||
{ z = 3; a = 2; };
|
{ z = throw "value not needed"; a = throw "value not needed"; };
|
||||||
->
|
->
|
||||||
3
|
3
|
||||||
|
|
||||||
|
@ -392,7 +392,7 @@ rec {
|
||||||
foldlAttrs :: ( a -> String -> b -> a ) -> a -> { ... :: b } -> a
|
foldlAttrs :: ( a -> String -> b -> a ) -> a -> { ... :: b } -> a
|
||||||
*/
|
*/
|
||||||
foldlAttrs = f: init: set:
|
foldlAttrs = f: init: set:
|
||||||
builtins.foldl'
|
foldl'
|
||||||
(acc: name: f acc name set.${name})
|
(acc: name: f acc name set.${name})
|
||||||
init
|
init
|
||||||
(attrNames set);
|
(attrNames set);
|
||||||
|
|
|
@ -740,7 +740,7 @@ runTests {
|
||||||
# should just return the initial value
|
# should just return the initial value
|
||||||
emptySet = foldlAttrs (throw "function not needed") 123 { };
|
emptySet = foldlAttrs (throw "function not needed") 123 { };
|
||||||
# should just evaluate to the last value
|
# should just evaluate to the last value
|
||||||
accNotNeeded = foldlAttrs (_acc: _name: v: v) (throw "accumulator not needed") { z = 3; a = 2; };
|
valuesNotNeeded = foldlAttrs (acc: _name: _v: acc) 3 { z = throw "value z not needed"; a = throw "value a not needed"; };
|
||||||
# the accumulator doesnt have to be an attrset it can be as trivial as being just a number or string
|
# the accumulator doesnt have to be an attrset it can be as trivial as being just a number or string
|
||||||
trivialAcc = foldlAttrs (acc: _name: v: acc * 10 + v) 1 { z = 1; a = 2; };
|
trivialAcc = foldlAttrs (acc: _name: v: acc * 10 + v) 1 { z = 1; a = 2; };
|
||||||
};
|
};
|
||||||
|
@ -750,7 +750,7 @@ runTests {
|
||||||
names = [ "bar" "foo" ];
|
names = [ "bar" "foo" ];
|
||||||
};
|
};
|
||||||
emptySet = 123;
|
emptySet = 123;
|
||||||
accNotNeeded = 3;
|
valuesNotNeeded = 3;
|
||||||
trivialAcc = 121;
|
trivialAcc = 121;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -229,6 +229,8 @@
|
||||||
- [`lib.lists.foldl'`](https://nixos.org/manual/nixpkgs/stable#function-library-lib.lists.foldl-prime) now always evaluates the initial accumulator argument first.
|
- [`lib.lists.foldl'`](https://nixos.org/manual/nixpkgs/stable#function-library-lib.lists.foldl-prime) now always evaluates the initial accumulator argument first.
|
||||||
If you depend on the lazier behavior, consider using [`lib.lists.foldl`](https://nixos.org/manual/nixpkgs/stable#function-library-lib.lists.foldl) or [`builtins.foldl'`](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-foldl') instead.
|
If you depend on the lazier behavior, consider using [`lib.lists.foldl`](https://nixos.org/manual/nixpkgs/stable#function-library-lib.lists.foldl) or [`builtins.foldl'`](https://nixos.org/manual/nix/stable/language/builtins.html#builtins-foldl') instead.
|
||||||
|
|
||||||
|
- [`lib.attrsets.foldlAttrs`](https://nixos.org/manual/nixpkgs/stable#function-library-lib.attrsets.foldlAttrs) now always evaluates the initial accumulator argument first.
|
||||||
|
|
||||||
- `rome` was removed because it is no longer maintained and is succeeded by `biome`.
|
- `rome` was removed because it is no longer maintained and is succeeded by `biome`.
|
||||||
|
|
||||||
- The `services.mtr-exporter.target` has been removed in favor of `services.mtr-exporter.jobs` which allows specifying multiple targets.
|
- The `services.mtr-exporter.target` has been removed in favor of `services.mtr-exporter.jobs` which allows specifying multiple targets.
|
||||||
|
|
Loading…
Reference in a new issue