Kategori membentuk kategori (besar) yang objeknya adalah kategori (kecil) dan yang morfismenya adalah fungsi antara kategori kecil. Dalam pengertian ini, functors dalam teori kategori adalah "morfisme ukuran lebih tinggi".
Functors ML bukan functors dalam arti kata kategoris. Tapi mereka "fungsi ukuran lebih tinggi" dalam arti tipe-teoretis.
Pikirkan tipe data konkret dalam bahasa pemrograman yang khas sebagai "kecil". Dengan demikian int
, bool
, int -> int
, dll kecil, kelas-kelas dalam java kecil, seperti struct baik di C. Kami dapat mengumpulkan semua tipe data menjadi koleksi besar yang disebut Type
. Tipe konstruktor, seperti list
atau array
merupakan fungsi dari Type
hingga Type
. Jadi itu adalah fungsi "besar". Functor ML hanyalah fungsi besar yang sedikit lebih rumit: ia menerima sebagai argumen beberapa hal kecil dan mengembalikan beberapa hal kecil. "Beberapa hal kecil disatukan" dikenal sebagai struktur dalam ML. Dalam hal teori tipe Martin-Lof kami memiliki semesta Type
tipe kecil. Jenis besar biasanya disebut jenis . Jadi kita punya:
- nilai adalah elemen tipe (contoh
42 : int
:)
- tipe adalah elemen dari
Type
(contoh int : Type
:)
- Tanda tangan ML adalah jenis (contoh
OrderedType
:)
- konstruktor tipe adalah elemen jenis (contoh
list : Type -> Type
:)
- Struktur ML adalah elemen jenis (contoh
String : OrderedType
:)
- ML functors adalah fungsi antara jenis (misalnya:
Map.Make : Map.OrderedType -> Make.S
)
Sekarang kita bisa menggambar analogi antara ML dan kategori, di mana functors berhubungan dengan functors. Tapi kami juga melihat bahwa tipe data dalam ML seperti "kategori kecil tanpa morfisme", dengan kata lain mereka lebih suka set daripada kategori seperti. Kita dapat menggunakan analogi antara ML dan teori himpunan kemudian:
- tipe data seperti set
- jenisnya seperti kelas teori set
- functors seperti fungsi berukuran kelas