Sekcja MonadError w „Wszystko o monadach”
Jestem teraz bardzo zmieszany co do monady błędu, w której opisuje się „Wszystko o monadach”.
Twierdzi, że definicja błędu monad jako
class (Monad m) => Monaderror e m | m -> e where
throwError :: e -> m a
catchError :: m a -> (e -> m a) -> m a
A jednym z przykładów jest albo e.
instance MonadError (Either e) where
throwError = Left
(Left e) `catchError` handler = handler e
a `catchError` _ = a
Oto, czego nie rozumiem. Klasa MonadError pobiera dwa parametry typu i (Albo e) bierze jeden, jak działa ta instancja? Czy to z powodu zależności funkcjonalnych? Nadal tego nie rozumiem.
I! Uruchomiłem ten kod w GHCi (z -XFunctionalDependencies, -XMultiParamTypeClasses) nie skompilował się! Co to w ogóle jest ten kod?