indexed-list-literals: Type safe indexed list literals

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

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

Properties

Versions 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.2, 0.2.1.3
Change log ChangeLog.md
Dependencies base (>=4.9 && <4.13), 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-10-06T11:38:59Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees