我为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/