template-haskell-2.3.0.0ContentsIndex
Language.Haskell.TH.Syntax
Portabilityportable
Stabilityexperimental
Maintainerlibraries@haskell.org
Description
Abstract syntax definitions for Template Haskell.
Synopsis
class (Monad m, Functor m) => Quasi m where
qNewName :: String -> m Name
qReport :: Bool -> String -> m ()
qRecover :: m a -> m a -> m a
qReify :: Name -> m Info
qLocation :: m Loc
qRunIO :: IO a -> m a
class Lift t where
lift :: t -> Q Exp
data Q a
runQ :: Quasi m => Q a -> m a
report :: Bool -> String -> Q ()
recover :: Q a -> Q a -> Q a
reify :: Name -> Q Info
location :: Q Loc
runIO :: IO a -> Q a
data Name = Name OccName NameFlavour
mkName :: String -> Name
newName :: String -> Q Name
nameBase :: Name -> String
nameModule :: Name -> Maybe String
showName :: Name -> String
showName' :: NameIs -> Name -> String
data NameIs
= Alone
| Applied
| Infix
data Dec
= FunD Name [Clause]
| ValD Pat Body [Dec]
| DataD Cxt Name [Name] [Con] [Name]
| NewtypeD Cxt Name [Name] Con [Name]
| TySynD Name [Name] Type
| ClassD Cxt Name [Name] [FunDep] [Dec]
| InstanceD Cxt Type [Dec]
| SigD Name Type
| ForeignD Foreign
data Exp
= VarE Name
| ConE Name
| LitE Lit
| AppE Exp Exp
| InfixE (Maybe Exp) Exp (Maybe Exp)
| LamE [Pat] Exp
| TupE [Exp]
| CondE Exp Exp Exp
| LetE [Dec] Exp
| CaseE Exp [Match]
| DoE [Stmt]
| CompE [Stmt]
| ArithSeqE Range
| ListE [Exp]
| SigE Exp Type
| RecConE Name [FieldExp]
| RecUpdE Exp [FieldExp]
data Con
= NormalC Name [StrictType]
| RecC Name [VarStrictType]
| InfixC StrictType Name StrictType
| ForallC [Name] Cxt Con
data Type
= ForallT [Name] Cxt Type
| VarT Name
| ConT Name
| TupleT Int
| ArrowT
| ListT
| AppT Type Type
type Cxt = [Type]
data Match = Match Pat Body [Dec]
data Clause = Clause [Pat] Body [Dec]
data Body
= GuardedB [(Guard, Exp)]
| NormalB Exp
data Guard
= NormalG Exp
| PatG [Stmt]
data Stmt
= BindS Pat Exp
| LetS [Dec]
| NoBindS Exp
| ParS [[Stmt]]
data Range
= FromR Exp
| FromThenR Exp Exp
| FromToR Exp Exp
| FromThenToR Exp Exp Exp
data Lit
= CharL Char
| StringL String
| IntegerL Integer
| RationalL Rational
| IntPrimL Integer
| WordPrimL Integer
| FloatPrimL Rational
| DoublePrimL Rational
data Pat
= LitP Lit
| VarP Name
| TupP [Pat]
| ConP Name [Pat]
| InfixP Pat Name Pat
| TildeP Pat
| AsP Name Pat
| WildP
| RecP Name [FieldPat]
| ListP [Pat]
| SigP Pat Type
type FieldExp = (Name, Exp)
type FieldPat = (Name, Pat)
data Strict
= IsStrict
| NotStrict
data Foreign
= ImportF Callconv Safety String Name Type
| ExportF Callconv String Name Type
data Callconv
= CCall
| StdCall
data Safety
= Unsafe
| Safe
| Threadsafe
type StrictType = (Strict, Type)
type VarStrictType = (Name, Strict, Type)
data FunDep = FunDep [Name] [Name]
data Info
= ClassI Dec
| ClassOpI Name Type Name Fixity
| TyConI Dec
| PrimTyConI Name Int Bool
| DataConI Name Type Name Fixity
| VarI Name Type (Maybe Dec) Fixity
| TyVarI Name Type
data Loc = Loc {
loc_filename :: String
loc_package :: String
loc_module :: String
loc_start :: CharPos
loc_end :: CharPos
}
type CharPos = (Int, Int)
data Fixity = Fixity Int FixityDirection
data FixityDirection
= InfixL
| InfixR
| InfixN
defaultFixity :: Fixity
maxPrecedence :: Int
returnQ :: a -> Q a
bindQ :: Q a -> (a -> Q b) -> Q b
sequenceQ :: [Q a] -> Q [a]
data NameFlavour
= NameS
| NameQ ModName
| NameU Int#
| NameL Int#
| NameG NameSpace PkgName ModName
data NameSpace
= VarName
| DataName
| TcClsName
mkNameG_tc :: String -> String -> String -> Name
type Uniq = Int
mkNameL :: String -> Uniq -> Name
mkNameU :: String -> Uniq -> Name
tupleTypeName :: Int -> Name
tupleDataName :: Int -> Name
type OccName = PackedString
mkOccName :: String -> OccName
occString :: OccName -> String
type ModName = PackedString
mkModName :: String -> ModName
modString :: ModName -> String
type PkgName = PackedString
mkPkgName :: String -> PkgName
pkgString :: PkgName -> String
Documentation
class (Monad m, Functor m) => Quasi m where
Methods
qNewName :: String -> m Name
qReport :: Bool -> String -> m ()
qRecover :: m a -> m a -> m a
qReify :: Name -> m Info
qLocation :: m Loc
qRunIO :: IO a -> m a
show/hide Instances
class Lift t where
Methods
lift :: t -> Q Exp
show/hide Instances
Lift Bool
Lift Char
Lift Int
Lift Integer
Lift a => Lift ([] a)
Lift a => Lift (Maybe a)
(Lift a, Lift b) => Lift (Either a b)
(Lift a, Lift b) => Lift ((,) a b)
(Lift a, Lift b, Lift c) => Lift ((,,) a b c)
(Lift a, Lift b, Lift c, Lift d) => Lift ((,,,) a b c d)
(Lift a, Lift b, Lift c, Lift d, Lift e) => Lift ((,,,,) a b c d e)
(Lift a, Lift b, Lift c, Lift d, Lift e, Lift f) => Lift ((,,,,,) a b c d e f)
(Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g) => Lift ((,,,,,,) a b c d e f g)
data Q a
show/hide Instances
runQ :: Quasi m => Q a -> m a
report :: Bool -> String -> Q ()
recover :: Q a -> Q a -> Q a
reify :: Name -> Q Info
reify looks up information about the Name
location :: Q Loc
location gives you the Location at which this computation is spliced.
runIO :: IO a -> Q a

