Safe Haskell | None |
---|
- type ArrayIx a = Len (ArrayElem a) Word
- class Array a where
- class Array a => ImmArray a where
- indexArray :: a -> ArrayIx a -> ArrayElem a
- class Array a => STArray a where
- type ArrayState a :: *
- class STArray a => STMkArray a where
- class STArray a => STZArray a where
- class Array a => PinnedArray a where
- class Allocation f where
- newWord8Array :: Len Word8 Word -> ST s (STPrimArray s f Word8)
- onAllocation :: (f ~ Free => z) -> (f ~ Pinned => z) -> Tagged f z
- newAlignedPinnedWord8Array :: Len Word8 Word -> Len Word8 Word -> ST s (STPrimArray s f Word8)
- withArrayByteString :: (PinnedArray a, ArrayElem a ~ Word8) => (ByteString -> IO b) -> a -> IO b
- arrayFromByteString :: Allocation f => ByteString -> PrimArray f Word8
- unsafeWithCastArrayByteString :: forall a b. (PinnedArray a, Prim (ArrayElem a)) => (ByteString -> IO b) -> a -> IO b
- data Free
- data Pinned
- primArrayMatchAllocation :: forall f f' w. (Allocation f, Allocation f', Prim w) => ArrayRange (PrimArray f w) -> ArrayRange (PrimArray f' w)
- data PrimArray f w
- runSTPrimArray :: (forall s. ST s (STPrimArray s f w)) -> PrimArray f w
- unsafeFreezeSTPrimArray :: STPrimArray s f w -> ST s (PrimArray f w)
- data STPrimArray s f w
- data ArrayRange a = ArrayRange a (ArrayIx a) (ArrayIx a)
- fullArrayRange :: Array a => a -> ArrayRange a
- skipArrayRange :: Array a => ArrayIx a -> ArrayRange a -> ArrayRange a
- headArrayRange :: Array a => ArrayIx a -> ArrayRange a -> ArrayRange a
- wordConvArrayRange :: WordConv c => Bijection' (ArrayRange (PrimArray f Word)) (ArrayRange (PrimArray f c))
- unsafePrimArrayCast :: PrimArray f w -> PrimArray f w'
- unsafeSTPrimArrayCast :: STPrimArray s f w -> STPrimArray s f w'
- mapMArray :: STZArray a => (ArrayElem a -> ArrayST a (ArrayElem a)) -> a -> ArrayST a ()
- mapMArrayCopy :: (STZArray a, STZArray b, ArrayState a ~ ArrayState b) => (ArrayElem a -> ArrayST a (ArrayElem b)) -> a -> b -> ArrayST a ()
- mapMArrayCopyImm :: (ImmArray a, STZArray b) => (ArrayElem a -> ArrayST b (ArrayElem b)) -> a -> b -> ArrayST b ()
- mapImmArray :: (Allocation f', Prim b, ImmArray r) => (ArrayElem r -> b) -> r -> PrimArray f' b
- mkArrayWith :: (Allocation f, Prim a) => Len a Word -> (Len a Word -> a) -> PrimArray f a
- ioToST :: IO a -> ST RealWorld a
- primSizeOf :: Prim w => w -> Int
- newtype ST s a = ST (STRep s a)
- module Control.Monad.ST
- module Data.Primitive.Types
Documentation
Array a => Array (ArrayRange a) | |
Prim w => Array (PrimArray f w) | |
Prim w => Array (STPrimArray s f w) |
class Array a => ImmArray a whereSource
indexArray :: a -> ArrayIx a -> ArrayElem aSource
(Array (ArrayRange a), ImmArray a) => ImmArray (ArrayRange a) | |
(Array (PrimArray f w), Prim w) => ImmArray (PrimArray f w) |
class Array a => STArray a Source
type ArrayState a :: *Source
(Array (ArrayRange a), STArray a) => STArray (ArrayRange a) | |
(Array (STPrimArray s f w), Prim w) => STArray (STPrimArray s f w) |
class STArray a => STMkArray a whereSource
STArrays that are instantiable in GCed memory
(STArray (STPrimArray s f w), Allocation f, Prim w) => STMkArray (STPrimArray s f w) |
class STArray a => STZArray a whereSource
STArrays that can be mutated using zero based indexing
readArray :: a -> ArrayIx a -> ArrayST a (ArrayElem a)Source
writeArray :: a -> ArrayIx a -> ArrayElem a -> ArrayST a ()Source
(STArray (ArrayRange a), STZArray a) => STZArray (ArrayRange a) | |
(STArray (STPrimArray s f w), Prim w) => STZArray (STPrimArray s f w) |
class Array a => PinnedArray a whereSource
(Array (ArrayRange a), Prim (ArrayElem a), PinnedArray a) => PinnedArray (ArrayRange a) | |
(Array (PrimArray Pinned w), Prim w) => PinnedArray (PrimArray Pinned w) | |
(Array (STPrimArray s Pinned w), Prim w) => PinnedArray (STPrimArray s Pinned w) |
class Allocation f whereSource
newWord8Array :: Len Word8 Word -> ST s (STPrimArray s f Word8)Source
onAllocation :: (f ~ Free => z) -> (f ~ Pinned => z) -> Tagged f zSource
newAlignedPinnedWord8Array :: Len Word8 Word -> Len Word8 Word -> ST s (STPrimArray s f Word8)Source
withArrayByteString :: (PinnedArray a, ArrayElem a ~ Word8) => (ByteString -> IO b) -> a -> IO bSource
arrayFromByteString :: Allocation f => ByteString -> PrimArray f Word8Source
unsafeWithCastArrayByteString :: forall a b. (PinnedArray a, Prim (ArrayElem a)) => (ByteString -> IO b) -> a -> IO bSource
Allocation Pinned | |
(Array (PrimArray Pinned w), Prim w) => PinnedArray (PrimArray Pinned w) | |
(Array (STPrimArray s Pinned w), Prim w) => PinnedArray (STPrimArray s Pinned w) |
primArrayMatchAllocation :: forall f f' w. (Allocation f, Allocation f', Prim w) => ArrayRange (PrimArray f w) -> ArrayRange (PrimArray f' w)Source
f is either Free or Pinned
runSTPrimArray :: (forall s. ST s (STPrimArray s f w)) -> PrimArray f wSource
unsafeFreezeSTPrimArray :: STPrimArray s f w -> ST s (PrimArray f w)Source
Safe as long as the input array is not written to after this call. Use the safe runSTPrimArray when possible.
data STPrimArray s f w Source
f is either Free or Pinned
WordConv1 (STPrimArray s f) | |
Eq (STPrimArray s f w) | |
(Array (STPrimArray s Pinned w), Prim w) => PinnedArray (STPrimArray s Pinned w) | |
(STArray (STPrimArray s f w), Prim w) => STZArray (STPrimArray s f w) | |
(STArray (STPrimArray s f w), Allocation f, Prim w) => STMkArray (STPrimArray s f w) | |
(Array (STPrimArray s f w), Prim w) => STArray (STPrimArray s f w) | |
Prim w => Array (STPrimArray s f w) |
data ArrayRange a Source
ArrayRange a (ArrayIx a) (ArrayIx a) |
(ImmArray a, Eq (ArrayElem a), Prim (ArrayElem a)) => Eq (ArrayRange a) | |
(ImmArray a, Show (ArrayElem a)) => Show (ArrayRange a) | |
(Array (ArrayRange a), Prim (ArrayElem a), PinnedArray a) => PinnedArray (ArrayRange a) | |
(STArray (ArrayRange a), STZArray a) => STZArray (ArrayRange a) | |
(Array (ArrayRange a), STArray a) => STArray (ArrayRange a) | |
(Array (ArrayRange a), ImmArray a) => ImmArray (ArrayRange a) | |
Array a => Array (ArrayRange a) |
fullArrayRange :: Array a => a -> ArrayRange aSource
skipArrayRange :: Array a => ArrayIx a -> ArrayRange a -> ArrayRange aSource
headArrayRange :: Array a => ArrayIx a -> ArrayRange a -> ArrayRange aSource
wordConvArrayRange :: WordConv c => Bijection' (ArrayRange (PrimArray f Word)) (ArrayRange (PrimArray f c))Source
unsafePrimArrayCast :: PrimArray f w -> PrimArray f w'Source
unsafeSTPrimArrayCast :: STPrimArray s f w -> STPrimArray s f w'Source
mapMArrayCopy :: (STZArray a, STZArray b, ArrayState a ~ ArrayState b) => (ArrayElem a -> ArrayST a (ArrayElem b)) -> a -> b -> ArrayST a ()Source
The number of elements copied is the minimum of the number of elements in the source and the number of elements in the destination
mapMArrayCopyImm :: (ImmArray a, STZArray b) => (ArrayElem a -> ArrayST b (ArrayElem b)) -> a -> b -> ArrayST b ()Source
The number of elements copied is the minimum of the number of elements in the source and the number of elements in the destination
mapImmArray :: (Allocation f', Prim b, ImmArray r) => (ArrayElem r -> b) -> r -> PrimArray f' bSource
mkArrayWith :: (Allocation f, Prim a) => Len a Word -> (Len a Word -> a) -> PrimArray f aSource
primSizeOf :: Prim w => w -> IntSource
newtype ST s a
The strict state-transformer monad.
A computation of type
transforms an internal state indexed
by ST
s as
, and returns a value of type a
.
The s
parameter is either
- an uninstantiated type variable (inside invocations of
runST
), or -
RealWorld
(inside invocations ofstToIO
).
It serves to keep the internal states of different invocations
of runST
separate from each other and from invocations of
stToIO
.
The >>=
and >>
operations are strict in the state (though not in
values stored in the state). For example,
runST
(writeSTRef _|_ v >>= f) = _|_
ST (STRep s a) |
module Control.Monad.ST
module Data.Primitive.Types