Почему нет функции «Действие a -> Правила a»

В Shake есть способ запустить Action из Rules:

action :: Action a -> Rules ()

Но я не смог найти функцию, которая возвращает результат Action, а именно:

actionWithResult :: Action a -> Rules a

Как так?


person Neil Mitchell    schedule 21.03.2021    source источник


Ответы (1)


Причина в том, что Rules запускается сначала до завершения, а затем запускаются Action, так что это несколько поэтапное программирование. Все, что делает action, это записывает Action для последующего выполнения. Причина, по которой вам нужно сначала запустить все Rules, заключается в том, что он может собрать все возможные типы доступных правил, поскольку все они доступны для всех Action.

Как только вы поймете постановку, невозможно иметь Action a -> Rules a, потому что это подразумевает запуск Action и возврат результата в Rules, поэтому Action должен выполняться до завершения Rules. Однако с Actions a -> Rules () все в порядке, потому что на самом деле он запускается не тогда, а позже.

person Neil Mitchell    schedule 21.03.2021