(.module: [library [lux (#- Name Type) [abstract [equivalence (#+ Equivalence)] [monad (#+ do)]] [control ["<>" parser ["<.>" xml (#+ Parser)] ["<.>" text]]] [data ["." sum] [format ["." xml (#+ XML)]]]]] ["." / #_ ["#." stamp (#+ Stamp)]]) (type: .public Snapshot (Variant #Local (#Remote Stamp))) (implementation: any_equivalence (Equivalence Any) (def: (= _ _) true)) (def: .public equivalence (Equivalence Snapshot) ($_ sum.equivalence ..any_equivalence /stamp.equivalence )) (template [ ] [(def: xml.Tag ["" ])] [ "localCopy"] [ "snapshot"] ) (def: local_copy_value "true") (def: local_copy_format XML (#xml.Node xml.attributes (list (#xml.Text ..local_copy_value)))) (def: local_copy_parser (Parser Any) (<| (.node ..) (.then (.this ..local_copy_value)) .text)) (def: .public (format snapshot) (-> Snapshot XML) (<| (#xml.Node .. xml.attributes) (case snapshot #Local (list ..local_copy_format) (#Remote stamp) (/stamp.format stamp)))) (def: .public parser (Parser Snapshot) (<| (.node ) (<>.or ..local_copy_parser /stamp.parser)))