{-# LANGUAGE MagicHash, UnboxedTuples #-} module Fleet.Array.MutArray where import GHC.Exts import GHC.Base data MutArray a = MA (MutableArray# RealWorld a) newMutArray :: Int -> a -> IO (MutArray a) newMutArray :: forall a. Int -> a -> IO (MutArray a) newMutArray (I# Int# n) a x = (State# RealWorld -> (# State# RealWorld, MutArray a #)) -> IO (MutArray a) forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, MutArray a #)) -> IO (MutArray a)) -> (State# RealWorld -> (# State# RealWorld, MutArray a #)) -> IO (MutArray a) forall a b. (a -> b) -> a -> b $ \State# RealWorld s -> case Int# -> a -> State# RealWorld -> (# State# RealWorld, MutableArray# RealWorld a #) forall a d. Int# -> a -> State# d -> (# State# d, MutableArray# d a #) newArray# Int# n a x State# RealWorld s of (# State# RealWorld s', MutableArray# RealWorld a arr #) -> (# State# RealWorld s', MutableArray# RealWorld a -> MutArray a forall a. MutableArray# RealWorld a -> MutArray a MA MutableArray# RealWorld a arr #) readMutArray :: MutArray a -> Int -> IO a readMutArray :: forall a. MutArray a -> Int -> IO a readMutArray (MA MutableArray# RealWorld a arr) (I# Int# i) = (State# RealWorld -> (# State# RealWorld, a #)) -> IO a forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO (MutableArray# RealWorld a -> Int# -> State# RealWorld -> (# State# RealWorld, a #) forall d a. MutableArray# d a -> Int# -> State# d -> (# State# d, a #) readArray# MutableArray# RealWorld a arr Int# i) writeMutArray :: MutArray a -> Int -> a -> IO () writeMutArray :: forall a. MutArray a -> Int -> a -> IO () writeMutArray (MA MutableArray# RealWorld a arr) (I# Int# i) a x = (State# RealWorld -> (# State# RealWorld, () #)) -> IO () forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO (\State# RealWorld s -> (# MutableArray# RealWorld a -> Int# -> a -> State# RealWorld -> State# RealWorld forall d a. MutableArray# d a -> Int# -> a -> State# d -> State# d writeArray# MutableArray# RealWorld a arr Int# i a x State# RealWorld s, () #)) cloneMutArray :: MutArray a -> Int -> Int -> IO (MutArray a) cloneMutArray :: forall a. MutArray a -> Int -> Int -> IO (MutArray a) cloneMutArray (MA MutableArray# RealWorld a arr) (I# Int# off) (I# Int# len) = (State# RealWorld -> (# State# RealWorld, MutArray a #)) -> IO (MutArray a) forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a IO ((State# RealWorld -> (# State# RealWorld, MutArray a #)) -> IO (MutArray a)) -> (State# RealWorld -> (# State# RealWorld, MutArray a #)) -> IO (MutArray a) forall a b. (a -> b) -> a -> b $ \State# RealWorld s -> case MutableArray# RealWorld a -> Int# -> Int# -> State# RealWorld -> (# State# RealWorld, MutableArray# RealWorld a #) forall d a. MutableArray# d a -> Int# -> Int# -> State# d -> (# State# d, MutableArray# d a #) cloneMutableArray# MutableArray# RealWorld a arr Int# off Int# len State# RealWorld s of (# State# RealWorld s', MutableArray# RealWorld a arr' #) -> (# State# RealWorld s', MutableArray# RealWorld a -> MutArray a forall a. MutableArray# RealWorld a -> MutArray a MA MutableArray# RealWorld a arr' #) sizeofMutArray :: MutArray a -> Int sizeofMutArray :: forall a. MutArray a -> Int sizeofMutArray (MA MutableArray# RealWorld a x) = Int# -> Int I# (MutableArray# RealWorld a -> Int# forall d a. MutableArray# d a -> Int# sizeofMutableArray# MutableArray# RealWorld a x)