[Haskell-cafe] How to use STArray?

Remi Turk rturk at science.uva.nl
Sat Aug 27 11:31:36 EDT 2005


On Fri, Aug 26, 2005 at 08:27:43PM -0400, ChrisK wrote:
> to figure out since there was no Data.Array.ST.Lazy.  Does anyone know
> why it was left out?  I'll put a note on the HaskellTwo page about that...

Some time ago when I wanted a lazy hashtable I came up with this,
which, after minimal testing, seemed to work:
(Lazy STRef's are implemented in exactly the same way, btw)

\begin{code}

{-# OPTIONS -fglasgow-exts #-}
module MArrayLazyST (
    STArray,
    module Data.Array.MArray
) where

import Control.Monad.ST.Lazy
import Data.Array.Base
import Data.Array.ST
import Data.Array.MArray

instance MArray (STArray s) e (ST s) where
    newArray range e = strictToLazyST (newArray range e)
    newArray_ range = strictToLazyST (newArray_ range)
    unsafeRead arr i = strictToLazyST (unsafeRead arr i)
    unsafeWrite arr i e = strictToLazyST (unsafeWrite arr i e)

\end{code}


Cheers,
Remi

-- 
Nobody can be exactly like me. Even I have trouble doing it.


More information about the Haskell-Cafe mailing list