generic-deriving: Generic programming library for generalised deriving.

[ bsd3, generics, library ] [ Propose Tags ]

This package provides functionality for generalising the deriving mechanism in Haskell to arbitrary classes. It was first described in the paper:

  • A generic deriving mechanism for Haskell. Jose Pedro Magalhaes, Atze Dijkstra, Johan Jeuring, and Andres Loeh. Haskell'10.

The current implementation integrates with the new GHC Generics. See http://www.haskell.org/haskellwiki/GHC.Generics for more information. Template Haskell code is provided for supporting older GHCs.

This library is organized as follows:

It is worth emphasizing that these modules are primarly intended for educational purposes. Many of the classes in these modules resemble other commonly used classes—for example, GShow from Generics.Deriving.Show resembles Show from base—but in general, the classes that generic-deriving defines are not drop-in replacements. Moreover, the generic defaults that generic-deriving provide often make simplifying assumptions that may violate expectations of how these classes might work elsewhere. For example, the generic default for GShow does not behave exactly like deriving Show would.

If you are seeking GHC.Generics-based defaults for type classes in base, consider using the generic-data library.


[Skip to Readme]

Flags

Automatic Flags
NameDescriptionDefault
base-4-9

Use base-4.9 or later. This version of base uses a DataKinds-based encoding of GHC generics metadata.

Enabled

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

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

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.3, 0.3.1, 0.4, 1.0.1, 1.0.2, 1.0.3, 1.2.1, 1.2.2, 1.3.0, 1.3.1, 1.4.0, 1.5.0, 1.6, 1.6.1, 1.6.2, 1.6.3, 1.7.0, 1.8.0, 1.9.0, 1.10.0, 1.10.1, 1.10.2, 1.10.3, 1.10.4, 1.10.4.1, 1.10.5, 1.10.6, 1.10.7, 1.11, 1.11.1, 1.11.2, 1.12, 1.12.1, 1.12.2, 1.12.3, 1.12.4, 1.13, 1.13.1, 1.14, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.14.5 (info)
Change log CHANGELOG.md
Dependencies base (>=4.3 && <5), containers (>=0.1 && <0.8), ghc-prim (<1), template-haskell (>=2.4 && <2.22), th-abstraction (>=0.4 && <0.8) [details]
License BSD-3-Clause
Copyright 2011-2013 Universiteit Utrecht, University of Oxford
Author José Pedro Magalhães
Maintainer generics@haskell.org
Revised Revision 2 made by ryanglscott at 2024-03-17T15:43:14Z
Category Generics
Home page https://github.com/dreixel/generic-deriving
Bug tracker https://github.com/dreixel/generic-deriving/issues
Source repo head: git clone https://github.com/dreixel/generic-deriving
Uploaded by ryanglscott at 2023-08-06T15:21:35Z
Distributions Arch:1.14.5, Debian:1.13.1, Fedora:1.14.4, FreeBSD:1.8.0, LTSHaskell:1.14.5, NixOS:1.14.5, Stackage:1.14.5
Reverse Dependencies 56 direct, 14573 indirect [details]
Downloads 142762 total (390 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for generic-deriving-1.14.5

[back to package description]

generic-deriving: Generic programming library for generalised deriving

Hackage Hackage Dependencies Haskell Programming Language BSD3 License Build Status

This package provides functionality for generalising the deriving mechanism in Haskell to arbitrary classes. It was first described in the paper:

The current implementation integrates with the new GHC Generics. See http://www.haskell.org/haskellwiki/GHC.Generics for more information. Template Haskell code is provided for supporting older GHCs.

This library is organized as follows:

  • Generics.Deriving.Base defines the core functionality for GHC generics, including the Generic(1) classes and representation data types. On modern versions of GHC, this simply re-exports GHC.Generics from base. On older versions of GHC, this module backports parts of GHC.Generics that were not included at the time, including Generic(1) instances.

  • Generics.Deriving.TH implements Template Haskell functionality for deriving instances of Generic(1).

  • Educational code: in order to provide examples of how to define and use GHC.Generics-based defaults, this library offers a number of modules which define examples of type classes along with default implementations for the classes' methods. Currently, the following modules are provided:

    • Generics.Deriving.Copoint

    • Generics.Deriving.ConNames

    • Generics.Deriving.Enum

    • Generics.Deriving.Eq

    • Generics.Deriving.Foldable

    • Generics.Deriving.Functor

    • Generics.Deriving.Monoid

    • Generics.Deriving.Semigroup

    • Generics.Deriving.Show

    • Generics.Deriving.Traversable

    • Generics.Deriving.Uniplate

    It is worth emphasizing that these modules are primarly intended for educational purposes. Many of the classes in these modules resemble other commonly used classes—for example, GShow from Generics.Deriving.Show resembles Show from base—but in general, the classes that generic-deriving defines are not drop-in replacements. Moreover, the generic defaults that generic-deriving provide often make simplifying assumptions that may violate expectations of how these classes might work elsewhere. For example, the generic default for GShow does not behave exactly like deriving Show would.

    If you are seeking GHC.Generics-based defaults for type classes in base, consider using the generic-data library.

  • Generics.Deriving.Default provides newtypes that allow leveraging the generic defaults in this library using the DerivingVia GHC language extension.

  • Generics.Deriving re-exports Generics.Deriving.Base, Generics.Deriving.Default, and a selection of educational modules.