Sección MonadError en "Todo sobre las mónadas"
Ahora estoy realmente confundido acerca de la mónada de error en la que se describe "Todo sobre las mónadas".
Afirma la definición de error de la mónada como
class (Monad m) => Monaderror e m | m -> e where
throwError :: e -> m a
catchError :: m a -> (e -> m a) -> m a
Y una de las instancias es O bien e.
instance MonadError (Either e) where
throwError = Left
(Left e) `catchError` handler = handler e
a `catchError` _ = a
Esto es lo que no entiendo. La clase MonadError toma dos parámetros de tipo y (O) toma uno, ¿cómo funciona esta creación de instancias? ¿Es esto porque las dependencias funcionales? Todavía no lo entiendo.
¡Y! ¡He ejecutado este código en GHCi (con -XFunctionalDependencies, -XMultiParamTypeClasses) no compilé! ¿Cuál es esta pieza de código, de todos modos?