Différences entre les fonctions et les endofoncteurs

quelqu'un Peut m'expliquer en termes simples la différence entre les deux? Je ne comprends pas tout à fait la partie où les monades sont endofuncteurs par rapport à être juste des foncteurs.

40
demandé sur tharindu_DG 2012-04-27 03:35:55

1 réponses

un functor peut passer d'une catégorie à une autre, un endofunctor est un functor pour lequel la catégorie start et la catégorie target sont les mêmes.

comme pour les endomorphismes par rapport aux morphismes.

maintenant, pourquoi les monades doivent-elles être des endofuncteurs?

il y a la fameuse citation que "les monades sont juste des monoïdes dans la catégorie des endofuncteurs". Heureusement, quelqu'un d'autre l'a déjà assez bien expliqué!--16-->dans cette réponse.

La clé point pourquoi une monade doit être un endofunctor, c'est que join, comme on l'appelle dans Haskell, ou µ, comme on l'appelle habituellement en théorie des catégories, fait partie de la définition1 d'une monade. Maintenant

Prelude Control.Monad> :t join
join :: Monad m => m (m a) -> m a

donc le résultat de l'application du foncteur m pour un objet (dans Hask, la catégorie de Haskell types d'objets et de fonctions comme morphisms, type a) doit être un objet m peut encore être appliqué à. Cela signifie qu'il doit appartenir à la catégorie qui est le domaine de l'foncteur m.

un functeur ne peut être composé avec lui-même que si son domaine et sa codomaine sont les mêmes [strictement, si son codomaine est une sous-catégorie de son domaine], en d'autres termes, s'il est un endofuncteur. Comme la composabilité fait partie de la définition d'un monad, les monades sont a fortiori des endofoncteurs.

1 Une définition, on peut également définir une monade à l'aide de (>>=) ou bind et join comme propriété dérivée.

54
répondu Daniel Fischer 2017-05-23 11:47:13