2011-10-19 2 views
11

Si je découvre que quelque chose est un Monoid ou Monad, j'obtiens tout à utiliser toutes sortes de fonctions amusantes, comme foldMap, sequence ou même mapM. Ils me rendent heureux.À quoi sert Control.Category?

Que puis-je obtenir si je découvre que quelque chose est un Category? Est-ce que je reçois quelque chose d'amusant en plus de surcharger id et (.)?

+4

Comme pour toutes les abstractions, il y a un compromis: soit vous pouvez faire beaucoup de choses avec eux, soit vous découvrez que beaucoup de choses en sont des exemples. Les catégories vont aussi loin qu'ils peuvent vers le côté «beaucoup de choses sont des exemples» du compromis: sacrément près de chaque idée mathématique a une catégorie sous-jacente. Le prix que vous payez pour la terminologie commune entre toutes ces idées est que simplement appeler quelque chose une catégorie ne vous donne pas beaucoup d'informations. Si vous voulez plus, vous devez balancer des adjectifs sur le mot: "catégorie fermé de cartesion", ou "catégorie monoidale tressée", etc. –

Répondre

9

Est-ce que je reçois quelque chose d'amusant en plus de l'ID de surcharge et (.)?

Eh bien, vous aussi (si) obtenir les lois qui leur sont associés:

"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) 

Comme une note de côté: La raison pour laquelle vous ne recevez pas que de nombreuses fonctions amusantes comme mapM ou foldMap est , dire que quelque chose est une catégorie en dit très peu. Les fonctions les plus utiles que je suppose que sont ceux définis dans Control.Category, qui rendent parfois code plus facile à lire: >>> et <<<

+2

Addendum: "Wikipedia dit" que la théorie de catégorie a été considérée comme "absurdité abstraite générale" (dans le bon sens), parce que c'est extrêmement abstrait. –

7

Control.Category est juste le travail de terrain pour Control.Arrow, et c'est là que vous obtenez les fonctions amusantes de.