Representation of storable types (arrays of primitive data). Array
dimensions are given as a list of integers, starting with outermost array
level. Primitive types are treated as zero-dimensional arrays.

Untyped representation of storable data. Arrays have a length argument that
gives the number of elements on the outermost array level. If the data list
is shorter than this length, the missing elements are taken to have
undefined value. If the data list is longer, the excessive elements are just
ignored.

Array represented as (nested) list. If a is a storable type and n is a
type-level natural number, n :> a represents an array of n elements of
type a. For example, D3:>D10:>Int is a 3 by 10 array of integers. Arrays
constructed using fromList are guaranteed not to contain too many elements
in any dimension. If there are too few elements in any dimension, the missing
ones are taken to have undefined value.