I\'m now really confused about the Error monad in which \"All about monads\" describes.
It claims the definition of Error monad as
class (Monad m) =>
It's just a typo, the instance should be
instance MonadError e (Either e) where throwError = Left (Left e) `catchError` handler = handler e a `catchError` _ = a
with two type parameters, as you expected.
Either e is the monad, and e is the corresponding error type.
Either e
e