2017-11-02 23 views
3

:set -XTypeApplications 명령 뒤에 GHCi를 사용하여 특정 인스턴스의 클래스 유형 기능의 특수화를 표시 할 수 있습니다.클래스 유형 기능의 특수화를 표시하는 GHCi 구문

간단한 예 :

:type fmap @Maybe 

GHCi가

fmap @Maybe :: (a -> b) -> Maybe a -> Maybe b 

질문 응답한다 : 두 개 이상의 다형 매개 변수 데이터 유형 인스턴스를위한 구문은 어때? 은 Functor 클래스에서

Either a, ((,) a 또는 ((->) r) 같은 인스턴스입니다. 나는 다음 예를했지만, 그들 모두는 GHCi에 의해 거부됩니다

:t fmap @Either 
:t fmap @(Either a) 
:t fmap @(Either a b) 
:t forall a. fmap @(Either a) 
+0

가능한 중복 : https://stackoverflow.com/questions/42999199/how-can-i-get-the-type-of-a-polymorphic-function-for-a-specific-type-class -insta – Shersh

답변

6

그것은

> :t fmap @(Either a) 

을해야하지만 a이하지 않은, 범위에있을 것을 요구한다. 이를 위해, 우리는 타입 수준의 추상화

> -- pseudo code 
> :t \ (a :: *) -> fmap @(Either a) 
forall a b c . (b -> c) -> Either a b -> Either a c 

을해야하지만,이는 코어에서 발견된다.

그러나 우리는이에 대한 사용자 정의, 더미 유형 A를 사용할 수 있습니다

> data A -- don't declare instances for this 
> :t fmap @(Either A) 
forall b c. (b -> c) -> Either A b -> Either A c 

간단한 대안을, 일부 유형의 주석을 사용.

> :t fmap @(Either _) 
fmap @(Either _) :: (a -> b) -> Either t a -> Either t b 
+1

밑줄 (_)이있는 구문을 좋아합니다. – Jogger