6

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
4

3 に答える 3

7

プロパティには、関数、要素、およびリストの 3 つの入力が必要です。問題は、QuickCheck が一般的な関数の処理方法を認識していないことです。

QuickCheck が機能するために必要なことの 1 つは、失敗したテスト ケースをコンソールに書き込む機能です。Stringこのためには、クラス内の --anything に変換できる値が必要ですShow。関数は にないShowため、入力には使用できません。それがあなたのエラーメッセージの由来です。

一般に、ランダムに生成された関数をテストに使用するのは非常に困難です。代わりに、いくつかの具体的な関数を作成し、QuickCheck に開始値と要素のリストをランダムに生成させます。

于 2013-04-24T21:47:06.060 に答える