(.module: [lux #* [abstract ["." monad (#+ do)]] [control ["." try (#+ Try)] [security ["!" capability]] [concurrency ["." promise (#+ Promise)]]] [world ["." file (#+ Path File Directory)] ["." console (#+ Console)]]] ["." /// #_ [command (#+ Command)] ["#" profile] ["#." action (#+ Action)]]) (def: (clean_files! root) (-> (Directory Promise) (Promise (Try Any))) (do {! ///action.monad} [nodes (: (Promise (Try (List (File Promise)))) (!.use (\ root files) [])) _ (monad.map ! (function (_ node) (!.use (\ node delete) [])) nodes)] (wrap []))) (def: #export success "Success") (def: #export failure "Failure: No 'target' defined for clean-up.") (def: #export (do! console fs profile) (-> (Console Promise) (file.System Promise) (Command Any)) (case (get@ #///.target profile) (#.Some target) (do {! ///action.monad} [target (: (Promise (Try (Directory Promise))) (!.use (\ fs directory) target)) _ (loop [root target] (do ! [_ (..clean_files! root) subs (: (Promise (Try (List (Directory Promise)))) (!.use (\ root directories) [])) _ (monad.map ! recur subs)] (!.use (\ root discard) [])))] (console.write_line ..success console)) #.None (console.write_line ..failure console)))