Testing 使Test.QuickCheck.Batch为测试列表函数使用默认类型

Testing 使Test.QuickCheck.Batch为测试列表函数使用默认类型,testing,haskell,type-inference,quickcheck,Testing,Haskell,Type Inference,Quickcheck,我正在测试一个名为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.B

我正在测试一个名为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\u len
提供一个类型,因为QuickCheck不能生成
[a]
,它必须生成具体的内容。所以我选择了
Int

main = runTests "extractions" defOpt [r prop_len]
    where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult
有没有办法让QuickCheck为我选择
a
,而不是在
run
的类型中指定它?

表示“否”:

属性必须具有单态类型`多态性属性(如上面的属性)必须限制为用于测试的特定类型。这样做很方便,可以在

其中类型=(x1::t1,x2::t2,…)

条款