สหภาพแยก
Translation status: ภาษาไทย reader-locale proof. Term names and code fences follow the th-TH pack; supporting prose may still be English.
Declares a tagged union with variant payloads.
Aliases: union, sum type
Syntax: สหภาพแยก <name> [<type-params>] <block>
Category#
type
Related#
Examples#
radix/corpus/discretio/discretio.fab (canonical · keyword)#
Declares a tagged union with variant payloads.
# =============================================================================
# สหภาพแยก — Declares a tagged union with variant payloads.
# =============================================================================
#
# What this teaches:
# • Tagged union declaration — `สหภาพแยก <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 `สหภาพแยก` with `ชนิด` — `สหภาพแยก` is a tagged union with variants, not a record with fixed fields; use `แยก` (not field access) to unpack values.
#
# See also: ลำดับ, แยก, สร้าง
# =============================================================================
# สหภาพแยก — tagged union declarations
#
# สหภาพแยก Nomen {
# Varians { <type> <field>, ... }
# Alius
# }
#
# GRAMMAR:
# discretioDecl :← 'สหภาพแยก' 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