반응형
GHCi를 사용할 때 함수에 대한 명시 적 유형 선언을 제공하는 방법은 무엇입니까?
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
반응형
'programing' 카테고리의 다른 글
"세션 상태에서 세션 ID를 만들었지 만 응용 프로그램에서 이미 응답을 플러시했기 때문에 저장할 수 없습니다."의 원인이됩니다. (0) | 2020.10.27 |
---|---|
std :: string과 std :: basic_string의 차이점은 무엇입니까? (0) | 2020.10.27 |
-webkit-margin은 텍스트에 원하지 않는 여백을 추가합니다. (0) | 2020.10.27 |
서명되지 않은 길이는 몇 바이트입니까? (0) | 2020.10.27 |
()에있는 MySQL (0) | 2020.10.27 |