Construct an array with the specified bounds and containing values for
given indices within these bounds.
The array is undefined (i.e. bottom) if any index in the list is out
of bounds. The Haskell 2010 Report further specifies that if any two
associations in the list have the same index, the value at that index
is undefined (i.e. bottom). However in GHC's implementation, the value
at such an index is the value part of the last association with that
index in the list.
Because the indices must be checked for these errors,
array is
strict in the bounds argument and in the indices of the association
list, but non-strict in the values. Thus, recurrences such as the
following are possible:
a = array (1,100) ((1,1) : [(i, i * a!(i-1)) | i <- [2..100]])
Not every index within the bounds of the array need appear in the
association list, but the values associated with indices that do not
appear will be undefined (i.e. bottom).
If, in any dimension, the lower bound is greater than the upper bound,
then the array is legal, but empty. Indexing an empty array always
gives an array-bounds error, but
bounds still yields the bounds
with which the array was constructed.