Utilities for GHC.Generics

Version on this page:
Stackage Nightly 2018-12-14:
Latest on Hackage:

See all snapshots generic-data appears in

MIT licensed by Li-yao Xia
Maintained by

Module documentation for

There are no documented modules for this package.

Generic data types in Haskell Hackage Build Status

Utilities for GHC.Generics.

Generic deriving for standard classes

Supported classes that GHC currently can’t derive: Semigroup, Monoid, Applicative, Alternative, Eq1, Ord1, Show1.

Other classes from base are also supported, even though GHC can already derive them:

  • Eq, Ord, Enum, Bounded, Show (standard);
  • Functor, Foldable, Traversable (via extensions, DeriveFunctor, etc.).

(Read is currently not implemented.)

To derive type classes defined elsewhere, it might be worth taking a look at one-liner.

Type metadata

Extract type names, constructor names, number and arities of constructors, etc..

Related links

generic-data aims to subsume generic deriving features of the following packages:

  • semigroups: generic Semigroup, Monoid, but with a heavy dependency footprint.
  • transformers-compat: generic Eq1, Ord1, Show1.
  • generic-deriving: doesn’t derive the classes in base (defines clones of these classes as a toy example); has Template Haskell code to derive Generic.

Here are other relevant links.

All contributions are welcome. Open an issue or a pull request on Github!


  • Add generic implementations of enumFrom, enumFromThen, enumFromTo, enumFromThenTo. They are actually required to be explicit for correct Enum instances. Thanks to Topsii.
  • Parameterize GEnum by a type-level option, and add FiniteEnum option to allow Enum to be derived for composite types. Thanks to Topsii.

  • Remove Generic.Data.Types.Map
  • Add Generic.Data.Data.Types.toData and fromData
  • Remove Defun module (subsumed by first-class-families package)

  • Add gconIndex
  • Interface for constructor tags
  • Type-level Meta accessors
  • Add basic Newtype functions

Released generic-data

comments powered byDisqus