Language.Haskell.TH.Lib.Internal

ghc-lib-parser-9.10.1.20250103: The GHC API, decoupled from GHC versions

Safe Haskell | Ignore
Language | GHC2021

Language.Haskell.TH.Lib.Internal

Contents

- Type synonyms
- Lowercase pattern syntax functions
- Stmt
- Range
- Body
- Guard
- Match and Clause
- Exp
  - `arithSeqE` Shortcuts
- Dec
- Type
- Type Literals
- Kind
- Type family result
- Injectivity annotation
- Role
- Callconv
- Safety
- FunDep
- RuleBndr
- AnnTarget
- Pattern Synonyms (sub constructs)
- Useful helper function
- Documentation combinators

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 TExpQ (a :: TYPE r) = Q (TExp a)
- type CodeQ = Code Q
- type InfoQ = Q Info
- type PatQ = Q Pat
- type FieldPatQ = Q FieldPat
- 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 DerivClauseQ = Q DerivClause
- 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 SourceStrictnessQ = Q SourceStrictness
- type SourceUnpackednessQ = Q SourceUnpackedness
- type BangQ = Q Bang
- type BangTypeQ = Q BangType
- type VarBangTypeQ = Q VarBangType
- type StrictTypeQ = Q StrictType
- type VarStrictTypeQ = Q VarStrictType
- type FieldExpQ = Q FieldExp
- type RuleBndrQ = Q RuleBndr
- type TySynEqnQ = Q TySynEqn
- type PatSynDirQ = Q PatSynDir
- type PatSynArgsQ = Q PatSynArgs
- type FamilyResultSigQ = Q FamilyResultSig
- type DerivStrategyQ = Q DerivStrategy
- type Role = Role
- type InjectivityAnn = InjectivityAnn
- type TyVarBndrUnit = TyVarBndr ()
- type TyVarBndrSpec = TyVarBndr Specificity
- type TyVarBndrVis = TyVarBndr BndrVis
- intPrimL :: Integer -> Lit
- wordPrimL :: Integer -> Lit
- floatPrimL :: Rational -> Lit
- doublePrimL :: Rational -> Lit
- integerL :: Integer -> Lit
- charL :: Char -> Lit
- charPrimL :: Char -> Lit
- stringL :: String -> Lit
- stringPrimL :: [Word8] -> Lit
- bytesPrimL :: Bytes -> Lit
- rationalL :: Rational -> 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
- typeP :: Quote m => m Type -> m Pat
- invisP :: Quote m => m Type -> m Pat
- viewP :: Quote m => m Exp -> m Pat -> m Pat
- fieldPat :: Quote m => Name -> m Pat -> m FieldPat
- 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
- 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
- normalB :: Quote m => m Exp -> m Body
- guardedB :: Quote m => [m (Guard, Exp)] -> m Body
- 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 :: Quote m => m Pat -> m Body -> [m Dec] -> m Match
- clause :: Quote m => [m Pat] -> m Body -> [m Dec] -> m Clause
- dyn :: Quote m => String -> m Exp
- 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
- lamCaseE :: Quote m => [m Match] -> m Exp
- lamCasesE :: Quote m => [m Clause] -> 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
- unboundVarE :: Quote m => Name -> m Exp
- labelE :: Quote m => String -> m Exp
- implicitParamVarE :: Quote m => String -> m Exp
- getFieldE :: Quote m => m Exp -> String -> m Exp
- projectionE :: Quote m => NonEmpty String -> m Exp
- typedSpliceE :: Quote m => m Exp -> m Exp
- typedBracketE :: Quote m => m Exp -> m Exp
- 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
- typeE :: Quote m => m Type -> m Exp
- 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 BndrVis)] -> m Type -> m Dec
- dataD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> [m Con] -> [m DerivClause] -> m Dec
- newtypeD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> m Con -> [m DerivClause] -> m Dec
- typeDataD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> Maybe (m Kind) -> [m Con] -> m Dec
- classD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> [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
- infixLWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec
- infixRWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec
- infixNWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec
- defaultD :: Quote m => [m Type] -> m Dec
- pragInlD :: Quote m => Name -> Inline -> RuleMatch -> Phases -> m Dec
- pragOpaqueD :: Quote m => Name -> 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
- pragSCCFunD :: Quote m => Name -> m Dec
- pragSCCFunNamedD :: Quote m => Name -> String -> 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 BndrVis)] -> Maybe (m Kind) -> m Dec
- openTypeFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m FamilyResultSig -> Maybe InjectivityAnn -> m Dec
- closedTypeFamilyD :: Quote m => Name -> [m (TyVarBndr BndrVis)] -> m FamilyResultSig -> Maybe InjectivityAnn -> [m TySynEqn] -> m Dec
- roleAnnotD :: Quote m => Name -> [Role] -> m Dec
- standaloneDerivD :: Quote m => m Cxt -> m Type -> m Dec
- standaloneDerivWithStrategyD :: Quote m => Maybe (m DerivStrategy) -> 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
- patSynSigD :: Quote m => Name -> m Type -> m Dec
- implicitParamBindD :: Quote m => String -> m Exp -> m Dec
- tySynEqn :: Quote m => Maybe [m (TyVarBndr ())] -> m Type -> m Type -> m TySynEqn
- cxt :: Quote m => [m Pred] -> m Cxt
- derivClause :: Quote m => Maybe (m DerivStrategy) -> [m Pred] -> m DerivClause
- stockStrategy :: Quote m => m DerivStrategy
- anyclassStrategy :: Quote m => m DerivStrategy
- newtypeStrategy :: Quote m => m DerivStrategy
- viaStrategy :: Quote m => m Type -> m DerivStrategy
- 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
- 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
- promotedInfixT :: Quote m => m Type -> Name -> m Type -> m Type
- promotedUInfixT :: 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
- unboxedTupleT :: Quote m => Int -> m Type
- unboxedSumT :: Quote m => SumArity -> 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
- equalP :: Quote m => m Type -> m Type -> m Pred
- promotedT :: Quote m => Name -> m Type
- promotedTupleT :: Quote m => Int -> m Type
- promotedNilT :: Quote m => m Type
- promotedConsT :: Quote m => m Type
- noSourceUnpackedness :: Quote m => m SourceUnpackedness
- sourceNoUnpack :: Quote m => m SourceUnpackedness
- sourceUnpack :: Quote m => m SourceUnpackedness
- noSourceStrictness :: Quote m => m SourceStrictness
- sourceLazy :: Quote m => m SourceStrictness
- sourceStrict :: Quote m => m SourceStrictness
- isStrict :: Quote m => m Strict
- notStrict :: Quote m => m Strict
- unpacked :: Quote m => m Strict
- bang :: Quote m => m SourceUnpackedness -> m SourceStrictness -> m Bang
- bangType :: Quote m => m Bang -> m Type -> m BangType
- varBangType :: Quote m => Name -> m BangType -> m VarBangType
- strictType :: Quote m => m Strict -> m Type -> m StrictType
- varStrictType :: Quote m => Name -> m StrictType -> m VarStrictType
- numTyLit :: Quote m => Integer -> m TyLit
- strTyLit :: Quote m => String -> m TyLit
- charTyLit :: Quote m => Char -> m TyLit
- plainTV :: Quote m => Name -> m (TyVarBndr ())
- plainInvisTV :: Quote m => Name -> Specificity -> m (TyVarBndr Specificity)
- plainBndrTV :: Quote m => Name -> BndrVis -> m (TyVarBndr BndrVis)
- kindedTV :: Quote m => Name -> m Kind -> m (TyVarBndr ())
- kindedInvisTV :: Quote m => Name -> Specificity -> m Kind -> m (TyVarBndr Specificity)
- kindedBndrTV :: Quote m => Name -> BndrVis -> m Kind -> m (TyVarBndr BndrVis)
- specifiedSpec :: Specificity
- inferredSpec :: Specificity
- bndrReq :: BndrVis
- bndrInvis :: BndrVis
- varK :: Name -> Kind
- conK :: Name -> Kind
- tupleK :: Int -> Kind
- arrowK :: Kind
- listK :: Kind
- appK :: Kind -> Kind -> Kind
- starK :: Quote m => m Kind
- constraintK :: Quote m => m Kind
- noSig :: Quote m => m FamilyResultSig
- kindSig :: Quote m => m Kind -> m FamilyResultSig
- tyVarSig :: Quote m => m (TyVarBndr ()) -> m FamilyResultSig
- injectivityAnn :: Name -> [Name] -> InjectivityAnn
- nominalR :: Role
- representationalR :: Role
- phantomR :: Role
- inferR :: Role
- cCall :: Callconv
- stdCall :: Callconv
- cApi :: Callconv
- prim :: Callconv
- javaScript :: Callconv
- unsafe :: Safety
- safe :: Safety
- interruptible :: Safety
- funDep :: [Name] -> [Name] -> FunDep
- ruleVar :: Quote m => Name -> m RuleBndr
- typedRuleVar :: Quote m => Name -> m Type -> m RuleBndr
- valueAnnotation :: Name -> AnnTarget
- typeAnnotation :: Name -> AnnTarget
- moduleAnnotation :: AnnTarget
- unidir :: Quote m => m PatSynDir
- implBidir :: Quote m => m PatSynDir
- explBidir :: Quote m => [m Clause] -> m PatSynDir
- prefixPatSyn :: Quote m => [Name] -> m PatSynArgs
- recordPatSyn :: Quote m => [Name] -> m PatSynArgs
- infixPatSyn :: Quote m => Name -> Name -> m PatSynArgs
- appsE :: Quote m => [m Exp] -> m Exp
- thisModule :: Q Module
- withDecDoc :: String -> Q Dec -> Q Dec
- withDecsDoc :: String -> Q [Dec] -> Q [Dec]
- funD_doc :: Name -> [Q Clause] -> Maybe String -> [Maybe String] -> Q Dec
- dataD_doc :: Q Cxt -> Name -> [Q (TyVarBndr BndrVis)] -> Maybe (Q Kind) -> [(Q Con, Maybe String, [Maybe String])] -> [Q DerivClause] -> Maybe String -> Q Dec
- newtypeD_doc :: Q Cxt -> Name -> [Q (TyVarBndr BndrVis)] -> Maybe (Q Kind) -> (Q Con, Maybe String, [Maybe String]) -> [Q DerivClause] -> Maybe String -> Q Dec
- typeDataD_doc :: Name -> [Q (TyVarBndr BndrVis)] -> Maybe (Q Kind) -> [(Q Con, Maybe String, [Maybe String])] -> Maybe String -> Q Dec
- dataInstD_doc :: Q Cxt -> Maybe [Q (TyVarBndr ())] -> Q Type -> Maybe (Q Kind) -> [(Q Con, Maybe String, [Maybe String])] -> [Q DerivClause] -> Maybe String -> Q Dec
- newtypeInstD_doc :: Q Cxt -> Maybe [Q (TyVarBndr ())] -> Q Type -> Maybe (Q Kind) -> (Q Con, Maybe String, [Maybe String]) -> [Q DerivClause] -> Maybe String -> Q Dec
- patSynD_doc :: Name -> Q PatSynArgs -> Q PatSynDir -> Q Pat -> Maybe String -> [Maybe String] -> Q Dec
- docCons :: (Q Con, Maybe String, [Maybe String]) -> Q ()

