(.using [library [lux (.except) [abstract [equivalence (.only Equivalence)] [monad (.only do)]] [control ["<>" parser (.only) ["<[0]>" xml (.only Parser)]]] [data ["[0]" text ["<[1]>" \\parser]] ["[0]" product] [format ["[0]" xml (.only XML)]]]]] ["[0]" // ["[1][0]" time (.only Time)] ["[1][0]" build (.only Build)]]) (type: .public Stamp (Record [#time Time #build Build])) (def: .public equivalence (Equivalence Stamp) (all product.equivalence //time.equivalence //build.equivalence )) (def: xml.Tag ["" "timestamp"]) (def: time_format (-> Time XML) (|>> //time.format {xml.#Text} list {xml.#Node .. xml.attributes})) (def: .public (format (open "_[0]")) (-> Stamp (List XML)) (list (..time_format _#time) (//build.format _#build))) (def: time_parser (Parser Time) (<| (.node ) (.then //time.parser) .text)) (def: .public parser (Parser Stamp) (<>.and (.somewhere ..time_parser) (.somewhere //build.parser)))