MTL库需要哪些语言扩展?

时间:2013-03-01 10:38:51

标签: haskell typeclass monad-transformers language-extension

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

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

我相信需要FunDeps的例子:

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

灵活的实例:

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

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

1 个答案:

答案 0 :(得分:11)

您不必拼写源文件本身的所有扩展名。所有/大多数模块使用的公共扩展可以列在项目的cabal文件中。在mtl's case

extensions:
    MultiParamTypeClasses
    FunctionalDependencies
    FlexibleInstances