2017-11-02 11 views
3

コマンド:set -XTypeApplicationsの後、GHCiを使用して、特定のインスタンスのタイプクラス関数の 特殊化を表示できます。タイプクラス関数の特殊化を表示するGHCi構文

簡単な例:

:type fmap @Maybe 

GHCiのは

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

質問で応答:2つ(またはそれ以上)の多型のパラメータを持つデータ型のインスタンスのための構文はどのように? の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

関連する問題