GHC complains about:
class (Monad m, {-, Monad (t m)-}) = MonadT t m where
lift :: m a - (t m) a
instance (Monad m) = Monad (EnvT env m) where
...
instance (Monad (EnvT env m)) = MonadT (EnvT env) m where
...
...
OK, there are two things going on. First, GHC is meant to
GHC complains about:
class (Monad m, {-, Monad (t m)-}) = MonadT t m where
lift :: m a - (t m) a
instance (Monad m) = Monad (EnvT env m) where
...
instance Monad m = MonadT (EnvT env) m where ...
Even when I use the "decent" definition you suggest, GHC duplicates the
(This is related to my previous post concerning monad transformers.)
GHC complains about:
class (Monad m, {-, Monad (t m)-}) = MonadT t m where
lift :: m a - (t m) a
instance (Monad m) = Monad (EnvT env m) where
...
instance (Monad (EnvT env m)) = MonadT (EnvT env) m where