8

私は、既存のライブラリの設計に基づいて独自の小さなライブラリを実装することにより、モナド変換子を理解しようとしています。

私が立ち往生しているのは言語拡張です。MonadErrorでは、言及されている拡張子は。だけですUndecidableInstancesFunctionalDependenciesただし、とを使用しないと、同様のコードをコンパイルすることはできませんFlexibleInstances

FunDepsが必要だと私が信じる例:

class (Monad m) => MonadError e m | m -> e where

そして柔軟なインスタンス:

instance MonadError e m => MonadError e (MaybeT m) where

コードはどのようにしMonadErrorて余分な2つの拡張を回避しますか?

4

1 に答える 1

11

ソースファイル自体のすべての拡張子を詳しく説明する必要はありません。すべて/ほとんどのモジュールで使用される一般的な拡張機能は、プロジェクトのcabalファイルにリストできます。mtlの場合

extensions:
    MultiParamTypeClasses
    FunctionalDependencies
    FlexibleInstances
于 2013-03-01T10:51:40.523 に答える