-- Initial indexed-container-literals.cabal generated by cabal init. For -- further documentation, see http://haskell.org/cabal/users-guide/ name: indexed-list-literals version: 0.1.0.0 synopsis: Type safe indexed list literals homepage: https://github.com/davidm-d/indexed-list-literals license: BSD3 license-file: LICENSE author: David Millar-Durrant maintainer: dmillardurrant@gmail.com description: 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 -- copyright: category: Data build-type: Simple extra-source-files: ChangeLog.md cabal-version: >=1.10 library exposed-modules: Data.IndexedListLiterals -- other-modules: -- other-extensions: build-depends: base >=4.9 && <= 4.11 , OneTuple >= 0.2.1 hs-source-dirs: src default-language: Haskell2010 test-suite IndexedListLiterals-test type: exitcode-stdio-1.0 main-is: Docs.hs build-depends: base, indexed-list-literals hs-source-dirs: test default-language: Haskell2010 source-repository head type: git location: https://github.com/davidm-d/indexed-list-literals