首页 > 解决方案 > 为什么没有`Action a -> Rules a`功能

问题描述

在 Shake 中有一种方法可以运行Actionfrom Rules

action :: Action a -> Rules ()

但我找不到返回结果的函数Action,即:

actionWithResult :: Action a -> Rules a

怎么来的?

标签: shake-build-system

解决方案


原因是Rules先运行,直到完成,然后Action运行 ​​s - 所以它有点分阶段编程。action所做的只是记录一个,以便Action稍后执行。您必须首先运行所有规则的原因Rules是它可以收集所有可能的可用规则类型,因为它们都可用于所有Actions。

一旦您了解了 staging,就不可能拥有Action a -> Rules a,因为这意味着运行 anAction并将结果返回到Rules,因此Action必须在Rules完成之前运行。但是,Actions a -> Rules ()这很好,因为它实际上并没有在那时运行,而是稍后运行。


推荐阅读