(.module: [library [lux #* [abstract [equivalence (#+ Equivalence)] [monad (#+ do)]] [control ["<>" parser ["<.>" xml (#+ Parser)] ["<.>" text]]] [data ["." product] [format ["." xml (#+ XML)]]]]] ["." // #_ ["#." time (#+ Time)] ["#." build (#+ Build)]]) (type: .public Stamp (Record {#time Time #build Build})) (def: .public equivalence (Equivalence Stamp) ($_ 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 (^slots [#time #build])) (-> 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)))