Standardbibliothek
Antra::Value
import Antra::ValueLow-level constructors and inspectors for tagged runtime values.
Überblick#
Fuer Low-Level-Arbeit mit Runtime-Wertformen wie Tagged Arrays, Tagged Sets und Tagged Maps.
Das Paket ist bewusst technischer als normale Fach-APIs wie Duration: Es ist
fuer Faelle gedacht, in denen ein Package oder eine interne Hilfsfunktion einen
Tagged Value gezielt konstruieren oder inspizieren muss.
Ein kleiner Einstieg sieht so aus:
import Antra::Value as Value
my age = Value.tagged("years", 42)
my html = Value.tagged_string("html", "<b>Ada</b>")
my pair = Value.tagged_array("Pair", [1, 2])
my seen = Value.tagged_set("Seen", %<1, 2, 3>)
my user = Value.tagged_map("User", %{name: "Ada"})
println(Value.tag(age))
println(Value.data(html))
println(Value.data(pair))
println(Value.data(seen))
println(Value.tag(user))Die kleine API ist absichtlich nah an der Runtime-Form:
Value.tagged(tag, value)fuer Tagged Arrays mit genau einem WertValue.tagged_string(tag, text)fuer Tagged Strings mit String-PayloadValue.tagged_array(tag, items)fuer vollen Array-PayloadValue.tagged_set(tag, items)fuer Tagged SetsValue.tagged_map(tag, map)fuer Tagged MapsValue.tag(value)zum Auslesen des TagsValue.data(value)zum Auslesen des rohen PayloadsValue.untag(value)zum Entfernen genau einer Tagged-HuelleValue.with_tag(tag, value)zum Wiederverpacken eines passenden Payloads als Tagged Value
Bei Tagged Sets liefert Value.data(...) dabei bewusst wieder ein normales Set
zurueck, nicht die interne Hash-Storageform.
Value.untag(...) arbeitet semantisch etwas grober als Value.data(...):
Value.untag(%Ok[42])liefert42Value.untag(html"<b>ok</b>")liefert den nackten StringValue.untag(%Seen<1, 2, 3>)liefert ein normales Set
Value.with_tag(...) waehlt die Runtime-Form passend zum Payload:
- Array -> Tagged Array
- Set -> Tagged Set
- Map -> Tagged Map
- String -> Tagged Array mit String-Payload
- sonstige Skalare -> Tagged Array mit Einzelelement
Tagged Strings haben dabei keinen eigenen separaten Runtime-Typ: ein Literal wie
html"<b>Ada</b>" und Value.tagged_string("html", "<b>Ada</b>") landen
beide auf derselben Tagged-Array-Form mit genau einem String-Wert.
Fuer normalen Fachcode ist Pattern Matching meist die lesbarere Form. Value
ist vor allem dann sinnvoll, wenn ein Package Tagged Values bewusst baut,
entpackt oder als Datenform weiterreicht. Die kleine Laufzeitstufe ist in
spec_tagged_value_api.md beschrieben.
Funktionen#
fn data(value)Returns the raw payload of a tagged array, tagged set or tagged map.
fn tag(value)Returns the tag of a tagged array, tagged set or tagged map, otherwise undef.
fn tagged(tag, value)Builds a single-value tagged array at runtime.
fn tagged_array(tag, items)Builds a tagged array from a full array payload.
fn tagged_map(tag, data)Builds a tagged map from a plain map payload.
fn tagged_set(tag, items)Builds a tagged set from a full set payload.
fn tagged_string(tag, text)Builds a tagged string value with a string payload.
fn untag(value)Removes one tagged wrapper and returns the semantic payload.
fn with_tag(tag, value)Applies a tag to a payload using the matching tagged runtime form.
