module Data.Array.MArray.Extras
( MArray1(..)
) where
import Control.Monad.ST
import Data.Array.Base
import Data.Array.IO
import Foreign.Ptr
import Foreign.StablePtr
class Monad m => MArray1 a f m where
getBounds1 :: Ix i => a i (f e) -> m (i, i)
getNumElements1 :: Ix i => a i (f e) -> m Int
newArray1 :: Ix i => (i, i) -> f e -> m (a i (f e))
newArray1_ :: Ix i => (i, i) -> m (a i (f e))
unsafeNewArray1_ :: Ix i => (i, i) -> m (a i (f e))
unsafeRead1 :: Ix i => a i (f e) -> Int -> m (f e)
unsafeWrite1 :: Ix i => a i (f e) -> Int -> f e -> m ()
instance MArray1 IOUArray Ptr IO where
getBounds1 = getBounds
getNumElements1 = getNumElements
newArray1 = newArray
newArray1_ = newArray_
unsafeNewArray1_ = unsafeNewArray_
unsafeRead1 = unsafeRead
unsafeWrite1 = unsafeWrite
instance MArray1 IOUArray StablePtr IO where
getBounds1 = getBounds
getNumElements1 = getNumElements
newArray1 = newArray
newArray1_ = newArray_
unsafeNewArray1_ = unsafeNewArray_
unsafeRead1 = unsafeRead
unsafeWrite1 = unsafeWrite
instance MArray1 IOUArray FunPtr IO where
getBounds1 = getBounds
getNumElements1 = getNumElements
newArray1 = newArray
newArray1_ = newArray_
unsafeNewArray1_ = unsafeNewArray_
unsafeRead1 = unsafeRead
unsafeWrite1 = unsafeWrite
instance MArray1 (STUArray s) Ptr (ST s) where
getBounds1 = getBounds
getNumElements1 = getNumElements
newArray1 = newArray
newArray1_ = newArray_
unsafeNewArray1_ = unsafeNewArray_
unsafeRead1 = unsafeRead
unsafeWrite1 = unsafeWrite
instance MArray1 (STUArray s) StablePtr (ST s) where
getBounds1 = getBounds
getNumElements1 = getNumElements
newArray1 = newArray
newArray1_ = newArray_
unsafeNewArray1_ = unsafeNewArray_
unsafeRead1 = unsafeRead
unsafeWrite1 = unsafeWrite
instance MArray1 (STUArray s) FunPtr (ST s) where
getBounds1 = getBounds
getNumElements1 = getNumElements
newArray1 = newArray
newArray1_ = newArray_
unsafeNewArray1_ = unsafeNewArray_
unsafeRead1 = unsafeRead
unsafeWrite1 = unsafeWrite