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

标签 haskell quickcheck

有没有办法伪造这个(错误的)属性:

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

当我使用 QuickCheck 和后来的 VerboseCheck 时,它提供了 100 种不同的形式:
[(),(),(),(),(),(),(),(),(),(),(),(),(),(),()]

通过:
最终结果是:
+++ OK, passed 100 tests.

最佳答案

正好

  • 如果您尝试在 GHCi 中对其进行评估,则必须选择特定的实例类型 Eq a使用,并与 ExtendedDefaultRules扩展通常在 GHCi 中启用,它选择 () .
  • 对于类型 () ,因为它只有一个(非底部)值,所以这个命题实际上是真的。

  • 最简单的解决方法是通过提供类型注释来选择(几乎)任何其他类型:
    Prelude Test.QuickCheck> quickCheck (prop :: [Int] -> Bool)
    *** Failed! Falsifiable (after 4 tests and 3 shrinks): 
    [0,1]
    

    关于Haskell,QuickCheck,伪造(错误的)属性 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26697039/

    相关文章:

    haskell - 什么是 XNoMonomorphismRestriction?

    function - 使用累加器的 Haskell 递归

    haskell - QuickCheck Gen 不是单子(monad)

    tdd - 基于负属性的测试

    haskell - 使用 Haskell QuickCheck 测试 TCP 端口验证器

    scala - 如何在 FP 中保持收听?

    haskell - 数组有 zipWith 函数吗?

    syntax - Haskell 错误 : parse error on input `='

    haskell - QuickCheck的promote功能的一般情况是什么?

    haskell - 如何使用快速检查显示测试属性失败的原因?