问题描述
在 Shake 中有一种方法可以从 Action
运行 Rules
:
action :: Action a -> Rules ()
但我找不到返回 Action
结果的函数,即:
actionWithResult :: Action a -> Rules a
怎么会?
解决方法
原因是 Rules
首先运行,直到完成,然后 Action
运行 - 所以它有点分阶段编程。 action
所做的只是记录一个 Action
,以便稍后执行。您必须首先运行所有 Rules
的原因是它可以收集所有可能的可用规则类型,因为它们都可用于所有 Action
。
一旦你理解了分期,就不可能有 Action a -> Rules a
,因为这意味着运行一个 Action
并将结果返回到 Rules
,所以 Action
必须在 { 之前运行{1}} 完成。但是,Rules
很好,因为它实际上并没有在那时运行,而是在以后运行。