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 это кусок кода, в любом случае?