template-haskell-2.4.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
liftString :: String -> 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 [TyVarBndr] [Con] [Name]
| NewtypeD Cxt Name [TyVarBndr] Con [Name]
| TySynD Name [TyVarBndr] Type
| ClassD Cxt Name [TyVarBndr] [FunDep] [Dec]
| InstanceD Cxt Type [Dec]
| SigD Name Type
| ForeignD Foreign
| PragmaD Pragma
| FamilyD FamFlavour Name [TyVarBndr] (Maybe Kind)
| DataInstD Cxt Name [Type] [Con] [Name]
| NewtypeInstD Cxt Name [Type] Con [Name]
| TySynInstD Name [Type] Type
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 [TyVarBndr] Cxt Con
data Type
= ForallT [TyVarBndr] Cxt Type
| VarT Name
| ConT Name
| TupleT Int
| ArrowT
| ListT
| AppT Type Type
| SigT Type Kind
data TyVarBndr
= PlainTV Name
| KindedTV Name Kind
data Kind
= StarK
| ArrowK Kind Kind
type Cxt = [Pred]
data Pred
= ClassP Name [Type]
| EqualP Type 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
| BangP 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
data Pragma
= InlineP Name InlineSpec
| SpecialiseP Name Type (Maybe InlineSpec)
data InlineSpec = InlineSpec Bool Bool (Maybe (Bool, Int))
type StrictType = (Strict, Type)
type VarStrictType = (Name, Strict, Type)
data FunDep = FunDep [Name] [Name]
data FamFlavour
= TypeFam
| DataFam
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_v :: String -> String -> String -> Name
mkNameG_d :: String -> String -> String -> Name
mkNameG_tc :: String -> String -> String -> Name
type Uniq = Int
mkNameL :: String -> Uniq -> Name
mkNameU :: String -> Uniq -> Name
tupleTypeName :: Int -> Name
tupleDataName :: Int -> Name
data OccName
mkOccName :: String -> OccName
occString :: OccName -> String
data ModName
mkModName :: String -> ModName
modString :: ModName -> String
data PkgName
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
class Lift t where
Methods
lift :: t -> Q Exp
liftString :: String -> 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
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
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 [TyVarBndr] [Con] [Name]
NewtypeD Cxt Name [TyVarBndr] Con [Name]
TySynD Name [TyVarBndr] Type
ClassD Cxt Name [TyVarBndr] [FunDep] [Dec]
InstanceD Cxt Type [Dec]
SigD Name Type
ForeignD Foreign
PragmaD Pragma
FamilyD FamFlavour Name [TyVarBndr] (Maybe Kind)
DataInstD Cxt Name [Type] [Con] [Name]
NewtypeInstD Cxt Name [Type] Con [Name]
TySynInstD Name [Type] Type
data Exp
The CompE constructor represents a list comprehension, and takes a [Stmt]. The result expression of the comprehension is the *last* of these, and should be a NoBindS. E.g. [ f x | x <- xs ] is represented by CompE [BindS (VarP x) (VarE xs), NoBindS (AppE (VarE f) (VarE x))]
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]
data Con
Constructors
NormalC Name [StrictType]
RecC Name [VarStrictType]
InfixC StrictType Name StrictType
ForallC [TyVarBndr] Cxt Con
data Type
Constructors
ForallT [TyVarBndr] Cxt Type
VarT Name
ConT Name
TupleT Int
ArrowT
ListT
AppT Type Type
SigT Type Kind
data TyVarBndr
Constructors
PlainTV Name
KindedTV Name Kind
data Kind
Constructors
StarK
ArrowK Kind Kind
type Cxt = [Pred]
data Pred
Constructors
ClassP Name [Type]
EqualP Type Type
data Match
Constructors
Match Pat Body [Dec]
data Clause
Constructors
Clause [Pat] Body [Dec]
data Body
Constructors
GuardedB [(Guard, Exp)]
NormalB Exp
data Guard
Constructors
NormalG Exp
PatG [Stmt]
data Stmt
Constructors
BindS Pat Exp
LetS [Dec]
NoBindS Exp
ParS [[Stmt]]
data Range
Constructors
FromR Exp
FromThenR Exp Exp
FromToR Exp Exp
FromThenToR Exp Exp Exp
data Lit
Constructors
CharL Char
StringL String
IntegerL Integer
RationalL Rational
IntPrimL Integer
WordPrimL Integer
FloatPrimL Rational
DoublePrimL Rational
data Pat
Constructors
LitP Lit
VarP Name
TupP [Pat]
ConP Name [Pat]
InfixP Pat Name Pat
TildeP Pat
BangP Pat
AsP Name Pat
WildP
RecP Name [FieldPat]
ListP [Pat]
SigP Pat Type
type FieldExp = (Name, Exp)
type FieldPat = (Name, Pat)
data Strict
Constructors
IsStrict
NotStrict
data Foreign
Constructors
ImportF Callconv Safety String Name Type
ExportF Callconv String Name Type
data Callconv
Constructors
CCall
StdCall
data Safety
Constructors
Unsafe
Safe
Threadsafe
data Pragma
Constructors
InlineP Name InlineSpec
SpecialiseP Name Type (Maybe InlineSpec)
data InlineSpec
Constructors
InlineSpec Bool Bool (Maybe (Bool, Int))
type StrictType = (Strict, Type)
type VarStrictType = (Name, Strict, Type)
data FunDep
Constructors
FunDep [Name] [Name]
data FamFlavour
Constructors
TypeFam
DataFam
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
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
data FixityDirection
Constructors
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
Constructors
NameS
NameQ ModName
NameU Int#
NameL Int#
NameG NameSpace PkgName ModName
data NameSpace
Constructors
VarName
DataName
TcClsName
mkNameG_v :: String -> String -> String -> Name
mkNameG_d :: String -> String -> String -> Name
mkNameG_tc :: String -> String -> String -> Name
type Uniq = Int
mkNameL :: String -> Uniq -> Name
mkNameU :: String -> Uniq -> Name
tupleTypeName :: Int -> Name
tupleDataName :: Int -> Name
data OccName
mkOccName :: String -> OccName
occString :: OccName -> String
data ModName
mkModName :: String -> ModName
modString :: ModName -> String
data PkgName
mkPkgName :: String -> PkgName
pkgString :: PkgName -> String
Produced by Haddock version 2.6.0