Kategoriler, nesneleri (küçük) kategoriler ve morfizmaları küçük kategoriler arasında functor olan (büyük) bir kategori oluşturur. Bu anlamda, kategori teorisindeki işlevciler "daha yüksek boyutta morfizmalar" dır.
ML functors, kelimenin kategorik anlamdaki functorları değildir. Fakat bunlar tip teorik anlamda "daha yüksek boyut fonksiyonları" dır.
Somut veri tiplerini tipik bir programlama dilinde "küçük" olarak düşünün. Böylece int
, bool
, int -> int
vb C. kuyu yapılar Biz denilen büyük bir koleksiyona tüm veri türlerini toplayabilir olarak java sınıfları, küçük, küçük Type
. Gibi bir tür yapıcı, list
ya da array
bir fonksiyonudur Type
için Type
. Bu yüzden "büyük" bir işlevdir. Bir ML functor, sadece biraz daha karmaşık bir fonksiyondur: birkaç küçük şeyi argüman olarak kabul eder ve birkaç küçük şeyi döndürür. “Bir araya getirilen birkaç küçük şey” ML'de yapı olarak bilinir . Martin-Löf tipi teorisi bakımından küçük tipli bir evrenimiz var Type
. Büyük tiplere genellikle çeşit denir . Böylece sahibiz:
- değerleri türleri elemanları (örnek: vardır
42 : int
)
- türleri elemanları
Type
(örneğin: int : Type
)
- ML imzalar türleri (örneğin: vardır
OrderedType
)
- tip tanımına türlü elemanları (örnek: vardır
list : Type -> Type
)
- ML yapıları belirtmektedir türlü elemanları (örnek: vardır
String : OrderedType
)
- ML fanktorlar türleri arasındaki fonksiyonları (örnek: vardır
Map.Make : Map.OrderedType -> Make.S
)
Artık, ML ile kategoriler arasında bir benzetme kurabiliriz, çünkü altında işlevlerin işlevlere karşılık gelir. Ancak ML'deki veri tiplerinin "morfizmasız küçük kategoriler" gibi olduklarını, bir başka deyişle, kategorilerden çok setler olduklarını fark ettik. ML ve set teorisi arasında bir benzetme kullanabiliriz:
- veri türleri kümeler gibidir
- çeşitleri set-teorik sınıfları gibidir
- işlevler sınıf boyutlu işlevler gibidir