deriving-compat-0.5.6: Backports of GHC deriving extensions

Copyright (C) 2015-2017 Ryan Scott BSD-style (see the file LICENSE) Ryan Scott Template Haskell None Haskell2010

Data.Ord.Deriving

Description

Exports functions to mechanically derive Ord, Ord1, and Ord2 instances.

Synopsis

# Ord

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

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

Generates a lambda expression which behaves like compare (without requiring an OrdClass instance).

Generates a lambda expression which behaves like '(<)' (without requiring an OrdClass instance).

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

Generates a lambda expression which behaves like '(>)' (without requiring an OrdClass instance).

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

Generates a lambda expression which behaves like max (without requiring an OrdClass instance).

Generates a lambda expression which behaves like min (without requiring an OrdClass instance).

# Ord1

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

Generates a lambda expression which behaves like liftCompare (without requiring an Ord1 instance).

This function is not available with transformers-0.4.

Generates a lambda expression which behaves like compare1 (without requiring an Ord1 instance).

# Ord2

Generates an Ord2 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 liftCompare2 (without requiring an Ord2 instance).

This function is not available with transformers-0.4.

Generates a lambda expression which behaves like compare2 (without requiring an Ord2 instance).

This function is not available with transformers-0.4.

# deriveOrd limitations

Be aware of the following potential gotchas:

• Type variables of kind * are assumed to have Ord constraints. Type variables of kind * -> * are assumed to have Ord1 constraints. Type variables of kind * -> * -> * are assumed to have Ord2 constraints. If this is not desirable, use makeCompare or one of its cousins.
• The Ord1 class had a different definition in transformers-0.4, and as a result, deriveOrd1 implements different instances for the transformers-0.4 Ord1 than it otherwise does. Also, makeLiftCompare is not available when this library is built against transformers-0.4, only 'makeCompare1.
• The Ord2 class is not available in transformers-0.4, and as a result, neither are Template Haskell functions that deal with Ord2 when this library is built against transformers-0.4.