Haskell 快速检查输入的类型
我正在努力学习快速检查并了解它是如何工作的。quickCheck函数的数据类型为Haskell 快速检查输入的类型,haskell,quickcheck,Haskell,Quickcheck,我正在努力学习快速检查并了解它是如何工作的。quickCheck函数的数据类型为 quickCheck :: Testable prop => prop -> IO () 另一方面,我有一个函数 prop_rev_involutive:Eq a => [a] -> Bool prop_rev_involutive l = (reverse $ reverse l) == l 用于快速检查的输入。运行quickCheck prop\u rev\u对合 工作正常,但我不明
quickCheck :: Testable prop => prop -> IO ()
另一方面,我有一个函数
prop_rev_involutive:Eq a => [a] -> Bool
prop_rev_involutive l = (reverse $ reverse l) == l
用于快速检查的输入。运行quickCheck prop\u rev\u对合
工作正常,但我不明白类型是如何匹配的
类型
[a]->Bool
是否被认为是可测试的?这是为什么?可测试的是一个类型类,本质上是对可以转化为自动测试的事物的抽象。type类有几个实例,其中一个是Bool
:
Testable Bool
不过,这不是prop\u rev\u对合的类型。Testable
的另一个实例是:
(Arbitrary a, Show a, Testable prop) => Testable (a -> prop)
这表明,对于作为任意和显示实例的任何a
,从a
到prop
的函数本身是可测试的。我们已经确定Bool
是一个可测试的
实例,所以现在需要调查[a]
是否是一个任意的
和显示
实例
任意
类型类有大量实例,其中之一是:
Arbitrary a => Arbitrary [a]
这表明,如果a
是一个任意的实例,那么[a]
也是如此。那么,是一个
任意的
实例吗?这取决于实际运行quickCheck
的具体类型。某些Haskell环境默认为某些类型(例如,Int
,这是一个任意的
实例)
对于Show
type类,您需要进行同样的推理
我不认为任何无约束函数[a]->Bool
是一个可测试的
实例,但类似(任意a,显示a)=>[a]->Bool
的东西是。示例包括[Int]->Bool
和[Char]->Bool
。这是因为Bool
是可测试的
,Int
和Char
都是任意的
和Show
实例。提示:查看实例以了解更多信息。另外,请记住考虑类型默认设置。