(.module: [lux #* [abstract ["." equivalence (#+ Equivalence)]] [control ["." try (#+ Try) ("#\." functor)] [parser ["<.>" xml]]] [data ["." binary (#+ Binary)] [format ["." xml (#+ XML)]] [collection [set (#+ Set)]]]] ["." // #_ [dependency (#+ Dependency)] ["/" profile] ["#." hash (#+ Hash SHA-1 MD5)] ["#." pom]]) (type: #export Origin #Local #Remote) (structure: any-equivalence (Equivalence Any) (def: (= _ _) true)) (def: origin-equivalence (Equivalence Origin) ($_ equivalence.sum ..any-equivalence ..any-equivalence)) (type: #export Package {#origin Origin #library Binary #pom XML #sha-1 (Hash SHA-1) #md5 (Hash MD5)}) (template [ ] [(def: #export (-> Package Bit) (|>> (get@ #origin) (\ ..origin-equivalence = )))] [local? #Local] [remote? #Remote] ) (def: #export (local pom library) (-> XML Binary Package) {#origin #Local #library library #pom pom #sha-1 (//hash.sha-1 library) #md5 (//hash.md5 library)}) (def: #export dependencies (-> Package (Try (Set Dependency))) (|>> (get@ #pom) (.run //pom.parser) (try\map (get@ #/.dependencies)))) (def: #export equivalence (Equivalence Package) ($_ equivalence.product ..origin-equivalence binary.equivalence xml.equivalence //hash.equivalence //hash.equivalence ))