| 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.Ord.Deriving
Contents
Description
Exports functions to mechanically derive Ord, Ord1, and Ord2 instances.
Synopsis
- deriveOrd :: Name -> Q [Dec]
 - makeCompare :: Name -> Q Exp
 - makeLT :: Name -> Q Exp
 - makeLE :: Name -> Q Exp
 - makeGT :: Name -> Q Exp
 - makeGE :: Name -> Q Exp
 - makeMax :: Name -> Q Exp
 - makeMin :: Name -> Q Exp
 - deriveOrd1 :: Name -> Q [Dec]
 - makeLiftCompare :: Name -> Q Exp
 - makeCompare1 :: Name -> Q Exp
 - deriveOrd2 :: Name -> Q [Dec]
 - makeLiftCompare2 :: Name -> Q Exp
 - makeCompare2 :: Name -> Q Exp
 
Ord
deriveOrd :: Name -> Q [Dec] Source #
Generates an OrdClass 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 OrdClass instance).
makeLT :: Name -> Q Exp Source #
Generates a lambda expression which behaves like '(<)' (without
 requiring an OrdClass instance).
makeLE :: Name -> Q Exp Source #
Generates a lambda expression which behaves like '(<=)' (without
 requiring an OrdClass instance).
makeGT :: Name -> Q Exp Source #
Generates a lambda expression which behaves like '(>)' (without
 requiring an OrdClass instance).
makeGE :: Name -> Q Exp Source #
Generates a lambda expression which behaves like '(>=)' (without
 requiring an OrdClass instance).
makeMax :: Name -> Q Exp Source #
Generates a lambda expression which behaves like max (without
 requiring an OrdClass instance).
makeMin :: Name -> Q Exp Source #
Generates a lambda expression which behaves like min (without
 requiring an OrdClass 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 haveOrdconstraints. Type variables of kind* -> *are assumed to haveOrd1constraints. Type variables of kind* -> * -> *are assumed to haveOrd2constraints. If this is not desirable, usemakeCompareor one of its cousins. - The 
Ord1class had a different definition intransformers-0.4, and as a result,deriveOrd1implements different instances for thetransformers-0.4Ord1than it otherwise does. Also,makeLiftCompareis not available when this library is built againsttransformers-0.4, only 'makeCompare1. - The 
Ord2class is not available intransformers-0.4, and as a result, neither are Template Haskell functions that deal withOrd2when this library is built againsttransformers-0.4.