Calculate n-ary Cartesian Product

Zwei Listen gegeben, kann ich produzieren eine Liste aller Permutationen das kartesische Produkt dieser beiden Listen:

permute :: [a] -> [a] -> [[a]]
permute xs ys = [ [x, y] | x <- xs, y <- ys ]

Example> permute [1,2] [3,4] == [ [1,3], [1,4], [2,3], [2,4] ]

Wie erweitere ich Permut, sodass anstelle von zwei Listen eine Liste (Länge n) von Listen verwendet wird und eine Liste von Listen (Länge n) zurückgegeben wird

permute :: [[a]] -> [[a]]

Example> permute [ [1,2], [3,4], [5,6] ]
            == [ [1,3,5], [1,3,6], [1,4,5], [1,4,6] ] --etc

Ich konnte auf Hoogle nichts Relevantes finden. Die einzige Funktion, die mit der Signatur übereinstimmt, wartranspose, was nicht die gewünschte Ausgabe erzeugt.

Edit: Ich denke, die 2-Listen-Version davon ist im Wesentlichen dasKartesisches Produk, aber ich kann mich nicht darum kümmern, das @ zu implementier n-ary kartesisches Produkt. Irgendwelche Hinweise?

Antworten auf die Frage(12)

Ihre Antwort auf die Frage