2008-09-15 17 views
6

Herhangi bir liste üzerinde çalışan ayıklar adı verilen bir işlevi test ediyorum.Test Yapın.QuickCheck.Batch liste işlevlerini sınamak için varsayılan bir tür kullanın

extractions :: [a] -> [(a,[a])] 
extractions [] = [] 
extractions l = extract l [] 
    where extract [] _ = [] 
      extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev) 

Ben

import Test.QuickCheck.Batch  
prop_len l = length l == length (extractions l) 
main = runTests "extractions" defOpt [run prop_len] 

ile, örneğin, bunu test etmek istediğiniz Ama bu derleme etmeyeceğini; run veya prop_len için bir tür tedarik etmeliyim, çünkü QuickCheck [a] üretemez, somut bir şey üretmek zorundadır.

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

QuickCheck benim için a seçmek yerine o run türüne belirtilen ettikten almak için herhangi bir yolu var mı: Ben Int seçti?

cevap

7

quickcheck manual "hayır" diyor:

Özellikleri monomorfik türlerine sahip olmalıdır. Yukarıdaki gibi "Polimorfik" özellikler, test için kullanılacak belirli bir türle sınırlandırılmalıdır. Bir

nerede türleri = (x1 :: t1, x2 :: t2, ...)

fıkra ...

bir veya daha fazla bağımsız değişken türlerini belirterek bunu uygundur
İlgili konular