deriving-compat-0.3: Backports of GHC deriving extensions

Data.Eq.Deriving

Description

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

Synopsis

# Eq

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

Generates an Eq instance declaration for the given data type or data family instance.

Generates a lambda expression which behaves like '(==)' (without requiring an Eq instance).

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.

Generates a lambda expression which behaves like liftEq (without requiring an Eq1 instance).

This function is not available with transformers-0.4.

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.

Generates a lambda expression which behaves like liftEq2 (without requiring an Eq2 instance).

This function is not available with transformers-0.4.

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.