Delta Debugging Minimierung mit Haskell

Hier eine Implementierung eines Minimierungsalgorythmus für Delta Debugging in Haskell:

splitInto :: Int -> [a] -> [[a]]
splitInto num lst =
    recSplit [] lst
    where
      recSplit xs part
          | length part  ([a] -> IO Bool) -> [a] -> Int -> IO [a]
ddmin testfun cx n
    | length cx == 1 = return $ cx
    | n < (length cx) = ddmin testfun cx (min (2*n) (length cx))
    | otherwise =
        checkChunk chunks
    where
      checkChunk [] = return $ cx
      checkChunk (x:xs) =
          do res <- testfun (cx \ x)
             if res
             then checkChunk xs
             else ddmin testfun (cx \ x) (max (n-1) 2)

      chunks = splitInto n cx