module Data.StrictVector.Mutable
( module Data.Vector.Generic.Mutable
, MVector(..)
, IOVector, STVector
)
where
import Control.Monad.ST (RealWorld)
import Data.Vector.Generic.Mutable hiding (MVector)
import qualified Data.Vector.Generic.Mutable as VGM
import qualified Data.Vector.Mutable as VM
newtype MVector s a = MVector (VM.MVector s a)
instance VGM.MVector MVector a where
basicLength (MVector v) = VGM.basicLength v
basicUnsafeSlice n m (MVector v) = MVector $ VGM.basicUnsafeSlice n m v
basicOverlaps (MVector v1) (MVector v2) = VGM.basicOverlaps v1 v2
basicUnsafeNew n = fmap MVector (VGM.basicUnsafeNew n)
basicInitialize (MVector v) = basicInitialize v
basicUnsafeReplicate n x = x `seq` fmap MVector (VGM.basicUnsafeReplicate n x)
basicUnsafeRead (MVector v) n = VGM.basicUnsafeRead v n
basicUnsafeWrite (MVector v) n x = x `seq` VGM.basicUnsafeWrite v n x
basicClear (MVector v) = VGM.basicClear v
basicSet (MVector v) x = x `seq` VGM.basicSet v x
basicUnsafeCopy (MVector v1) (MVector v2) = VGM.basicUnsafeCopy v1 v2
basicUnsafeMove (MVector v1) (MVector v2) = VGM.basicUnsafeMove v1 v2
basicUnsafeGrow (MVector v) n = fmap MVector (VGM.basicUnsafeGrow v n)
type IOVector = MVector RealWorld
type STVector s = MVector s