| Copyright | (C) 2015-2017 Ryan Scott |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Ryan Scott |
| Portability | Template Haskell |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.Eq.Deriving
Contents
Description
Exports functions to mechanically derive Eq, Eq1, and Eq2 instances.
Eq
deriveEq :: Name -> Q [Dec] Source #
Generates an Eq instance declaration for the given data type or data
family instance.
makeEq :: Name -> Q Exp Source #
Generates a lambda expression which behaves like '(==)' (without
requiring an Eq instance).
makeNotEq :: Name -> Q Exp Source #
Generates a lambda expression which behaves like '(/=)' (without
requiring an Eq instance).
Eq1
deriveEq1 :: Name -> Q [Dec] Source #
Generates an Eq1 instance declaration for the given data type or data
family instance.
makeLiftEq :: Name -> Q Exp Source #
Generates a lambda expression which behaves like liftEq (without
requiring an Eq1 instance).
This function is not available with transformers-0.4.
makeEq1 :: Name -> Q Exp Source #
Generates a lambda expression which behaves like eq1 (without
requiring an Eq1 instance).
Eq2
deriveEq2 :: Name -> Q [Dec] Source #
Generates an Eq2 instance declaration for the given data type or data
family instance.
This function is not available with transformers-0.4.
makeLiftEq2 :: Name -> Q Exp Source #
Generates a lambda expression which behaves like liftEq2 (without
requiring an Eq2 instance).
This function is not available with transformers-0.4.
makeEq2 :: Name -> Q Exp Source #
Generates a lambda expression which behaves like eq2 (without
requiring an Eq2 instance).
This function is not available with transformers-0.4.
deriveEq limitations
Be aware of the following potential gotchas:
- Type variables of kind
*are assumed to haveEqconstraints. Type variables of kind* -> *are assumed to haveEq1constraints. Type variables of kind* -> * -> *are assumed to haveEq2constraints. If this is not desirable, usemakeEqor one of its cousins. - The
Eq1class had a different definition intransformers-0.4, and as a result,deriveEq1implements different instances for thetransformers-0.4Eq1than it otherwise does. Also,makeLiftEqis not available when this library is built againsttransformers-0.4, only 'makeEq1. - The
Eq2class is not available intransformers-0.4, and as a result, neither are Template Haskell functions that deal withEq2when this library is built againsttransformers-0.4.