template-haskell-2.18.0.0: Support library for Template Haskell
Safe HaskellTrustworthy
LanguageHaskell2010

Language.Haskell.TH.Lib.Internal

Description

Language.Haskell.TH.Lib.Internal exposes some additional functionality that is used internally in GHC's integration with Template Haskell. This is not a part of the public API, and as such, there are no API guarantees for this module from version to version.

Synopsis

Type synonyms

type TExpQ a = Q (TExp a) #

Levity-polymorphic since template-haskell-2.17.0.0.

type CodeQ = Code Q #

type InfoQ = Q Info #

type PatQ = Q Pat #

type ExpQ = Q Exp #

type DecQ = Q Dec #

type DecsQ = Q [Dec] #

type Decs = [Dec] #

type ConQ = Q Con #

type TypeQ = Q Type #

type KindQ = Q Kind #

type TyLitQ = Q TyLit #

type CxtQ = Q Cxt #

type PredQ = Q Pred #

type MatchQ = Q Match #

type ClauseQ = Q Clause #

type BodyQ = Q Body #

type GuardQ = Q Guard #

type StmtQ = Q Stmt #

type RangeQ = Q Range #

type BangQ = Q Bang #

type Role = Role #

Lowercase pattern syntax functions

charL :: Char -> Lit #

litP :: Quote m => Lit -> m Pat #

varP :: Quote m => Name -> m Pat #

tupP :: Quote m => [m Pat] -> m Pat #

unboxedTupP :: Quote m => [m Pat] -> m Pat #

unboxedSumP :: Quote m => m Pat -> SumAlt -> SumArity -> m Pat #

conP :: Quote m => Name -> [m Type] -> [m Pat] -> m Pat #

infixP :: Quote m => m Pat -> Name -> m Pat -> m Pat #

uInfixP :: Quote m => m Pat -> Name -> m Pat -> m Pat #

parensP :: Quote m => m Pat -> m Pat #

tildeP :: Quote m => m Pat -> m Pat #

bangP :: Quote m => m Pat -> m Pat #

asP :: Quote m => Name -> m Pat -> m Pat #

wildP :: Quote m => m Pat #

recP :: Quote m => Name -> [m FieldPat] -> m Pat #

listP :: Quote m => [m Pat] -> m Pat #

sigP :: Quote m => m Pat -> m Type -> m Pat #

viewP :: Quote m => m Exp -> m Pat -> m Pat #

fieldPat :: Quote m => Name -> m Pat -> m FieldPat #

Stmt

bindS :: Quote m => m Pat -> m Exp -> m Stmt #

letS :: Quote m => [m Dec] -> m Stmt #

noBindS :: Quote m => m Exp -> m Stmt #

parS :: Quote m => [[m Stmt]] -> m Stmt #

recS :: Quote m => [m Stmt] -> m Stmt #

Range

fromR :: Quote m => m Exp -> m Range #

fromThenR :: Quote m => m Exp -> m Exp -> m Range #

fromToR :: Quote m => m Exp -> m Exp -> m Range #

fromThenToR :: Quote m => m Exp -> m Exp -> m Exp -> m Range #

Body

normalB :: Quote m => m Exp -> m Body #

guardedB :: Quote m => [m (Guard, Exp)] -> m Body #

Guard

normalG :: Quote m => m Exp -> m Guard #

normalGE :: Quote m => m Exp -> m Exp -> m (Guard, Exp) #

patG :: Quote m => [m Stmt] -> m Guard #

patGE :: Quote m => [m Stmt] -> m Exp -> m (Guard, Exp) #

Match and Clause

match :: Quote m => m Pat -> m Body -> [m Dec] -> m Match #

Use with caseE

clause :: Quote m => [m Pat] -> m Body -> [m Dec] -> m Clause #

Use with funD

Exp

dyn :: Quote m => String -> m Exp #

Dynamically binding a variable (unhygenic)

varE :: Quote m => Name -> m Exp #

conE :: Quote m => Name -> m Exp #

litE :: Quote m => Lit -> m Exp #

appE :: Quote m => m Exp -> m Exp -> m Exp #

appTypeE :: Quote m => m Exp -> m Type -> m Exp #

parensE :: Quote m => m Exp -> m Exp #

uInfixE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp #

