Функторы могут быть ковариантными и контравариантными. Может ли эта ковариантная/контравариантная двойственность применяться к монадам?
Что-то вроде:
class Monad m where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
class ContraMonad m where
return :: a -> m a
contrabind :: m a -> (b -> m a) -> m b
Имеет ли смысл класс ContraMonad
? Любые примеры?