Control.Monad.Morph
comprendPourquoi Control.Monad.Morph.hoist a-t-il une contrainte Monad?
class MFunctor t where
hoist :: Monad m => (forall a. m a -> n a) -> t m b -> t n b
Pour autant que je sache, aucun des cas inclus utiliser la contrainte Monad m
. Comment pourrait-on le faire? Y at-il des instances valides qui utilisent la contrainte (c'est un peu difficile pour moi d'imaginer comment, étant donné que hoist id = id
)? Quelle est la signification de la contrainte étant sur m
et non n
?
Je m'attendais à quelque chose à casser dans ['Control.Monad.Trans.Compose'] (https://hackage.haskell.org/package/mmorph-1.0.6/docs/Control-Monad-Trans-Compose. html), mais tout compile bien sans "Monad m" sur "hoist" ... – Alec
Peut-être parce que cela n'a de sens que pour les monades? C'est un foncteur sur un transformateur monad (pile), autant que je peux voir. – Xeo
@Alec 'Control.Monad.Trans.Compose' n'a pas d'instance' MFunctor'. – Cirdec