infixE :: Quote m => Maybe (m Exp) -> m Exp -> Maybe (m Exp) -> m Exp #

infixApp :: Quote m => m Exp -> m Exp -> m Exp -> m Exp #

sectionL :: Quote m => m Exp -> m Exp -> m Exp #

sectionR :: Quote m => m Exp -> m Exp -> m Exp #

lamE :: Quote m => [m Pat] -> m Exp -> m Exp #

lam1E :: Quote m => m Pat -> m Exp -> m Exp #

Single-arg lambda

lamCaseE :: Quote m => [m Match] -> m Exp #

tupE :: Quote m => [Maybe (m Exp)] -> m Exp #

unboxedTupE :: Quote m => [Maybe (m Exp)] -> m Exp #

unboxedSumE :: Quote m => m Exp -> SumAlt -> SumArity -> m Exp #

condE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp #

multiIfE :: Quote m => [m (Guard, Exp)] -> m Exp #

letE :: Quote m => [m Dec] -> m Exp -> m Exp #

caseE :: Quote m => m Exp -> [m Match] -> m Exp #

doE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp #

mdoE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp #

compE :: Quote m => [m Stmt] -> m Exp #

arithSeqE :: Quote m => m Range -> m Exp #

listE :: Quote m => [m Exp] -> m Exp #

sigE :: Quote m => m Exp -> m Type -> m Exp #

recConE :: Quote m => Name -> [m (Name, Exp)] -> m Exp #

recUpdE :: Quote m => m Exp -> [m (Name, Exp)] -> m Exp #

stringE :: Quote m => String -> m Exp #

fieldExp :: Quote m => Name -> m Exp -> m (Name, Exp) #

staticE :: Quote m => m Exp -> m Exp #

staticE x = [| static x |]

unboundVarE :: Quote m => Name -> m Exp #

labelE :: Quote m => String -> m Exp #

getFieldE :: Quote m => m Exp -> String -> m Exp #

arithSeqE Shortcuts

fromE :: Quote m => m Exp -> m Exp #

fromThenE :: Quote m => m Exp -> m Exp -> m Exp #

fromToE :: Quote m => m Exp -> m Exp -> m Exp #

fromThenToE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp #

Dec

valD :: Quote m => m Pat -> m Body -> [m Dec] -> m Dec #

funD :: Quote m => Name -> [m Clause] -> m Dec #

tySynD :: Quote m => Name -> [m (TyVarBndr ())] -> m Type -> m Dec #

dataD :: Quote m => m Cxt -> Name -> [m (TyVarBndr ())] -> Maybe (m Kind) -> [m Con] -> [m DerivClause] -> m Dec #

newtypeD :: Quote m => m Cxt -> Name -> [m (TyVarBndr ())] -> Maybe (m Kind) -> m Con -> [m DerivClause] -> m Dec #

classD :: Quote m => m Cxt -> Name -> [m (TyVarBndr ())] -> [FunDep] -> [m Dec] -> m Dec #

instanceD :: Quote m => m Cxt -> m Type -> [m Dec] -> m Dec #

instanceWithOverlapD :: Quote m => Maybe Overlap -> m Cxt -> m Type -> [m Dec] -> m Dec #

sigD :: Quote m => Name -> m Type -> m Dec #

kiSigD :: Quote m => Name -> m Kind -> m Dec #

forImpD :: Quote m => Callconv -> Safety -> String -> Name -> m Type -> m Dec #

infixLD :: Quote m => Int -> Name -> m Dec #

infixRD :: Quote m => Int -> Name -> m Dec #

infixND :: Quote m => Int -> Name -> m Dec #

pragInlD :: Quote m => Name -> Inline -> RuleMatch -> Phases -> m Dec #

pragSpecD :: Quote m => Name -> m Type -> Phases -> m Dec #

pragSpecInlD :: Quote m => Name -> m Type -> Inline -> Phases -> m Dec #

pragSpecInstD :: Quote m => m Type -> m Dec #

pragRuleD :: Quote m => String -> Maybe [m (TyVarBndr ())] -> [m RuleBndr] -> m Exp -> m Exp -> Phases -> m Dec #

pragAnnD :: Quote m => AnnTarget -> m Exp -> m Dec #

pragLineD :: Quote m => Int -> String -> m Dec #

