Change the API of MArray to allow resizable arrays
authorSimon Marlow <simonmar@microsoft.com>
Wed, 9 Aug 2006 10:05:48 +0000 (10:05 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Wed, 9 Aug 2006 10:05:48 +0000 (10:05 +0000)
commit784a581b3f998ef512bf3625df45a7c9e35349d8
treea8fb08c3274637871191b933550fde1978d76490
parent7b0cffd78aa072d0147f1eec5022106b066da9bd
Change the API of MArray to allow resizable arrays
See #704

The MArray class doesn't currently allow a mutable array to change its
size, because of the pure function

  bounds :: (HasBounds a, Ix i) => a i e -> (i,i)

This patch removes the HasBounds class, and adds

  getBounds :: (MArray a e m, Ix i) => a i e -> m (i,i)

to the MArray class, and

  bounds :: (IArray a e, Ix i) => a i e -> (i,i)

to the IArray class.

The reason that bounds had to be incorporated into the IArray class is
because I couldn't make DiffArray work without doing this.  DiffArray
acts as a layer converting an MArray into an IArray, and there was no
way (that I could find) to define an instance of HasBounds for
DiffArray.
libraries/base/Data/Array/Base.hs
libraries/base/Data/Array/Diff.hs
libraries/base/Data/Array/IArray.hs
libraries/base/Data/Array/IO/Internals.hs
libraries/base/Data/Array/MArray.hs
libraries/base/Data/Array/Storable.hs