deriving-compat-0.5.9: Backports of GHC deriving extensions

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

- `Eq`
- `Eq1`
- `Eq2`
- `deriveEq` limitations

Description

Exports functions to mechanically derive `Eq`, `Eq1`, and `Eq2` instances.

Synopsis

- deriveEq :: Name -> Q [Dec]
- makeEq :: Name -> Q Exp
- makeNotEq :: Name -> Q Exp
- deriveEq1 :: Name -> Q [Dec]
- makeLiftEq :: Name -> Q Exp
- makeEq1 :: Name -> Q Exp
- deriveEq2 :: Name -> Q [Dec]
- makeLiftEq2 :: Name -> Q Exp
- makeEq2 :: Name -> Q Exp

# `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 have `Eq` constraints. Type variables of kind `* -> *` are assumed to have `Eq1` constraints. Type variables of kind `* -> * -> *` are assumed to have `Eq2` constraints. If this is not desirable, use `makeEq` or one of its cousins.
- The `Eq1` class had a different definition in `transformers-0.4`, and as a result, `deriveEq1` implements different instances for the `transformers-0.4` `Eq1` than it otherwise does. Also, `makeLiftEq` is not available when this library is built against `transformers-0.4`, only 'makeEq1.
- The `Eq2` class is not available in `transformers-0.4`, and as a result, neither are Template Haskell functions that deal with `Eq2` when this library is built against `transformers-0.4`.