任意のリストに対して動作する抽出と呼ばれる関数をテストしています。
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
か?