(.require [library [lux (.except local) [abstract [equivalence (.only Equivalence)]] [control ["[0]" try (.only Try) (.use "[1]#[0]" functor)]] [data ["[0]" sum] ["[0]" product] ["[0]" binary (.only Binary)] [text [encoding ["[0]" utf8]]] [format ["[0]" xml (.only XML) ["<[1]>" \\parser]]] [collection [set (.only Set)]]]]] ["[0]" // ["/" profile] ["[1][0]" hash] ["[1][0]" pom] [dependency (.only Dependency) ["[1][0]" status (.only Status)]] [repository [remote (.only Address)] ["[1][0]" origin (.only Origin)]]]) (type .public Package (Record [#origin Origin #library [Binary Status] #pom [XML Binary Status]])) (with_template [ ] [(def .public ( package) (-> Package Bit) (case (the #origin package) { _} true _ false))] [local? //origin.#Local] [remote? //origin.#Remote] ) (def .public (local pom library) (-> XML Binary Package) [#origin {//origin.#Local ""} #library [library {//status.#Verified (//hash.sha-1 library) (//hash.md5 library)}] #pom (let [binary_pom (|> pom (at xml.codec encoded) (at utf8.codec encoded))] [pom binary_pom {//status.#Verified (//hash.sha-1 binary_pom) (//hash.md5 binary_pom)}])]) (def .public dependencies (-> Package (Try (Set Dependency))) (|>> (the #pom) product.left list (.result //pom.parser) (try#each (the /.#dependencies)))) (def .public repositories (-> Package (Try (Set Address))) (|>> (the #pom) product.left list (.result //pom.parser) (try#each (the /.#repositories)))) (def .public equivalence (Equivalence Package) (all product.equivalence //origin.equivalence (all product.equivalence binary.equivalence //status.equivalence) (all product.equivalence xml.equivalence binary.equivalence //status.equivalence) ))