{-# LANGUAGE MagicHash, NoImplicitPrelude, UnboxedTuples #-}
module GHC.Event.Arr
(
Arr(..)
, new
, size
, read
, write
) where
import GHC.Base (($))
import GHC.Prim (MutableArray#, RealWorld, newArray#, readArray#,
sizeofMutableArray#, writeArray#)
import GHC.Types (IO(..), Int(..))
data Arr a = Arr (MutableArray# RealWorld a)
new :: a -> Int -> IO (Arr a)
new defval (I# n#) = IO $ \s0# ->
case newArray# n# defval s0# of (# s1#, marr# #) -> (# s1#, Arr marr# #)
size :: Arr a -> Int
size (Arr a) = I# (sizeofMutableArray# a)
read :: Arr a -> Int -> IO a
read (Arr a) (I# n#) = IO $ \s0# ->
case readArray# a n# s0# of (# s1#, val #) -> (# s1#, val #)
write :: Arr a -> Int -> a -> IO ()
write (Arr a) (I# n#) val = IO $ \s0# ->
case writeArray# a n# val s0# of s1# -> (# s1#, () #)