HList: Heterogeneous lists

[ data, library, mit ] [ Propose Tags ]

HList provides many operations to create and manipulate heterogenous lists (HLists) whose length and element types are known at compile-time. HLists are used to implement

  • records

  • variants

  • type-indexed products (TIP)

  • type-indexed co-products (TIC)

  • keyword arguments

User code should import Data.HList or Data.HList.CommonMain for a slightly more limited scope

The original design is described in http://okmij.org/ftp/Haskell/HList-ext.pdf, though since that paper came out, the -XTypeFamiles extension has been used to replace TypeCast with ~.


[Skip to Readme]

Flags

Manual Flags

NameDescriptionDefault
new_type_eq

use Data.Type.Equality.== to define the instance of HEq instead of overlapping instances (in Data.HList.TypeEqO) (needs ghc >= 7.8)

This version does not allow `HEq x [x] f` to lead to f ~ False, unlike the version with overlapping instances. See https://ghc.haskell.org/trac/ghc/ticket/9918

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1, 0.1.1, 0.2, 0.2.1, 0.2.2, 0.2.3, 0.3.0, 0.3.0.1, 0.3.1.0, 0.3.2.0, 0.3.4.0, 0.3.4.1, 0.4.0.0, 0.4.1.0, 0.4.2.0, 0.5.0.0, 0.5.1.0, 0.5.2.0, 0.5.3.0
Change log ChangeLog
Dependencies array, base (>=4.6 && <5), base-orphans, ghc-prim, mtl, profunctors, semigroups, tagged, template-haskell [details]
License MIT
Author 2004 Oleg Kiselyov (FNMOC, Monterey), Ralf Laemmel (CWI/VU, Amsterdam), Keean Schupke (London)
Maintainer oleg@pobox.com
Category Data
Source repo head: git clone https://bitbucket.org/HList/hlist
Uploaded by AdamVogt at 2023-09-23T21:29:44Z
Distributions
Reverse Dependencies 25 direct, 31 indirect [details]
Downloads 19999 total (34 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 2023-09-23 [all 1 reports]

Readme for HList-0.5.3.0

[back to package description]
(C) 2004--2010, Oleg Kiselyov, Ralf Laemmel, Keean Schupke

Contributors:
	Justin Bailey, Brian Bloniarz, Gwern Branwen, Einar Karttunen,
	and Adam Vogt


The HList library and samples

----------------------------------------------------------------------

Getting the code

> git clone https://bitbucket.org/HList/hlist HList

----------------------------------------------------------------------

Pushing changes

You need an account at bitbucket.org

> cd HList
> git clone git@bitbucket.org:HList/hlist.git
> git pull
> git commit --interactive
> git push

----------------------------------------------------------------------

This distribution covers all essential issues discussed in the HList paper,
though the implementation has been adapted to ghc features implemented
after the paper's writing.

Additional examples and HList operations are provided.
The code from the database section of the HList paper is not included
since doing so would have implied inclusion of substantial packages,
namely the underlying infrastructure for database access library.

You can get HList from Hackage or from bitbucket:

$ cabal update && cabal install HList

Or:

$ git clone https://bitbucket.org/HList/hlist HList
$ cd HList; cabal install

The code was tested --- within the limits exercised in the source files ---
with GHC:

  - 9.2.0.20210821
  - 9.0.1
  - 8.10.6
  - 8.8.4
  - 8.6.5
  - 8.4.4

and may still work with GHC-7.6, 7.8, 7.10, 8.2

Older compilers are not supported.

One may run "cabal test" to check the distribution.

See ChangeLog for updates.