The representation of a value can be subdivided into sub-values. 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 contains either fields or 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. All of the elements of an array type must have the same type. Each field of a compound type may have a different type. The element type of an array type and the field types of a compound type never change.