From 18d6ec40d94934141e743d763ba2d33b9045f3e9 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Sun, 22 Jan 2023 15:12:05 -0800 Subject: [PATCH] lib/lists: add cartesianProductOfLists --- lib/lists.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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.