Estoy probando una función llamada extracciones que opera sobre cualquier lista.Make Test.QuickCheck.Batch utiliza un tipo predeterminado para probar funciones de lista
extractions :: [a] -> [(a,[a])]
extractions [] = []
extractions l = extract l []
where extract [] _ = []
extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)
quiero probarlo, 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 se 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
¿Hay alguna manera de obtener QuickCheck para elegir a
para mí en lugar de haber especificado que en el tipo de run
?