discretio
Translation status: العربية reader-locale proof. Code fences render through the ar pipeline; prose is canonical Latin.
Declares a tagged union with variant payloads.
Aliases: union, sum type
Syntax: discretio <name> [<type-params>] <block>
Category#
type
Related#
Examples#
radix/corpus/discretio/discretio.fab (canonical · keyword)#
Declares a tagged union with variant payloads.
# =============================================================================
# discretio — Declares a tagged union with variant payloads.
# =============================================================================
#
# What this teaches:
# • Tagged union declaration — `discretio <name> { <Variant> { fields }, ... }` declares a sum type with named variants.
# • Payload variants — variants can carry named fields (like structs) or be unit variants with no payload.
# • Multiple field variants — a variant can have many fields of different types.
#
# Common mistakes:
# • Confusing `discretio` with `genus` — `discretio` is a tagged union with variants, not a record with fixed fields; use `discerne` (not field access) to unpack values.
#
# See also: ordo, discerne, finge
# =============================================================================
# discretio — tagged union declarations
#
# discretio Nomen {
# Varians { <type> <field>, ... }
# Alius
# }
#
# GRAMMAR:
# discretioDecl :← 'discretio' ident '{' variantDecl* '}'
# variant :← ident ('{' fieldDecl (',' fieldDecl)* '}')?
#
# EXPECTED OUTPUT:
# discretiones paratae
# Discretio with payload variants
union Exitus {
Bonum { string nuntius }
Malum { string causa }
}
# Discretio with mixed unit and payload variants
# (Finis is a unit variant — no payload fields)
union Actum {
Pulsus { int x, int y }
Clavis { string clavis }
Finis
}
# Discretio with many fields per variant
union Figura {
Rectum { int x, int y, int latitudo, int altitudo }
Circulus { int cx, int cy, int radius }
Punctum { int x, int y }
}
main {
print "discretiones paratae"
}Expected output:
discretiones paratae