vector-sized: Size tagged vectors

[ bsd3, data, library ] [ Propose Tags ]
Versions [RSS],,,,,,,,,,,,,,,,,,,,,,, 1.4.2, 1.4.3,, 1.4.4, 1.5.0, 1.6.1 (info)
Change log
Dependencies adjunctions (>=4.3 && <4.5), base (>=4.9 && <5), binary (>=, comonad (>=4 && <6), deepseq (>=1.1 && <1.5), distributive (>=0.5 && <0.7), finite-typelits (>=0.1), hashable (>=, indexed-list-literals (>=, primitive (>=0.5 && <0.8), vector (>=0.11 && <0.13) [details]
License BSD-3-Clause
Copyright 2016 Joe Hermaszewski
Author Joe Hermaszewski
Category Data
Home page
Bug tracker
Source repo head: git clone
Uploaded by jophish at 2020-12-15T08:08:23Z
Distributions Arch:1.6.1, LTSHaskell:1.5.0, NixOS:1.5.0, Stackage:1.6.1
Reverse Dependencies 27 direct, 54 indirect [details]
Downloads 24358 total (144 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for vector-sized-

[back to package description]

vector-sized Hackage

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.