programing

GHCi를 사용할 때 함수에 대한 명시 적 유형 선언을 제공하는 방법은 무엇입니까?

nasanasas 2020. 10. 27. 08:18
반응형

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

참고 URL : https://stackoverflow.com/questions/3093133/how-to-provide-explicit-type-declarations-for-functions-when-using-ghci

반응형