Partitions of a List
module Partitions where
import Data.Foldable
-- | >>> partitions "abc"
-- [["abc"],["a","bc"],["ab","c"],["ac","b"],["a","b","c"]]
partitions :: [a] -> [[[a]]]
= foldrM f [] where
partitions = go id xs where
f x xs = [[x] : k []]
go k [] :ys) = ((x:y) : k ys) : go (k . (:) y) ys go k (y