module Data.Prim.Array
( MutableArray
, newArray
, readArray
, writeArray
) where
import Control.Monad.Prim
import Data.Typeable (Typeable)
import GHC.Exts
data MutableArray s a = MutableArray (MutableArray# s a) deriving Typeable
instance Eq (MutableArray s a) where
MutableArray a == MutableArray b = sameMutableArray# a b
newArray :: Int -> a -> Prim s (MutableArray s a)
newArray (I# i) a = prim $ \ s -> case newArray# i a s of
(# s', array #) -> (# s', MutableArray array #)
readArray :: MutableArray s a -> Int -> Prim s a
readArray (MutableArray array) (I# i) = prim $ readArray# array i
writeArray :: MutableArray s a -> Int -> a -> Prim s ()
writeArray (MutableArray array) (I# i) a =
prim $ \ s -> case writeArray# array i a s of
s' -> (# s', () #)