# Expressiveness of Build System Operation DSLs

Operations correspond to what kinds of tasks you can express in your build system’s DSL. Certain types of operations correspond to certain properties, particularly when it comes to dependency expression. are other operations that correspond to properties. One type of failure strategy that’s not well represented here is retry as that would be a cyclic CFG rather than a simple DAG. See Build Systems in terms of DAGs and CFGs.

• Applicative tasks express depencencies that can be determined statically, without computation.
• Monadic tasks express dynamic dependencies; dependencies that can only be determined by running a computation.
• Interestingly, this is not the same as glob patterns. Glob patterns are rules of a static structure.
• lookupInfo >>= compileWithInfo, however, is not a static rule.
• if/then/else conditionals and onFailure failure strategy.
• Fully dynamic onFailure strategy that can inspect the failure object to determine the response.