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

∪

Declares a type alias.

Translation status: ภาษาไทย reader-locale proof. Term names and code fences follow the th-TH pack; supporting prose may still be English.

Inline value unions and แยก on สหภาพแยก variants.

Syntax: ชนิดนามแฝง <name> = <type> ∪ <type>

Category#

type

Examples#

radix/corpus/unio/unio.fab (canonical · operator-group)#

Inline value unions and แยก on สหภาพแยก variants.

# =============================================================================
# ∪ — Inline value unions and แยก on สหภาพแยก variants.
# =============================================================================
#
# What this teaches:
#   • Inline unions — `∪` creates ad-hoc union types without a full `สหภาพแยก` declaration
#   • Tagged variants — `สหภาพแยก` with `กรณี` pattern matching for structured payloads
#
# Common mistakes:
#   • confusing unio (ad-hoc union ชนิดนามแฝง A ∪ B) with ∪ used as a set operator — unio is a type-level construct
#
# See also: ชนิดนามแฝง, แยก, สหภาพแยก
# =============================================================================




# Inline value unions and แยก on สหภาพแยก
#
# ชนิดนามแฝง Valor = จํานวน ∪ ข้อความ models a non-nullable ad-hoc union.
# สหภาพแยก + แยก handles tagged variants with payloads.
#
# GRAMMAR:
#   typeAlias :← 'ชนิดนามแฝง' ident '=' typeExpr ('∪' typeExpr)*
#   แยก  :← 'แยก' expr '{' 'กรณี' variant pattern block ... '}'
#
# EXPECTED OUTPUT:
#   42, "salve", "n: 7", "t: faber"
#
# BACKEND: Inline-union `แยก` enum lowering gap on Rust (whitelist: unio/unio.fab).

type Valor = int ∪ string

union Forma {
    Numerus { int v },
    Textus { string v }
}

fn describe(Forma f) → string {
    match f {
        case Numerus const v { return "n: §"(v) }
        case Textus const v { return "t: §"(v) }
    }
}

main {
    # --- Ad-hoc inline union values ---

    const Valor a ← 42
    const Valor b ← "salve"
    print a
    print b

    # --- Tagged สหภาพแยก variants via สร้าง ---

    print describe(variant Numerus { v = 7 } ∷ Forma)
    print describe(variant Textus { v = "faber" } ∷ Forma)
}

Expected output:

42
salve
n: 7
t: faber