(.module: [library [lux "*" [abstract [monad {"+" [do]}]] [control ["." exception] [concurrency ["." async {"+" [Async]}]]] [data [collection ["." set {"+" [Set]}] ["." list ("#\." mix)] ["." dictionary]] [text ["%" format]]] [world [net {"+" [URL]}] [program {"+" [Program]}] ["." file] ["." console {"+" [Console]}]]]] ["." // "_" ["#." clean] ["/#" // "_" [command {"+" [Command]}] [repository {"+" [Repository]}] ["#" profile] ["#." action {"+" [Action]}] ["#." artifact {"+" [Artifact]}] ["#." dependency {"+" [Dependency]} ["#/." resolution {"+" [Resolution]}] ["#/." deployment]]]]) (def: format (%.Format Dependency) (|>> (value@ #///dependency.artifact) ///artifact.format %.text)) (def: .public (do! console local remotes new_repository profile) (-> (Console Async) (Repository Async) (List (Repository Async)) (-> URL (Repository Async)) (Command Resolution)) (do async.monad [.let [dependencies (|> (value@ #///.dependencies profile) set.list (#.Item (value@ #///.compiler profile)))] [local_successes local_failures cache] (///dependency/resolution.all console (list local) new_repository dependencies ///dependency/resolution.empty) [remote_successes remote_failures resolution] (///dependency/resolution.all console remotes new_repository dependencies cache)] (do ///action.monad [cached (|> (dictionary.keys cache) (list\mix dictionary.lacks resolution) (///dependency/deployment.all local)) _ (console.write_line (exception.report ["Local successes" (|> local_successes (list.sorted (\ ///dependency.order <)) (exception.listing ..format))] ["Local failures" (|> local_failures (list.sorted (\ ///dependency.order <)) (exception.listing ..format))] ["Remote successes" (|> remote_successes (set.of_list ///dependency.hash) (set.difference (set.of_list ///dependency.hash local_successes)) set.list (list.sorted (\ ///dependency.order <)) (exception.listing ..format))] ["Remote failures" (|> remote_failures (list.sorted (\ ///dependency.order <)) (exception.listing ..format))]) console)] (in resolution))))