# Type synonyms

type TExpQ (a :: TYPE r) = Q (TExp a) #

Representation-polymorphic since template-haskell-2.17.0.0.

type CodeQ = Code Q #

type InfoQ = Q Info #

type PatQ = Q Pat #

type FieldPatQ = Q FieldPat #

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 DerivClauseQ = Q DerivClause #

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 SourceStrictnessQ = Q SourceStrictness #

type SourceUnpackednessQ = Q SourceUnpackedness #

type BangQ = Q Bang #

type BangTypeQ = Q BangType #

type VarBangTypeQ = Q VarBangType #

type StrictTypeQ = Q StrictType #

type VarStrictTypeQ = Q VarStrictType #

type FieldExpQ = Q FieldExp #

type RuleBndrQ = Q RuleBndr #

type TySynEqnQ = Q TySynEqn #

type PatSynDirQ = Q PatSynDir #

type PatSynArgsQ = Q PatSynArgs #

type FamilyResultSigQ = Q FamilyResultSig #

type DerivStrategyQ = Q DerivStrategy #

type Role = Role #

type InjectivityAnn = InjectivityAnn #

type TyVarBndrUnit = TyVarBndr () #

type TyVarBndrSpec = TyVarBndr Specificity #

type TyVarBndrVis = TyVarBndr BndrVis #

