    [NAME]
    ALL.dao.type.tuple

    [TITLE]
    Tuple Type

    [DESCRIPTION]

    A tuple is an ordered list of a fixed number of items with the same type or different
    types. Each item in a tuple can optionally have a field name.

     0.1  Definition

       1  TupleEnum ::= '(' [ Identifier '=>' ] Expression { ',' [ Identifier '=>' ] Expression } ')'
       2  TupleEnum2 ::= 'tuple' '{' [ Identifier '=>' ] Expression { ',' [ Identifier '=>' ] Expression } '}'
       3
       4  Tuple ::= TupleEnum | TupleEnum2

     0.2  Examples

       1  tup1 = ( 123, 'abc' )  # tuple with unnamed items;
       2  tup2 = ( index => 123, 'abc' )  # first item is named as "index";
       3  tup3 = tuple{ 123, name => 'abc' }
       4
       5  global __result__ = tup3
       6  global __answer__ = ( 123, 'abc' );

     0.3  Tuple Type Name

    The type names of tuples are slightly more sophisticated than type names of array, list
    or map.

       1  AnyTuple ::= 'tuple' [ '<' [ '...' ] '>' ]
       2  TupleItemType ::= [ Identifier ':' ] Type
       3  NonEmptyTupleType ::= 'tuple' '<' TupleItemType ( ',' TupleItemType )* [ '...' ] '>'
       4  TupleType ::= AnyTuple | NonEmptyTupleType

    A tuple type with '...' at the end of item type list is a variadic tuple type, which
    indicates that a tuple matching to this type may contain more items than the listed item
    types.

     0.4  Example Types

       1  tup1 :tuple<int,int> = (1, 2)
       2  tup2 :tuple<index:int,name:string> = (123, 'abc')
       3  tup3 :tuple<int,int,...> = (1, 2, 3, 'abc')