(.module: [library [lux #* [abstract [equivalence (#+ Equivalence)]] [data ["." product] ["." text ["%" format]]]]] ["." /// (#+ Snapshot) ["#." time] ["#." stamp]]) (type: .public Value (Record {#version Text #snapshot Snapshot})) (def: .public equivalence (Equivalence Value) ($_ product.equivalence text.equivalence ///.equivalence )) (def: separator "-") (def: .public snapshot "SNAPSHOT") (def: .public (format (^slots [#version #snapshot])) (%.Format Value) (case snapshot #///.Local version (#///.Remote stamp) (let [(^slots [#///stamp.time #///stamp.build]) stamp] (%.format (text.replaced ..snapshot (///time.format time) version) ..separator (%.nat build)))))