syntax for arrays and parametric types -------------------------------------- This is the array syntax: // declaring a variable of an array type int#[6] numbers = [1, 1, 2, 3, 5, 8]; // equivalent syntaxes two-dimensional arrays int#[2,2] matrix = [[1, 0], [0, 1]]; int#[2]#[2] same = [[1, 0], [0, 1]]; // accessing elements int a = numbers#[0]; numbers#[1] = 123; // equivalent int b1 = matrix#[0,0]; int b2 = matrix#[0]#[0]; // equivalent int c1 = same#[0,0]; int c2 = same#[0]#[0]; This is the syntax for type parameters: // T must be a completely known type or list[T] won't be completely known typedef list[T] = ( count list_size; T[list_size]^ elements; ); // T may be an incomplete type. ptrlist[T] will always be completely known typedef ptrlist[T] = ( count list_size; T^[list_size]^ pointers; ); list[int] a; // both work with incomplete types () add_to_list[T](T^ elem, ptrlist[T] elements); () add_to_list[T](T^ elem, list[T^] elements); // covariance/contravariance?