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

Versions [faq] 0.1.0.0, 0.1.0.1, 0.2.0.0, 0.2.1.0, 0.2.1.1, 0.2.1.2 (info)
Change log ChangeLog.md
Dependencies base (>=4.9 && <4.14), Only (==0.1.*) [details]
License BSD-3-Clause
Author David Millar-Durrant
Maintainer dmillardurrant@gmail.com
Revised Revision 1 made by GeorgeWilson at Sun Sep 15 22:03:45 UTC 2019
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 Sat Oct 6 11:39:32 UTC 2018
Distributions LTSHaskell:0.2.1.2, NixOS:0.2.1.2, Stackage:0.2.1.2
Downloads 2769 total (151 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2018-10-06 [all 1 reports]

Modules

[Index] [Quick Jump]

Downloads

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

For package maintainers and hackage trustees