diff options
author | Eduardo Julian | 2021-01-28 20:14:11 -0400 |
---|---|---|
committer | Eduardo Julian | 2021-01-28 20:14:11 -0400 |
commit | 1797521191746640e761cc1b4973d46b8c403dee (patch) | |
tree | 197b60bf206f75c32a930b85910101c6d4c0d0f9 /stdlib/source/program/aedifex/artifact | |
parent | 43d28326ad59c74439b96343cc8f619ed7d90231 (diff) |
Implemented arithmetic right-shift in terms of logic right-shift.
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/program/aedifex/artifact/snapshot/version.lux | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/stdlib/source/program/aedifex/artifact/snapshot/version.lux b/stdlib/source/program/aedifex/artifact/snapshot/version.lux new file mode 100644 index 000000000..905523bd0 --- /dev/null +++ b/stdlib/source/program/aedifex/artifact/snapshot/version.lux @@ -0,0 +1,71 @@ +(.module: + [lux (#- Type) + [abstract + [equivalence (#+ Equivalence)] + [monad (#+ do)]] + [control + ["<>" parser + ["<.>" xml (#+ Parser)] + ["<.>" text]]] + [data + ["." product] + ["." text] + [format + ["." xml (#+ XML)]]]] + ["." /// #_ + ["#." type (#+ Type)] + ["#." time (#+ Time)]]) + +(type: #export Version + {#extension Type + #value Text + #updated Time}) + +(def: #export equivalence + (Equivalence Version) + ($_ product.equivalence + text.equivalence + text.equivalence + ///time.equivalence + )) + +(template [<definition> <tag>] + [(def: <definition> xml.Tag ["" <tag>])] + + [<extension> "extension"] + [<value> "value"] + [<updated> "updated"] + + [<snapshot_version> "snapshotVersion"] + ) + +(def: (format_text tag value) + (-> xml.Tag Text XML) + (|> value #xml.Text list (#xml.Node tag xml.attributes))) + +(def: #export (format (^slots [#extension #value #updated])) + (-> Version XML) + (<| (#xml.Node ..<snapshot_version> xml.attributes) + (list (..format_text ..<extension> extension) + (..format_text ..<value> value) + (..format_text ..<updated> (///time.format updated))))) + +(def: (sub tag parser) + (All [a] (-> xml.Tag (Parser a) (Parser a))) + (do <>.monad + [_ (<xml>.node tag)] + (<xml>.children parser))) + +(def: (text tag) + (-> xml.Tag (Parser Text)) + (..sub tag <xml>.text)) + +(def: #export parser + (Parser Version) + (<| (..sub ..<snapshot_version>) + ($_ <>.and + (<xml>.somewhere (..text ..<extension>)) + (<xml>.somewhere (..text ..<value>)) + (<xml>.somewhere (<text>.embed ///time.parser + (..text ..<updated>))) + ))) |