import Data.List (tails) main :: IO () main = mapM_ print [ combi n "abcde" | n <- [-1..6] ] -- | Non-repeat combination select @n@ from @xs@. combi n xs | n < 0 = [] | n == 0 = [[]] | otherwise = [ y:zs | (y:ys) <- tails xs, zs <- combi (n - 1) ys ]