The
permutations function returns the list of all permutations
of the argument.
>>> permutations "abc"
["abc","bac","cba","bca","cab","acb"]
The
permutations function is maximally lazy: for each
n, the value of
permutations xs starts with
those permutations that permute
take n xs and keep
drop n xs.
This function is productive on infinite inputs:
>>> take 6 $ map (take 3) $ permutations ['a'..]
["abc","bac","cba","bca","cab","acb"]
Note that the order of permutations is not lexicographic. It satisfies
the following property:
map (take n) (take (product [1..n]) (permutations ([1..n] ++ undefined))) == permutations [1..n]