primitive-checked 0.6.3.0 → 0.6.4.0
raw patch · 7 files changed
+275/−61 lines, 7 filesdep ~basedep ~primitivePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, primitive
API changes (from Hackage documentation)
+ Data.Primitive.PrimArray: MutablePrimArray :: MutableByteArray# s -> MutablePrimArray s a
+ Data.Primitive.PrimArray: PrimArray :: ByteArray# -> PrimArray a
+ Data.Primitive.PrimArray: copyMutablePrimArray :: forall m a. (HasCallStack, PrimMonad m, Prim a) => MutablePrimArray (PrimState m) a -> Int -> MutablePrimArray (PrimState m) a -> Int -> Int -> m ()
+ Data.Primitive.PrimArray: copyMutablePrimArrayToPtr :: (PrimMonad m, Prim a) => Ptr a -> MutablePrimArray PrimState m a -> Int -> Int -> m ()
+ Data.Primitive.PrimArray: copyPrimArray :: forall m a. (HasCallStack, PrimMonad m, Prim a) => MutablePrimArray (PrimState m) a -> Int -> PrimArray a -> Int -> Int -> m ()
+ Data.Primitive.PrimArray: copyPrimArrayToPtr :: (PrimMonad m, Prim a) => Ptr a -> PrimArray a -> Int -> Int -> m ()
+ Data.Primitive.PrimArray: data MutablePrimArray s a :: * -> * -> *
+ Data.Primitive.PrimArray: data PrimArray a :: * -> *
+ Data.Primitive.PrimArray: filterPrimArray :: Prim a => (a -> Bool) -> PrimArray a -> PrimArray a
+ Data.Primitive.PrimArray: filterPrimArrayA :: (Applicative f, Prim a) => (a -> f Bool) -> PrimArray a -> f PrimArray a
+ Data.Primitive.PrimArray: filterPrimArrayP :: (PrimMonad m, Prim a) => (a -> m Bool) -> PrimArray a -> m PrimArray a
+ Data.Primitive.PrimArray: foldlPrimArray :: Prim a => (b -> a -> b) -> b -> PrimArray a -> b
+ Data.Primitive.PrimArray: foldlPrimArray' :: Prim a => (b -> a -> b) -> b -> PrimArray a -> b
+ Data.Primitive.PrimArray: foldlPrimArrayM' :: (Prim a, Monad m) => (b -> a -> m b) -> b -> PrimArray a -> m b
+ Data.Primitive.PrimArray: foldrPrimArray :: Prim a => (a -> b -> b) -> b -> PrimArray a -> b
+ Data.Primitive.PrimArray: foldrPrimArray' :: Prim a => (a -> b -> b) -> b -> PrimArray a -> b
+ Data.Primitive.PrimArray: generatePrimArray :: Prim a => Int -> (Int -> a) -> PrimArray a
+ Data.Primitive.PrimArray: generatePrimArrayA :: (Applicative f, Prim a) => Int -> (Int -> f a) -> f PrimArray a
+ Data.Primitive.PrimArray: generatePrimArrayP :: (PrimMonad m, Prim a) => Int -> (Int -> m a) -> m PrimArray a
+ Data.Primitive.PrimArray: getSizeofMutablePrimArray :: (PrimMonad m, Prim a) => MutablePrimArray PrimState m a -> m Int
+ Data.Primitive.PrimArray: imapPrimArray :: (Prim a, Prim b) => (Int -> a -> b) -> PrimArray a -> PrimArray b
+ Data.Primitive.PrimArray: indexPrimArray :: forall a. Prim a => PrimArray a -> Int -> a
+ Data.Primitive.PrimArray: itraversePrimArray :: (Applicative f, Prim a, Prim b) => (Int -> a -> f b) -> PrimArray a -> f PrimArray b
+ Data.Primitive.PrimArray: itraversePrimArrayP :: (Prim a, Prim b, PrimMonad m) => (Int -> a -> m b) -> PrimArray a -> m PrimArray b
+ Data.Primitive.PrimArray: itraversePrimArray_ :: (Applicative f, Prim a) => (Int -> a -> f b) -> PrimArray a -> f ()
+ Data.Primitive.PrimArray: mapMaybePrimArray :: (Prim a, Prim b) => (a -> Maybe b) -> PrimArray a -> PrimArray b
+ Data.Primitive.PrimArray: mapMaybePrimArrayA :: (Applicative f, Prim a, Prim b) => (a -> f Maybe b) -> PrimArray a -> f PrimArray b
+ Data.Primitive.PrimArray: mapMaybePrimArrayP :: (PrimMonad m, Prim a, Prim b) => (a -> m Maybe b) -> PrimArray a -> m PrimArray b
+ Data.Primitive.PrimArray: mapPrimArray :: (Prim a, Prim b) => (a -> b) -> PrimArray a -> PrimArray b
+ Data.Primitive.PrimArray: newPrimArray :: forall m a. (HasCallStack, PrimMonad m, Prim a) => Int -> m (MutablePrimArray (PrimState m) a)
+ Data.Primitive.PrimArray: readPrimArray :: (HasCallStack, Prim a, PrimMonad m) => MutablePrimArray (PrimState m) a -> Int -> m a
+ Data.Primitive.PrimArray: replicatePrimArray :: Prim a => Int -> a -> PrimArray a
+ Data.Primitive.PrimArray: replicatePrimArrayA :: (Applicative f, Prim a) => Int -> f a -> f PrimArray a
+ Data.Primitive.PrimArray: replicatePrimArrayP :: (PrimMonad m, Prim a) => Int -> m a -> m PrimArray a
+ Data.Primitive.PrimArray: resizeMutablePrimArray :: forall m a. (HasCallStack, PrimMonad m, Prim a) => MutablePrimArray (PrimState m) a -> Int -> m (MutablePrimArray (PrimState m) a)
+ Data.Primitive.PrimArray: sameMutablePrimArray :: () => MutablePrimArray s a -> MutablePrimArray s a -> Bool
+ Data.Primitive.PrimArray: setPrimArray :: forall m a. (HasCallStack, Prim a, PrimMonad m) => MutablePrimArray (PrimState m) a -> Int -> Int -> a -> m ()
+ Data.Primitive.PrimArray: shrinkMutablePrimArray :: forall m a. (HasCallStack, PrimMonad m, Prim a) => MutablePrimArray (PrimState m) a -> Int -> m ()
+ Data.Primitive.PrimArray: sizeofMutablePrimArray :: Prim a => MutablePrimArray s a -> Int
+ Data.Primitive.PrimArray: sizeofPrimArray :: Prim a => PrimArray a -> Int
+ Data.Primitive.PrimArray: traversePrimArray :: (Applicative f, Prim a, Prim b) => (a -> f b) -> PrimArray a -> f PrimArray b
+ Data.Primitive.PrimArray: traversePrimArrayP :: (PrimMonad m, Prim a, Prim b) => (a -> m b) -> PrimArray a -> m PrimArray b
+ Data.Primitive.PrimArray: traversePrimArray_ :: (Applicative f, Prim a) => (a -> f b) -> PrimArray a -> f ()
+ Data.Primitive.PrimArray: unsafeFreezePrimArray :: PrimMonad m => MutablePrimArray PrimState m a -> m PrimArray a
+ Data.Primitive.PrimArray: unsafeThawPrimArray :: PrimMonad m => PrimArray a -> m MutablePrimArray PrimState m a
+ Data.Primitive.PrimArray: writePrimArray :: (HasCallStack, Prim a, PrimMonad m) => MutablePrimArray (PrimState m) a -> Int -> a -> m ()
+ Data.Primitive.UnliftedArray: foldrUnliftedArray :: PrimUnlifted a => (a -> b -> b) -> b -> UnliftedArray a -> b
+ Data.Primitive.UnliftedArray: mapUnliftedArray :: (PrimUnlifted a, PrimUnlifted b) => (a -> b) -> UnliftedArray a -> UnliftedArray b
- Data.Primitive.Array: cloneArray :: Array a -> Int -> Int -> Array a
+ Data.Primitive.Array: cloneArray :: HasCallStack => Array a -> Int -> Int -> Array a
- Data.Primitive.Array: cloneMutableArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> Int -> m (MutableArray (PrimState m) a)
+ Data.Primitive.Array: cloneMutableArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -> Int -> Int -> m (MutableArray (PrimState m) a)
- Data.Primitive.Array: copyArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> Array a -> Int -> Int -> m ()
+ Data.Primitive.Array: copyArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -> Int -> Array a -> Int -> Int -> m ()
- Data.Primitive.Array: copyMutableArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> MutableArray (PrimState m) a -> Int -> Int -> m ()
+ Data.Primitive.Array: copyMutableArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -> Int -> MutableArray (PrimState m) a -> Int -> Int -> m ()
- Data.Primitive.Array: freezeArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> Int -> m (Array a)
+ Data.Primitive.Array: freezeArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -> Int -> Int -> m (Array a)
- Data.Primitive.Array: indexArray :: Array a -> Int -> a
+ Data.Primitive.Array: indexArray :: HasCallStack => Array a -> Int -> a
- Data.Primitive.Array: indexArrayM :: Monad m => Array a -> Int -> m a
+ Data.Primitive.Array: indexArrayM :: HasCallStack => Monad m => Array a -> Int -> m a
- Data.Primitive.Array: newArray :: PrimMonad m => Int -> a -> m (MutableArray (PrimState m) a)
+ Data.Primitive.Array: newArray :: (HasCallStack, PrimMonad m) => Int -> a -> m (MutableArray (PrimState m) a)
- Data.Primitive.Array: readArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> m a
+ Data.Primitive.Array: readArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -> Int -> m a
- Data.Primitive.Array: thawArray :: PrimMonad m => Array a -> Int -> Int -> m (MutableArray (PrimState m) a)
+ Data.Primitive.Array: thawArray :: (HasCallStack, PrimMonad m) => Array a -> Int -> Int -> m (MutableArray (PrimState m) a)
- Data.Primitive.Array: writeArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> a -> m ()
+ Data.Primitive.Array: writeArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -> Int -> a -> m ()
- Data.Primitive.ByteArray: copyByteArray :: forall m. PrimMonad m => MutableByteArray (PrimState m) -> Int -> ByteArray -> Int -> Int -> m ()
+ Data.Primitive.ByteArray: copyByteArray :: forall m. (HasCallStack, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> ByteArray -> Int -> Int -> m ()
- Data.Primitive.ByteArray: copyMutableByteArray :: forall m. PrimMonad m => MutableByteArray (PrimState m) -> Int -> MutableByteArray (PrimState m) -> Int -> Int -> m ()
+ Data.Primitive.ByteArray: copyMutableByteArray :: forall m. (HasCallStack, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> MutableByteArray (PrimState m) -> Int -> Int -> m ()
- Data.Primitive.ByteArray: fillByteArray :: PrimMonad m => MutableByteArray (PrimState m) -> Int -> Int -> Word8 -> m ()
+ Data.Primitive.ByteArray: fillByteArray :: (HasCallStack, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> Int -> Word8 -> m ()
- Data.Primitive.ByteArray: indexByteArray :: forall a. Prim a => ByteArray -> Int -> a
+ Data.Primitive.ByteArray: indexByteArray :: forall a. (HasCallStack, Prim a) => ByteArray -> Int -> a
- Data.Primitive.ByteArray: moveByteArray :: forall m. PrimMonad m => MutableByteArray (PrimState m) -> Int -> MutableByteArray (PrimState m) -> Int -> Int -> m ()
+ Data.Primitive.ByteArray: moveByteArray :: forall m. (HasCallStack, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> MutableByteArray (PrimState m) -> Int -> Int -> m ()
- Data.Primitive.ByteArray: newAlignedPinnedByteArray :: PrimMonad m => Int -> Int -> m (MutableByteArray (PrimState m))
+ Data.Primitive.ByteArray: newAlignedPinnedByteArray :: (HasCallStack, PrimMonad m) => Int -> Int -> m (MutableByteArray (PrimState m))
- Data.Primitive.ByteArray: newByteArray :: PrimMonad m => Int -> m (MutableByteArray (PrimState m))
+ Data.Primitive.ByteArray: newByteArray :: (HasCallStack, PrimMonad m) => Int -> m (MutableByteArray (PrimState m))
- Data.Primitive.ByteArray: newPinnedByteArray :: PrimMonad m => Int -> m (MutableByteArray (PrimState m))
+ Data.Primitive.ByteArray: newPinnedByteArray :: (HasCallStack, PrimMonad m) => Int -> m (MutableByteArray (PrimState m))
- Data.Primitive.ByteArray: readByteArray :: forall m a. (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> m a
+ Data.Primitive.ByteArray: readByteArray :: forall m a. (HasCallStack, Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> m a
- Data.Primitive.ByteArray: setByteArray :: forall m a. (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> Int -> a -> m ()
+ Data.Primitive.ByteArray: setByteArray :: forall m a. (HasCallStack, Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> Int -> a -> m ()
- Data.Primitive.ByteArray: writeByteArray :: forall m a. (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> a -> m ()
+ Data.Primitive.ByteArray: writeByteArray :: forall m a. (HasCallStack, Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> a -> m ()
- Data.Primitive.SmallArray: cloneSmallArray :: SmallArray a -> Int -> Int -> SmallArray a
+ Data.Primitive.SmallArray: cloneSmallArray :: HasCallStack => SmallArray a -> Int -> Int -> SmallArray a
- Data.Primitive.SmallArray: cloneSmallMutableArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> Int -> m (SmallMutableArray (PrimState m) a)
+ Data.Primitive.SmallArray: cloneSmallMutableArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -> Int -> Int -> m (SmallMutableArray (PrimState m) a)
- Data.Primitive.SmallArray: copySmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> SmallArray a -> Int -> Int -> m ()
+ Data.Primitive.SmallArray: copySmallArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -> Int -> SmallArray a -> Int -> Int -> m ()
- Data.Primitive.SmallArray: copySmallMutableArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> SmallMutableArray (PrimState m) a -> Int -> Int -> m ()
+ Data.Primitive.SmallArray: copySmallMutableArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -> Int -> SmallMutableArray (PrimState m) a -> Int -> Int -> m ()
- Data.Primitive.SmallArray: freezeSmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> Int -> m (SmallArray a)
+ Data.Primitive.SmallArray: freezeSmallArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -> Int -> Int -> m (SmallArray a)
- Data.Primitive.SmallArray: indexSmallArray :: SmallArray a -> Int -> a
+ Data.Primitive.SmallArray: indexSmallArray :: HasCallStack => SmallArray a -> Int -> a
- Data.Primitive.SmallArray: indexSmallArrayM :: Monad m => SmallArray a -> Int -> m a
+ Data.Primitive.SmallArray: indexSmallArrayM :: (HasCallStack, Monad m) => SmallArray a -> Int -> m a
- Data.Primitive.SmallArray: newSmallArray :: PrimMonad m => Int -> a -> m (SmallMutableArray (PrimState m) a)
+ Data.Primitive.SmallArray: newSmallArray :: (HasCallStack, PrimMonad m) => Int -> a -> m (SmallMutableArray (PrimState m) a)
- Data.Primitive.SmallArray: readSmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> m a
+ Data.Primitive.SmallArray: readSmallArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -> Int -> m a
- Data.Primitive.SmallArray: thawSmallArray :: PrimMonad m => SmallArray a -> Int -> Int -> m (SmallMutableArray (PrimState m) a)
+ Data.Primitive.SmallArray: thawSmallArray :: (HasCallStack, PrimMonad m) => SmallArray a -> Int -> Int -> m (SmallMutableArray (PrimState m) a)
- Data.Primitive.SmallArray: writeSmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> a -> m ()
+ Data.Primitive.SmallArray: writeSmallArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -> Int -> a -> m ()
- Data.Primitive.UnliftedArray: cloneMutableUnliftedArray :: PrimMonad m => MutableUnliftedArray (PrimState m) a -> Int -> Int -> m (MutableUnliftedArray (PrimState m) a)
+ Data.Primitive.UnliftedArray: cloneMutableUnliftedArray :: (HasCallStack, PrimMonad m) => MutableUnliftedArray (PrimState m) a -> Int -> Int -> m (MutableUnliftedArray (PrimState m) a)
- Data.Primitive.UnliftedArray: cloneUnliftedArray :: UnliftedArray a -> Int -> Int -> UnliftedArray a
+ Data.Primitive.UnliftedArray: cloneUnliftedArray :: HasCallStack => UnliftedArray a -> Int -> Int -> UnliftedArray a
- Data.Primitive.UnliftedArray: copyMutableUnliftedArray :: PrimMonad m => MutableUnliftedArray (PrimState m) a -> Int -> MutableUnliftedArray (PrimState m) a -> Int -> Int -> m ()
+ Data.Primitive.UnliftedArray: copyMutableUnliftedArray :: (HasCallStack, PrimMonad m) => MutableUnliftedArray (PrimState m) a -> Int -> MutableUnliftedArray (PrimState m) a -> Int -> Int -> m ()
- Data.Primitive.UnliftedArray: copyUnliftedArray :: PrimMonad m => MutableUnliftedArray (PrimState m) a -> Int -> UnliftedArray a -> Int -> Int -> m ()
+ Data.Primitive.UnliftedArray: copyUnliftedArray :: (HasCallStack, PrimMonad m) => MutableUnliftedArray (PrimState m) a -> Int -> UnliftedArray a -> Int -> Int -> m ()
- Data.Primitive.UnliftedArray: freezeUnliftedArray :: PrimMonad m => MutableUnliftedArray (PrimState m) a -> Int -> Int -> m (UnliftedArray a)
+ Data.Primitive.UnliftedArray: freezeUnliftedArray :: (HasCallStack, PrimMonad m) => MutableUnliftedArray (PrimState m) a -> Int -> Int -> m (UnliftedArray a)
- Data.Primitive.UnliftedArray: indexUnliftedArray :: PrimUnlifted a => UnliftedArray a -> Int -> a
+ Data.Primitive.UnliftedArray: indexUnliftedArray :: (HasCallStack, PrimUnlifted a) => UnliftedArray a -> Int -> a
- Data.Primitive.UnliftedArray: indexUnliftedArrayM :: (Monad m, PrimUnlifted a) => UnliftedArray a -> Int -> m a
+ Data.Primitive.UnliftedArray: indexUnliftedArrayM :: (HasCallStack, Monad m, PrimUnlifted a) => UnliftedArray a -> Int -> m a
- Data.Primitive.UnliftedArray: newUnliftedArray :: (PrimMonad m, PrimUnlifted a) => Int -> a -> m (MutableUnliftedArray (PrimState m) a)
+ Data.Primitive.UnliftedArray: newUnliftedArray :: (HasCallStack, PrimMonad m, PrimUnlifted a) => Int -> a -> m (MutableUnliftedArray (PrimState m) a)
- Data.Primitive.UnliftedArray: readUnliftedArray :: (PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> m a
+ Data.Primitive.UnliftedArray: readUnliftedArray :: (HasCallStack, PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> m a
- Data.Primitive.UnliftedArray: thawUnliftedArray :: PrimMonad m => UnliftedArray a -> Int -> Int -> m (MutableUnliftedArray (PrimState m) a)
+ Data.Primitive.UnliftedArray: thawUnliftedArray :: (HasCallStack, PrimMonad m) => UnliftedArray a -> Int -> Int -> m (MutableUnliftedArray (PrimState m) a)
- Data.Primitive.UnliftedArray: unsafeNewUnliftedArray :: PrimMonad m => Int -> m (MutableUnliftedArray (PrimState m) a)
+ Data.Primitive.UnliftedArray: unsafeNewUnliftedArray :: (HasCallStack, PrimMonad m) => Int -> m (MutableUnliftedArray (PrimState m) a)
- Data.Primitive.UnliftedArray: writeUnliftedArray :: (PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> a -> m ()
+ Data.Primitive.UnliftedArray: writeUnliftedArray :: (HasCallStack, PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> a -> m ()
Files
- primitive-checked.cabal +5/−3
- src/Data/Primitive.hs +15/−0
- src/Data/Primitive/Array.hs +30/−14
- src/Data/Primitive/ByteArray.hs +27/−16
- src/Data/Primitive/PrimArray.hs +165/−0
- src/Data/Primitive/SmallArray.hs +15/−13
- src/Data/Primitive/UnliftedArray.hs +18/−15
primitive-checked.cabal view
@@ -1,5 +1,5 @@ name: primitive-checked-version: 0.6.3.0+version: 0.6.4.0 synopsis: primitive functions with bounds-checking homepage: https://github.com/andrewthad/primitive-checked#readme bug-reports: https://github.com/andrewthad/primitive-checked/issues@@ -37,12 +37,14 @@ hs-source-dirs: src build-depends:- base >=4.7 && <5- , primitive == 0.6.3.*+ base >=4.9 && <5+ , primitive == 0.6.4.* exposed-modules:+ Data.Primitive Data.Primitive.Array Data.Primitive.SmallArray Data.Primitive.ByteArray+ Data.Primitive.PrimArray Data.Primitive.UnliftedArray reexported-modules: Control.Monad.Primitive
+ src/Data/Primitive.hs view
@@ -0,0 +1,15 @@+module Data.Primitive (+ module Data.Primitive.Types,+ module Data.Primitive.Array,+ module Data.Primitive.ByteArray,+ module Data.Primitive.Addr,+ module Data.Primitive.PrimArray,+ module Data.Primitive.UnliftedArray+) where++import Data.Primitive.Types+import Data.Primitive.Array+import Data.Primitive.ByteArray+import Data.Primitive.Addr+import Data.Primitive.PrimArray+import Data.Primitive.UnliftedArray
src/Data/Primitive/Array.hs view
@@ -23,38 +23,40 @@ import Control.Monad.Primitive (PrimMonad,PrimState) import Control.Exception (throw, ArrayException(..))+import qualified Data.List as L import "primitive" Data.Primitive.Array (Array,MutableArray) import qualified "primitive" Data.Primitive.Array as A+import GHC.Stack -check :: String -> Bool -> a -> a+check :: HasCallStack => String -> Bool -> a -> a check _ True x = x-check errMsg False _ = throw (IndexOutOfBounds $ "Data.Primitive.Array.Checked." ++ errMsg)+check errMsg False _ = throw (IndexOutOfBounds $ "Data.Primitive.Array.Checked." ++ errMsg ++ "\n" ++ prettyCallStack callStack) -newArray :: PrimMonad m => Int -> a -> m (MutableArray (PrimState m) a)+newArray :: (HasCallStack, PrimMonad m) => Int -> a -> m (MutableArray (PrimState m) a) newArray n x = check "newArray: negative size" (n>=0) (A.newArray n x) -readArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> m a+readArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -> Int -> m a readArray marr i = do let siz = A.sizeofMutableArray marr check "readArray: index of out bounds" (i>=0 && i<siz) (A.readArray marr i) -writeArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> a -> m ()+writeArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -> Int -> a -> m () writeArray marr i x = do let siz = A.sizeofMutableArray marr check "writeArray: index of out bounds" (i>=0 && i<siz) (A.writeArray marr i x) -indexArray :: Array a -> Int -> a+indexArray :: HasCallStack => Array a -> Int -> a indexArray arr i = check "indexArray: index of out bounds" (i>=0 && i<A.sizeofArray arr) (A.indexArray arr i) -indexArrayM :: Monad m => Array a -> Int -> m a+indexArrayM :: HasCallStack => Monad m => Array a -> Int -> m a indexArrayM arr i = check "indexArrayM: index of out bounds" (i>=0 && i<A.sizeofArray arr) (A.indexArrayM arr i) freezeArray- :: PrimMonad m+ :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -- ^ source -> Int -- ^ offset -> Int -- ^ length@@ -66,7 +68,7 @@ (A.freezeArray marr s l) thawArray- :: PrimMonad m+ :: (HasCallStack, PrimMonad m) => Array a -- ^ source -> Int -- ^ offset -> Int -- ^ length@@ -75,7 +77,7 @@ (s>=0 && l>=0 && (s+l)<=A.sizeofArray arr) (A.thawArray arr s l) -copyArray :: PrimMonad m+copyArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -- ^ destination array -> Int -- ^ offset into destination array -> Array a -- ^ source array@@ -89,7 +91,7 @@ (A.copyArray marr s1 arr s2 l) -copyMutableArray :: PrimMonad m+copyMutableArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -- ^ destination array -> Int -- ^ offset into destination array -> MutableArray (PrimState m) a -- ^ source array@@ -99,12 +101,26 @@ copyMutableArray marr1 s1 marr2 s2 l = do let siz1 = A.sizeofMutableArray marr1 let siz2 = A.sizeofMutableArray marr2- check "copyMutableArray: index range of out bounds"+ let explain = L.concat+ [ "[dst size: "+ , show siz1+ , ", dst off: " + , show s1+ , ", src size: "+ , show siz2+ , ", src off: " + , show s2+ , ", copy size: "+ , show l+ , "]"+ ]+ check ("copyMutableArray: index range of out bounds " ++ explain) (s1>=0 && s2>=0 && l>=0 && (s2+l)<=siz2 && (s1+l)<=siz1) (A.copyMutableArray marr1 s1 marr2 s2 l) -cloneArray :: Array a -- ^ source array+cloneArray :: HasCallStack+ => Array a -- ^ source array -> Int -- ^ offset into destination array -> Int -- ^ number of elements to copy -> Array a@@ -112,7 +128,7 @@ (s>=0 && l>=0 && (s+l)<=A.sizeofArray arr) (A.cloneArray arr s l) -cloneMutableArray :: PrimMonad m+cloneMutableArray :: (HasCallStack, PrimMonad m) => MutableArray (PrimState m) a -- ^ source array -> Int -- ^ offset into destination array -> Int -- ^ number of elements to copy
src/Data/Primitive/ByteArray.hs view
@@ -43,42 +43,54 @@ import Data.Word (Word8) import "primitive" Data.Primitive.ByteArray (ByteArray,MutableByteArray) import qualified "primitive" Data.Primitive.ByteArray as A+import GHC.Stack -check :: String -> Bool -> a -> a+check :: HasCallStack => String -> Bool -> a -> a check _ True x = x-check errMsg False _ = throw (IndexOutOfBounds $ "Data.Primitive.SmallArray.Checked." ++ errMsg)+check errMsg False _ = throw (IndexOutOfBounds $ "Data.Primitive.ByteArray." ++ errMsg ++ "\n" ++ prettyCallStack callStack) elementSizeofByteArray :: forall a. Prim a => Proxy a -> ByteArray -> Int elementSizeofByteArray _ arr = div (A.sizeofByteArray arr) (sizeOf (undefined :: a)) +elementSizeofByteArrayPermissive :: forall a. Prim a => Proxy a -> ByteArray -> Int+elementSizeofByteArrayPermissive _ arr =+ div (A.sizeofByteArray arr) (sizeOf (undefined :: a)) + + ( if rem (A.sizeofByteArray arr) (sizeOf (undefined :: a)) == 0+ then 0+ else 1+ ) + elementSizeofMutableByteArray :: forall s a. Prim a => Proxy a -> MutableByteArray s -> Int elementSizeofMutableByteArray _ arr = div (A.sizeofMutableByteArray arr) (sizeOf (undefined :: a)) -newByteArray :: PrimMonad m => Int -> m (MutableByteArray (PrimState m))+newByteArray :: (HasCallStack, PrimMonad m) => Int -> m (MutableByteArray (PrimState m)) newByteArray n = check "newByteArray: negative size" (n>=0) (A.newByteArray n) -newPinnedByteArray :: PrimMonad m => Int -> m (MutableByteArray (PrimState m))+newPinnedByteArray :: (HasCallStack, PrimMonad m) => Int -> m (MutableByteArray (PrimState m)) newPinnedByteArray n = check "newPinnedByteArray: negative size" (n>=0) (A.newPinnedByteArray n) -newAlignedPinnedByteArray :: PrimMonad m => Int -> Int -> m (MutableByteArray (PrimState m))+newAlignedPinnedByteArray :: (HasCallStack, PrimMonad m) => Int -> Int -> m (MutableByteArray (PrimState m)) newAlignedPinnedByteArray n k = check "newAlignedPinnedByteArray: negative size" (n>=0) (A.newAlignedPinnedByteArray n k) -readByteArray :: forall m a. (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> m a+readByteArray :: forall m a. (HasCallStack, Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> m a readByteArray marr i = do let siz = elementSizeofMutableByteArray (Proxy :: Proxy a) marr check "readByteArray: index of out bounds" (i>=0 && i<siz) (A.readByteArray marr i) -writeByteArray :: forall m a. (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> a -> m ()+writeByteArray :: forall m a. (HasCallStack, Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> a -> m () writeByteArray marr i x = do let siz = elementSizeofMutableByteArray (Proxy :: Proxy a) marr check "writeByteArray: index of out bounds" (i>=0 && i<siz) (A.writeByteArray marr i x) -indexByteArray :: forall a. Prim a => ByteArray -> Int -> a-indexByteArray arr i = check "indexSmallArray: index of out bounds"- (i>=0 && i< elementSizeofByteArray (Proxy :: Proxy a) arr)+-- This one is a little special. We allow users to index past the+-- end of the byte array as long as the content grabbed is within+-- the last machine word of the byte array.+indexByteArray :: forall a. (HasCallStack, Prim a) => ByteArray -> Int -> a+indexByteArray arr i = check "indexByteArray: index of out bounds"+ (i>=0 && i< elementSizeofByteArrayPermissive (Proxy :: Proxy a) arr) (A.indexByteArray arr i) -copyByteArray :: forall m. PrimMonad m+copyByteArray :: forall m. (HasCallStack, PrimMonad m) => MutableByteArray (PrimState m) -- ^ destination array -> Int -- ^ offset into destination array -> ByteArray -- ^ source array@@ -92,7 +104,7 @@ (A.copyByteArray marr s1 arr s2 l) -copyMutableByteArray :: forall m. PrimMonad m+copyMutableByteArray :: forall m. (HasCallStack, PrimMonad m) => MutableByteArray (PrimState m) -- ^ destination array -> Int -- ^ offset into destination array -> MutableByteArray (PrimState m) -- ^ source array@@ -106,7 +118,7 @@ (s1>=0 && s2>=0 && l>=0 && (s2+l)<=siz2 && (s1+l)<=siz1) (A.copyMutableByteArray marr1 s1 marr2 s2 l) -moveByteArray :: forall m. PrimMonad m+moveByteArray :: forall m. (HasCallStack, PrimMonad m) => MutableByteArray (PrimState m) -- ^ destination array -> Int -- ^ offset into destination array -> MutableByteArray (PrimState m) -- ^ source array@@ -120,7 +132,7 @@ (s1>=0 && s2>=0 && l>=0 && (s2+l)<=siz2 && (s1+l)<=siz1) (A.moveByteArray marr1 s1 marr2 s2 l) -fillByteArray :: PrimMonad m+fillByteArray :: (HasCallStack, PrimMonad m) => MutableByteArray (PrimState m) -- ^ array to fill -> Int -- ^ offset into array -> Int -- ^ number of bytes to fill@@ -128,13 +140,12 @@ -> m () fillByteArray = setByteArray -setByteArray :: forall m a. (Prim a, PrimMonad m)+setByteArray :: forall m a. (HasCallStack, Prim a, PrimMonad m) => MutableByteArray (PrimState m) -- ^ array to fill -> Int -- ^ offset into array -> Int -- ^ number of values to fill -> a -- ^ value to fill with -> m ()-{-# INLINE setByteArray #-} setByteArray dst doff sz x = check "copyMutableByteArray: index range of out bounds" (doff>=0 && (doff+sz)<=elementSizeofMutableByteArray (Proxy :: Proxy a) dst)
+ src/Data/Primitive/PrimArray.hs view
@@ -0,0 +1,165 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE MagicHash #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE UnboxedTuples #-}++{-# OPTIONS_GHC -Wall #-}++module Data.Primitive.PrimArray+ ( -- * Types+ PrimArray(..)+ , MutablePrimArray(..)+ -- * Allocation+ , newPrimArray+ , resizeMutablePrimArray+#if __GLASGOW_HASKELL__ >= 710+ , shrinkMutablePrimArray+#endif+ -- * Element Access+ , readPrimArray+ , writePrimArray+ , indexPrimArray+ -- * Freezing and Thawing+ , A.unsafeFreezePrimArray+ , A.unsafeThawPrimArray+ -- * Block Operations+ , copyPrimArray+ , copyMutablePrimArray+#if __GLASGOW_HASKELL__ >= 708+ , A.copyPrimArrayToPtr -- this is wrong. fix this+ , A.copyMutablePrimArrayToPtr -- this is wrong. fix this+#endif+ , setPrimArray+ -- * Information+ , A.sameMutablePrimArray+ , A.getSizeofMutablePrimArray+ , A.sizeofMutablePrimArray+ , A.sizeofPrimArray+ -- * Folding+ , A.foldrPrimArray+ , A.foldrPrimArray'+ , A.foldlPrimArray+ , A.foldlPrimArray'+ , A.foldlPrimArrayM'+ -- * Effectful Folding+ , A.traversePrimArray_+ , A.itraversePrimArray_+ -- * Map/Create+ , A.mapPrimArray+ , A.imapPrimArray+ , A.generatePrimArray+ , A.replicatePrimArray+ , A.filterPrimArray+ , A.mapMaybePrimArray+ -- * Effectful Map/Create+ -- $effectfulMapCreate+ -- ** Lazy Applicative+ , A.traversePrimArray+ , A.itraversePrimArray+ , A.generatePrimArrayA+ , A.replicatePrimArrayA+ , A.filterPrimArrayA+ , A.mapMaybePrimArrayA+ -- ** Strict Primitive Monadic+ , A.traversePrimArrayP+ , A.itraversePrimArrayP+ , A.generatePrimArrayP+ , A.replicatePrimArrayP+ , A.filterPrimArrayP+ , A.mapMaybePrimArrayP+ ) where++import Control.Monad.Primitive (PrimMonad,PrimState)+import Control.Exception (throw, ArrayException(..))+import Data.Primitive.Types (Prim)+import "primitive" Data.Primitive.PrimArray (PrimArray,MutablePrimArray)+import qualified "primitive" Data.Primitive.PrimArray as A+import GHC.Stack++check :: HasCallStack => String -> Bool -> a -> a+check _ True x = x+check errMsg False _ = throw (IndexOutOfBounds $ "Data.Primitive.PrimArray." ++ errMsg ++ "\n" ++ prettyCallStack callStack)++newPrimArray :: forall m a. (HasCallStack, PrimMonad m, Prim a) => Int -> m (MutablePrimArray (PrimState m) a)+newPrimArray n = check "newPrimArray: negative size" (n>=0) (A.newPrimArray n)++resizeMutablePrimArray :: forall m a. (HasCallStack, PrimMonad m, Prim a)+ => MutablePrimArray (PrimState m) a+ -> Int -- ^ new size+ -> m (MutablePrimArray (PrimState m) a)+resizeMutablePrimArray marr n = check "resizeMutablePrimArray: negative size" (n>=0) (A.resizeMutablePrimArray marr n)++#if __GLASGOW_HASKELL__ >= 710+shrinkMutablePrimArray :: forall m a. (HasCallStack, PrimMonad m, Prim a)+ => MutablePrimArray (PrimState m) a+ -> Int -- ^ new size+ -> m ()+shrinkMutablePrimArray marr n = do+ old <- A.getSizeofMutablePrimArray marr+ check "shrinkMutablePrimArray: illegal new size" (n>=0 && n <= old) (A.shrinkMutablePrimArray marr n)+#endif++readPrimArray :: (HasCallStack, Prim a, PrimMonad m) => MutablePrimArray (PrimState m) a -> Int -> m a+readPrimArray marr i = do+ siz <- A.getSizeofMutablePrimArray marr+ check "readPrimArray: index of out bounds" (i>=0 && i<siz) (A.readPrimArray marr i)++writePrimArray ::+ (HasCallStack, Prim a, PrimMonad m)+ => MutablePrimArray (PrimState m) a -- ^ array+ -> Int -- ^ index+ -> a -- ^ element+ -> m ()+writePrimArray marr i x = do+ siz <- A.getSizeofMutablePrimArray marr+ check "writePrimArray: index of out bounds" (i>=0 && i<siz) (A.writePrimArray marr i x)++indexPrimArray :: forall a. Prim a => PrimArray a -> Int -> a+indexPrimArray arr i = check "indexPrimArray: index of out bounds"+ (i>=0 && i< A.sizeofPrimArray arr)+ (A.indexPrimArray arr i)++setPrimArray :: forall m a. (HasCallStack, Prim a, PrimMonad m)+ => MutablePrimArray (PrimState m) a -- ^ array to fill+ -> Int -- ^ offset into array+ -> Int -- ^ number of values to fill+ -> a -- ^ value to fill with+ -> m ()+setPrimArray dst doff sz x = do+ arrSz <- A.getSizeofMutablePrimArray dst+ check "copyMutablePrimArray: index range of out bounds"+ (doff>=0 && (doff+sz)<=arrSz)+ (A.setPrimArray dst doff sz x)++copyMutablePrimArray :: forall m a. (HasCallStack, PrimMonad m, Prim a)+ => MutablePrimArray (PrimState m) a -- ^ destination array+ -> Int -- ^ offset into destination array+ -> MutablePrimArray (PrimState m) a -- ^ source array+ -> Int -- ^ offset into source array+ -> Int -- ^ number of elements to copy+ -> m ()+copyMutablePrimArray marr1 s1 marr2 s2 l = do+ siz1 <- A.getSizeofMutablePrimArray marr1+ siz2 <- A.getSizeofMutablePrimArray marr2+ check "copyMutablePrimArray: index range of out bounds"+ (s1>=0 && s2>=0 && l>=0 && (s2+l)<=siz2 && (s1+l)<=siz1)+ (A.copyMutablePrimArray marr1 s1 marr2 s2 l)++copyPrimArray :: forall m a.+ (HasCallStack, PrimMonad m, Prim a)+ => MutablePrimArray (PrimState m) a -- ^ destination array+ -> Int -- ^ offset into destination array+ -> PrimArray a -- ^ source array+ -> Int -- ^ offset into source array+ -> Int -- ^ number of elements to copy+ -> m ()+copyPrimArray marr s1 arr s2 l = do+ siz <- A.getSizeofMutablePrimArray marr+ check "copyPrimArray: index range of out bounds"+ (s1>=0 && s2>=0 && l>=0 && (s2+l)<= A.sizeofPrimArray arr && (s1+l)<=siz)+ (A.copyPrimArray marr s1 arr s2 l)+
src/Data/Primitive/SmallArray.hs view
@@ -24,36 +24,37 @@ import Control.Exception (throw, ArrayException(..)) import "primitive" Data.Primitive.SmallArray (SmallArray,SmallMutableArray) import qualified "primitive" Data.Primitive.SmallArray as A+import GHC.Stack -check :: String -> Bool -> a -> a+check :: HasCallStack => String -> Bool -> a -> a check _ True x = x-check errMsg False _ = throw (IndexOutOfBounds $ "Data.Primitive.SmallArray.Checked." ++ errMsg)+check errMsg False _ = throw (IndexOutOfBounds $ "Data.Primitive.SmallArray.Checked." ++ errMsg ++ "\n" ++ prettyCallStack callStack) -newSmallArray :: PrimMonad m => Int -> a -> m (SmallMutableArray (PrimState m) a)+newSmallArray :: (HasCallStack, PrimMonad m) => Int -> a -> m (SmallMutableArray (PrimState m) a) newSmallArray n x = check "newSmallArray: negative size" (n>=0) (A.newSmallArray n x) -readSmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> m a+readSmallArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -> Int -> m a readSmallArray marr i = do let siz = A.sizeofSmallMutableArray marr check "readSmallArray: index of out bounds" (i>=0 && i<siz) (A.readSmallArray marr i) -writeSmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> a -> m ()+writeSmallArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -> Int -> a -> m () writeSmallArray marr i x = do let siz = A.sizeofSmallMutableArray marr check "writeSmallArray: index of out bounds" (i>=0 && i<siz) (A.writeSmallArray marr i x) -indexSmallArray :: SmallArray a -> Int -> a+indexSmallArray :: HasCallStack => SmallArray a -> Int -> a indexSmallArray arr i = check "indexSmallArray: index of out bounds" (i>=0 && i<A.sizeofSmallArray arr) (A.indexSmallArray arr i) -indexSmallArrayM :: Monad m => SmallArray a -> Int -> m a+indexSmallArrayM :: (HasCallStack, Monad m) => SmallArray a -> Int -> m a indexSmallArrayM arr i = check "indexSmallArrayM: index of out bounds" (i>=0 && i<A.sizeofSmallArray arr) (A.indexSmallArrayM arr i) freezeSmallArray- :: PrimMonad m+ :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -- ^ source -> Int -- ^ offset -> Int -- ^ length@@ -65,7 +66,7 @@ (A.freezeSmallArray marr s l) thawSmallArray- :: PrimMonad m+ :: (HasCallStack, PrimMonad m) => SmallArray a -- ^ source -> Int -- ^ offset -> Int -- ^ length@@ -74,7 +75,7 @@ (s>=0 && l>=0 && (s+l)<=A.sizeofSmallArray arr) (A.thawSmallArray arr s l) -copySmallArray :: PrimMonad m+copySmallArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -- ^ destination array -> Int -- ^ offset into destination array -> SmallArray a -- ^ source array@@ -88,7 +89,7 @@ (A.copySmallArray marr s1 arr s2 l) -copySmallMutableArray :: PrimMonad m+copySmallMutableArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -- ^ destination array -> Int -- ^ offset into destination array -> SmallMutableArray (PrimState m) a -- ^ source array@@ -103,7 +104,8 @@ (A.copySmallMutableArray marr1 s1 marr2 s2 l) -cloneSmallArray :: SmallArray a -- ^ source array+cloneSmallArray :: HasCallStack+ => SmallArray a -- ^ source array -> Int -- ^ offset into destination array -> Int -- ^ number of elements to copy -> SmallArray a@@ -111,7 +113,7 @@ (s>=0 && l>=0 && (s+l)<=A.sizeofSmallArray arr) (A.cloneSmallArray arr s l) -cloneSmallMutableArray :: PrimMonad m+cloneSmallMutableArray :: (HasCallStack, PrimMonad m) => SmallMutableArray (PrimState m) a -- ^ source array -> Int -- ^ offset into destination array -> Int -- ^ number of elements to copy
src/Data/Primitive/UnliftedArray.hs view
@@ -21,45 +21,48 @@ , copyMutableUnliftedArray , cloneUnliftedArray , cloneMutableUnliftedArray+ , A.mapUnliftedArray+ , A.foldrUnliftedArray ) where import Control.Monad.Primitive (PrimMonad,PrimState) import Control.Exception (throw, ArrayException(..)) import "primitive" Data.Primitive.UnliftedArray (UnliftedArray,MutableUnliftedArray,PrimUnlifted) import qualified "primitive" Data.Primitive.UnliftedArray as A+import GHC.Stack -check :: String -> Bool -> a -> a+check :: HasCallStack => String -> Bool -> a -> a check _ True x = x-check errMsg False _ = throw (IndexOutOfBounds $ "Data.Primitive.UnliftedArray.Checked." ++ errMsg)+check errMsg False _ = throw (IndexOutOfBounds $ "Data.Primitive.UnliftedArray.Checked." ++ errMsg ++ "\n" ++ prettyCallStack callStack) -newUnliftedArray :: (PrimMonad m, PrimUnlifted a) => Int -> a -> m (MutableUnliftedArray (PrimState m) a)+newUnliftedArray :: (HasCallStack, PrimMonad m, PrimUnlifted a) => Int -> a -> m (MutableUnliftedArray (PrimState m) a) newUnliftedArray n x = check "newUnliftedArray: negative size" (n>=0) (A.newUnliftedArray n x) -unsafeNewUnliftedArray :: PrimMonad m => Int -> m (MutableUnliftedArray (PrimState m) a)+unsafeNewUnliftedArray :: (HasCallStack, PrimMonad m) => Int -> m (MutableUnliftedArray (PrimState m) a) unsafeNewUnliftedArray n = check "unsafeNewUnliftedArray: negative size" (n>=0) (A.unsafeNewUnliftedArray n) -readUnliftedArray :: (PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> m a+readUnliftedArray :: (HasCallStack, PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> m a readUnliftedArray marr i = do let siz = A.sizeofMutableUnliftedArray marr check "readUnliftedArray: index of out bounds" (i>=0 && i<siz) (A.readUnliftedArray marr i) -writeUnliftedArray :: (PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> a -> m ()+writeUnliftedArray :: (HasCallStack, PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> a -> m () writeUnliftedArray marr i x = do let siz = A.sizeofMutableUnliftedArray marr check "writeUnliftedArray: index of out bounds" (i>=0 && i<siz) (A.writeUnliftedArray marr i x) -indexUnliftedArray :: PrimUnlifted a => UnliftedArray a -> Int -> a+indexUnliftedArray :: (HasCallStack, PrimUnlifted a) => UnliftedArray a -> Int -> a indexUnliftedArray arr i = check "indexUnliftedArray: index of out bounds" (i>=0 && i<A.sizeofUnliftedArray arr) (A.indexUnliftedArray arr i) -indexUnliftedArrayM :: (Monad m, PrimUnlifted a) => UnliftedArray a -> Int -> m a+indexUnliftedArrayM :: (HasCallStack, Monad m, PrimUnlifted a) => UnliftedArray a -> Int -> m a indexUnliftedArrayM arr i = check "indexUnliftedArrayM: index of out bounds" (i>=0 && i<A.sizeofUnliftedArray arr) (A.indexUnliftedArrayM arr i) freezeUnliftedArray- :: PrimMonad m+ :: (HasCallStack, PrimMonad m) => MutableUnliftedArray (PrimState m) a -- ^ source -> Int -- ^ offset -> Int -- ^ length@@ -71,7 +74,7 @@ (A.freezeUnliftedArray marr s l) thawUnliftedArray- :: PrimMonad m+ :: (HasCallStack, PrimMonad m) => UnliftedArray a -- ^ source -> Int -- ^ offset -> Int -- ^ length@@ -80,7 +83,7 @@ (s>=0 && l>=0 && (s+l)<=A.sizeofUnliftedArray arr) (A.thawUnliftedArray arr s l) -copyUnliftedArray :: PrimMonad m+copyUnliftedArray :: (HasCallStack, PrimMonad m) => MutableUnliftedArray (PrimState m) a -- ^ destination array -> Int -- ^ offset into destination array -> UnliftedArray a -- ^ source array@@ -94,7 +97,7 @@ (A.copyUnliftedArray marr s1 arr s2 l) -copyMutableUnliftedArray :: PrimMonad m+copyMutableUnliftedArray :: (HasCallStack, PrimMonad m) => MutableUnliftedArray (PrimState m) a -- ^ destination array -> Int -- ^ offset into destination array -> MutableUnliftedArray (PrimState m) a -- ^ source array@@ -109,8 +112,8 @@ (A.copyMutableUnliftedArray marr1 s1 marr2 s2 l) -cloneUnliftedArray ::- UnliftedArray a -- ^ source array+cloneUnliftedArray :: HasCallStack+ => UnliftedArray a -- ^ source array -> Int -- ^ offset into destination array -> Int -- ^ number of elements to copy -> UnliftedArray a@@ -118,7 +121,7 @@ (s>=0 && l>=0 && (s+l)<=A.sizeofUnliftedArray arr) (A.cloneUnliftedArray arr s l) -cloneMutableUnliftedArray :: PrimMonad m+cloneMutableUnliftedArray :: (HasCallStack, PrimMonad m) => MutableUnliftedArray (PrimState m) a -- ^ source array -> Int -- ^ offset into destination array -> Int -- ^ number of elements to copy