(这不是关于定理证明,而是关于实践中的测试,例如quickCheck
)
让f
一些通用功能
f :: RESTRICTIONS => GENERICS
具有一些“理想的”属性(即不是 hack,是不可变的,...)通常是纯 Haskell 泛型函数。
假设我们要测试它,主要问题是
如果我们已经(很好地)为一种特定类型(例如)测试了该函数Int
,我们可以假设它对所有类型都是正确的吗?(当然是匹配限制)
(“经过良好测试”我的意思是“所有”功能{domain X properties}
都已经过测试)
理论上我们可以确定,但我不确定实例化过程(即编译)中的某些附加属性、限制等是否会产生影响。
谢谢!
注意测试可能使用某些特定类型的属性(例如Int
),但这些属性不能是测试属性的一部分。例如,如果Monoid
是一个限制,那么关联性可以是测试属性的一部分(但如果不是一个限制,则不是交换性)。
例子
让f
repeatedHeader :: Eq a => [a] -> Bool
repeatedHeader (x:y:_) = x == y
repeatedHeader _ = False
test1 = repeatedHeader [1,1,2] == True
test2 = repeatedHeader [1,2,3] == False