Pregunta

Estoy un poco confundido y necesito que alguien me aclare.Resumamos mi comprensión actual:

Dónde 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 el Hask categoría, no es ninguna funtor en Haskell también un endofuntor? F : Hask -> Hask.

Tengo el buen presentimiento de que estoy equivocado, y simplificándolo demasiado de alguna manera, me gustaría que alguien me dijera lo idiota que soy.Gracias.

¿Fue útil?

Solución

Es posible que desee aclarar si está preguntando sobre "functores en Haskell" o Functors.No siempre está claro qué categoría se asume cuando se utilizan términos de la teoría de categorías en Haskell.

Pero sí, la suposición predeterminada es hask, que se considera la categoría de tipos de Haskell con funciones como morfismos.En ese caso, un endofunctor F en hask asignarí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 sólo a aquellos endofunctores que mapean cualquier tipo a a un tipo (f a) dónde f es un constructor de tipos con tipo * -> *, entonces podemos describir el mapa asociado para funciones como una función de orden superior con tipo (a -> b) -> (f a -> f b), que es por supuesto la clase de tipo llamada Functor.

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

Más allá de eso, casos de Functor necesariamente mapa de toda la categoría hask en algún subconjunto del mismo que, por tanto, también forma una categoría.Pero también es razonable hablar de functores. entre subconjuntos de hask.Por ejemplo, considere un functor que envía tipos Maybe a a [a].

Es posible que desee examinar el category-extras paquete, que proporciona algunas estructuras inspiradas en la teoría de categorías integradas en hask en lugar de asumirlo en su totalidad.

Otros consejos

Incluso si en última instancia, manipulas Hask, hay muchas otras categorías sobre las que se pueden construir Hask, que puede ser significativo 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 de un objeto fijo. a, los morfismos son triángulos conmutativos
  • Categorías de functores, los morfismos son transformaciones naturales
  • Categorías de álgebra
  • Categorías monoidales
  • Categorías de Kleisli
  • ...

toma una copia de Mac Lane Categorías para el matemático que trabaja tener definiciones e intentar encontrar por ti mismo el problema que resuelven en Haskell.Especialmente se ahogan con los functores adjuntos (que son objetos iniciales/terminales en la categoría correcta) y su relación con las mónadas.

Verás que incluso si hay una categoría grande (Hask, o tal vez "objetos levantados de Hask con las flechas hacia la derecha/productos/...", que resume las opciones de lenguaje de Haskell, como la no rigurosidad y la pereza), las categorías derivadas adecuadas son expresivas.

A possibly relevant (or at least interesting) discussion specifically regarding monads is found in the paper "Monads need not be endofunctors":

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top