The representation of a value (except for those of built-in types) can be subdivided into subvalues. These sub-values are either named, in which case, they are called fields, or they are accessed by an indexing expression, in which case, they are called array elements. Types that describe values composed of array elements are array types. Types that describe values composed of fields are compound types. A value cannot contain both fields and array elements, although a field of a compound type can be an array type and an array element can be a compound type.
Array elements and fields are typed, and these types never change. All of the elements in an array shall have the same type. Each field of a compound type can have a different type.