∪
Declares a type alias.
Translation status: العربية reader-locale proof. Term names and code fences follow the ar pack; supporting prose may still be English.
Inline value unions and طابق on تمايز variants.
Syntax: نمط <name> = <type> ∪ <type>
Category#
type
Related#
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