Generic programming library for generalised deriving.
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:
Generics.Deriving.Basedefines the core functionality for GHC generics, including theGeneric(1)classes and representation data types. On modern versions of GHC, this simply re-exportsGHC.Genericsfrombase. On older versions of GHC, this module backports parts ofGHC.Genericsthat were not included at the time, includingGeneric(1)instances.Generics.Deriving.THimplements Template Haskell functionality for deriving instances ofGeneric(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, andGenerics.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.Defaultprovides newtypes that allow leveraging the generic defaults in this library using theDerivingViaGHC language extension.Generics.Derivingre-exportsGenerics.Deriving.Base,Generics.Deriving.Default, and a selection of educational modules.
generic-deriving: Generic programming library for generalised deriving
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:
Generics.Deriving.Basedefines the core functionality for GHC generics, including theGeneric(1)classes and representation data types. On modern versions of GHC, this simply re-exportsGHC.Genericsfrombase. On older versions of GHC, this module backports parts ofGHC.Genericsthat were not included at the time, includingGeneric(1)instances.Generics.Deriving.THimplements Template Haskell functionality for deriving instances ofGeneric(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.CopointGenerics.Deriving.ConNamesGenerics.Deriving.EnumGenerics.Deriving.EqGenerics.Deriving.FoldableGenerics.Deriving.FunctorGenerics.Deriving.MonoidGenerics.Deriving.SemigroupGenerics.Deriving.ShowGenerics.Deriving.TraversableGenerics.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,
GShowfromGenerics.Deriving.ShowresemblesShowfrombase—but in general, the classes thatgeneric-derivingdefines are not drop-in replacements. Moreover, the generic defaults thatgeneric-derivingprovide often make simplifying assumptions that may violate expectations of how these classes might work elsewhere. For example, the generic default forGShowdoes not behave exactly likederiving Showwould.If you are seeking
GHC.Generics-based defaults for type classes inbase, consider using thegeneric-datalibrary.Generics.Deriving.Defaultprovides newtypes that allow leveraging the generic defaults in this library using theDerivingViaGHC language extension.Generics.Derivingre-exportsGenerics.Deriving.Base,Generics.Deriving.Default, and a selection of educational modules.