-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | primitive functions with bounds-checking
--
-- This library is intended to be used as a drop-in replacement for the
-- primitive library in test environments. It adds bounds-checking
-- to all functions in primitive that are able to cause segfaults.
-- It is not recommended to use this library in production. However, if
-- you are testing a library or application you wrote that uses
-- primitive, you can temporarily replace your primitive
-- dependency with `primitive-checked`, and your segfaults will become
-- normal haskell exceptions that you can hunt down with GHC's stack
-- trace facilities.
--
-- The versioning for this library matches the version of primitive that
-- is targeted. The first three digits of the version match the version
-- of primitive. The fourth digit is used for bug fixes.
@package primitive-checked
@version 0.6.3.0
module Data.Primitive.Array
-- | Boxed arrays
data Array a :: * -> *
Array :: Array# a -> Array a
[array#] :: Array a -> Array# a
-- | Mutable boxed arrays associated with a primitive state token.
data MutableArray s a :: * -> * -> *
MutableArray :: MutableArray# s a -> MutableArray s a
[marray#] :: MutableArray s a -> MutableArray# s a
newArray :: PrimMonad m => Int -> a -> m (MutableArray (PrimState m) a)
readArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> m a
writeArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> a -> m ()
indexArray :: Array a -> Int -> a
indexArrayM :: Monad m => Array a -> Int -> m a
freezeArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> Int -> m (Array a)
thawArray :: PrimMonad m => Array a -> Int -> Int -> m (MutableArray (PrimState m) a)
-- | Convert a mutable array to an immutable one without copying. The array
-- should not be modified after the conversion.
unsafeFreezeArray :: PrimMonad m => MutableArray PrimState m a -> m Array a
-- | Convert an immutable array to an mutable one without copying. The
-- immutable array should not be used after the conversion.
unsafeThawArray :: PrimMonad m => Array a -> m MutableArray PrimState m a
-- | Check whether the two arrays refer to the same memory block.
sameMutableArray :: () => MutableArray s a -> MutableArray s a -> Bool
copyArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> Array a -> Int -> Int -> m ()
copyMutableArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> MutableArray (PrimState m) a -> Int -> Int -> m ()
cloneArray :: Array a -> Int -> Int -> Array a
cloneMutableArray :: PrimMonad m => MutableArray (PrimState m) a -> Int -> Int -> m (MutableArray (PrimState m) a)
sizeofArray :: () => Array a -> Int
sizeofMutableArray :: () => MutableArray s a -> Int
module Data.Primitive.ByteArray
-- | Byte arrays
data ByteArray :: *
ByteArray :: ByteArray# -> ByteArray
-- | Mutable byte arrays associated with a primitive state token
data MutableByteArray s :: * -> *
MutableByteArray :: MutableByteArray# s -> MutableByteArray s
data ByteArray# :: TYPE UnliftedRep
data MutableByteArray# (a :: *) :: * -> TYPE UnliftedRep
newByteArray :: PrimMonad m => Int -> m (MutableByteArray (PrimState m))
newPinnedByteArray :: PrimMonad m => Int -> m (MutableByteArray (PrimState m))
newAlignedPinnedByteArray :: PrimMonad m => Int -> Int -> m (MutableByteArray (PrimState m))
readByteArray :: forall m a. (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> m a
writeByteArray :: forall m a. (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> a -> m ()
indexByteArray :: forall a. Prim a => ByteArray -> Int -> a
-- | Right-fold over the elements of a ByteArray.
foldrByteArray :: Prim a => (a -> b -> b) -> b -> ByteArray -> b
-- | Convert a mutable byte array to an immutable one without copying. The
-- array should not be modified after the conversion.
unsafeFreezeByteArray :: PrimMonad m => MutableByteArray PrimState m -> m ByteArray
-- | Convert an immutable byte array to a mutable one without copying. The
-- original array should not be used after the conversion.
unsafeThawByteArray :: PrimMonad m => ByteArray -> m MutableByteArray PrimState m
copyByteArray :: forall m. PrimMonad m => MutableByteArray (PrimState m) -> Int -> ByteArray -> Int -> Int -> m ()
copyMutableByteArray :: forall m. PrimMonad m => MutableByteArray (PrimState m) -> Int -> MutableByteArray (PrimState m) -> Int -> Int -> m ()
moveByteArray :: forall m. PrimMonad m => MutableByteArray (PrimState m) -> Int -> MutableByteArray (PrimState m) -> Int -> Int -> m ()
setByteArray :: forall m a. (Prim a, PrimMonad m) => MutableByteArray (PrimState m) -> Int -> Int -> a -> m ()
fillByteArray :: PrimMonad m => MutableByteArray (PrimState m) -> Int -> Int -> Word8 -> m ()
-- | Size of the byte array in bytes.
sizeofByteArray :: ByteArray -> Int
-- | Size of the mutable byte array in bytes.
sizeofMutableByteArray :: () => MutableByteArray s -> Int
-- | Check if the two arrays refer to the same memory block.
sameMutableByteArray :: () => MutableByteArray s -> MutableByteArray s -> Bool
-- | Yield a pointer to the array's data. This operation is only safe on
-- pinned byte arrays allocated by newPinnedByteArray or
-- newAlignedPinnedByteArray.
byteArrayContents :: ByteArray -> Addr
-- | Yield a pointer to the array's data. This operation is only safe on
-- pinned byte arrays allocated by newPinnedByteArray or
-- newAlignedPinnedByteArray.
mutableByteArrayContents :: () => MutableByteArray s -> Addr
module Data.Primitive.SmallArray
data SmallArray a :: * -> *
SmallArray :: SmallArray# a -> SmallArray a
data SmallMutableArray s a :: * -> * -> *
SmallMutableArray :: SmallMutableArray# s a -> SmallMutableArray s a
newSmallArray :: PrimMonad m => Int -> a -> m (SmallMutableArray (PrimState m) a)
readSmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> m a
writeSmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> a -> m ()
indexSmallArray :: SmallArray a -> Int -> a
indexSmallArrayM :: Monad m => SmallArray a -> Int -> m a
freezeSmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> Int -> m (SmallArray a)
thawSmallArray :: PrimMonad m => SmallArray a -> Int -> Int -> m (SmallMutableArray (PrimState m) a)
-- | Render a mutable array immutable.
--
-- This operation performs no copying, so care must be taken not to
-- modify the input array after freezing.
unsafeFreezeSmallArray :: PrimMonad m => SmallMutableArray PrimState m a -> m SmallArray a
-- | Render an immutable array mutable.
--
-- This operation performs no copying, so care must be taken with its
-- use.
unsafeThawSmallArray :: PrimMonad m => SmallArray a -> m SmallMutableArray PrimState m a
copySmallArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> SmallArray a -> Int -> Int -> m ()
copySmallMutableArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> SmallMutableArray (PrimState m) a -> Int -> Int -> m ()
cloneSmallArray :: SmallArray a -> Int -> Int -> SmallArray a
cloneSmallMutableArray :: PrimMonad m => SmallMutableArray (PrimState m) a -> Int -> Int -> m (SmallMutableArray (PrimState m) a)
sizeofSmallArray :: () => SmallArray a -> Int
sizeofSmallMutableArray :: () => SmallMutableArray s a -> Int
module Data.Primitive.UnliftedArray
-- | Immutable arrays that efficiently store types that are simple wrappers
-- around unlifted primitive types. The values of the unlifted type are
-- stored directly, eliminating a layer of indirection.
data UnliftedArray e :: * -> *
UnliftedArray :: ArrayArray# -> UnliftedArray e
-- | Mutable arrays that efficiently store types that are simple wrappers
-- around unlifted primitive types. The values of the unlifted type are
-- stored directly, eliminating a layer of indirection.
data MutableUnliftedArray s e :: * -> * -> *
MutableUnliftedArray :: MutableArrayArray# s -> MutableUnliftedArray s e
-- | Classifies the types that are able to be stored in
-- UnliftedArray and MutableUnliftedArray. These should be
-- types that are just liftings of the unlifted pointer types, so that
-- their internal contents can be safely coerced into an
-- ArrayArray#.
class PrimUnlifted a
toArrayArray# :: PrimUnlifted a => a -> ArrayArray#
fromArrayArray# :: PrimUnlifted a => ArrayArray# -> a
unsafeNewUnliftedArray :: PrimMonad m => Int -> m (MutableUnliftedArray (PrimState m) a)
newUnliftedArray :: (PrimMonad m, PrimUnlifted a) => Int -> a -> m (MutableUnliftedArray (PrimState m) a)
-- | Sets all the positions in an unlifted array to the designated value.
setUnliftedArray :: (PrimMonad m, PrimUnlifted a) => MutableUnliftedArray PrimState m a -> a -> m ()
-- | Yields the length of an UnliftedArray.
sizeofUnliftedArray :: () => UnliftedArray e -> Int
-- | Yields the length of a MutableUnliftedArray.
sizeofMutableUnliftedArray :: () => MutableUnliftedArray s e -> Int
readUnliftedArray :: (PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> m a
writeUnliftedArray :: (PrimMonad m, PrimUnlifted a) => MutableUnliftedArray (PrimState m) a -> Int -> a -> m ()
indexUnliftedArray :: PrimUnlifted a => UnliftedArray a -> Int -> a
indexUnliftedArrayM :: (Monad m, PrimUnlifted a) => UnliftedArray a -> Int -> m a
-- | Freezes a MutableUnliftedArray, yielding an
-- UnliftedArray. This simply marks the array as frozen in place,
-- so it should only be used when no further modifications to the mutable
-- array will be performed.
unsafeFreezeUnliftedArray :: PrimMonad m => MutableUnliftedArray PrimState m a -> m UnliftedArray a
freezeUnliftedArray :: PrimMonad m => MutableUnliftedArray (PrimState m) a -> Int -> Int -> m (UnliftedArray a)
thawUnliftedArray :: PrimMonad m => UnliftedArray a -> Int -> Int -> m (MutableUnliftedArray (PrimState m) a)
-- | Determines whether two MutableUnliftedArray values are the
-- same. This is object/pointer identity, not based on the contents.
sameMutableUnliftedArray :: () => MutableUnliftedArray s a -> MutableUnliftedArray s a -> Bool
copyUnliftedArray :: PrimMonad m => MutableUnliftedArray (PrimState m) a -> Int -> UnliftedArray a -> Int -> Int -> m ()
copyMutableUnliftedArray :: PrimMonad m => MutableUnliftedArray (PrimState m) a -> Int -> MutableUnliftedArray (PrimState m) a -> Int -> Int -> m ()
cloneUnliftedArray :: UnliftedArray a -> Int -> Int -> UnliftedArray a
cloneMutableUnliftedArray :: PrimMonad m => MutableUnliftedArray (PrimState m) a -> Int -> Int -> m (MutableUnliftedArray (PrimState m) a)