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]

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 (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

then

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)
           ,(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

Versions0.1.0.0, 0.1.0.0, 0.1.0.1, 0.2.0.0, 0.2.1.0, 0.2.1.1, 0.2.1.2
Change logChangeLog.md
Dependenciesbase (>=4.9 && <=4.11), OneTuple (>=0.2.1) [details]
LicenseBSD-3-Clause
AuthorDavid Millar-Durrant
Maintainerdmillardurrant@gmail.com
CategoryData
Home pagehttps://github.com/davidm-d/indexed-list-literals
Source repositoryhead: git clone https://github.com/davidm-d/indexed-list-literals
UploadedSat Feb 10 17:19:53 UTC 2018 by DavidMD

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees