如何编写一个函数来解决quickCheck prop_xxx?

1 haskell quickcheck

我正在使用QuickCheck v1.这是一个简单的prop_xxx定义如下:

prop_foo :: (Num a) =>[a] -> Bool
prop_foo xs = (reverse.reverse) xs == id xs
Run Code Online (Sandbox Code Playgroud)

这可以在GHCi中正确测试:quickCheck prop_foo

但是,当我尝试在以下函数中包装调用时:

f :: IO ()
f = quickCheck prop_foo
Run Code Online (Sandbox Code Playgroud)

它报告了错误:

Ambiguous type variable `a' in the constraints:
  `Num a' arising from a use of `prop_foo' at Foo.hs:147:15-22
  `Arbitrary a'
    arising from a use of `quickCheck' at Foo.hs:147:4-22
Probable fix: add a type signature that fixes these type variable(s)
Run Code Online (Sandbox Code Playgroud)

我应该提供类似的东西

instance Arbitrary Xxx where
    arbitrary     = ...
    coarbitrary c = ...
Run Code Online (Sandbox Code Playgroud)

非常感谢.

- 拉里

Hei*_*mus 6

你必须给它一个单形类型的签名,比如

prop_foo :: [Int] -> Bool
Run Code Online (Sandbox Code Playgroud)


毕竟,问题是:在你的原始版本中,哪种类型a应该quickCheck选择用于测试功能?a = Inta = Double?别的什么?错误消息抱怨a不明确,即没有唯一的选择.