MonadError раздел «Все о монадах»

м теперь действительно запутался насчет монады Ошибка в которойВсе о монадах " описывает.

Он утверждает, что определение ошибки монады как

class (Monad m) => Monaderror e m | m -> e where
  throwError :: e -> m a
  catchError :: m a -> (e -> m a) -> m a

И одним из примеров является либо e.

instance MonadError (Either e) where
  throwError = Left
  (Left e) `catchError` handler = handler e
  a        `catchError` _       = a

Вот что я не делаюТ понять. Класс MonadError принимает два параметра типа, и (Either e) принимает один, как работает этот экземпляр? Это из-за функциональных зависимостей? Я до сих пор нене понимаю

А ТАКЖЕ! Я'мы запустили этот код в GHCi (с -XFunctionalDependencies, -XMultiParamTypeClasses)т компилировать! Какие's это кусок кода, в любом случае?

Ответы на вопрос(1)

Ваш ответ на вопрос