Safe Haskell | Safe-Infered |
---|
Vastly extended primitive arrays. Some basic ideas are now modeled after the vector package, especially the monadic mutable / pure immutable array system. There are eight flavors of arrays among three axes: mutable/pure + boxedunboxed + zero-basedlower-bound.
NOTE all operations in MPrimArrayOps and PrimArrayOps are highly unsafe. No bounds-checking is performed at all.
- class (Shape sh, ExtShape sh) => MPrimArrayOps marr sh elm where
- boundsM :: marr s sh elm -> (sh, sh)
- fromListM :: PrimMonad m => sh -> sh -> [elm] -> m (marr (PrimState m) sh elm)
- newM :: PrimMonad m => sh -> sh -> m (marr (PrimState m) sh elm)
- newWithM :: PrimMonad m => sh -> sh -> elm -> m (marr (PrimState m) sh elm)
- readM :: PrimMonad m => marr (PrimState m) sh elm -> sh -> m elm
- writeM :: PrimMonad m => marr (PrimState m) sh elm -> sh -> elm -> m ()
- type family MutArray v :: * -> * -> * -> *
- class (Shape sh, ExtShape sh, MPrimArrayOps (MutArray arr) sh elm) => PrimArrayOps arr sh elm where
- (!) :: PrimArrayOps arr sh elm => arr sh elm -> sh -> elm
- inBoundsM :: MPrimArrayOps marr sh elm => marr s sh elm -> sh -> Bool
- sliceEq :: (Eq elm, PrimArrayOps arr sh elm) => arr sh elm -> sh -> arr sh elm -> sh -> sh -> Bool
- fromAssocsM :: (PrimMonad m, MPrimArrayOps marr sh elm) => sh -> sh -> elm -> [(sh, elm)] -> m (marr (PrimState m) sh elm)
- assocs :: PrimArrayOps arr sh elm => arr sh elm -> [(sh, elm)]
- fromList :: PrimArrayOps arr sh elm => sh -> sh -> [elm] -> arr sh elm
- fromAssocs :: PrimArrayOps arr sh elm => sh -> sh -> elm -> [(sh, elm)] -> arr sh elm
- inBounds :: PrimArrayOps arr sh elm => arr sh elm -> sh -> Bool
- toList :: PrimArrayOps arr sh elm => arr sh elm -> [elm]
Documentation
class (Shape sh, ExtShape sh) => MPrimArrayOps marr sh elm whereSource
The core set of operations for monadic arrays.
boundsM :: marr s sh elm -> (sh, sh)Source
Return the bounds of the array. All bounds are inclusive, as in
[lb..ub]
fromListM :: PrimMonad m => sh -> sh -> [elm] -> m (marr (PrimState m) sh elm)Source
Given lower and upper bounds and a list of all elements, produce a mutable array.
newM :: PrimMonad m => sh -> sh -> m (marr (PrimState m) sh elm)Source
Creates a new array with the given bounds with each element within the array being in a random state.
newWithM :: PrimMonad m => sh -> sh -> elm -> m (marr (PrimState m) sh elm)Source
Creates a new array with all elements being equal to elm
.
readM :: PrimMonad m => marr (PrimState m) sh elm -> sh -> m elmSource
Reads a single element in the array.
writeM :: PrimMonad m => marr (PrimState m) sh elm -> sh -> elm -> m ()Source
Writes a single element in the array.
(Shape sh, ExtShape sh, Prim elm) => MPrimArrayOps MArr0 sh elm |
type family MutArray v :: * -> * -> * -> *Source
Used to connect each immutable array with one mutable array.
class (Shape sh, ExtShape sh, MPrimArrayOps (MutArray arr) sh elm) => PrimArrayOps arr sh elm whereSource
The core set of functions on immutable arrays.
bounds :: arr sh elm -> (sh, sh)Source
Returns the bounds of an immutable array, again inclusive bounds: [lb..ub]
.
freeze :: PrimMonad m => MutArray arr (PrimState m) 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.
index :: arr sh elm -> sh -> elmSource
Extract a single element from the array. Generally unsafe as not bounds-checking is performed.
(Shape sh, ExtShape sh, Prim elm) => PrimArrayOps Arr0 sh elm |
(!) :: PrimArrayOps arr sh elm => arr sh elm -> sh -> elmSource
Infix index operator. Performs minimal bounds-checking using assert in non-optimized code.
inBoundsM :: MPrimArrayOps marr sh elm => marr s sh elm -> sh -> BoolSource
Returns true if the index is valid for the array.
TODO can't give a typedef
sliceEq :: (Eq elm, PrimArrayOps arr sh elm) => arr sh elm -> sh -> arr sh elm -> sh -> sh -> BoolSource
Given two arrays with the same dimensionality, their respective starting index, and how many steps to go in each dimension (in terms of a dimension again), determine if the multidimensional slices have the same value at all positions
TODO specialize for DIM1 (and maybe higher dim's) to use memcmp
fromAssocsM :: (PrimMonad m, MPrimArrayOps marr sh elm) => sh -> sh -> elm -> [(sh, elm)] -> m (marr (PrimState m) sh elm)Source
Construct a mutable primitive array from a lower and an upper bound, a default element, and a list of associations.
assocs :: PrimArrayOps arr sh elm => arr sh elm -> [(sh, elm)]Source
Return all associations from an array.
fromList :: PrimArrayOps arr sh elm => sh -> sh -> [elm] -> arr sh elmSource
Creates an immutable array from lower and upper bounds and a complete list of elements.
fromAssocs :: PrimArrayOps arr sh elm => sh -> sh -> elm -> [(sh, elm)] -> arr sh elmSource
Creates an immutable array from lower and upper bounds, a default element, and a list of associations.
inBounds :: PrimArrayOps arr sh elm => arr sh elm -> sh -> BoolSource
Determines if an index is valid for a given immutable array.
toList :: PrimArrayOps arr sh elm => arr sh elm -> [elm]Source
Returns all elements of an immutable array as a list.