「Haskellのファンクター」について質問しているのか、それともFunctor
sについて質問しているのかを明確にしたいと思うかもしれません。Haskellで圏論の用語が使用されている場合、どのカテゴリーが想定されているかは必ずしも明確ではありません。
しかし、はい、デフォルトの仮定はHaskです。これは、射として機能するHaskellタイプのカテゴリーと見なされます。その場合、HaskのエンドファンクターFは、任意のタイプAをタイプF(A)にマップし、2つのタイプAとBの間の任意の関数fをいくつかのタイプF(A)とF(B)の間の関数F( f )にマップします。 。
a
次に、任意の型を型(f a)
にマップするエンドファンクターのみに制限するf
と* -> *
、関数に関連付けられたマップを、型を持つ高階関数として記述できます(a -> b) -> (f a -> f b)
。これは、もちろん、と呼ばれる型クラスです。Functor
。
ただし、タイプをにマッピングするファンクターなど、のインスタンスとして(直接)書き込むことができない、Hask上の正常に動作するエンドファンクターを簡単に想像できます。そして、 Haskから他のカテゴリへのファンクターには明らかにあまり意味がありませんが、HaskからHask opへの(反変の)ファンクターを検討することは合理的です。Functor
a
Either a t
それを超えて、インスタンスはFunctor
必然的にカテゴリHask全体からそのサブセットにマップされ、したがって、カテゴリも形成します。しかし、 Haskのサブセット間のファンクターについて話すことも合理的です。たとえば、タイプをに送信するファンクターについて考えてみます。Maybe a
[a]
パッケージ全体を想定するのではなく、Hask内に埋め込まれたいくつかの圏論に着想を得た構造を提供するcategory-extras
パッケージを熟読することをお勧めします。