回答:
カテゴリは(大)カテゴリを形成し、そのオブジェクトは(小)カテゴリであり、射は小カテゴリ間のファンクタです。この意味で、カテゴリー理論の関手は「より大きなサイズの射」です。
MLファンクターは、単語のカテゴリー的な意味でのファンクターではありません。しかし、それらは型理論的な意味での「より大きなサイズの関数」です。
典型的なプログラミング言語の具体的なデータ型を「小さい」と考えてください。このようにint
、bool
、int -> int
、などの小型で、JavaでのクラスはC.でも構造体として我々が呼ばれる大規模なコレクションにすべてのデータ型を収集することがあり、小さいですType
。など型コンストラクタ、list
またはarray
から関数であるType
にType
。したがって、これは「大」機能です。MLファンクターは、もう少し複雑な大きな関数です。引数としていくつかの小さなものを受け入れ、いくつかの小さなものを返します。「まとめられたいくつかの小さなもの」は、MLの構造として知られています。Martin-Löf型理論に関しては、小さな型の宇宙が Type
あります。通常、大きな型は種類と呼ばれます。だから私たちは持っています:
42 : int
)Type
(例:int : Type
)OrderedType
)list : Type -> Type
)String : OrderedType
)Map.Make : Map.OrderedType -> Make.S
)これで、ファンクターがファンクターに対応するMLとカテゴリーの類似性を描くことができます。しかし、MLのデータ型は「射のない小さなカテゴリ」のようなものです。つまり、カテゴリではなくセットのようなものです。その場合、MLと集合論の類似性を使用できます。
標準ML構造は代数に似ています。その署名は、類似した形状の代数のクラス全体を記述しています。
これらのアイデアのほとんどは、CLEAR(DBLPページの参照c5およびc6)と呼ばれる仕様言語を設計する際にBurstallとGoguenが一連の論文で作成したものです。問題に。標準MLモジュールシステムは、これらのアイデアに基づいています。
ほとんどの人が不思議に思うのは、射についてはどうでしょうか?カテゴリ理論ファンクターには、オブジェクト部分と射型部分があります。標準MLファンクターも同じですか?答えはYESとNOです。
これは、標準MLがカテゴリ理論から逸脱していることを意味しますか?そうは思いません。私はむしろ、スタンダードMLが正しいことをしており、カテゴリー理論がまだ追いついていないと思います。カテゴリー理論は、高階関数の扱い方をまだ知らない。いつか、そうなるでしょう。
公式の関係、私の知る限りではありませんが、ファンクタ圏論ではとファンクタ ML中(SMLやOCamlのは、彼らがここに私たちの目的のために十分に近いです)。
カテゴリー理論では、ファンクターはオブジェクトを操作する関数です。それらは、1つ上のレベルの射で、多くの場合、要素を操作する関数です(多くのカテゴリには、代数構造とこれらの構造間の準同型である矢印のセットであるオブジェクトがあります)。MLファンクターは、コア言語の値で動作する機能の1レベル上のモジュールで動作する機能です。類似点はここで止まると思います。
MLファンクターは、ポリモーフィズムニュースレターに掲載された標準ML (citeseerx)の 1985年の改訂版でDave McQueenによって洗礼を受けました(元の論文では「パラメトリックモジュール」という表現を使用しました。残念ながら、私はその論文のコピーを見つけることができません。1986年の論文「依存型を使用したモジュール構造(citeseerx)の表現」では、確立された名前を付けています。