Declares a tagged union with variant payloads.
Aliases: union, sum type
Syntax: discretio <name> [<type-params>] <block>
Category
type
Related
Examples
examples/corpus/discretio/discretio.fab (canonical · keyword)
Declares a tagged union with variant payloads.
# 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
discretio Exitus {
Bonum { textus nuntius }
Malum { textus causa }
}
# Discretio with mixed unit and payload variants
discretio Actum {
Pulsus { numerus x, numerus y }
Clavis { textus clavis }
# unit variant (no payload fields)
Finis
}
# Discretio with many fields per variant
discretio Figura {
Rectum { numerus x, numerus y, numerus latitudo, numerus altitudo }
Circulus { numerus cx, numerus cy, numerus radius }
Punctum { numerus x, numerus y }
}
incipit {
nota "discretiones paratae"
}Expected output:
discretiones paratae