Je suis en train de tester une fonction appelée extraction qui fonctionne sur n'importe quelle liste.Make Test.QuickCheck.Batch utilise un type par défaut pour tester les fonctions de la liste
extractions :: [a] -> [(a,[a])]
extractions [] = []
extractions l = extract l []
where extract [] _ = []
extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)
Je veux tester, par exemple, avec
import Test.QuickCheck.Batch
prop_len l = length l == length (extractions l)
main = runTests "extractions" defOpt [run prop_len]
Mais cela ne compilera pas; Je dois fournir un type soit pour run
ou prop_len
, parce que QuickCheck ne peut pas générer [a]
, il doit générer quelque chose de concret. J'ai donc choisi Int
:
main = runTests "extractions" defOpt [r prop_len]
where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult
Est-il possible d'obtenir QuickCheck choisir a
pour moi au lieu de l'avoir précisé dans le type de run
?