{-# LANGUAGE CPP #-} {-| Module: Text.Read.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 'Read', 'Read1', and 'Read2' instances. -} module Text.Read.Deriving ( -- * 'Read' deriveRead , deriveReadOptions , makeReadsPrec -- , makeReadsPrecOptions -- , makeReadList -- , makeReadListOptions , makeReadPrec -- , makeReadPrecOptions -- , makeReadListPrec -- , makeReadListPrecOptions -- * 'Read1' , deriveRead1 , deriveRead1Options #if defined(NEW_FUNCTOR_CLASSES) , makeLiftReadsPrec -- , makeLiftReadsPrecOptions -- , makeLiftReadList -- , makeLiftReadListOptions # if __GLASGOW_HASKELL__ >= 801 , makeLiftReadPrec -- , makeLiftReadPrecOptions -- , makeLiftReadListPrec -- , makeLiftReadListPrecOptions , makeReadPrec1 -- , makeReadPrec1Options # endif #endif , makeReadsPrec1 -- , makeReadsPrec1Options #if defined(NEW_FUNCTOR_CLASSES) -- * 'Read2' , deriveRead2 , deriveRead2Options , makeLiftReadsPrec2 -- , makeLiftReadsPrec2Options -- , makeLiftReadList2 -- , makeLiftReadList2Options # if __GLASGOW_HASKELL__ >= 801 , makeLiftReadPrec2 -- , makeLiftReadPrec2Options -- , makeLiftReadListPrec2 -- , makeLiftReadListPrec2Options , makeReadPrec2 -- , makeReadPrec2Options # endif , makeReadsPrec2 -- , makeReadsPrec2Options #endif -- * 'ReadOptions' , ReadOptions(..) , defaultReadOptions -- * 'deriveRead' limitations -- $constraints ) where import Text.Read.Deriving.Internal {- $constraints Be aware of the following potential gotchas: * Type variables of kind @*@ are assumed to have 'Read' constraints. Type variables of kind @* -> *@ are assumed to have 'Read1' constraints. Type variables of kind @* -> * -> *@ are assumed to have 'Read2' constraints. If this is not desirable, use 'makeReadsPrec' or one of its cousins. * The 'Read1' class had a different definition in @transformers-0.4@, and as a result, 'deriveRead1' implements different instances for the @transformers-0.4@ 'Read1' than it otherwise does. Also, 'makeLiftReadsPrec' and 'makeLiftReadList' are not available when this library is built against @transformers-0.4@, only 'makeReadsPrec1. * The 'Read2' class is not available in @transformers-0.4@, and as a result, neither are Template Haskell functions that deal with 'Read2' when this library is built against @transformers-0.4@. * The 'Read1' and 'Read2' classes have new methods ('liftReadPrec'/'liftReadListPrec' and 'liftReadPrec2'/'liftReadListPrec2', respectively) that were introduced in @base-4.10@. For now, these methods are only defined when deriving 'Read1'/'Read2' if built against @base-4.10@ (until @transformers-compat@ catches up), and the corresponding @make-@ functions are also only available when built against @base-4.10@. -}