我为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 测试
时,它会抛出以下错误:
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 - 使用快速检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201741/