template-haskell-2.21.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 :: TYPE r) = Q (TExp a) Source #

Representation-polymorphic since template-haskell-2.17.0.0.

type CodeQ = Code Q :: TYPE r -> Type Source #

type InfoQ = Q Info Source #

type PatQ = Q Pat Source #

type FieldPatQ = Q FieldPat Source #

type ExpQ = Q Exp Source #

type DecQ = Q Dec Source #

type DecsQ = Q [Dec] Source #

type Decs = [Dec] Source #

type ConQ = Q Con Source #

type TypeQ = Q Type Source #

type KindQ = Q Kind Source #

type TyLitQ = Q TyLit Source #

type CxtQ = Q Cxt Source #

type PredQ = Q Pred Source #

type DerivClauseQ = Q DerivClause Source #

type MatchQ = Q Match Source #

type ClauseQ = Q Clause Source #

type BodyQ = Q Body Source #

type GuardQ = Q Guard Source #

type StmtQ = Q Stmt Source #

type RangeQ = Q Range Source #

type SourceStrictnessQ = Q SourceStrictness Source #

type SourceUnpackednessQ = Q SourceUnpackedness Source #

type BangQ = Q Bang Source #

type BangTypeQ = Q BangType Source #

type VarBangTypeQ = Q VarBangType Source #

type StrictTypeQ = Q StrictType Source #

type VarStrictTypeQ = Q VarStrictType Source #

type FieldExpQ = Q FieldExp Source #

type RuleBndrQ = Q RuleBndr Source #

type TySynEqnQ = Q TySynEqn Source #

type PatSynDirQ = Q PatSynDir Source #

type PatSynArgsQ = Q PatSynArgs Source #

type FamilyResultSigQ = Q FamilyResultSig Source #

type DerivStrategyQ = Q DerivStrategy Source #

type Role = Role Source #

type InjectivityAnn = InjectivityAnn Source #

type TyVarBndrUnit = TyVarBndr () Source #

type TyVarBndrSpec = TyVarBndr Specificity Source #

type TyVarBndrVis = TyVarBndr BndrVis Source #

Lowercase pattern syntax functions

intPrimL :: Integer -> Lit Source #

wordPrimL :: Integer -> Lit Source #

floatPrimL :: Rational -> Lit Source #

doublePrimL :: Rational -> Lit Source #

integerL :: Integer -> Lit Source #

charL :: Char -> Lit Source #

charPrimL :: Char -> Lit Source #

stringL :: String -> Lit Source #

stringPrimL :: [Word8] -> Lit Source #

bytesPrimL :: Bytes -> Lit Source #

rationalL :: Rational -> Lit Source #

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

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

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

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

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

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

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

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

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

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

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

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

wildP :: Quote m => m Pat Source #

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

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

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

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

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

Stmt

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

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

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

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

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

Range

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

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

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

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

Body

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

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

Guard

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

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

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

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

Match and Clause

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

Use with caseE

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

Use with funD

Exp

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

Dynamically binding a variable (unhygenic)

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

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

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

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

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

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

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

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

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

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

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

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

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

Single-arg lambda

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

Lambda-case (case)

lamCasesE :: Quote m => [m Clause] -> m Exp Source #

Lambda-cases (cases)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

staticE x = [| static x |]

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

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

implicitParamVarE :: Quote m => String -> m Exp Source #

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

projectionE :: Quote m => NonEmpty String -> m Exp Source #

typedSpliceE :: Quote m => m Exp -> m Exp Source #

typedBracketE :: Quote m => m Exp -> m Exp Source #

arithSeqE Shortcuts

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

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

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

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

Dec

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

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

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

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

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

typeDataD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> [m Con] -> m Dec Source #

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

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

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

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

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

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

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

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

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

defaultD :: Quote m => [m Type] -> m Dec Source #

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

pragOpaqueD :: Quote m => Name -> m Dec Source #

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

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

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

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

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

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

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

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

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

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

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

openTypeFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m FamilyResultSig -> Maybe InjectivityAnn -> m Dec Source #

closedTypeFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m FamilyResultSig -> Maybe InjectivityAnn -> [m TySynEqn] -> m Dec Source #

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

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

standaloneDerivWithStrategyD :: Quote m => Maybe (m DerivStrategy) -> m Cxt -> m Type -> m Dec Source #

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

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

Pattern synonym declaration

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

Pattern synonym type signature

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

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 Source #

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

derivClause :: Quote m => Maybe (m DerivStrategy) -> [m Pred] -> m DerivClause Source #

stockStrategy :: Quote m => m DerivStrategy Source #

anyclassStrategy :: Quote m => m DerivStrategy Source #

newtypeStrategy :: Quote m => m DerivStrategy Source #

viaStrategy :: Quote m => m Type -> m DerivStrategy Source #

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

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

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

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

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

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

