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.
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.