2008-09-15 3 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에 유형을 제공해야합니다. 콘크리트를 생성해야합니다.

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

QuickCheck 나를 위해 a을 선택하는 대신이 run의 유형을 지정하지 얻을 수있는 방법이 있나요 : 그래서 Int을 선택?

답변

7

quickcheck manual은 "아니오"라고 :

등록 단형 유형이 있어야합니다. 위와 같은 '다형성'속성은 테스트에 사용되는 특정 유형으로 제한되어야합니다.

어디 유형 = (X1 : T1, X2 :: T2, ...)

절 ...

에 하나 개 이상의 인수의 유형을 명시하여이를 수행하는 것이 편리하다
관련 문제