Haskell,QuickCheck,伪造(错误)属性:

时间:2014-11-02 07:31:32

标签: haskell quickcheck

有没有办法伪造这个(错误的)财产:

prop :: Eq a => [a] -> Bool
prop xs = reverse xs == xs

当我使用QuickCheck及以后的VerboseCheck时,它提供了100种不同形式:

[(),(),(),(),(),(),(),(),(),(),(),(),(),(),()]
传递


最后的结果是:

+++ OK, passed 100 tests.

1 个答案:

答案 0 :(得分:10)

恰好发生了

  1. 如果您尝试在GHCi中对其进行评估,则必须选择要使用的特定实例类型Eq a,并且通常在GHCi中启用ExtendedDefaultRules扩展名,它会选择()
  2. 对于类型(),因为它只有一个(非底部)值,所以命题实际上是 true
  3. 最简单的解决方法是通过提供类型注释来选择(几乎)任何其他类型:

    Prelude Test.QuickCheck> quickCheck (prop :: [Int] -> Bool)
    *** Failed! Falsifiable (after 4 tests and 3 shrinks): 
    [0,1]