不推荐使用ErrorT,但不适合使用ExceptT

时间:2019-12-30 23:33:35

标签: haskell

我有一个单子计算。由于单峰模式匹配,它开始需要MonadFail约束。

我的简单解决方法是使用此代码运行它:

fmap (either error id) . runErrorT

但哦:

Deprecated: "Use Control.Monad.Trans.Except instead"

看来ErrorT已过时,我改用ExceptT。从外部听起来还不错,但看起来好像不是ExceptT完全替代了只需看一下实例声明即可:

instance (Monad m, Error e) => MonadFail (ErrorT e m)
instance MonadFail m => MonadFail (ExceptT e m)

ErrorT 提供 MonadFail实现。 ExceptT只是提起它。

我不太确定从这一点出发。

  • 我的代码最终根本没有可重命名的绑定。这是静态已知的一种情况,但尚未得到类型检查器的证明。我会到达那儿,但是要花一点时间。 (就像,我将需要依赖类型,所以我将需要学习依赖类型。这需要一段时间。)

  • 与此同时,我的代码需要绑定,如果我搞砸了,我真的可以调用error

看来,我正在寻找的是某种通用的MonadFail实现,该实现允许我…好吧,在模式不匹配的情况下执行我想做的事情。 ErrorT做到了,ExceptT没有做到。

我不赞成使用哪些选项?

0 个答案:

没有答案