(.module: [library [lux "*" [abstract ["[0]" monad {"+" [do]}]] [control [try {"+" [Try]}] [concurrency ["[0]" async {"+" [Async]}]]] [data [text ["%" format {"+" [format]}]]] [world ["[0]" file {"+" [Path]}] ["[0]" console {"+" [Console]}]]]] ["[0]" /// "_" [command {"+" [Command]}] ["[1]" profile] ["[1][0]" action {"+" [Action]}]]) (def: (clean_files! fs root) (-> (file.System Async) Path (Async (Try Any))) (let [! ///action.monad] (|> root (# fs directory_files) (# ! each (monad.each ! (# fs delete))) (# ! conjoint)))) (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 (value@ ///.#target profile)] ? (# fs directory? target) _ (let [! ///action.monad] (if ? (loop [root target] (do ! [_ (..clean_files! fs root) _ (|> root (# fs sub_directories) (# ! each (monad.each ! recur)) (# ! conjoint))] (# fs delete root))) (# ! in [])))] (console.write_line (..success target) console)))