Il est devenu clair que cette réponse est fausse. Je pars ici de préserver de précieux discussion dans les commentaires jusqu'à ce que quelqu'un formule une correcte réponse.
Considérer la puissance en Set
. Si nous avons une fonction f : S -> T
, nous pouvons former f' : PS S -> PS T
par f' X = f [X]
. Nice foncteur covariant (je pense). On pourrait aussi former f'' X = f^(-1) [X]
, une belle foncteur contravariant (je pense).
Regardons le "pouvoir" en Haskell:
newtype PS t = PS (t -> Bool)
Ce n'est pas un Functor
, mais seulement un Contravariant
:
instance Contravariant PS where
contramap f (PS g) = PS (g . f)
Nous reconnaissons cela, car t
est en position négative. Contrairement aux Set
, nous ne pouvons pas avoir à les "éléments" de la caractéristique fonctions qui composent la puissance, de sorte que le foncteur covariant n'est pas disponible.
Je conjecture, par conséquent, que la raison Haskell admet un gratuit monade pour chaque foncteur covariant est qu'elle exclut les foncteurs covariants qui causent des problèmes pour Set
.