{-# LANGUAGE CPP #-}
{-|
Module: Data.Ord.Deriving
Copyright: (C) 2015-2016 Ryan Scott
License: BSD-style (see the file LICENSE)
Maintainer: Ryan Scott
Portability: Template Haskell
Exports functions to mechanically derive 'Ord', 'Ord1', and 'Ord2' instances.
-}
module Data.Ord.Deriving (
-- * 'Ord'
deriveOrd
, makeCompare
, makeLT
, makeLE
, makeGT
, makeGE
, makeMax
, makeMin
-- * 'Ord1'
, deriveOrd1
#if defined(NEW_FUNCTOR_CLASSES)
, makeLiftCompare
#endif
, makeCompare1
#if defined(NEW_FUNCTOR_CLASSES)
-- * 'Ord2'
, deriveOrd2
, makeLiftCompare2
, makeCompare2
#endif
-- * 'deriveOrd' limitations
-- $constraints
) where
import Data.Ord.Deriving.Internal
{- $constraints
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@.
-}