我为foldl编写了一个实现,想检查它是否有效,我尝试了一些情况,它似乎运行良好,但我想确定一下。

我读了有关quickCheck的文章并尝试过,但似乎无法使其正常工作,这是代码

foldl'' :: (b -> a -> b) -> b -> [a] -> b

test :: Eq b => (b -> a -> b) -> b -> [a] -> Bool
test f e ls = foldl'' f e ls == foldl f e ls

当我运行quickCheck test时,它会引发以下错误:
No instance for (Show (b0 -> a0 -> b0))
  arising from a use of `quickCheck'
Possible fix:
  add an instance declaration for (Show (b0 -> a0 -> b0))
In the expression: quickCheck prueba
In an equation for `it': it = quickCheck prueba

最佳答案

您的媒体资源需要三个输入:一个函数,一个元素和一个列表。问题在于QuickCheck一般不知道如何处理功能。

QuickCheck需要工作的事情之一就是能够将失败的测试用例写入控制台。为此,它需要可以转换为String的值-Show类中的任何内容。由于函数不在Show中,因此无法将其用于输入。这就是您的错误消息的来源。

通常,使用随机生成的函数进行测试将非常棘手。我只是写一些具体的函数,然后让QuickCheck随机生成起始值和元素列表。

关于haskell - 使用quickCheck,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16201741/

10-12 19:17