functor
functorという用語は、数学の圏論とコンピューターサイエンスの関数型プログラミングという二つの異なる文脈で使用されますが、根本的な概念は共通しています。どちらにおいても、ある構造を維持したまま、その中身を別の形に変換するという写像の考え方が中心となります。
数学的定義と計算機科学的実装
数学における関手は、圏から圏への写像であり、対象と射の両方を保存することを目的としています。一方で、プログラミングにおけるファンクタは、より具体的にコンテナのようなデータ構造を指し、その内部の値に対して関数を適用して新しいファンクタを生成するmap操作を実装した型を指します。つまり、数学的な抽象概念を、プログラムで利用可能なデータ型として具体化したものがファンクタであると言えます。
概念的な使い分け
数学的な文脈では、圏論の理論的な枠組みの中でfunctor(関手)という言葉が使われ、共変関手や反変関手といった分類が重要になります。
プログラミングの文脈では、functor(ファンクタ)として扱われ、リストやオプション型などのデータ構造に対してどのように関数を適用し、構造を維持したまま値を変換するかに焦点が当てられます。
意味
圏論において、射の合成と恒等射を含む圏の構造を保存する、圏から圏への写像のこと
The covariant functor maps objects of category C to objects of category D.
共変関手は、圏`C`の対象を圏`D`の対象に写像する。
コンピューターサイエンスおよび関数型プログラミングにおいて、マップ操作が可能なデータ型であり、保持している値に変換を適用するためのマップ関数を実装していること
A list is a common example of a functor in Haskell.
リストは、ハスケルにおけるファンクタの一般的な例である。