| Copyright | (C) 2015-2017 Ryan Scott |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Ryan Scott |
| Portability | Template Haskell |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Text.Read.Deriving
Description
Exports functions to mechanically derive Read, Read1, and Read2 instances.
Note that upstream GHC does not have the ability to derive Read1 or Read2
instances, but since the functionality to derive Read extends very naturally
Read1 and Read2, the ability to derive the latter two classes is provided as a
convenience.
Synopsis
- deriveRead :: Name -> Q [Dec]
- deriveReadOptions :: ReadOptions -> Name -> Q [Dec]
- makeReadsPrec :: Name -> Q Exp
- makeReadPrec :: Name -> Q Exp
- deriveRead1 :: Name -> Q [Dec]
- deriveRead1Options :: ReadOptions -> Name -> Q [Dec]
- makeLiftReadsPrec :: Name -> Q Exp
- makeLiftReadPrec :: Name -> Q Exp
- makeReadPrec1 :: Name -> Q Exp
- makeReadsPrec1 :: Name -> Q Exp
- deriveRead2 :: Name -> Q [Dec]
- deriveRead2Options :: ReadOptions -> Name -> Q [Dec]
- makeLiftReadsPrec2 :: Name -> Q Exp
- makeLiftReadPrec2 :: Name -> Q Exp
- makeReadPrec2 :: Name -> Q Exp
- makeReadsPrec2 :: Name -> Q Exp
- newtype ReadOptions = ReadOptions {
- useReadPrec :: Bool
- defaultReadOptions :: ReadOptions
Read
deriveRead :: Name -> Q [Dec] Source #
Generates a ReadClass instance declaration for the given data type or data
family instance.
deriveReadOptions :: ReadOptions -> Name -> Q [Dec] Source #
Like deriveRead, but takes a ReadOptions argument.
makeReadsPrec :: Name -> Q Exp Source #
Generates a lambda expression which behaves like readsPrec (without
requiring a ReadClass instance).
makeReadPrec :: Name -> Q Exp Source #
Generates a lambda expression which behaves like readPrec (without
requiring a ReadClass instance).
Read1
deriveRead1 :: Name -> Q [Dec] Source #
Generates a Read1 instance declaration for the given data type or data
family instance.
deriveRead1Options :: ReadOptions -> Name -> Q [Dec] Source #
Like deriveRead1, but takes a ReadOptions argument.
makeLiftReadsPrec :: Name -> Q Exp Source #
Generates a lambda expression which behaves like liftReadsPrec (without
requiring a Read1 instance).
This function is not available with transformers-0.4.
makeLiftReadPrec :: Name -> Q Exp Source #
Generates a lambda expression which behaves like liftReadPrec (without
requiring a Read1 instance).
This function is only available with base-4.10 or later.
makeReadPrec1 :: Name -> Q Exp Source #
Generates a lambda expression which behaves like readPrec1 (without
requiring a Read1 instance).
This function is only available with base-4.10 or later.
makeReadsPrec1 :: Name -> Q Exp Source #
Generates a lambda expression which behaves like readsPrec1 (without
requiring a Read1 instance).
Read2
deriveRead2 :: Name -> Q [Dec] Source #
Generates a Read2 instance declaration for the given data type or data
family instance.
This function is not available with transformers-0.4.
deriveRead2Options :: ReadOptions -> Name -> Q [Dec] Source #
Like deriveRead2, but takes a ReadOptions argument.
This function is not available with transformers-0.4.
makeLiftReadsPrec2 :: Name -> Q Exp Source #
Generates a lambda expression which behaves like liftReadsPrec2 (without
requiring a Read2 instance).
This function is not available with transformers-0.4.
makeLiftReadPrec2 :: Name -> Q Exp Source #
Generates a lambda expression which behaves like liftReadPrec2 (without
requiring a Read2 instance).
This function is only available with base-4.10 or later.
makeReadPrec2 :: Name -> Q Exp Source #
Generates a lambda expression which behaves like readPrec2 (without
requiring a Read2 instance).
This function is only available with base-4.10 or later.
makeReadsPrec2 :: Name -> Q Exp Source #
Generates a lambda expression which behaves like readsPrec2 (without
requiring a Read2 instance).
This function is not available with transformers-0.4.
ReadOptions
newtype ReadOptions Source #
Options that further configure how the functions in Text.Read.Deriving should behave.
Constructors
| ReadOptions | |
Fields
| |
Instances
| Read ReadOptions Source # | |
Defined in Text.Read.Deriving.Internal Methods readsPrec :: Int -> ReadS ReadOptions # readList :: ReadS [ReadOptions] # readPrec :: ReadPrec ReadOptions # readListPrec :: ReadPrec [ReadOptions] # | |
| Show ReadOptions Source # | |
Defined in Text.Read.Deriving.Internal Methods showsPrec :: Int -> ReadOptions -> ShowS # show :: ReadOptions -> String # showList :: [ReadOptions] -> ShowS # | |
| Eq ReadOptions Source # | |
Defined in Text.Read.Deriving.Internal | |
| Ord ReadOptions Source # | |
Defined in Text.Read.Deriving.Internal Methods compare :: ReadOptions -> ReadOptions -> Ordering # (<) :: ReadOptions -> ReadOptions -> Bool # (<=) :: ReadOptions -> ReadOptions -> Bool # (>) :: ReadOptions -> ReadOptions -> Bool # (>=) :: ReadOptions -> ReadOptions -> Bool # max :: ReadOptions -> ReadOptions -> ReadOptions # min :: ReadOptions -> ReadOptions -> ReadOptions # | |
defaultReadOptions :: ReadOptions Source #
ReadOptions that favor readPrec over readsPrec.
deriveRead limitations
Be aware of the following potential gotchas:
- Type variables of kind
*are assumed to haveReadconstraints. Type variables of kind* -> *are assumed to haveRead1constraints. Type variables of kind* -> * -> *are assumed to haveRead2constraints. If this is not desirable, usemakeReadsPrecor one of its cousins. - The
Read1class had a different definition intransformers-0.4, and as a result,deriveRead1implements different instances for thetransformers-0.4Read1than it otherwise does. Also,makeLiftReadsPrecandmakeLiftReadListare not available when this library is built againsttransformers-0.4, only 'makeReadsPrec1. - The
Read2class is not available intransformers-0.4, and as a result, neither are Template Haskell functions that deal withRead2when this library is built againsttransformers-0.4. - The
Read1andRead2classes have new methods (liftReadPrec/liftReadListPrecandliftReadPrec2/liftReadListPrec2, respectively) that were introduced inbase-4.10. For now, these methods are only defined when derivingRead1/Read2if built againstbase-4.10(untiltransformers-compatcatches up), and the correspondingmake-functions are also only available when built againstbase-4.10.