Haskell : 유도 및 기능 구성을 입력하십시오
-
20-09-2019 - |
문제
이 질문은 이것에서 영감을 받았습니다 대답 다른 질문으로, 다음과 같이 정의 된 함수를 사용하여 목록에서 요소의 모든 발생을 제거 할 수 있음을 나타냅니다.
removeall = filter . (/=)
연필과 종이로 작업하십시오. filter
, (/=)
그리고 (.)
, 함수의 유형이 있습니다
removeall :: (Eq a) => a -> [a] -> [a]
계약에 따라 정확히 기대하는 것입니다. 그러나 GHCI 6.6을 사용하면 얻을 수 있습니다
gchi> :t removeall
removeall :: Integer -> [Integer] -> [Integer]
유형을 명시 적으로 지정하지 않는 한 (이 경우 잘 작동합니다). Haskell이 기능에 대한 특정 유형을 추론하는 이유는 무엇입니까?
다른 팁
또한 표현식에 이름을 할당하지 않으면 TypeChecker는 유형의 기본값을 피하는 것 같습니다.
Prelude> :t filter . (/=)
filter . (/=) :: (Eq a) => a -> [a] -> [a]
제휴하지 않습니다 StackOverflow