`хочу` цель по умолчанию, модульным способом

#default #modularity #shake-build-system

#По умолчанию #модульность #встряхнуть-построить-систему

Вопрос:

Я хотел бы создать многоразовое Rules a приложение, которое одновременно устанавливает некоторые правила, а также want является целью по умолчанию, то есть чем-то, что должно быть создано, если пользователь не указал цель.

Проблема заключается в том, чтобы сделать его автономным и многоразовым. Например, я мог бы написать верхний main уровень, который делает что-то вроде этого:

 main :: IO () main = shakeArgsWith shakeOptions{ shakeFiles = outDir } flags $ flags targets -gt; pure $ Just $ do  ...  reusableRules  ...  want targets  

Но это неправильно, так как это приведет к созданию как запрошенного пользователем, так targets и по умолчанию targets из reusableRules .

В качестве альтернативы, я могу убедиться, main что want s будут отброшены, если targets доступно:

 main :: IO () main = shakeArgsWith shakeOptions{ shakeFiles = outDir } flags $ flags targets -gt; pure $ Just $ do  (if null targets then id else rules -gt; want targets gt;gt; withoutAction rules) $ do  ...  reusableRules  ...  

Но для этого потребуется ввести пользовательский код main . В качестве альтернативы я мог бы перейти targets к reusableRules тому, чтобы он мог обернуться в withoutActions «если targets null «, но опять же, для этого требуется некоторый пользовательский код main для вычисления targets (что, если shakeArgs вместо этого используется shakeArgsWith ?)

В идеале я хотел бы иметь возможность либо добавить цель по умолчанию, которая переопределяется командной строкой, либо использовать Rules эффект, чтобы получить доступ reusableRules к какому-либо «окружению targets «. Возможно ли что-либо из этого?