[Haskell-cafe] Mutable but boxed arrays?

Henning Thielemann lemming at henning-thielemann.de
Thu Sep 6 08:25:04 EDT 2007

On Wed, 5 Sep 2007, Jonathan Cast wrote:

> On Wed, 2007-09-05 at 20:37 +0200, Henning Thielemann wrote:
>> Can someone explain me, why there are arrays with mutable but boxed 
>> elements? I thought that boxing is only needed for lazy evaluation. 
>> However if I access an element of an array that is the result of a 
>> sequence of in-place updates, all updates must be executed in order to 
>> get the final value. That is, the first access to an element of such an 
>> array evaluates all elements of the array

I was imprecise here. With 'access' I meant an access to the array outside 
of the ST monad, that is on the result of runSTArray.

> No.  A mutable array is mutable only in a monad (IO or ST), and updates
> happen within that monad.  But they don't evaluate the values in the
> array at all, either the old value or the new one.  They just move
> pointers to expressions in the heap around.

I'll see, if I understand it.

   do writeArray arr 0 2
      x <- readArray arr 0
      writeArray arr 0 (x+x)

If 'arr' is an STArray, the 'arr' will contain the unevaluated expression 
"2+2" as zeroth element and with type STUArray it will contain the 
evaluated "4" ?

More information about the Haskell-Cafe mailing list