# Lowercase pattern syntax functions

intPrimL :: Integer -> Lit #

wordPrimL :: Integer -> Lit #

floatPrimL :: Rational -> Lit #

doublePrimL :: Rational -> Lit #

integerL :: Integer -> Lit #

charL :: Char -> Lit #

charPrimL :: Char -> Lit #

stringL :: String -> Lit #

stringPrimL :: [Word8] -> Lit #

bytesPrimL :: Bytes -> Lit #

rationalL :: Rational -> 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 #

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

invisP :: Quote m => 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 (unhygienic)

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 #

Lambda-case (`case`)

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

Lambda-cases (`cases`)

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 #

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

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

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

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

typedBracketE :: Quote m => m Exp -> 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 #

typeE :: Quote m => m Type -> 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 BndrVis)] -> m Type -> m Dec #

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

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

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

classD :: Quote m => m Cxt -> Name -> [m (TyVarBndr BndrVis)] -> [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 #

infixLWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec #

infixRWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec #

infixNWithSpecD :: Quote m => Int -> NamespaceSpecifier -> Name -> m Dec #

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

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

pragOpaqueD :: Quote m => Name -> 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 #

pragSCCFunD :: Quote m => Name -> m Dec #

pragSCCFunNamedD :: Quote m => Name -> String -> 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 BndrVis)] -> Maybe (m Kind) -> m Dec #

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

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

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

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

