1{-# LANGUAGE CPP #-}
2
3{-|
4Module:      Data.Functor.Classes.Generic
5Copyright:   (C) 2015-2016 Edward Kmett, Ryan Scott
6License:     BSD-style (see the file LICENSE)
7Maintainer:  Ryan Scott
8Stability:   Provisional
9Portability: GHC
10
11Functions to generically derive 'C.Eq1', 'C.Ord1', 'C.Read1', and 'C.Show1'
12instances from "Data.Functor.Classes".
13-}
14module Data.Functor.Classes.Generic
15  ( -- * Options
16    Options(..)
17  , defaultOptions
18  , latestGHCOptions
19#if defined(TRANSFORMERS_FOUR)
20    -- * 'Eq1'
21  , eq1Default
22  , eq1Options
23    -- * 'Ord1'
24  , compare1Default
25  , compare1Options
26    -- * 'Read1'
27  , readsPrec1Default
28  , readsPrec1Options
29    -- * 'Show1'
30  , showsPrec1Default
31  , showsPrec1Options
32#else
33    -- * 'Eq1'
34  , liftEqDefault
35  , liftEqOptions
36    -- * 'Ord1'
37  , liftCompareDefault
38  , liftCompareOptions
39    -- * 'Read1'
40  , liftReadsPrecDefault
41  , liftReadsPrecOptions
42    -- * 'Show1'
43  , liftShowsPrecDefault
44  , liftShowsPrecOptions
45#endif
46    -- * Example
47    -- $example
48  ) where
49
50import qualified Data.Functor.Classes as C ()
51import           Data.Functor.Classes.Generic.Internal
52
53#undef MIN_VERSION_transformers
54{- $example
55Note that this module exports different functions depending on which version of
56@transformers@ this library is built against. Here is an example of how to
57use this module correctly:
58
59@
60{-# LANGUAGE DeriveGeneric #-}
61
62import Data.Functor.Classes
63import Data.Functor.Classes.Generic
64import GHC.Generics
65
66data Pair a = Pair a a deriving Generic1
67
68instance 'C.Eq1' Pair where
69\#if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))
70    'C.eq1' = 'eq1Default'
71\#else
72    'C.liftEq' = 'liftEqDefault'
73\#endif
74
75instance 'C.Ord1' Pair where
76\#if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))
77    'C.compare1' = 'compare1Default'
78\#else
79    'C.liftCompare' = 'liftCompareDefault'
80\#endif
81
82instance 'C.Read1' Pair where
83\#if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))
84    'C.readsPrec1' = 'readsPrec1Default'
85\#else
86    'C.liftReadsPrec' = 'liftReadsPrecDefault'
87\#endif
88
89instance 'C.Show1' Pair where
90\#if MIN_VERSION_transformers(0,4,0) && !(MIN_VERSION_transformers(0,5,0))
91    'C.showsPrec1' = 'showsPrec1Default'
92\#else
93    'C.liftShowsPrec' = 'liftShowsPrecDefault'
94\#endif
95@
96-}
97