【发布时间】:2010-09-09 00:23:33
【问题描述】:
我正在测试一个名为 extracts 的函数,它可以对任何列表进行操作。
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 的类型中指定它?
【问题讨论】:
标签: testing haskell type-inference quickcheck