¿Todos los funtores de Haskell son endofuntores?


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

Donde E es un endofuntor, 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 cualquier funtor en Haskell también un endofuntor? F : Hask -> Hask.

Tengo un buen presentimiento de que estoy equivocado, y simplificando demasiado esto de alguna manera, y me gustaría que alguien me dijera lo idiota que soy. Gracias.

Author: Andrey Tyukin, 2010-07-18

3 answers

Es posible que desee aclarar si está preguntando sobre "funtores en Haskell", o Functor s. No siempre está claro qué categoría se asume cuando se usan términos de Teoría de Categorías en Haskell.

Pero sí, la suposición predeterminada es Hask, que se toma como la categoría de tipos Haskell con funciones como morfismos. En ese caso, un endofuntor 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 entonces nos limitamos a solo aquellos endofuntores que mapean cualquier tipo a a un tipo (f a) donde f es un constructor de tipo con kind * -> *, entonces podemos describir el mapa asociado para funciones como una función de orden superior con type (a -> b) -> (f a -> f b), que por supuesto es la clase de tipo llamada Functor.

Sin embargo, uno puede imaginar fácilmente endofuntores de buen comportamiento en Hask que no se pueden escribir (directamente) como una instancia de Functor, como un funtor que asigna un tipo a a Either a t. Y aunque no, obviamente, no tiene mucho sentido en un functor de Hask a alguna otra categoría completamente, es razonable considerar un (contravariante) functor de Hask a Haskop.

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

Es posible que desee leer detenidamente la category-extras paquete , que proporciona algunas estructuras inspiradas en la Teoría de Categorías incrustadas dentro de Hask en lugar de asumir la totalidad de la misma.

 33
Author: C. A. McCann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-17 22:13:25

Incluso si en última instancia, manipula 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 coma, es decir. los objetos son morfismos a un objeto fijo a, los morfismos son triángulos conmutativos
  • Las categorías de funtores, morfismos son naturales transformaciones
  • Categorías de álgebra
  • Categorías monoidales
  • Kleisli categorías
  • ...

Toma una copia de las categorías de Mac Lane para que el Matemático que Trabaja tenga definiciones, y trata de encontrar por ti mismo el problema que resuelven en Haskell. Especialmente se ahogan en funtores adjuntos (que son objetos iniciales/terminales en la categoría correcta) y su relación con mónadas.

Verás que incluso si hay uno grande categoría (Hask, o tal vez "objetos levantados de Hask con las flechas de la derecha/products/...", que encapsula las opciones de lenguaje de Haskell, tales como la no rigidez y la holgazanería), las categorías derivadas adecuadas son expresivas.

 13
Author: Alexandre C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-19 15:10:04

Una discusión posiblemente relevante (o al menos interesante) específicamente con respecto a las mónadas se encuentra en el documento "Las mónadas no necesitan ser endofunctors":

Http://www.cs.nott.ac.uk / ~ txa / publ / Relative_Monads. pdf

 7
Author: Gian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-17 22:30:33