8

我试图通过基于现有设计实现我自己的小型库来理解 monad 转换器。

我坚持的是语言扩展。在MonadError中,唯一提到的扩展是UndecidableInstances. FunctionalDependencies但是,如果不使用and ,我就无法编译类似的代码FlexibleInstances

我认为需要 FunDeps 的示例:

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

还有一个灵活的实例:

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

代码如何MonadError避免额外的两个扩展?

4

1 回答 1

11

您不必拼出源文件本身中的所有扩展名。所有/大多数模块使用的通用扩展都可以在项目的 cabal 文件中列出。在mtl 的情况下

extensions:
    MultiParamTypeClasses
    FunctionalDependencies
    FlexibleInstances
于 2013-03-01T10:51:40.523 回答