Assurez-vous que Test.QuickCheck.Batch utilise un type par défaut pour tester les fonctions de liste

StackOverflow https://stackoverflow.com/questions/64197

Question

Je teste une fonction appelée extractions qui opère sur n'importe quelle 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 le 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 pour exécuter ou prop_len , car 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

Existe-t-il un moyen quelconque d’obliger QuickCheck à choisir un pour moi au lieu de le spécifier dans le type de exécuter ?

Était-ce utile?

La solution

Le le manuel de vérification rapide indique " no " ;:

  

Les propriétés doivent avoir des types monomorphes. Les propriétés "polymorphes", telles que celle ci-dessus, doivent être limitées à un type particulier pour pouvoir être testées. Il est pratique de le faire en indiquant les types d’un ou de plusieurs arguments dans un

     

où types = (x1 :: t1, x2 :: t2, ...)

     

clause ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top