-- 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)