(.using [library [lux (.except) [abstract ["[0]" monad (.only do)]] [control [try (.only Try)] [concurrency ["[0]" async (.only Async)]]] [data [text ["%" format (.only format)]]] [world ["[0]" file (.only Path)] ["[0]" console (.only Console)]]]] ["[0]" /// [command (.only Command)] ["[1]" profile] ["[1][0]" action (.only Action)]]) (def: (clean_files! fs root) (-> (file.System Async) Path (Async (Try Any))) (do [! ///action.monad] [_ (|> root (# fs directory_files) (# ! each (monad.each ! (# fs delete))) (# ! conjoint))] (in []))) (def: .public success (-> ///.Target Text) (|>> (format "Successfully cleaned target directory: "))) (def: .public (do! console fs profile) (-> (Console Async) (file.System Async) (Command Any)) (do [! async.monad] [.let [target (the ///.#target profile)] ? (# fs directory? target) _ (let [! ///action.monad] (if ? (loop (again [root target]) (do ! [_ (..clean_files! fs root) _ (|> root (# fs sub_directories) (# ! each (monad.each ! again)) (# ! conjoint))] (# fs delete root))) (# ! in [])))] (console.write_line (..success target) console)))