{-# LANGUAGE CPP #-} module Data.HashTable.Internal.Array ( MutableArray , newArray , readArray , writeArray ) where import Control.Monad.ST #ifdef BOUNDS_CHECKING import qualified Data.Vector.Mutable as M import Data.Vector.Mutable (MVector) #else import qualified Data.Primitive.Array as M import Data.Primitive.Array (MutableArray) #endif #ifdef BOUNDS_CHECKING type MutableArray s a = MVector s a newArray :: Int -> a -> ST s (MutableArray s a) newArray = M.replicate readArray :: MutableArray s a -> Int -> ST s a readArray = M.read writeArray :: MutableArray s a -> Int -> a -> ST s () writeArray = M.write #else newArray :: Int -> a -> ST s (MutableArray s a) newArray :: forall a s. Int -> a -> ST s (MutableArray s a) newArray = forall (m :: * -> *) a. PrimMonad m => Int -> a -> m (MutableArray (PrimState m) a) M.newArray readArray :: MutableArray s a -> Int -> ST s a readArray :: forall s a. MutableArray s a -> Int -> ST s a readArray = forall (m :: * -> *) a. PrimMonad m => MutableArray (PrimState m) a -> Int -> m a M.readArray writeArray :: MutableArray s a -> Int -> a -> ST s () writeArray :: forall s a. MutableArray s a -> Int -> a -> ST s () writeArray = forall (m :: * -> *) a. PrimMonad m => MutableArray (PrimState m) a -> Int -> a -> m () M.writeArray #endif