... This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. ... If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. (.require [library [lux (.except) [abstract [equivalence (.only Equivalence)] [monad (.only do)]] [control ["<>" parser]] [data ["[0]" product] ["[0]" text ["<[1]>" \\parser]] [format ["[0]" xml (.only XML) ["<[1]>" \\parser (.only Parser)]]]]]] ["[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)))