{-# LANGUAGE CPP #-} {-| Module: Text.Show.Deriving Copyright: (C) 2015-2017 Ryan Scott License: BSD-style (see the file LICENSE) Maintainer: Ryan Scott Portability: Template Haskell Exports functions to mechanically derive 'Show', 'Show1', and 'Show2' instances. -} module Text.Show.Deriving ( -- * 'Show' deriveShow , deriveShowOptions , makeShowsPrec , makeShowsPrecOptions , makeShow , makeShowOptions , makeShowList , makeShowListOptions -- * 'Show1' , deriveShow1 , deriveShow1Options #if defined(NEW_FUNCTOR_CLASSES) , makeLiftShowsPrec , makeLiftShowsPrecOptions , makeLiftShowList , makeLiftShowListOptions #endif , makeShowsPrec1 , makeShowsPrec1Options #if defined(NEW_FUNCTOR_CLASSES) -- * 'Show2' , deriveShow2 , deriveShow2Options , makeLiftShowsPrec2 , makeLiftShowsPrec2Options , makeLiftShowList2 , makeLiftShowList2Options , makeShowsPrec2 , makeShowsPrec2Options #endif -- * 'ShowOptions' , ShowOptions(..) , defaultShowOptions , legacyShowOptions -- * 'deriveShow' limitations -- $constraints ) where import Text.Show.Deriving.Internal {- $constraints Be aware of the following potential gotchas: * Type variables of kind @*@ are assumed to have 'Show' constraints. Type variables of kind @* -> *@ are assumed to have 'Show1' constraints. Type variables of kind @* -> * -> *@ are assumed to have 'Show2' constraints. If this is not desirable, use 'makeShowsPrec' or one of its cousins. * The 'Show1' class had a different definition in @transformers-0.4@, and as a result, 'deriveShow1' implements different instances for the @transformers-0.4@ 'Show1' than it otherwise does. Also, 'makeLiftShowsPrec' and 'makeLiftShowList' are not available when this library is built against @transformers-0.4@, only 'makeShowsPrec1. * The 'Show2' class is not available in @transformers-0.4@, and as a result, neither are Template Haskell functions that deal with 'Show2' when this library is built against @transformers-0.4@. -}