Я тестирую функцию, называемую извлечения, которая работает с любым списком.
extractions :: [a] -> [(a,[a])]
extractions [] = []
extractions l = extract l []
where extract [] _ = []
extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)
Я хочу проверить это, например, с
import Test.QuickCheck.Batch
prop_len l = length l == length (extractions l)
main = runTests "extractions" defOpt [run prop_len]
Но это не скомпилируется; Я должен предоставить тип для run
или prop_len
, потому что QuickCheck не может генерировать [a]
, он должен генерировать что-то конкретное. Поэтому я выбрал Int
:
main = runTests "extractions" defOpt [r prop_len]
where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult
Есть ли способ заставить QuickCheck выбрать для меня a
вместо того, чтобы указывать его в типе run
?