——————{-# LANGUAGE ScopedTypeVariables #-}module Partition wherepartition :: [Int] -> [a] -> [[a]]partition ds ps = reverse $ paux ds ps []wherepaux :: [Int] -> [a] -> [[a]] -> [[a]]paux [] [] ps' = ps'paux [] ps ps' = [ps] ++ ps’paux _ [] ps' = ps'paux (d:ds') ps ps' = paux ds' (snd (splitAt d ps)) ([fst (splitAt d ps)] ++ ps')
*Partition> partition [2, 3] [1,2,3,4,5][[1,2],[3,4,5]]*Partition> partition [1, 2] [1,2,3,4,5][[1],[2,3],[4,5]]*Partition> partition [1, 2, 5] [1,2,3,4,5][[1],[2,3],[4,5]]
partition' :: [Int] -> [a] -> [[a]]partition' [] ds = [ds]partition' ps ds = foldl ??? ???' ???''