standaloneDerivWithStrategyD :: Quote m => Maybe (m DerivStrategy) -> 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 #

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

stockStrategy :: Quote m => m DerivStrategy #

anyclassStrategy :: Quote m => m DerivStrategy #

newtypeStrategy :: Quote m => m DerivStrategy #

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

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 #

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

promotedUInfixT :: 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 #

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

unboxedSumT :: Quote m => SumArity -> 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 #

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

promotedNilT :: Quote m => m Type #

promotedConsT :: Quote m => m Type #

noSourceUnpackedness :: Quote m => m SourceUnpackedness #

sourceNoUnpack :: Quote m => m SourceUnpackedness #

sourceUnpack :: Quote m => m SourceUnpackedness #

noSourceStrictness :: Quote m => m SourceStrictness #

sourceLazy :: Quote m => m SourceStrictness #

sourceStrict :: Quote m => m SourceStrictness #

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'

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

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

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

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

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

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

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

# Kind

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

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

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

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

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

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

specifiedSpec :: Specificity #

inferredSpec :: Specificity #

bndrReq :: BndrVis #

bndrInvis :: BndrVis #

varK :: Name -> Kind #

conK :: Name -> Kind #

tupleK :: Int -> Kind #

arrowK :: Kind #

listK :: Kind #

appK :: Kind -> Kind -> Kind #

starK :: Quote m => m Kind #

constraintK :: Quote m => m Kind #

# Type family result

noSig :: Quote m => m FamilyResultSig #

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

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

# Injectivity annotation

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

# Role

nominalR :: Role #

representationalR :: Role #

phantomR :: Role #

inferR :: Role #

# Callconv

cCall :: Callconv #

stdCall :: Callconv #

cApi :: Callconv #

prim :: Callconv #

javaScript :: Callconv #

# Safety

unsafe :: Safety #

safe :: Safety #

interruptible :: Safety #

# FunDep

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

# RuleBndr

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

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

# AnnTarget

valueAnnotation :: Name -> AnnTarget #

typeAnnotation :: Name -> AnnTarget #

moduleAnnotation :: AnnTarget #

# Pattern Synonyms (sub constructs)

unidir :: Quote m => m PatSynDir #

implBidir :: Quote m => m PatSynDir #

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

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

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

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

# 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 BndrVis)] |
-> 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 BndrVis)] |
-> 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 #

Arguments

:: Name |
-> [Q (TyVarBndr BndrVis)] |
-> 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 #

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.