parts [] = [ [ ] ] parts [x] = [ [ [x] ] ] parts ( x : xs ) = [ (x : ys) : zs | ys <- subsequences xs, zs <- parts $ xs \\ ys ]
main = do print $ parts [2,3] print $ parts [1,2,3] print $ length $ parts [1..8] ---- [[[2],[3]],[[2,3]]] [[[1],[2],[3]],[[1],[2,3]],[[1,2],[3]],[[1,3],[2]],[[1,2,3]]] 4140