我试图通过基于现有设计实现我自己的小型库来理解monad变换器。
我坚持的是语言扩展。在MonadError中,提到的唯一扩展名是UndecidableInstances
。但是,如果不使用FunctionalDependencies
和FlexibleInstances
,我无法编译类似的代码。
我相信需要FunDeps的例子:
class (Monad m) => MonadError e m | m -> e where
灵活的实例:
instance MonadError e m => MonadError e (MaybeT m) where
MonadError
代码如何避免额外的两个扩展?
答案 0 :(得分:11)
您不必拼写源文件本身的所有扩展名。所有/大多数模块使用的公共扩展可以列在项目的cabal文件中。在mtl's case:
extensions:
MultiParamTypeClasses
FunctionalDependencies
FlexibleInstances