diff --git a/lib/lists.nix b/lib/lists.nix index 8b2c2d12801bb..1317bf011087c 100644 --- a/lib/lists.nix +++ b/lib/lists.nix @@ -631,9 +631,15 @@ rec { => [ "13" "14" "23" "24" ] */ crossLists = builtins.trace - "lib.crossLists is deprecated, use lib.cartesianProductOfSets instead" + "lib.crossLists is deprecated, use lib.cartesianProductOfLists instead" (f: foldl (fs: args: concatMap (f: map f args) fs) [f]); + cartesianProductOfLists = lists: + let + inherit (lib) cartesianProductOfSets toString nameValuePair genAttrs attrValues; + attrs = builtins.listToAttrs (imap0 (i: nameValuePair (builtins.toString i)) lists); + cross = cartesianProductOfSets attrs; + in map attrValues cross; /* Remove duplicate elements from the list. O(n^2) complexity.