Arrays where the index type is a function of the shape type
|Version on this page:||0.4.1|
|LTS Haskell 20.23:||0.5.2.1@rev:1|
|Stackage Nightly 2023-05-28:||0.5.2.1@rev:1|
|Latest on Hackage:||0.5.2.1@rev:1|
Module documentation for 0.4.1
Arrays from the basic
array package are already very powerful
compared with arrays in other languages.
They may have any number of dimensions, are type safe
and defined in a uniform way using the Ix class
with free choice of the lower bounds (0, 1, or whatever you like).
This package goes one step further: The shape and the index type are different, but the index type is a type function of the shape type. This offers much more flexibility and type safety.
Some examples are:
Range: Allow dynamic choice of lower and upper array bounds such as in the
Arrays from the
arraypackage. You can combine it with other shapes in other dimensions. It allows you to describe the bounds of each dimension individually.
Shifted: Describe array bounds by start index and length. It is sometimes more natural to use these parameters. E.g. a non-negative index type like
-1and thus cannot encode an empty range starting with index
ZeroBased, OneBased: Arrays with fixed lower bound, either 0 or 1, respectively.
Cyclic: Indices with wrap-around semantics.
Zero, (): Arrays with fixed size 0 or 1, respectively.
Enumeration: Arrays with indices like
GTand a shape of fixed size.
(:+:): The Append type constructor allows to respresent block arrays, e.g. block matrices. It also allows to represent non-empty arrays via
Set: Use an arbitrary ordered set as index set.
Map: Concatenate a set of shapes.
Triangular: A 2D array with the shape of a lower or upper triangular matrix.
Square: A 2D array where both dimensions always have equal size.
Cube: A 3D array where all three dimensions always have equal size.
Tagged: Statically distinguish shapes and indices that are isomorphic.
lapack package defines even more fancy shapes
like tall rectangular matrices, triangular matrices and banded matrices.
Change log for the
instance Shape Map
fromAssocations: Make default value the first parameter. It is most oftenly zero and thus less variable than the array size.
Shape.DeferredIndex: Now uses the shape as the type parameter, not the index type.
Array.Guarded.MutablePtr. In the last release we altered the arrays after initialization which corrupted the debugging by the
guarded-allocationpackage. This should be fixed now.
Shape.sizeOffset: It does not return a single offset anymore but an offset computation function. This allows to cache a size computation across many offset computations.
- Add a monad parameter to the mutable
Storablearray type and generalize functions to
PrimMonads. This way the mutating functions can also be used in the
- Add immutable
Boxedarray type and mutable
- Initial version featuring the
Shape.Cclass with type function
Indexand the immutable