为什么Shake没有为Action提供MonadMask实例?

时间:2015-08-20 17:58:39

标签: haskell shake-build-system

我想将temporary packageShake一起使用,但需要Action才能拥有MonadMask的实例,但这个实例已丢失。为什么Shake没有提供这样的实例?

1 个答案:

答案 0 :(得分:5)

有两个原因:

  • 这是不可能的,因为Action基于一个延续monad,你不能为延续monad实现MonadMask。请参阅this blog post,了解为何无法做到这一点。
  • 这是不可取的,因为那时你可以根据依赖规则是成功还是失败来做出选择,而在Shake中,你所依赖的规则的失败应该总是导致你失败​​。

但是,Shake确实提供了actionFinallyactionOnException作为构建块,这是MonadMask中可用功能的限制变体。此外,Shake提供了withTempFilewithTempDir,它们与temporary包做了一些相同的事情。最后,如果您完全在IOliftIObracket工作正常。