David Benbennick | 18 Dec 20:18
Picon

Re: Add 'subsequences' and 'permutations' to Data.List (ticket #1990)

Support, though I'd tweak the code in your patch a little:

subsequences            :: [a] -> [[a]]
subsequences []         =  [[]]
subsequences (x:xs)     =  let s = subsequences xs in s ++ map (x:) s

permutations            :: [a] -> [[a]]
permutations []         =  [[]]
permutations (x:xs)     =  concatMap interleave $ permutations xs
  where interleave []     =  [[x]]
        interleave (y:ys) =  (x:y:ys) : map (y:) (interleave ys)

In subsequences, make sure we don't calculate "subsequences xs" twice.
 In permutations, use : instead of ++ in one place, use concatMap
instead of list comprehension, and take out unnecessary parameter to
interleave.

Gmane