我想将这个temporary
包与Shake一起使用,但这需要Action
有一个 for 的实例MonadMask
,而这个实例是缺失的。为什么 Shake 不提供这样的实例?
问问题
135 次
1 回答
5
有两个原因:
- 这是不可能的,因为
Action
它基于一个延续单子,你不能MonadMask
为一个延续单子实现。请参阅此博客文章以大致说明为什么这是不可能的。 - 这是不可取的,从那时起,您可以根据依赖规则是成功还是失败来做出选择,而在 Shake 中,您所依赖的规则的失败总是会导致您失败。
但是,Shake 确实提供了actionFinally
和actionOnException
作为构建块,它们是MonadMask
. 此外,Shake 提供了withTempFile
和withTempDir
,它们做一些与包相同的事情temporary
。最后,如果您完全处于IO
,那么liftIO
并且bracket
工作正常。
于 2015-08-20T17:58:38.657 回答