私は今、「モナドのすべて」が説明しているエラーモナドについて本当に混乱しています。
エラーモナドの定義を次のように主張しています
class (Monad m) => Monaderror e m | m -> e where
throwError :: e -> m a
catchError :: m a -> (e -> m a) -> m a
そして、インスタンスの1つはEithereです。
instance MonadError (Either e) where
throwError = Left
(Left e) `catchError` handler = handler e
a `catchError` _ = a
これが私が理解していないことです。MonadErrorクラスは2つの型パラメーターを取り、(どちらか)は1つを取りますが、このインスタンス化はどのように機能しますか?これは機能依存性のためですか?まだわかりません。
と!このコードをGHCiで実行しました(-XFunctionalDependencies、-XMultiParamTypeClassesを使用)はコンパイルされませんでした!とにかく、このコードは何ですか?