MonadIO 到 Maybe

MonadIO to Maybe

我一直在将 HMatrix 用于线性代数,它的 linearSolve 函数具有简单(尽管简洁)的类型:

linearSolve :: Field t => Matrix t -> Matrix t -> Maybe (Matrix t)

我想试用 sparse-linear-algebra 库,它是 <\> 函数(不是 HMatrix 中的 <\> 函数),其类型为:

(<\>) :: (MonadIO m, MonadThrow m) => MatrixType v -> v -> m v

虽然我想使用它提供的附加信息,但我想从直接替换以下类型开始:

MatrixType v -> v -> Maybe v

这样我就不用一直重写我的代码,直到 main。我该怎么做?

我是 Haskell 的新手,仍处于 "Oh! I understand monads now. No! Wait! It's gone again" 阶段。

谢谢

根据评论看来:

  1. 一旦进入 Monad IO,就无路可逃。因此,最初的新手 Haskeller 问题的答案是 "you can't"
  2. 图书馆作者@ocramz 已有使用计划MonadLogger,我们可能会在即将进行的重新设计中看到一些东西