В Shake есть способ запустить Action
из Rules
:
action :: Action a -> Rules ()
Но я не смог найти функцию, которая возвращает результат Action
, а именно:
actionWithResult :: Action a -> Rules a
Как так?
В 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
должен выполняться до завершения Rules
. Однако с Actions a -> Rules ()
все в порядке, потому что на самом деле он запускается не тогда, а позже.