我想将 temporary packageShake一起使用,但这需要Action具有MonadMask的实例,而该实例不存在。为什么Shake不提供这样的实例?

最佳答案

有两个原因:

  • 这是不可能的,因为Action基于延续单子(monad),而您不能为延续单子(monad)实现MonadMask。请参阅this blog post,以了解为什么这是不可能的。
  • 这是不可取的,因为这样您可以根据依赖规则是成功还是失败来做出选择,而在Shake中,依赖的规则失败总是会导致失败。

  • 但是,Shake确实提供了actionFinallyactionOnException作为构建块,这是MonadMask中可用功能的受限变体。此外,Shake提供了withTempFilewithTempDir,它们与temporary包具有某些相同的功能。最后,如果您完全使用IO,那么liftIObracket可以正常工作。

    关于haskell - 为什么Shake不为Action提供MonadMask实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32125187/

    10-09 02:53