我正在测试一个名为extractions的函数,它可以在任何列表上运行。
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
,因为快速检查无法生成
[a]
它必须产生一些具体的东西。所以我选择了
Int
:
main = runTests "extractions" defOpt [r prop_len]
where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult
a
而不是在
?