QuickCheck를 사용하여 다음 테스트 코드가 주어진다면 prop_Max errMax
은 errMax
의 정의가 잘못되어 실패해야합니다.다형 서명이있는이 빠른 검사가 실패해야하는 이유는 무엇입니까?
prop_Max
의 주어진 서명을 콘크리트 유형 Int
과 함께 사용하면 이런 일이 발생합니다. 그러나 Ord
을 사용하여 더 많은 다형 주석 처리 된 유형을 제공하면 테스트가 통과됩니다. 왜 이런거야?
import Test.QuickCheck
myMax :: Ord a => a -> a -> a
myMax x y
|x > y = x
|otherwise = y
errMax :: Ord a => a -> a -> a
errMax x y
|x > y = y
|otherwise = x
-- prop_Max :: Ord a => (a -> a -> a) -> a -> a -> Bool
prop_Max :: (Int -> Int -> Int) -> Int -> Int -> Bool
prop_Max maxFunc x y = (x <= maxFunc x y) && (y <= maxFunc x y)
-- in ghci
-- quickCheck (prop_Max max)
-- quickCheck (prop_Max myMax)
-- quickCheck (prop_Max errMax)
당신이 다른 서명을하려고하면 무슨 에러가 발생합니까? –
@GaneshSittampalam,'prop_Max :: Ord a => (a-> a) -> a-> a-> Bool'을 사용하면 quickCheck (prop_Max errMax)가 테스트에 합격합니다 – Alaya
그렇다면 문제? –