代码之家  ›  专栏  ›  技术社区  ›  Nathan Shively-Sanders

使Test.QuickCheck.Batch为测试列表函数使用默认类型

  •  6
  • Nathan Shively-Sanders  · 技术社区  · 16 年前

    我正在测试一个名为extractions的函数,它可以在任何列表上运行。

    extractions :: [a] -> [(a,[a])]
    extractions [] = []
    extractions l = extract l []
        where extract [] _ = []
              extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev)
    

    例如,我想用

    import Test.QuickCheck.Batch    
    prop_len l = length l == length (extractions l)
    main = runTests "extractions" defOpt [run prop_len]
    

    但这不会编译;我必须提供一个类型的或 run prop_len ,因为快速检查无法生成 [a] 它必须产生一些具体的东西。所以我选择了 Int :

    main = runTests "extractions" defOpt [r prop_len]
        where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult
    

    a 而不是在 ?

    1 回复  |  直到 13 年前
        1
  •  7
  •   Community Tales Farias    4 年前

    这个 quickcheck manual 说“不”:

    属性必须具有单态类型`多态性属性(如上面的属性)必须限制为用于测试的特定类型。这样做很方便,可以在

    条款