Copyright | (C) 2015-2017 Ryan Scott |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Ryan Scott |
Portability | Template Haskell |
Safe Haskell | None |
Language | Haskell2010 |
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 haveOrd
constraints. Type variables of kind* -> *
are assumed to haveOrd1
constraints. Type variables of kind* -> * -> *
are assumed to haveOrd2
constraints. If this is not desirable, usemakeCompare
or one of its cousins. - The
Ord1
class had a different definition intransformers-0.4
, and as a result,deriveOrd1
implements different instances for thetransformers-0.4
Ord1
than it otherwise does. Also,makeLiftCompare
is not available when this library is built againsttransformers-0.4
, only 'makeCompare1. - The
Ord2
class is not available intransformers-0.4
, and as a result, neither are Template Haskell functions that deal withOrd2
when this library is built againsttransformers-0.4
.