2008-09-15 7 views
6

私は、任意のリストを操作する抽出という関数をテストしています。Test.QuickCheck.Batchをリスト関数をテストするためのデフォルトの型を使用する

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] 

で、例えば、それをテストしたい。しかし、これはコンパイルされません。 QuickCheckは[a]を生成できないため、runまたはprop_lenのいずれかのタイプを指定する必要があります。具体的に何かを生成する必要があります。だから私はIntを選んだ:

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

ではなく、それはrunの種類に指定されたのは私のためにaを選択するQuickCheckを取得する方法はありますか?

答えて

7

quickcheck manualは "ノー" と言う:

プロパティは、単相の種類を持っている必要があります。上記のような `Polymorphic 'プロパティは、テストに使用する特定の型に制限する必要があります。

種類=(X1 :: T1、X2 :: T2、...)

句...

に1つ以上の引数の型を示すことによってこれを行うに便利なことがあります
関連する問題