vector-sized

This package exports a newtype tagging the vectors from the vector
package with a type-level natural representing their sized. It also exports
functions from vector whose size can be determined ahead of time,
appropriately retyped.

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.

Changes

Change Log

[1.2.0.0] - 2018-12-05

Add Hashable instances

Generalize concatMap

Various code and documentation cleanup

[1.1.1.0] - 2018-11-13

Fix build and add CI for 8.6.2

[1.1.0.0] - 2018-11-08

Generalise Ix instance

Add Unboxed vectors

Fiddle extension guarding

Thanks everyone!

[1.0.5.0] - 2018-10-17

Add Ix instance

Add Comonad instance

Thanks mpilgrem and KingoftheHomeless

[1.0.4.1] - 2018-09-04

Fix compilation on ghc 8.6.

[1.0.4.0] - 2018-07-14

Add Monad instance for boxed vectors.

[1.0.3.1] - 2018-07-10

Loosen upper bound on distributive

[1.0.3.0] - 2018-06-24

Remove redundant KnownNat constraints

[1.0.2.0] - 2018-05-15

not-home haddock annotations for Internal modules, for more helpful linking

Fix build with indexed-list-literals-0.2.1.0

[1.0.1.0] - 2018-04-12

Add Representable and Distributive instances for sized boxed vectors

Use newer version of indexed-list-literals to allow a fully featured compile on ghc 8.4