Las categorías forman una categoría (grande) cuyos objetos son las categorías (pequeñas) y cuyos morfismos son functores entre categorías pequeñas. En este sentido, los functores en la teoría de categorías son "morfismos de mayor tamaño".
Los functores de ML no son functors en el sentido categórico de la palabra. Pero son "funciones de mayor tamaño" en un sentido de tipo teórico.
Piense en tipos de datos concretos en un lenguaje de programación típico como "pequeños". Por lo tanto int
, bool
, int -> int
, etc, son pequeños, las clases en Java son pequeñas, como así también estructuras en C. Podemos recopilar todos los tipos de datos en una gran colección llamada Type
. Un constructor de tipos, como list
o array
es una función de Type
a Type
. Por lo tanto, es una función "grande". Un functor de ML es solo una función grande un poco más complicada: acepta como argumento varias cosas pequeñas y devuelve varias cosas pequeñas. "Varias cosas pequeñas juntas" se conoce como estructura en ML. En términos de la teoría de tipos de Martin-Löf, tenemos un universo Type
de tipos pequeños. Los tipos grandes generalmente se denominan tipos . Entonces tenemos:
- los valores son elementos de los tipos (ejemplo:
42 : int
)
- tipos son elementos de
Type
(ejemplo: int : Type
)
- ML firmas son clases (ejemplo:
OrderedType
)
- constructores de tipos son elementos de tipo (ejemplo:
list : Type -> Type
)
- Construcciones ML son elementos del tipo (ejemplo:
String : OrderedType
)
- Funtores ML son las funciones de los tipos (ejemplo:
Map.Make : Map.OrderedType -> Make.S
)
Ahora podemos trazar una analogía entre ML y categorías, según la cual los functores corresponden a los functores. Pero también notamos que los tipos de datos en ML son como "categorías pequeñas sin morfismos", en otras palabras, son como conjuntos más que como categorías. Podríamos usar una analogía entre ML y teoría de conjuntos:
- los tipos de datos son como conjuntos
- los tipos son como clases de teoría de conjuntos
- los functores son como funciones del tamaño de una clase