Commit dd72ff27 authored by Silvan Mosberger's avatar Silvan Mosberger
Browse files

lib.attrsets.foldlAttrs: Make stricter

See the parent commit for the same change to lib.lists.foldl'
parent 3b6169f8
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -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.
    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

      foldlAttrs
        (_: _: v: v)
        (throw "initial accumulator not needed")
        { z = 3; a = 2; };
        (acc: _: _: acc)
        3
        { z = throw "value not needed"; a = throw "value not needed"; };
      ->
        3

@@ -392,7 +392,7 @@ rec {
      foldlAttrs :: ( a -> String -> b -> a ) -> a -> { ... :: b } -> a
  */
  foldlAttrs = f: init: set:
    builtins.foldl'
    foldl'
      (acc: name: f acc name set.${name})
      init
      (attrNames set);
+2 −2
Original line number Diff line number Diff line
@@ -740,7 +740,7 @@ runTests {
      # should just return the initial value
      emptySet = foldlAttrs (throw "function not needed") 123 { };
      # 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
      trivialAcc = foldlAttrs (acc: _name: v: acc * 10 + v) 1 { z = 1; a = 2; };
    };
@@ -750,7 +750,7 @@ runTests {
        names = [ "bar" "foo" ];
      };
      emptySet = 123;
      accNotNeeded = 3;
      valuesNotNeeded = 3;
      trivialAcc = 121;
    };
  };
+2 −0
Original line number Diff line number Diff line
@@ -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.
  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`.

- The `services.mtr-exporter.target` has been removed in favor of `services.mtr-exporter.jobs` which allows specifying multiple targets.