| Copyright | (C) 2015-2017 Ryan Scott |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Ryan Scott |
| Portability | Template Haskell |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Data.Ord.Deriving
Contents
Description
Exports functions to mechanically derive Ord, Ord1, and Ord2 instances.
Note that upstream GHC does not have the ability to derive Ord1 or Ord2
instances, but since the functionality to derive Ord extends very naturally
Ord1 and Ord2, the ability to derive the latter two classes is provided as a
convenience.
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.