deriving-compat-0.5: Backports of GHC deriving extensions

Copyright(C) 2015-2017 Ryan Scott
LicenseBSD-style (see the file LICENSE)
MaintainerRyan Scott
PortabilityTemplate Haskell
Safe HaskellNone
LanguageHaskell2010

Data.Ord.Deriving

Contents

Description

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

Synopsis

Ord

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

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

makeCompare :: Name -> Q Exp Source #

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

makeLT :: Name -> Q Exp Source #

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

makeLE :: Name -> Q Exp Source #

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

makeGT :: Name -> Q Exp Source #

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

makeGE :: Name -> Q Exp Source #

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

makeMax :: Name -> Q Exp Source #

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

makeMin :: Name -> Q Exp Source #

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

Ord1

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

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

makeLiftCompare :: Name -> Q Exp Source #

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

This function is not available with transformers-0.4.

makeCompare1 :: Name -> Q Exp Source #

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

Ord2

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

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

This function is not available with transformers-0.4.

makeLiftCompare2 :: Name -> Q Exp Source #

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

This function is not available with transformers-0.4.

makeCompare2 :: Name -> Q Exp Source #

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.