저는 하스켈을 배우고 교회 번호를 Int로 변환하는 함수를 작성하려고합니다. 내 코드는 형식 서명을 쓰지 않는 경우에만 작동합니다.왜 형식 서명이 이렇게 생겼습니까? (교회 번호를 Int로 변환)
type Church a = (a -> a) -> a -> a
zero :: Church a
zero s z = z
c2i :: Church a -> Int -- This line fails
c2i x = x (+1) 0
나는 :t c2i
c2i :: (Num a1, Num a) => ((a -> a) -> a1 -> t) -> t
사용 c2i
의 오른쪽 유형 서명을 가지고 있지만 그것이 왜 궁금하네요? 당신이 c2i
서명에 a
를 사용하는 경우
OMG! 나는 어리석은 실수를했다. – abcdabcd987
'type' 선언은 작업하기에 고통 스럽습니다. 관련 [SO Q/A] (http://stackoverflow.com/questions/21259931/how-to-work-with-higher-rank-types) – phadej