Type

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

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

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

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

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

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

promotedInfixT :: Quote m => m Type -> Name -> m Type -> m Type Source #

promotedUInfixT :: Quote m => m Type -> Name -> m Type -> m Type Source #

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

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

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

arrowT :: Quote m => m Type Source #

mulArrowT :: Quote m => m Type Source #

listT :: Quote m => m Type Source #

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

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

unboxedTupleT :: Quote m => Int -> m Type Source #

unboxedSumT :: Quote m => SumArity -> m Type Source #

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

equalityT :: Quote m => m Type Source #

wildCardT :: Quote m => m Type Source #

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

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

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 Source #

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 Source #

promotedTupleT :: Quote m => Int -> m Type Source #

promotedNilT :: Quote m => m Type Source #

promotedConsT :: Quote m => m Type Source #

noSourceUnpackedness :: Quote m => m SourceUnpackedness Source #

sourceNoUnpack :: Quote m => m SourceUnpackedness Source #

sourceUnpack :: Quote m => m SourceUnpackedness Source #

noSourceStrictness :: Quote m => m SourceStrictness Source #

sourceLazy :: Quote m => m SourceStrictness Source #

sourceStrict :: Quote m => m SourceStrictness Source #

isStrict :: Quote m => m Strict Source #

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

notStrict :: Quote m => m Strict Source #

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

unpacked :: Quote m => m Strict Source #

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

bang :: Quote m => m SourceUnpackedness -> m SourceStrictness -> m Bang Source #

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

varBangType :: Quote m => Name -> m BangType -> m VarBangType Source #

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

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 Source #

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

Type Literals

numTyLit :: Quote m => Integer -> m TyLit Source #

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

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

Kind

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

plainInvisTV :: Quote m => Name -> Specificity -> m (TyVarBndr Specificity) Source #

plainBndrTV :: Quote m => Name -> BndrVis -> m (TyVarBndr BndrVis) Source #

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

kindedInvisTV :: Quote m => Name -> Specificity -> m Kind -> m (TyVarBndr Specificity) Source #

kindedBndrTV :: Quote m => Name -> BndrVis -> m Kind -> m (TyVarBndr BndrVis) Source #

specifiedSpec :: Specificity Source #

inferredSpec :: Specificity Source #

bndrReq :: BndrVis Source #

bndrInvis :: BndrVis Source #

varK :: Name -> Kind Source #

conK :: Name -> Kind Source #

tupleK :: Int -> Kind Source #

arrowK :: Kind Source #

listK :: Kind Source #

appK :: Kind -> Kind -> Kind Source #

starK :: Quote m => m Kind Source #

constraintK :: Quote m => m Kind Source #

Type family result

noSig :: Quote m => m FamilyResultSig Source #

kindSig :: Quote m => m Kind -> m FamilyResultSig Source #

tyVarSig :: Quote m => m (TyVarBndr ()) -> m FamilyResultSig Source #

Injectivity annotation

injectivityAnn :: Name -> [Name] -> InjectivityAnn Source #

Role

nominalR :: Role Source #

representationalR :: Role Source #

phantomR :: Role Source #

inferR :: Role Source #

Callconv

cCall :: Callconv Source #

stdCall :: Callconv Source #

cApi :: Callconv Source #

prim :: Callconv Source #

javaScript :: Callconv Source #

Safety

unsafe :: Safety Source #

safe :: Safety Source #

interruptible :: Safety Source #

FunDep

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

RuleBndr

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

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

AnnTarget

valueAnnotation :: Name -> AnnTarget Source #

typeAnnotation :: Name -> AnnTarget Source #

moduleAnnotation :: AnnTarget Source #

Pattern Synonyms (sub constructs)

unidir :: Quote m => m PatSynDir Source #

implBidir :: Quote m => m PatSynDir Source #

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

prefixPatSyn :: Quote m => [Name] -> m PatSynArgs Source #

recordPatSyn :: Quote m => [Name] -> m PatSynArgs Source #

infixPatSyn :: Quote m => Name -> Name -> m PatSynArgs Source #

Useful helper function

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

thisModule :: Q Module Source #

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

Documentation combinators

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

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] Source #

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

funD_doc Source #

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 Source #

Arguments

:: Q Cxt
-> Name
-> 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 Source #

Arguments

:: Q Cxt
-> Name
-> 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.

typeDataD_doc Source #

Arguments

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

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

-> Maybe String

Documentation to attach to the data declaration

-> Q Dec

Variant of typeDataD that attaches Haddock documentation.

dataInstD_doc Source #

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 Source #

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 Source #

Arguments

:: Name
-> 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 () Source #

Document a data/newtype constructor with its arguments.

AltStyle によって変換されたページ (->オリジナル) /