Hãy xem xét các bài kiểm tra sau cho distributivity law between reverse and ++,Haskell QuickCheck tối thiểu quầy dụ
import Test.QuickCheck
test :: [Int] -> [Int] -> Bool
test xs ys = reverse (xs ++ ys) == reverse xs ++ reverse ys
test2 :: (Eq a) => [a] -> [a] -> Bool
test2 xs ys = reverse (xs ++ ys) == reverse xs ++ reverse ys
Lưu ý cho các danh sách của Int
rằng
*Main> quickCheck test
*** Failed! Falsifiable (after 5 tests and 3 shrinks):
[1]
[0]
Tuy nhiên, thử nghiệm cho danh sách các mục equatable,
*Main> quickCheck test2
+++ OK, passed 100 tests.
Điều gì làm cho lần kiểm tra thứ hai?
Cập nhật On biên soạn với main = quickCheck test2
, lỗi tiếp theo vào loại biến mơ hồ gợi ý các vấn đề (như đã mô tả trong câu trả lời),
No instance for (Eq a0) arising from a use of `test2'
The type variable `a0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)