[Haskell-cafe] How to use STArray?

Greg Buchholz haskell at sleepingsquirrel.org
Thu Aug 25 11:58:35 EDT 2005


Bayley, Alistair wrote:
> 
> I have a pure function which uses immutable arrays from Data.Array, but it
> spends about 95% of its time doing array updates. The arrays are used in a
> single-threaded manner (no need for the old values after an array update),

    This is probably completely off-topic, but you might also be
interested in looking at diff arrays...

http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data.Array.Diff.html

Diff arrays have an immutable interface, but rely on internal updates in
place to provide fast functional update operator //.

When the // operator is applied to a diff array, its contents are
physically updated in place. The old array silently changes its
representation without changing the visible behavior: it stores a link
to the new current array along with the difference to be applied to get
the old contents.

So if a diff array is used in a single-threaded style, i.e. after //
application the old version is no longer used, a'!'i takes O(1) time and
a // d takes O(length d). Accessing elements of older versions gradually
becomes slower. 


Greg Buchholz


More information about the Haskell-Cafe mailing list