我想将temporary
package与Shake一起使用,但需要Action
才能拥有MonadMask
的实例,但这个实例已丢失。为什么Shake没有提供这样的实例?
答案 0 :(得分:5)
有两个原因:
Action
基于一个延续monad,你不能为延续monad实现MonadMask
。请参阅this blog post,了解为何无法做到这一点。但是,Shake确实提供了actionFinally
和actionOnException
作为构建块,这是MonadMask
中可用功能的限制变体。此外,Shake提供了withTempFile
和withTempDir
,它们与temporary
包做了一些相同的事情。最后,如果您完全在IO
,liftIO
和bracket
工作正常。