(.module: [library [lux {"-" [Name]} [abstract [equivalence {"+" [Equivalence]}] [monad {"+" [do]}]] [control ["<>" parser ["[0]" cli {"+" [Parser]}]]] [data ["[0]" sum] ["[0]" product] ["[0]" text]]]] [// [repository [identity {"+" [Identity]}]] ["/" profile {"+" [Name]}]]) (type: .public Compilation (Variant {#Build} {#Test})) (implementation: any_equivalence (Equivalence Any) (def: (= reference subject) true)) (def: compilation_equivalence (Equivalence Compilation) (sum.equivalence ..any_equivalence ..any_equivalence)) (def: compilation (Parser Compilation) (<>.or (cli.this "build") (cli.this "test"))) (type: .public Command (Variant {#Version} {#Clean} {#POM} {#Dependencies} {#Install} {#Deploy Text Identity} {#Compilation Compilation} {#Auto Compilation})) (def: .public equivalence (Equivalence Command) ($_ sum.equivalence ... #Version ..any_equivalence ... #Clean ..any_equivalence ... #POM ..any_equivalence ... #Dependencies ..any_equivalence ... #Install ..any_equivalence ... #Deploy ($_ product.equivalence text.equivalence text.equivalence text.equivalence) ... #Compilation ..compilation_equivalence ... #Auto ..compilation_equivalence)) (def: command' (Parser Command) ($_ <>.or (cli.this "version") (cli.this "clean") (cli.this "pom") (cli.this "deps") (cli.this "install") (<>.after (cli.this "deploy") (<>.and cli.any (<>.and cli.any cli.any))) ..compilation (<>.after (cli.this "auto") ..compilation) )) (def: .public command (Parser [(List Name) Command]) (<>.rec (function (_ command) ($_ <>.either (<>.after (cli.this "with") (do <>.monad [head cli.any [tail command] command] (in [{.#Item head tail} command]))) (# <>.monad each (|>> [(list /.default)]) ..command') ))))