comfort-array: Arrays where the index type is a function of the shape type

[ bsd3, data-structures, library ] [ Propose Tags ] [ Report a vulnerability ]

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 array 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 like Word cannot represent -1 and thus cannot encode an empty range starting with index 0.

  • ZeroBased, OneBased: Arrays with fixed lower bound, either 0 or 1, respectively.

  • Zero, (): Arrays with fixed size 0 or 1, respectively.

  • Enumeration: Arrays with indices like LT, EQ, GT and 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 ():+:sh.

  • Set: Use an arbitrary ordered set as index set.

  • Triangular: A 2D array with the shape of a lower or upper triangular matrix.

  • Tagged: Statically distinguish shapes and indices that are isomorphic.

The lapack package defines even more fancy shapes like tall rectangular matrices, triangular matrices and banded matrices.

Flags

Automatic Flags
NameDescriptionDefault
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

Maintainer's Corner

Package maintainers

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), containers (>=0.4 && <0.7), deepseq (>=1.3 && <1.5), guarded-allocation (>=0.0.1 && <0.1), non-empty (>=0.3.2 && <0.4), prelude-compat (>=0.0 && <0.1), primitive (>=0.6.4 && <0.8), QuickCheck (>=2 && <3), semigroups (>=0.18.3 && <1.0), storable-record (>=0.0.1 && <0.1), tagged (>=0.7 && <0.9), transformers (>=0.3 && <0.6), utility-ht (>=0.0.10 && <0.1) [details]
Tested with ghc ==7.4.2, ghc ==7.8.4, ghc ==8.2.2
License BSD-3-Clause
Author Henning Thielemann <haskell@henning-thielemann.de>
Maintainer Henning Thielemann <haskell@henning-thielemann.de>
Category Data Structures
Home page http://hub.darcs.net/thielema/comfort-array/
Source repo this: darcs get http://hub.darcs.net/thielema/comfort-array/ --tag 0.4
head: darcs get http://hub.darcs.net/thielema/comfort-array/
Uploaded by HenningThielemann at 2019-05-23T20:30:55Z
Distributions LTSHaskell:0.5.5, NixOS:0.5.5, Stackage:0.5.5
Reverse Dependencies 16 direct, 3 indirect [details]
Downloads 7059 total (121 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2019-05-23 [all 1 reports]