This package exports a newtype tagging the vectors from the
package with a type-level natural representing their sized. It also exports
vector whose size can be determined ahead of time,
Currently, we provide size-tagged versions of the following:
We also provide mutable versions of each of the above. Additionally, we include functions for converting to and from 'unsized' vectors and lists, using CPS-style existentials.
The code in this package is based on the initial work by Ben Gamari in a PR for
How is this different to
This package is fairly similar to
fixed-vector, as both libraries are
designed to provide vectors of statically known length. However, the
implementations used are different, with different tradeoffs.
uses a newtype wrapper around vectors from
vector, and is thus able to
handle vectors of arbitrary length. However, this approach requires us to carry
a runtime representation of length, which is a significant memory overhead for
fixed-vector instead defines all functions as manipulations
of Church-encoded product types of the form
∀r. (a → a → r) → r (for 2D
vectors), allowing it to work for both arbitrary product types (like
data V2 a = V2 a a) and opaque length-parameterized vectors. However, as a consequence
of this implementation choice,
fixed-vector cannot handle vectors whose size
exceeds tens of elements.