indexed-list-literals: Type safe indexed list literals

[ bsd3, data, library ] [ Propose Tags ]

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

then

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

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

y :: Vector 1 Double
y = vector (Only 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

then

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

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

c :: Matrix 4 5 Double
c = matrix ((1,2,3,0,0)
           ,(4,5,6,0,0)
           ,(7,8,9,0,0)
           ,(0,0,0,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

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 0.1.0.1, 0.2.0.0, 0.2.1.0, 0.2.1.1, 0.2.1.2, 0.2.1.3 (info)
Change log ChangeLog.md
Dependencies base (>=4.9 && <4.12), Only (>=0.1 && <0.2) [details]
License BSD-3-Clause
Author David Millar-Durrant
Maintainer dmillardurrant@gmail.com
Category Data
Home page https://github.com/davidm-d/indexed-list-literals
Source repo head: git clone https://github.com/davidm-d/indexed-list-literals
Uploaded by DavidMD at 2018-05-17T09:23:23Z
Distributions Arch:0.2.1.3, LTSHaskell:0.2.1.3, NixOS:0.2.1.3, Stackage:0.2.1.3
Reverse Dependencies 2 direct, 79 indirect [details]
Downloads 9754 total (66 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-05-17 [all 1 reports]