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