The runIO function lets you run an I/O computation in the Q monad. Take care: you are guaranteed the ordering of calls to runIO within a single Q computation, but not about the order in which splices are run.

Note: for various murky reasons, stdout and stderr handles are not necesarily flushed when the compiler finishes running, so you should flush them yourself.

data Name
Constructors
Name OccName NameFlavour
show/hide Instances
mkName :: String -> Name
newName :: String -> Q Name
nameBase :: Name -> String
nameModule :: Name -> Maybe String
showName :: Name -> String
showName' :: NameIs -> Name -> String
data NameIs
Constructors
Alone
Applied
Infix
data Dec
Constructors
FunD Name [Clause]
ValD Pat Body [Dec]
DataD Cxt Name [Name] [Con] [Name]
NewtypeD Cxt Name [Name] Con [Name]
TySynD Name [Name] Type
ClassD Cxt Name [Name] [FunDep] [Dec]
InstanceD Cxt Type [Dec]
SigD Name Type
ForeignD Foreign
show/hide Instances
data Exp
Constructors
VarE Name
ConE Name
LitE Lit
AppE Exp Exp
InfixE (Maybe Exp) Exp (Maybe Exp)
LamE [Pat] Exp
TupE [Exp]
CondE Exp Exp Exp
LetE [Dec] Exp
CaseE Exp [Match]
DoE [Stmt]
CompE [Stmt]
ArithSeqE Range
ListE [Exp]
SigE Exp Type
RecConE Name [FieldExp]
RecUpdE Exp [FieldExp]
show/hide Instances
data Con
Constructors
NormalC Name [StrictType]
RecC Name [VarStrictType]
InfixC StrictType Name StrictType
ForallC [Name] Cxt Con
show/hide Instances
data Type
Constructors
ForallT [Name] Cxt Type
VarT Name
ConT Name
TupleT Int
ArrowT
ListT
AppT Type Type
show/hide Instances
type Cxt = [Type]
data Match
Constructors
Match Pat Body [Dec]
show/hide Instances
data Clause
Constructors
Clause [Pat] Body [Dec]
show/hide Instances
data Body
Constructors
GuardedB [(Guard, Exp)]
NormalB Exp
show/hide Instances
data Guard
Constructors
NormalG Exp
PatG [Stmt]
show/hide Instances
data Stmt
Constructors
BindS Pat Exp
LetS [Dec]
NoBindS Exp
ParS [[Stmt]]
show/hide Instances
data Range
Constructors
FromR Exp
FromThenR Exp Exp
FromToR Exp Exp
FromThenToR Exp Exp Exp
show/hide Instances
data Lit
Constructors
CharL Char
StringL String
IntegerL Integer
RationalL Rational
IntPrimL Integer
WordPrimL Integer
FloatPrimL Rational
DoublePrimL Rational
show/hide Instances
data Pat
Constructors
LitP Lit
VarP Name
TupP [Pat]
ConP Name [Pat]
InfixP Pat Name Pat
TildeP Pat
AsP Name Pat
WildP
RecP Name [FieldPat]
ListP [Pat]
SigP Pat Type
show/hide Instances
type FieldExp = (Name, Exp)
type FieldPat = (Name, Pat)
data Strict
Constructors
IsStrict
NotStrict
show/hide Instances
data Foreign
Constructors
ImportF Callconv Safety String Name Type
ExportF Callconv String Name Type
show/hide Instances
data Callconv
Constructors
CCall
StdCall
show/hide Instances
data Safety
Constructors
Unsafe
Safe
Threadsafe
show/hide Instances
type StrictType = (Strict, Type)
type VarStrictType = (Name, Strict, Type)
data FunDep
Constructors
FunDep [Name] [Name]
show/hide Instances
data Info
Constructors
ClassI Dec
ClassOpI Name Type Name Fixity
TyConI Dec
PrimTyConI Name Int Bool
DataConI Name Type Name Fixity
VarI Name Type (Maybe Dec) Fixity
TyVarI Name Type
show/hide Instances
data Loc
Constructors
Loc
loc_filename :: String
loc_package :: String
loc_module :: String
loc_start :: CharPos
loc_end :: CharPos
type CharPos = (Int, Int)
data Fixity
Constructors
Fixity Int FixityDirection
show/hide Instances
data FixityDirection
Constructors
InfixL
InfixR
InfixN
show/hide Instances
defaultFixity :: Fixity
maxPrecedence :: Int
returnQ :: a -> Q a
bindQ :: Q a -> (a -> Q b) -> Q b
sequenceQ :: [Q a] -> Q [a]
data NameFlavour
Constructors
NameS
NameQ ModName
NameU Int#
NameL Int#
NameG NameSpace PkgName ModName
show/hide Instances
data NameSpace
Constructors
VarName
DataName
TcClsName
show/hide Instances
mkNameG_tc :: String -> String -> String -> Name
type Uniq = Int
mkNameL :: String -> Uniq -> Name
mkNameU :: String -> Uniq -> Name
tupleTypeName :: Int -> Name
tupleDataName :: Int -> Name
type OccName = PackedString
mkOccName :: String -> OccName
occString :: OccName -> String
type ModName = PackedString
mkModName :: String -> ModName
modString :: ModName -> String
type PkgName = PackedString
mkPkgName :: String -> PkgName
pkgString :: PkgName -> String
Produced by Haddock version 2.3.0