haskell functor category-theory

¿Todos los functores de Haskell son endofunctores?



category-theory (3)

Es posible que desee aclarar si está preguntando acerca de "functors in Haskell" o Functor s. No siempre está claro qué categoría se asume cuando se usan los términos de la teoría de categorías en Haskell.

Pero sí, el supuesto predeterminado es Hask , que se considera la categoría de los tipos de Haskell con funciones como morfismos. En ese caso, un endofunctor F en Hask mapearía cualquier tipo A a un tipo F (A) y cualquier función f entre dos tipos A y B a una función F ( f ) entre algunos tipos F (A) y F (B) .

Si luego nos limitamos solo a aquellos endofunctores que asignan cualquier tipo a a un tipo (fa) donde f es un constructor de tipo con tipo * -> * , entonces podemos describir el mapa asociado para funciones como una función de orden superior con tipo (a -> b) -> (fa -> fb) , que por supuesto es la clase de tipos llamada Functor .

Sin embargo, uno puede imaginar fácilmente los endofunctores de buen comportamiento en Hask que no pueden escribirse (directamente) como una instancia de Functor , como un functor que asigna un tipo a a Either at . Y mientras que obviamente no tiene mucho sentido en un funtor de Hask a alguna otra categoría, es razonable considerar un funtor (contravariante) de Hask a Hask op .

Más allá de eso, las instancias de Functor correlacionan necesariamente de toda la categoría Hask en algún subconjunto de la misma, por lo que también forma una categoría. Pero también es razonable hablar de funtores entre subconjuntos de Hask . Por ejemplo, considere un functor que envía tipos Maybe a a [a] .

Es posible que desee leer detenidamente el paquete de category-extras , que proporciona algunas estructuras inspiradas en la teoría de categorías incrustadas en Hask en lugar de asumir la totalidad del mismo.

Estoy un poco confundido, y necesito a alguien que me aclare. Vamos a delinear mi comprensión actual:

Donde E es un endofunctor, y A es alguna categoría:

E : A -> A.

Dado que todos los tipos y morfismos en Haskell están en la categoría Hask , ¿no es un functor en Haskell también un endofunctor ? F : Hask -> Hask .

Tengo la sensación de que estoy equivocado, y simplifico demasiado esto de alguna manera, y me gustaría que alguien me dijera lo idiota que soy. Gracias.


Incluso si, en última instancia, manipulas Hask , hay muchas otras categorías que se pueden construir en Hask , que pueden ser significativas para el problema en cuestión:

  • Hask ^ op, que es Hask con todas las flechas invertidas
  • Hask * Hask , los funtores en él son bifunctores
  • Categorías de comas, es decir. los objetos son morfismos a un objeto fijo a , los morfismos son triángulos conmutativos
  • Las categorías funcionales, los morfismos son transformaciones naturales.
  • Categorias de algebra
  • Categorías monoides
  • Categorías de Kleisli
  • ...

tome una copia de las Categorías de Mac Lane para que el matemático que trabaja tenga definiciones, e intente encontrar por sí mismo el problema que resuelven en Haskell. Especialmente se atragantan con los funtores adjuntos (que son objetos iniciales / terminales en la categoría correcta) y su relación con las mónadas.

Verá que incluso si hay una categoría grande ( Hask , o tal vez "objetos extraídos de Hask con las flechas / productos / ..." correctos, que encapsula las opciones de lenguaje de Haskell como no estricto y perezoso), Las propias categorías derivadas son expresivas.