Portability | portable |
---|---|
Stability | experimental |
Maintainer | [email protected] |
Language.Haskell.TH.Syntax
Description
Abstract syntax definitions for Template Haskell.
- class (Monad m, Functor m) => Quasi m where
- class Lift t where
- 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
- showName :: Name -> String
- showName' :: NameIs -> Name -> String
- data NameIs
- data Dec
- 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
- type Cxt = [Type]
- 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
- type StrictType = (Strict, Type)
- type VarStrictType = (Name, Strict, Type)
- data FunDep = FunDep [Name] [Name]
- data Info
- 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
- 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
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) |
currentModule :: Q StringSource
currentModule
gives you the name of the module in which this
computation is spliced.
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.
Constructors
Name OccName NameFlavour |
nameModule :: Name -> Maybe StringSource
Constructors
NormalC Name [StrictType] | |
RecC Name [VarStrictType] | |
InfixC StrictType Name StrictType | |
ForallC [Name] Cxt Con |
Constructors
Unsafe | |
Safe | |
Threadsafe |
type StrictType = (Strict, Type)Source
type VarStrictType = (Name, Strict, Type)Source
Constructors
Fixity Int FixityDirection |
data FixityDirection Source
data NameFlavour Source
Instances
tupleTypeName :: Int -> NameSource
tupleDataName :: Int -> NameSource
type OccName = PackedStringSource
type ModName = PackedStringSource
type PkgName = PackedStringSource