Hacer La Prueba.QuickCheck.Lote de utilizar un tipo por defecto para las pruebas de la lista de funciones

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

Pregunta

Estoy probando una función llamada extracciones que opera a través de cualquier lista.

extractions :: [a] -> [(a,[a])]
extractions [] = []
extractions l = extract l []
    where extract [] _ = []
          extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)

Quiero poner a prueba, por ejemplo, con

import Test.QuickCheck.Batch    
prop_len l = length l == length (extractions l)
main = runTests "extractions" defOpt [run prop_len]

Pero esto no compilará;Tengo que suministrar un tipo ya sea para run o prop_len, porque QuickCheck no puede generar [a], tiene que generar algo concreto.Así que elegí Int:

main = runTests "extractions" defOpt [r prop_len]
    where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult

Es allí cualquier manera de conseguir QuickCheck a elegir a para mí en lugar de tener lo especificado en el tipo de run?

¿Fue útil?

Solución

El quickcheck manual dice "no":

Las propiedades deben tener monomórficas tipos.`Polimórficos' propiedades, tales como el de arriba, debe ser restringida a un determinado tipo de ser utilizado para la prueba.Es conveniente hacerlo indicando los tipos de uno o más argumentos en un

donde los tipos = (x1 ::t1, x2 ::t2, ...)

cláusula de...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top