2011-10-19 18 views
11

Si descubro que algo es un Monoid o Monad, me sale todo para utilizar todo tipo de funciones divertidas, como foldMap, sequence o incluso mapM. Ellos me hacen feliz.¿De qué sirve Control.Category?

¿Qué obtengo si descubro que algo es un Category? ¿Obtengo algo divertido además de sobrecargar id y (.)?

+4

Como con todas las abstracciones, hay una compensación: o puede hacer muchas cosas con ellas, o descubre que hay muchas cosas que son ejemplos de ellas. Las categorías van tan lejos como pueden hacia el lado "porciones de cosas son instancias de ellas": la maldición de casi todas las ideas matemáticas tiene una categoría subyacente. El precio que paga por la terminología común entre todas estas ideas es que simplemente llamar a algo una categoría no le da mucha información. Si quieres más, tienes que colgar adjetivos en la palabra: "categoría cerrada de carrito" o "categoría monoidal trenzada", etc. –

Respuesta

9

¿Obtengo algo divertido además de sobrecargar ID y (.)?

Bueno, también (debe) tener las leyes asociadas con ellos:

"identity/left" forall p . 
       id . p = p 
"identity/right"  forall p . 
       p . id = p 
"association" forall p q r . 
       (p . q) . r = p . (q . r) 

Como nota al margen: La razón por la que no consigue que muchas funciones divertidas como mapM o foldMap es , que decir que algo es una categoría realmente dice muy poco al respecto. Las funciones más útiles que supongo son los definidos en Control.Category, que a veces hacer el código más fácil de leer: >>> y <<<

+2

Adición: "Wikipedia dice" que la teoría de categorías se consideraba como "tonterías abstractas generales" (en el buen sentido), porque es extremadamente abstracto. –

7

Control.Category es sólo el trabajo de base para Control.Arrow, y ahí es donde se obtiene a partir de las funciones divertidas.