2

我想将这个temporaryShake一起使用,但这需要Action有一个 for 的实例MonadMask,而这个实例是缺失的。为什么 Shake 不提供这样的实例?

4

1 回答 1

5

有两个原因:

  • 这是不可能的,因为Action它基于一个延续单子,你不能MonadMask为一个延续单子实现。请参阅此博客文章以大致说明为什么这是不可能的。
  • 这是不可取的,从那时起,您可以根据依赖规则是成功还是失败来做出选择,而在 Shake 中,您所依赖的规则的失败总是会导致您失败。

但是,Shake 确实提供了actionFinallyactionOnException作为构建块,它们是MonadMask. 此外,Shake 提供了withTempFilewithTempDir,它们做一些与包相同的事情temporary。最后,如果您完全处于IO,那么liftIO并且bracket工作正常。

于 2015-08-20T17:58:38.657 回答