Safe Haskell | None |
---|---|
Language | Haskell2010 |
Vastly extended primitive arrays. Some basic ideas are now modeled after the vector package, especially the monadic mutable / pure immutable array system.
NOTE all operations in MPrimArrayOps and PrimArrayOps are highly unsafe. No bounds-checking is performed at all.
Synopsis
- data family MutArr (m :: * -> *) (arr :: *) :: *
- class Index sh => MPrimArrayOps arr sh elm where
- upperBoundM :: MutArr m (arr sh elm) -> LimitType sh
- fromListM :: PrimMonad m => LimitType sh -> [elm] -> m (MutArr m (arr sh elm))
- newM :: PrimMonad m => LimitType sh -> m (MutArr m (arr sh elm))
- newWithM :: PrimMonad m => LimitType sh -> elm -> m (MutArr m (arr sh elm))
- readM :: PrimMonad m => MutArr m (arr sh elm) -> sh -> m elm
- writeM :: PrimMonad m => MutArr m (arr sh elm) -> sh -> elm -> m ()
- class Index sh => PrimArrayOps arr sh elm where
- upperBound :: arr sh elm -> LimitType sh
- unsafeFreeze :: PrimMonad m => MutArr m (arr sh elm) -> m (arr sh elm)
- unsafeThaw :: PrimMonad m => arr sh elm -> m (MutArr m (arr sh elm))
- unsafeIndex :: arr sh elm -> sh -> elm
- transformShape :: Index sh' => (LimitType sh -> LimitType sh') -> arr sh elm -> arr sh' elm
- class Index sh => PrimArrayMap arr sh e e' where
- map :: (e -> e') -> arr sh e -> arr sh e'
- data PAErrors = PAEUpperBound
- (!) :: PrimArrayOps arr sh elm => arr sh elm -> sh -> elm
- inBoundsM :: (Monad m, MPrimArrayOps arr sh elm) => MutArr m (arr sh elm) -> sh -> Bool
- fromAssocsM :: (PrimMonad m, MPrimArrayOps arr sh elm) => LimitType sh -> elm -> [(sh, elm)] -> m (MutArr m (arr sh elm))
- newWithPA :: (PrimMonad m, MPrimArrayOps arr sh elm, PrimArrayOps arr sh elm) => LimitType sh -> elm -> m (arr sh elm)
- safeNewWithPA :: forall m arr sh elm. (PrimMonad m, MonadError PAErrors m, MPrimArrayOps arr sh elm, PrimArrayOps arr sh elm) => LimitType sh -> elm -> m (arr sh elm)
- assocs :: forall arr sh elm. (IndexStream sh, PrimArrayOps arr sh elm) => arr sh elm -> [(sh, elm)]
- assocsS :: forall m arr sh elm. (Monad m, IndexStream sh, PrimArrayOps arr sh elm) => arr sh elm -> Stream m (sh, elm)
- fromList :: (PrimArrayOps arr sh elm, MPrimArrayOps arr sh elm) => LimitType sh -> [elm] -> arr sh elm
- fromAssocs :: (PrimArrayOps arr sh elm, MPrimArrayOps arr sh elm) => LimitType sh -> elm -> [(sh, elm)] -> arr sh elm
- toList :: forall arr sh elm. (IndexStream sh, PrimArrayOps arr sh elm) => arr sh elm -> [elm]
- class FreezeTables m t where
- type Frozen t :: *
- freezeTables :: t -> m (Frozen t)
Documentation
data family MutArr (m :: * -> *) (arr :: *) :: * Source #
Mutable version of an array.
Instances
class Index sh => MPrimArrayOps arr sh elm where Source #
The core set of operations for monadic arrays.
upperBoundM :: MutArr m (arr sh elm) -> LimitType sh Source #
Return the bounds of the array. All bounds are inclusive, as in
[lb..ub]
fromListM :: PrimMonad m => LimitType sh -> [elm] -> m (MutArr m (arr sh elm)) Source #
Given lower and upper bounds and a list of all elements, produce a mutable array.
newM :: PrimMonad m => LimitType sh -> m (MutArr m (arr sh elm)) Source #
Creates a new array with the given bounds with each element within the array being in an undefined state.
newWithM :: PrimMonad m => LimitType sh -> elm -> m (MutArr m (arr sh elm)) Source #
Creates a new array with all elements being equal to elm
.
readM :: PrimMonad m => MutArr m (arr sh elm) -> sh -> m elm Source #
Reads a single element in the array.
writeM :: PrimMonad m => MutArr m (arr sh elm) -> sh -> elm -> m () Source #
Writes a single element in the array.
Instances
(Index sh, MutArr m (Dense v sh e) ~ mv, MVector (Mutable v) e) => MPrimArrayOps (Dense v) sh e Source # | |
Defined in Data.PrimitiveArray.Dense upperBoundM :: MutArr m (Dense v sh e) -> LimitType sh Source # fromListM :: PrimMonad m => LimitType sh -> [e] -> m (MutArr m (Dense v sh e)) Source # newM :: PrimMonad m => LimitType sh -> m (MutArr m (Dense v sh e)) Source # newWithM :: PrimMonad m => LimitType sh -> e -> m (MutArr m (Dense v sh e)) Source # readM :: PrimMonad m => MutArr m (Dense v sh e) -> sh -> m e Source # writeM :: PrimMonad m => MutArr m (Dense v sh e) -> sh -> e -> m () Source # |
class Index sh => PrimArrayOps arr sh elm where Source #
The core set of functions on immutable arrays.
upperBound :: arr sh elm -> LimitType sh Source #
Returns the bounds of an immutable array, again inclusive bounds: [lb..ub]
.
unsafeFreeze :: PrimMonad m => MutArr m (arr sh elm) -> m (arr sh elm) Source #
Freezes a mutable array an returns its immutable version. This operation is O(1) and both arrays share the same memory. Do not use the mutable array afterwards.
unsafeThaw :: PrimMonad m => arr sh elm -> m (MutArr m (arr sh elm)) Source #
Thaw an immutable array into a mutable one. Both versions share memory.
unsafeIndex :: arr sh elm -> sh -> elm Source #
Extract a single element from the array. Generally unsafe as not bounds-checking is performed.
transformShape :: Index sh' => (LimitType sh -> LimitType sh') -> arr sh elm -> arr sh' elm Source #
Savely transform the shape space of a table.
Instances
(Index sh, Vector v e) => PrimArrayOps (Dense v) sh e Source # | |
Defined in Data.PrimitiveArray.Dense upperBound :: Dense v sh e -> LimitType sh Source # unsafeFreeze :: PrimMonad m => MutArr m (Dense v sh e) -> m (Dense v sh e) Source # unsafeThaw :: PrimMonad m => Dense v sh e -> m (MutArr m (Dense v sh e)) Source # unsafeIndex :: Dense v sh e -> sh -> e Source # transformShape :: Index sh' => (LimitType sh -> LimitType sh') -> Dense v sh e -> Dense v sh' e Source # |
class Index sh => PrimArrayMap arr sh e e' where Source #
(!) :: PrimArrayOps arr sh elm => arr sh elm -> sh -> elm Source #
Infix index operator. Performs minimal bounds-checking using assert in non-optimized code.
inBoundsM :: (Monad m, MPrimArrayOps arr sh elm) => MutArr m (arr sh elm) -> sh -> Bool Source #
Returns true if the index is valid for the array.
fromAssocsM :: (PrimMonad m, MPrimArrayOps arr sh elm) => LimitType sh -> elm -> [(sh, elm)] -> m (MutArr m (arr sh elm)) Source #
Construct a mutable primitive array from a lower and an upper bound, a default element, and a list of associations.
newWithPA :: (PrimMonad m, MPrimArrayOps arr sh elm, PrimArrayOps arr sh elm) => LimitType sh -> elm -> m (arr sh elm) Source #
Initialize an immutable array but stay within the primitive monad m
.
safeNewWithPA :: forall m arr sh elm. (PrimMonad m, MonadError PAErrors m, MPrimArrayOps arr sh elm, PrimArrayOps arr sh elm) => LimitType sh -> elm -> m (arr sh elm) Source #
Safely prepare a primitive array.
TODO Check if having a MonadError
instance degrades performance. (We
should see this once the test with NeedlemanWunsch is under way).
assocs :: forall arr sh elm. (IndexStream sh, PrimArrayOps arr sh elm) => arr sh elm -> [(sh, elm)] Source #
Return all associations from an array.
assocsS :: forall m arr sh elm. (Monad m, IndexStream sh, PrimArrayOps arr sh elm) => arr sh elm -> Stream m (sh, elm) Source #
Return all associations from an array.
fromList :: (PrimArrayOps arr sh elm, MPrimArrayOps arr sh elm) => LimitType sh -> [elm] -> arr sh elm Source #
Creates an immutable array from lower and upper bounds and a complete list of elements.
fromAssocs :: (PrimArrayOps arr sh elm, MPrimArrayOps arr sh elm) => LimitType sh -> elm -> [(sh, elm)] -> arr sh elm Source #
Creates an immutable array from lower and upper bounds, a default element, and a list of associations.
toList :: forall arr sh elm. (IndexStream sh, PrimArrayOps arr sh elm) => arr sh elm -> [elm] Source #
Returns all elements of an immutable array as a list.
Freeze an inductive stack of tables with a Z
at the bottom.
class FreezeTables m t where Source #
freezeTables
freezes a stack of tables.
freezeTables :: t -> m (Frozen t) Source #
Instances
Applicative m => FreezeTables m Z Source # | |
(Functor m, Applicative m, Monad m, PrimMonad m, FreezeTables m ts, PrimArrayOps arr sh elm) => FreezeTables m (ts :. MutArr m (arr sh elm)) Source # | |