(.module: [library [lux (#- Name) [abstract [equivalence (#+ Equivalence)] [monad (#+ do)]] [control ["<>" parser ["." cli (#+ Parser)]]] [data ["." sum] ["." product] ["." 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') ))))