CONCEPT
        unions

DESCRIPTION
        Unions types are a declaration at compile time that a variable,
        function parameter or function return value can be one of
        several types.

        Except for type checks using #pragma rtt_checks they have no
        impact at runtime. There is no runtime union type, the concrete
        value type is one of the possibilities of the union type.

        Union types have no type names for themselves, they are declared
        anonymously with the declaration of the variable, function
        parameter or return type:

            int|string var;
            int|float fun(object|closure f);

        When using union types as array member types they must be
        enclosed with < >:

            <int|string>* arr;    /* An array of ints and strings. */
            int*|string*  arr;    /* Either an array of ints or
                                     an array of strings.          */

            /* There must be a whitespace between two consecutive <
               to be not confused with the << operator:            */
            < <int|string>*|object >* arr;

