私はそれがファンクターであるfmap
タイプを持っていることを知っています(そしてファンクターが何であるかに応じて異なることをします)。私の基本的な質問は次のとおりです。いくつかの呼び出しが与えられた場合、 ghc はファンクターが何であるかをどのように理解するのですか?(a -> b) -> f a -> f b
f
fmap r x
f
x
r
これをもっと正確にしましょう。と は、ある型に対して=であるが、とは異なるようなファンクターであるf
とします。has typeとhas typeの場合、 some of typeと something of typeの2 つの異なる結果が考えられるようです。このあいまいさはどのように解決されますか?f'
f a
f' a
a
f b
f' b
r
a -> b
x
f a
fmap r x
f b
f' b
二次的な質問: 奇妙なファンクターを作成してこれをテストしたかったのですが、おそらく任意の型を取りa
、関数に対して愚かなことをするものです...しかし、私ができる正しい構文を見つけていないようですこの方法でファンクタを指定します。(そのようなものはありますか?ファンクターのインスタンスにする前に、型クラス名を作成する必要があるようです。)[Int]
a
data Newtype a = [Int]
編集:私は今それを手に入れましたが、記録のために、本当の問題(これは私の質問でのみ暗黙的です)は、すでに存在するFoo
ようFoo a
なタイプのファンクターを持つことができないことに気付いていなかったことです。Int