6

任意のリストに対して動作する抽出と呼ばれる関数をテストしています。

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があります。QuickCheck は を生成できないため[a]、具体的なものを生成する必要があります。だから私は選んだInt

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

aのタイプで指定する代わりに、QuickCheck を選択する方法はありますrunか?

4

1 に答える 1

7

クイックチェックのマニュアルには「いいえ」と書かれています:

プロパティは単相型でなければなりません。上記のような「ポリモーフィック」プロパティは、テストに使用する特定のタイプに制限する必要があります。1 つまたは複数の引数の型を

ここで、タイプ = (x1 :: t1、x2 :: t2、...)

句...

于 2008-09-15T17:53:03.523 に答える