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]]]
partitions = foldrM f [] where
f x xs = go id xs where
go k [] = [[x] : k []]
go k (y:ys) = ((x:y) : k ys) : go (k . (:) y) ys