我试图通过基于现有设计实现我自己的小型库来理解 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
避免额外的两个扩展?