私は、既存のライブラリの設計に基づいて独自の小さなライブラリを実装することにより、モナド変換子を理解しようとしています。
私が立ち往生しているのは言語拡張です。MonadErrorでは、言及されている拡張子は。だけですUndecidableInstances
。FunctionalDependencies
ただし、とを使用しないと、同様のコードをコンパイルすることはできませんFlexibleInstances
。
FunDepsが必要だと私が信じる例:
class (Monad m) => MonadError e m | m -> e where
そして柔軟なインスタンス:
instance MonadError e m => MonadError e (MaybeT m) where
コードはどのようにしMonadError
て余分な2つの拡張を回避しますか?