
Answered it here: http://stackoverflow.com/questions/30641500/are-there-contravariant-monads/3...
On 10 Mar 2017, at 23:25, Zemyla
wrote: There originally seems like there shouldn't be one, because it's impossible to, for any permutation of the arguments of (>>=), get the covariances/contravariances right on the arguments. However, based on the fact that there is a mapping:
a -> ((a -> r) -> r)
and what seems like an isomorphism:
(a -> r) -> (((a -> r) -> r) -> r) (((a -> r) -> r) -> r) -> (a -> r)
then this looks like it might be some kind of monad-like structure:
class Contravariant f => Contramonad f where contrareturn :: a -> f (f a) contrabind :: (a -> f (f b)) -> f b -> f a
I have no idea what the laws should be for it, though. So is this worth pursuing, or have I just stumbled down a blind alley? _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.