deriving-compat-0.3.6: src/Text/Read/Deriving.hs
{-# 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@.
-}