Copyright | (C) 2015-2017 Ryan Scott |
---|---|

License | BSD-style (see the file LICENSE) |

Maintainer | Ryan Scott |

Portability | Template Haskell |

Safe Haskell | None |

Language | Haskell2010 |

Exports functions to mechanically derive `Eq`

, `Eq1`

, and `Eq2`

instances.

`Eq`

deriveEq :: Name -> Q [Dec] Source #

Generates an `EqClass`

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 `EqClass`

instance).

makeNotEq :: Name -> Q Exp Source #

Generates a lambda expression which behaves like '(/=)' (without
requiring an `EqClass`

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`

.