Versions |
0.1.0.0, 0.2.0.0, 0.3.0.0, 0.3.2.0, 0.3.3.0, 0.4.0.0, 0.4.0.1, 0.4.1.0, 0.5.0.0, 0.5.1.0, 0.6.1.0, 1.0.0.0, 1.0.1.0, 1.0.2.0, 1.0.3.0, 1.0.3.1, 1.0.4.0, 1.1.0.0, 1.1.1.0, 1.2.0.0, 1.2.0.1, 1.4.0.0, 1.4.1.0, 1.4.1.0, 1.4.2, 1.4.3, 1.4.3.1, 1.4.4, 1.5.0, 1.6.1 |
Change log |
changelog.md |
Dependencies |
adjunctions (>=4.3 && <4.5), base (>=4.9 && <5), binary (>=0.8.3.0), comonad (>=4 && <6), deepseq (>=1.1 && <1.5), distributive (>=0.5 && <0.7), finite-typelits (>=0.1), hashable (>=1.2.4.0), indexed-list-literals (>=0.2.0.0), primitive (>=0.5 && <0.8), vector (>=0.11 && <0.13) [details] |
License |
BSD-3-Clause |
Copyright |
2016 Joe Hermaszewski |
Author |
Joe Hermaszewski |
Maintainer |
[email protected] |
Category |
Data |
Home page |
https://github.com/expipiplus1/vector-sized#readme
|
Bug tracker |
https://github.com/expipiplus1/vector-sized/issues
|
Source repo |
head: git clone https://github.com/expipiplus1/vector-sized |
Uploaded |
by jophish at 2020-05-04T07:28:44Z |
vector-sized

This package exports a newtype tagging the vectors from the vector
package with a type-level natural representing their size. It also exports
functions from vector
whose size can be determined ahead of time,
appropriately retyped.
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
vulkan
.
How is this different to fixed-vector
?
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. vector-sized
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
small vectors. 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.