Portability | portable |
---|---|
Stability | experimental |
Maintainer | libraries@haskell.org |
Abstract syntax definitions for Template Haskell.
- class (Monad m, Functor m) => Quasi m where
- class Lift t where
- 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
- 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
- data TyVarBndr
- data Kind
- type Cxt = [Pred]
- data Pred
- data Match = Match Pat Body [Dec]
- data Clause = Clause [Pat] Body [Dec]
- data Body
- data Guard
- data Stmt
- data Range
- data Lit
- data Pat
- type FieldExp = (Name, Exp)
- type FieldPat = (Name, Pat)
- data Strict
- data Foreign
- data Callconv
- data Safety
- = Unsafe
- | Safe
- | Threadsafe
- data Pragma
- data InlineSpec = InlineSpec Bool Bool (Maybe (Bool, Int))
- type StrictType = (Strict, Type)
- type VarStrictType = (Name, Strict, Type)
- data FunDep = FunDep [Name] [Name]
- data FamFlavour
- data Info
- data Loc = Loc {}
- type CharPos = (Int, Int)
- data Fixity = Fixity Int FixityDirection
- data FixityDirection
- defaultFixity :: Fixity
- maxPrecedence :: Int
- returnQ :: a -> Q a
- bindQ :: Q a -> (a -> Q b) -> Q b
- sequenceQ :: [Q a] -> Q [a]
- data NameFlavour
- data 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
- 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
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) |
liftString :: String -> Q ExpSource
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.
nameModule :: Name -> Maybe StringSource
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 |
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))]
data InlineSpec Source
type StrictType = (Strict, Type)Source
type VarStrictType = (Name, Strict, Type)Source
data FamFlavour Source
Loc | |
|
data FixityDirection Source
data NameFlavour Source
tupleTypeName :: Int -> NameSource
tupleDataName :: Int -> NameSource