pragCompleteD :: Quote m => [Name] -> Maybe Name -> m Dec #

dataInstD :: Quote m => m Cxt -> Maybe [m (TyVarBndr ())] -> m Type -> Maybe (m Kind) -> [m Con] -> [m DerivClause] -> m Dec #

newtypeInstD :: Quote m => m Cxt -> Maybe [m (TyVarBndr ())] -> m Type -> Maybe (m Kind) -> m Con -> [m DerivClause] -> m Dec #

tySynInstD :: Quote m => m TySynEqn -> m Dec #

dataFamilyD :: Quote m => Name -> [m (TyVarBndr ())] -> Maybe (m Kind) -> m Dec #

roleAnnotD :: Quote m => Name -> [Role] -> m Dec #

standaloneDerivD :: Quote m => m Cxt -> m Type -> m Dec #

defaultSigD :: Quote m => Name -> m Type -> m Dec #

patSynD :: Quote m => Name -> m PatSynArgs -> m PatSynDir -> m Pat -> m Dec #

Pattern synonym declaration

patSynSigD :: Quote m => Name -> m Type -> m Dec #

Pattern synonym type signature

implicitParamBindD :: Quote m => String -> m Exp -> m Dec #

Implicit parameter binding declaration. Can only be used in let and where clauses which consist entirely of implicit bindings.

tySynEqn :: Quote m => Maybe [m (TyVarBndr ())] -> m Type -> m Type -> m TySynEqn #

cxt :: Quote m => [m Pred] -> m Cxt #

normalC :: Quote m => Name -> [m BangType] -> m Con #

recC :: Quote m => Name -> [m VarBangType] -> m Con #

infixC :: Quote m => m (Bang, Type) -> Name -> m (Bang, Type) -> m Con #

forallC :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Con -> m Con #

gadtC :: Quote m => [Name] -> [m StrictType] -> m Type -> m Con #

recGadtC :: Quote m => [Name] -> [m VarStrictType] -> m Type -> m Con #

Type

forallT :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Type -> m Type #

forallVisT :: Quote m => [m (TyVarBndr ())] -> m Type -> m Type #

varT :: Quote m => Name -> m Type #

conT :: Quote m => Name -> m Type #

infixT :: Quote m => m Type -> Name -> m Type -> m Type #

uInfixT :: Quote m => m Type -> Name -> m Type -> m Type #

parensT :: Quote m => m Type -> m Type #

appT :: Quote m => m Type -> m Type -> m Type #

appKindT :: Quote m => m Type -> m Kind -> m Type #

arrowT :: Quote m => m Type #

mulArrowT :: Quote m => m Type #

listT :: Quote m => m Type #

litT :: Quote m => m TyLit -> m Type #

tupleT :: Quote m => Int -> m Type #

sigT :: Quote m => m Type -> m Kind -> m Type #

equalityT :: Quote m => m Type #

wildCardT :: Quote m => m Type #

implicitParamT :: Quote m => String -> m Type -> m Type #

classP :: Quote m => Name -> [m Type] -> m Pred #

Deprecated: As of template-haskell-2.10, constraint predicates (Pred) are just types (Type), in keeping with ConstraintKinds. Please use conT and appT.

equalP :: Quote m => m Type -> m Type -> m Pred #

Deprecated: As of template-haskell-2.10, constraint predicates (Pred) are just types (Type), in keeping with ConstraintKinds. Please see equalityT.

promotedT :: Quote m => Name -> m Type #

isStrict :: Quote m => m Strict #

Deprecated: Use bang. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. Example usage: 'bang noSourceUnpackedness sourceStrict'

notStrict :: Quote m => m Strict #

Deprecated: Use bang. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. Example usage: 'bang noSourceUnpackedness noSourceStrictness'

unpacked :: Quote m => m Strict #

Deprecated: Use bang. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. Example usage: 'bang sourceUnpack sourceStrict'

bangType :: Quote m => m Bang -> m Type -> m BangType #

strictType :: Quote m => m Strict -> m Type -> m StrictType #

Deprecated: As of template-haskell-2.11.0.0, StrictType has been replaced by BangType. Please use bangType instead.

varStrictType :: Quote m => Name -> m StrictType -> m VarStrictType #

