GHCi 내 에서이 함수 ( learnyouahaskell 에서 가져옴 )에 해당하는 것을 어떻게 정의 합니까?
import Data.List
numUniques :: (Eq a) => [a] -> Int
numUniques = length . nub
유형 선언이 없으면 GHCi는 함수 정의를 받아들이지 만 결국에는 도움이되지 않는 유형이됩니다.
Prelude Data.List> import Data.List
Prelude Data.List> let numUniques' = length . nub
Prelude Data.List> :t numUniques'
numUniques' :: [()] -> Int
결과 함수는 단위 목록 만 매개 변수로받습니다.
GHCi에서 유형 선언을 제공하는 방법이 있습니까? 아니면 유형 선언이 필요하지 않은 이와 같은 함수를 정의하는 다른 방법이 있습니까?
나는 GHCi 가이드에서 명백한 단서를 보지 못했고 다음과 같은 표현으로 실험했습니다 (소용이 없음).
> let numUniques' = ((length . nub) :: (Eq a) => [a] -> Int)
> :t numUniques'
numUniques' :: [()] -> Int
답변
GHCi에서 유형 선언을 제공하는 방법이 있습니까?
let numUniques' :: (Eq a) => [a] -> Int; numUniques' = length . nub
아니면 유형 선언이 필요하지 않은 이와 같은 함수를 정의하는 다른 방법이 있습니까?
로 단 형성 제한을 해제 -XNoMonomorphismRestriction
하면 올바른 유형이 유추됩니다.
답변
또한 표현식에 “점”(즉, 명시 적 변수)을 다시 추가하여 단 형성 제한을 피할 수도 있습니다. 따라서 이것은 또한 올바른 유형을 제공합니다.
let numUniques x = length. 너브 $ x