import Data.List sweep f l stack = case stack of [] -> [] cur:substack -> concat [map (\l -> cur:l) (f (delete cur l)), sweep f l substack] ana l = sweep ana l l