Deprecated: As of template-haskell-2.11.0.0, VarStrictType has been replaced by VarBangType. Please use varBangType instead.

Type Literals

strTyLit :: Quote m => String -> m TyLit #

charTyLit :: Quote m => Char -> m TyLit #

Kind

plainTV :: Quote m => Name -> m (TyVarBndr ()) #

kindedTV :: Quote m => Name -> m Kind -> m (TyVarBndr ()) #

varK :: Name -> Kind #

conK :: Name -> Kind #

appK :: Kind -> Kind -> Kind #

starK :: Quote m => m Kind #

Type family result

Injectivity annotation

Role

Callconv

Safety

FunDep

funDep :: [Name] -> [Name] -> FunDep #

RuleBndr

ruleVar :: Quote m => Name -> m RuleBndr #

typedRuleVar :: Quote m => Name -> m Type -> m RuleBndr #

AnnTarget

Pattern Synonyms (sub constructs)

explBidir :: Quote m => [m Clause] -> m PatSynDir #

Useful helper function

appsE :: Quote m => [m Exp] -> m Exp #

thisModule :: Q Module #

pure the Module at the place of splicing. Can be used as an input for reifyModule.

Documentation combinators

withDecDoc :: String -> Q Dec -> Q Dec #

Attaches Haddock documentation to the declaration provided. Unlike putDoc, the names do not need to be in scope when calling this function so it can be used for quoted declarations and anything else currently being spliced. Not all declarations can have documentation attached to them. For those that can't, withDecDoc will return it unchanged without any side effects.

withDecsDoc :: String -> Q [Dec] -> Q [Dec] #

Variant of withDecDoc that applies the same documentation to multiple declarations. Useful for documenting quoted declarations.

funD_doc #

Arguments

:: Name 
-> [Q Clause] 
-> Maybe String

Documentation to attach to function

-> [Maybe String]

Documentation to attach to arguments

-> Q Dec 

Variant of funD that attaches Haddock documentation.

dataD_doc #

Arguments

:: Q Cxt 
-> Name 
-> [Q (TyVarBndr ())] 
-> Maybe (Q Kind) 
-> [(Q Con, Maybe String, [Maybe String])]

List of constructors, documentation for the constructor, and documentation for the arguments

-> [Q DerivClause] 
-> Maybe String

Documentation to attach to the data declaration

-> Q Dec 

Variant of dataD that attaches Haddock documentation.

newtypeD_doc #

Arguments

:: Q Cxt 
-> Name 
-> [Q (TyVarBndr ())] 
-> Maybe (Q Kind) 
-> (Q Con, Maybe String, [Maybe String])

The constructor, documentation for the constructor, and documentation for the arguments

-> [Q DerivClause] 
-> Maybe String

Documentation to attach to the newtype declaration

-> Q Dec 

Variant of newtypeD that attaches Haddock documentation.

dataInstD_doc #

Arguments

:: Q Cxt 
-> Maybe [Q (TyVarBndr ())] 
-> Q Type 
-> Maybe (Q Kind) 
-> [(Q Con, Maybe String, [Maybe String])]

List of constructors, documentation for the constructor, and documentation for the arguments

-> [Q DerivClause] 
-> Maybe String

Documentation to attach to the instance declaration

-> Q Dec 

Variant of dataInstD that attaches Haddock documentation.

newtypeInstD_doc #

Arguments

:: Q Cxt 
-> Maybe [Q (TyVarBndr ())] 
-> Q Type 
-> Maybe (Q Kind) 
-> (Q Con, Maybe String, [Maybe String])

The constructor, documentation for the constructor, and documentation for the arguments

-> [Q DerivClause] 
-> Maybe String

Documentation to attach to the instance declaration

-> Q Dec 

Variant of newtypeInstD that attaches Haddock documentation.

patSynD_doc #

Arguments

:: Name 
-> Q PatSynArgs 
-> Q PatSynDir 
-> Q Pat 
-> Maybe String

Documentation to attach to the pattern synonym

-> [Maybe String]

Documentation to attach to the pattern arguments

-> Q Dec 

Variant of patSynD that attaches Haddock documentation.

docCons :: (Q Con, Maybe String, [Maybe String]) -> Q () #

Document a data/newtype constructor with its arguments.