การเรนเดอร์th-TH

สหภาพแยก

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

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