我想运行经典测试来反转列表。为此,我必须将列表专门化为“任意”(原文如此!)类型的列表,例如 [Int]。
有效的是
module ListCheck where
import Test.QuickCheck
myReverse :: [Int] -> [Int]
myReverse = reverse
reverse_of_reverse_is_original = property (\xs -> myReverse(myReverse xs) == xs)
或分解出不变量,例如
reverse_invariant :: [Int] -> Bool
reverse_invariant xs = reverse(reverse xs) == xs
reverse_of_reverse_is_original = property reverse_invariant
但我宁愿不包装原始函数而是直接使用它。通常的 Haskell 技巧是通过添加来强制专业化
... where types = xs :: [Int]
在这里不起作用。
有没有更简洁的解决方案?