diff --git a/lib/lists.nix b/lib/lists.nix index a3720bf..190198e 100644 --- a/lib/lists.nix +++ b/lib/lists.nix @@ -1,8 +1,22 @@ { lib, ... }: let - inherit (lib) filter; + inherit (lib) filter foldl'; in { + # Count the number of appararitions of each value in a list. + # + # countValues :: + # [ any ] -> ({ any = int; }) + countValues = + let + addToCount = acc: x: + let + v = toString x; + in + acc // { ${v} = (acc.${v} or 0) + 1; }; + in + foldl' addToCount { }; + # Filter a list using a predicate function after applying a map. # # mapFilter ::