Категорії утворюють (велику) категорію, об'єктами якої є (малі) категорії, морфізми яких є функціоналами між малими категоріями. У цьому сенсі функтори в теорії категорій - це "великі морфізми".
ML-функтори - це не функтори в категоричному сенсі цього слова. Але вони є "функціями більшого розміру" у теоретико-теоретичному сенсі.
Подумайте про конкретні типи даних у типовій мові програмування як "малі". Таким чином int, boolі int -> intт. Д. Невеликі, заняття в java невеликі, як і структури в C. Ми можемо зібрати всі типи даних у велику колекцію, що називається Type. Конструктор типу, такий як listабо arrayє функцією від Typeдо Type. Отже, це "велика" функція. Функція ML - лише трохи складніша велика функція: вона приймає в якості аргументу кілька дрібних речей і повертає кілька дрібних речей. "Кілька дрібних речей, зібраних разом" відома як структура в ML. З точки зору теорії типу Мартіна-Лефа, ми маємо Всесвіт Type малих типів. Великі типи зазвичай називають видами . Отже, ми маємо:
- Значення - це елементи типів (приклад
42 : int:)
- типи - це елементи
Type(приклад int : Type:)
- Підписи ML - види (наприклад
OrderedType:)
- конструктори типу - це елементи типу (наприклад
list : Type -> Type:)
- ML СТРУКТУР є елементами видів (приклад:
String : OrderedType)
- ML функтори функції між видами (наприклад
Map.Make : Map.OrderedType -> Make.S)
Тепер ми можемо провести аналогію між ML та категоріями, згідно з якими функтори відповідають функторам. Але ми також помічаємо, що типи даних в ML є як "малі категорії без морфізмів", іншими словами вони схожі на множини більше, ніж вони схожі на категорії. Тоді ми могли б використати аналогію між ML та теорією множин:
- типи даних - це як набори
- види схожі на множинно-теоретичні класи
- функтори - це як функції розміру класу