我想将 temporary
package与Shake一起使用,但这需要Action
具有MonadMask
的实例,而该实例不存在。为什么Shake不提供这样的实例?
最佳答案
有两个原因:
Action
基于延续单子(monad),而您不能为延续单子(monad)实现MonadMask
。请参阅this blog post,以了解为什么这是不可能的。 但是,Shake确实提供了
actionFinally
和actionOnException
作为构建块,这是MonadMask
中可用功能的受限变体。此外,Shake提供了withTempFile
和withTempDir
,它们与temporary
包具有某些相同的功能。最后,如果您完全使用IO
,那么liftIO
和bracket
可以正常工作。关于haskell - 为什么Shake不为Action提供MonadMask实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32125187/