Haskell Hierarchical Libraries (template-haskell package)ContentsIndex
Language.Haskell.TH.Syntax
Portability portable
Stability experimental
Maintainer libraries@haskell.org
Description
Abstract syntax definitions for Template Haskell.
Synopsis
class Monad m => Quasi m where
qNewName :: String -> m Name
qReport :: Bool -> String -> m ()
qRecover :: m a -> m a -> m a
qReify :: Name -> m Info
qCurrentModule :: m String
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
currentModule :: Q String
runIO :: IO a -> Q a
data Name = Name OccName NameFlavour
mkName :: String -> Name
newName :: String -> Q Name
nameBase :: Name -> String
nameModule :: Name -> Maybe String
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
| 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 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
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 => Quasi m where
Methods
qNewName :: String -> m Name
qReport :: Bool -> String -> m ()
qRecover :: m a -> m a -> m a
qReify :: Name -> m Info
qCurrentModule :: m String
qRunIO :: IO a -> m a
Instances
Quasi IO
Quasi Q
class Lift t where
Methods
lift :: t -> Q Exp
Instances
Lift Integer
Lift Int
Lift Char
Lift Bool
Lift a => Lift (Maybe a)
(Lift a, Lift b) => Lift (Either a b)
Lift a => Lift [a]
(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
Instances
Monad Q
Quasi Q
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
currentModule :: Q String
currentModule gives you the name of the module in 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
Instances
Ppr Name
Eq Name
Ord Name
Show Name
mkName :: String -> Name
newName :: String -> Q Name
nameBase :: Name -> String
nameModule :: Name -> Maybe String
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
Instances
Ppr Dec
Show Dec
Eq Dec
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]
Instances
Ppr Exp
Show Exp
Eq Exp
data Con
Constructors
NormalC Name [StrictType]
RecC Name [VarStrictType]
InfixC StrictType Name StrictType
ForallC [Name] Cxt Con
Instances
Ppr Con
Show Con
Eq Con
data Type
Constructors
ForallT [Name] Cxt Type
VarT Name
ConT Name
TupleT Int
ArrowT
ListT
AppT Type Type
Instances
Ppr Type
Show Type
Eq Type
type Cxt = [Type]
data Match
Constructors
Match Pat Body [Dec]
Instances
Ppr Match
Show Match
Eq Match
data Clause
Constructors
Clause [Pat] Body [Dec]
Instances
Ppr Clause
Show Clause
Eq Clause
data Body
Constructors
GuardedB [(Guard, Exp)]
NormalB Exp
Instances
Show Body
Eq Body
data Guard
Constructors
NormalG Exp
PatG [Stmt]
Instances
Show Guard
Eq Guard
data Stmt
Constructors
BindS Pat Exp
LetS [Dec]
NoBindS Exp
ParS [[Stmt]]
Instances
Ppr Stmt
Show Stmt
Eq Stmt
data Range
Constructors
FromR Exp
FromThenR Exp Exp
FromToR Exp Exp
FromThenToR Exp Exp Exp
Instances
Ppr Range
Show Range
Eq Range
data Lit
Constructors
CharL Char
StringL String
IntegerL Integer
RationalL Rational
IntPrimL Integer
FloatPrimL Rational
DoublePrimL Rational
Instances
Show Lit
Eq Lit
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
Instances
Ppr Pat
Show Pat
Eq Pat
type FieldExp = (Name, Exp)
type FieldPat = (Name, Pat)
data Strict
Constructors
IsStrict
NotStrict
Instances
Show Strict
Eq Strict
data Foreign
Constructors
ImportF Callconv Safety String Name Type
ExportF Callconv String Name Type
Instances
Ppr Foreign
Show Foreign
Eq Foreign
data Callconv
Constructors
CCall
StdCall
Instances
Show Callconv
Eq Callconv
data Safety
Constructors
Unsafe
Safe
Threadsafe
Instances
Show Safety
Eq Safety
type StrictType = (Strict, Type)
type VarStrictType = (Name, Strict, Type)
data FunDep
Constructors
FunDep [Name] [Name]
Instances
Ppr FunDep
Show FunDep
Eq FunDep
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
Instances
Ppr Info
Show Info
data Fixity
Constructors
Fixity Int FixityDirection
Instances
Eq Fixity
Show Fixity
data FixityDirection
Constructors
InfixL
InfixR
InfixN
Instances
Eq FixityDirection
Show FixityDirection
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
Instances
Eq NameFlavour
Ord NameFlavour
data NameSpace
Constructors
VarName
DataName
TcClsName
Instances
Eq NameSpace
Ord NameSpace
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
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 0.6