indexed-list-literals: Type safe indexed list literals

[ bsd3, data, library ] [ Propose Tags ]
This version is deprecated.

This is an incredibly simple library, which makes writing lists where the length is known at compile time a little bit nicer.

If you write a function with the signature

vector :: ILL input length output => input -> Vector length output


v :: Vector 3 Int
v = vector (1,2,3)

x :: Vector 0 Double
x = vector $ ZeroTuple @Double

y :: Vector 1 Double
y = vector (OneTuple 1)

z :: Vector 2 String
z = vector ("Hello", "World")

If want matrix literals you can write a function

matrix :: (ILL row width ty, ILL matrix height row) => matrix -> Matrix width height ty


a :: Matrix 0 0 Bool
a = matrix $ ZeroTuple @(ZeroTuple Bool)

b :: Matrix 1 2 String
b = matrix $ OneTuple ("Hello","World")

c :: Matrix 4 5 Double
c = matrix ((1,2,3,0,0)

The full code is in test/Docs.hs

This only supports literals of length up to 20, though that can be easily extended using the code generator in src/Data/IndexedListLiterals.hs


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS],,,,,, (info)
Change log
Dependencies base (>=4.10 && <4.11), OneTuple (>=0.2.1) [details]
License BSD-3-Clause
Author David Millar-Durrant
Revised Revision 1 made by GeorgeWilson at 2018-04-19T00:21:26Z
Category Data
Home page
Source repo head: git clone
Uploaded by DavidMD at 2018-02-10T17:21:43Z
Distributions Arch:, LTSHaskell:, NixOS:, Stackage:
Reverse Dependencies 2 direct, 79 indirect [details]
Downloads 9447 total (76 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 2018-02-10 [all 1 reports]