MonadError section in “All about monads”
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) => Monaderror e m | m -> e where throwError :: e -> m a catchError :: m a -> (e -> m a) -> m a And one of the instance is Either e. instance MonadError (Either e) where throwError = Left (Left e) `catchError` handler = handler e a `catchError` _ = a Here is what I don't understand. The MonadError class take two type parameters, and (Either e) takes one, how is this instantiation work? Is this because the functional dependencies? I still don't get it.