diff options
Diffstat (limited to 'stdlib/source/program')
-rw-r--r-- | stdlib/source/program/aedifex.lux | 34 | ||||
-rw-r--r-- | stdlib/source/program/aedifex/dependency/status.lux | 35 |
2 files changed, 56 insertions, 13 deletions
diff --git a/stdlib/source/program/aedifex.lux b/stdlib/source/program/aedifex.lux index 41d7f9b2f..cfa106407 100644 --- a/stdlib/source/program/aedifex.lux +++ b/stdlib/source/program/aedifex.lux @@ -82,18 +82,27 @@ (format (%.text name) " := " (%.text repo))) (dictionary.entries options))])) +(def: succeed! + (IO Any) + (\ program.default exit shell.normal)) + +(def: (fail! error) + (-> Text (IO Any)) + (exec + (log! error) + (\ program.default exit shell.error))) + (def: (command action) (All [a] (-> (Promise (Try a)) (IO Any))) (exec (do promise.monad - [outcome action - #let [code (case outcome - (#try.Failure error) - (exec (log! error) - shell.normal) - - (#try.Success _) - shell.error)]] - (promise.future (\ program.default exit code))) + [outcome action] + (promise.future + (case outcome + (#try.Success _) + ..succeed! + + (#try.Failure error) + (..fail! error)))) (\ io.monad wrap []))) (program: [{[profile operation] /cli.command}] @@ -101,7 +110,7 @@ [?console console.default] (case (try\map console.async ?console) (#try.Failure error) - (wrap (log! error)) + (..fail! error) (#try.Success console) (case operation @@ -114,8 +123,7 @@ [?profile (/input.read io.monad file.default profile)] (case ?profile (#try.Failure error) - (exec (log! error) - (\ program.default exit shell.error)) + (..fail! error) (#try.Success profile) (let [program (program.async program.default)] @@ -169,7 +177,7 @@ [?watcher watch.default] (case ?watcher (#try.Failure error) - (wrap (log! error)) + (..fail! error) (#try.Success watcher) (..command diff --git a/stdlib/source/program/aedifex/dependency/status.lux b/stdlib/source/program/aedifex/dependency/status.lux new file mode 100644 index 000000000..fa62f643e --- /dev/null +++ b/stdlib/source/program/aedifex/dependency/status.lux @@ -0,0 +1,35 @@ +(.module: + [lux #* + [abstract + [equivalence (#+ Equivalence)]] + [data + ["." sum] + ["." product]]] + ["." /// #_ + ["#." hash (#+ Hash SHA-1 MD5)]]) + +(type: #export Status + #Unverified + (#Partial (Either (Hash SHA-1) + (Hash MD5))) + (#Verified (Hash SHA-1) (Hash MD5))) + +(structure: any-equivalence + (Equivalence Any) + + (def: (= _ _) + true)) + +(def: #export equivalence + (Equivalence Status) + ($_ sum.equivalence + ..any-equivalence + ($_ sum.equivalence + ///hash.equivalence + ///hash.equivalence + ) + ($_ product.equivalence + ///hash.equivalence + ///hash.equivalence + ) + )) |