# Union --- ```text Union[CONTAINER | TRANSIENT] Collection[VAR_TREE_LIST; TYPE.SYMBOL]] ``` # Alias ```text Tag[Collection[VAR_TREE_LIST; TYPE.SYMBOL]] `alias Union[[CONTAINER] Collection[VAR_TREE_LIST; TYPE.SYMBOL]] ``` ## Tag Example ```text u : Tag[I64.a; I64.b; I64.c] $ (.c : 5) # u { .c {[c] c ... } { ... } // default } ``` # Operators ## ``take` # Transient Unions Can only be retuned from functions and operations. The inner value must be moved out ## Alias ```text Result[Generic.T] `alias Union[[TRANSIENT] Generic.T.value; Error.error] Option[Generic.T] `alias Union[[TRANSIENT] Generic.T.some; Void.none] Next[Generic.T] `alias Union[[TRANSIENT] Generic.T.iter; Void.done] Next_result[Generic.T] `alias Union[[TRANSIENT] Generic.T.value; Error.error; Void.done] Next_option[Generic.T] `alias Union[[TRANSIENT] Generic.T.some; Void.none; Void.done] ``` ## Default Operation When a transient union is assigned the first type specified is moved out. If no match is used and if the type is not the first specified a result with an error is returned ```text z : x / y // Result[...] z // is value if y is not zero ``` ## Operators ### \`value ### \`error ### \`some ### \`none