comfort-array: Arrays where the index type is a function of the shape type
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 Shape
example types are:
Range
: Allow dynamic choice of lower and upper array bounds such as in theArray
s from thearray
package. 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 likeWord
cannot represent-1
and thus cannot encode an empty range starting with index0
.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 likeLT
,EQ
,GT
and a shape of fixed size.NestedTuple
: Arrays with shapes that are compatible to nested tuples like(a,(a,a))
and indices likefst
andfst.snd
.(::+)
: The Append type constructor allows to respresent block arrays, e.g. block matrices. It also allows to represent non-empty arrays via()::+sh
.Set
: Use an arbitrary ordered set as index set.Map
: Concatenate a set of shapes. In a higher dimensional array it can be used for block matrices with a dynamic number of blocks but block sizes of the same shape type.Triangular
: A 2D array with the shape of a lower or upper triangular matrix.Simplex
: Simplices of any dimension, where the dimension is encoded in the type. An index is a tuple of monotonic ordered sub-indices.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.
With our Array
type you can perform
Fast Linear Algebra using the packages
comfort-blas
andlapack
. Thelapack
package defines even more fancy shapes like tall rectangular matrices, triangular matrices and banded matrices.Fast Fourier Transforms using the package
comfort-fftw
Fast Linear Programming using the packages
comfort-glpk
,coinor-clp
,highs-lp
Efficient Array Processing via LLVM Just-In-Time code generation using the package
knead
.
See also comfort-graph
for a Graph data structure,
with non-Int node identifiers and flexible edge types.
Modules
[Index] [Quick Jump]
Flags
Automatic Flags
Name | Description | Default |
---|---|---|
setindex | Use efficient Set indexing from containers>=0.5.4 | Enabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- comfort-array-0.5.5.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
Versions [RSS] | 0.0, 0.0.1, 0.0.1.1, 0.1, 0.1.1, 0.1.2, 0.2, 0.3, 0.3.1, 0.4, 0.4.1, 0.5, 0.5.1, 0.5.1.1, 0.5.2, 0.5.2.1, 0.5.2.2, 0.5.2.3, 0.5.3, 0.5.4, 0.5.4.1, 0.5.4.2, 0.5.5 (info) |
---|---|
Change log | Changes.md |
Dependencies | base (>=4.5 && <5), bifunctors (>=5.5 && <5.7), containers (>=0.4 && <0.8), deepseq (>=1.3 && <1.6), guarded-allocation (>=0.0.1 && <0.1), non-empty (>=0.3.2 && <0.4), prelude-compat (>=0.0 && <0.1), primitive (>=0.7.1 && <0.10), QuickCheck (>=2 && <3), semigroups (>=0.18.3 && <1.0), storable-record (>=0.0.1 && <0.1), storablevector (>=0.2 && <0.3), tagged (>=0.7 && <0.9), transformers (>=0.3 && <0.7), transformers-compat (>=0.6.6 && <0.8), utility-ht (>=0.0.10 && <0.1) [details] |
Tested with | ghc ==7.4.2, ghc ==7.8.4, ghc ==8.2.2, ghc ==8.6.5, ghc ==8.10.4, ghc ==9.4.5, ghc ==9.6.2 |
License | BSD-3-Clause |
Author | Henning Thielemann <haskell@henning-thielemann.de> |
Maintainer | Henning Thielemann <haskell@henning-thielemann.de> |
Category | Data Structures |
Home page | https://hub.darcs.net/thielema/comfort-array/ |
Source repo | this: darcs get https://hub.darcs.net/thielema/comfort-array/ --tag 0.5.5 head: darcs get https://hub.darcs.net/thielema/comfort-array/ |
Uploaded | by HenningThielemann at 2024-05-18T14:37:01Z |
Distributions | LTSHaskell:0.5.5, NixOS:0.5.5, Stackage:0.5.5 |
Reverse Dependencies | 16 direct, 3 indirect [details] |
Downloads | 7133 total (74 in the last 30 days) |
Rating | 2.0 (votes: 1) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |