-- |-- 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.-- Why do we have both Language.Haskell.TH.Lib.Internal and-- Language.Haskell.TH.Lib? Ultimately, it's because the functions in the-- former (which are tailored for GHC's use) need different type signatures-- than the ones in the latter. Syncing up the Internal type signatures would-- involve a massive amount of breaking changes, so for the time being, we-- relegate as many changes as we can to just the Internal module, where it-- is safe to break things.moduleLanguage.Haskell.TH.Lib.InternalwhereimportLanguage.Haskell.TH.Syntax hiding(Role ,InjectivityAnn )importqualifiedLanguage.Haskell.TH.Syntax asTHimportControl.Monad(liftM,liftM2)importData.Word(Word8)importPrelude------------------------------------------------------------ * Type synonyms----------------------------------------------------------typeInfoQ =Q Info typePatQ =Q Pat typeFieldPatQ =Q FieldPat typeExpQ =Q Exp typeTExpQ a =Q (TExp a )typeDecQ =Q Dec typeDecsQ =Q [Dec ]typeConQ =Q Con typeTypeQ =Q Type typeKindQ =Q Kind typeTyVarBndrQ =Q TyVarBndr typeTyLitQ =Q TyLit typeCxtQ =Q Cxt typePredQ =Q Pred typeDerivClauseQ =Q DerivClause typeMatchQ =Q Match typeClauseQ =Q Clause typeBodyQ =Q Body typeGuardQ =Q Guard typeStmtQ =Q Stmt typeRangeQ =Q Range typeSourceStrictnessQ =Q SourceStrictness typeSourceUnpackednessQ =Q SourceUnpackedness typeBangQ =Q Bang typeBangTypeQ =Q BangType typeVarBangTypeQ =Q VarBangType typeStrictTypeQ =Q StrictType typeVarStrictTypeQ =Q VarStrictType typeFieldExpQ =Q FieldExp typeRuleBndrQ =Q RuleBndr typeTySynEqnQ =Q TySynEqn typePatSynDirQ =Q PatSynDir typePatSynArgsQ =Q PatSynArgs typeFamilyResultSigQ =Q FamilyResultSig typeDerivStrategyQ =Q DerivStrategy -- must be defined here for DsMeta to find ittypeRole =TH.Role typeInjectivityAnn =TH.InjectivityAnn ------------------------------------------------------------ * Lowercase pattern syntax functions----------------------------------------------------------intPrimL ::Integer->Lit intPrimL :: Integer -> Lit
intPrimL =Integer -> Lit
IntPrimL wordPrimL ::Integer->Lit wordPrimL :: Integer -> Lit
wordPrimL =Integer -> Lit
WordPrimL floatPrimL ::Rational->Lit floatPrimL :: Rational -> Lit
floatPrimL =Rational -> Lit
FloatPrimL doublePrimL ::Rational->Lit doublePrimL :: Rational -> Lit
doublePrimL =Rational -> Lit
DoublePrimL integerL ::Integer->Lit integerL :: Integer -> Lit
integerL =Integer -> Lit
IntegerL charL ::Char->Lit charL :: Char -> Lit
charL =Char -> Lit
CharL charPrimL ::Char->Lit charPrimL :: Char -> Lit
charPrimL =Char -> Lit
CharPrimL stringL ::String->Lit stringL :: String -> Lit
stringL =String -> Lit
StringL stringPrimL ::[Word8]->Lit stringPrimL :: [Word8] -> Lit
stringPrimL =[Word8] -> Lit
StringPrimL rationalL ::Rational->Lit rationalL :: Rational -> Lit
rationalL =Rational -> Lit
RationalL litP ::Lit ->PatQ litP :: Lit -> PatQ
litP l :: Lit
l =Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Lit -> Pat
LitP Lit
l )varP ::Name ->PatQ varP :: Name -> PatQ
varP v :: Name
v =Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> Pat
VarP Name
v )tupP ::[PatQ ]->PatQ tupP :: [PatQ] -> PatQ
tupP ps :: [PatQ]
ps =do{[Pat]
ps1 <-[PatQ] -> Q [Pat]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[PatQ]
ps ;Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Pat] -> Pat
TupP [Pat]
ps1 )}unboxedTupP ::[PatQ ]->PatQ unboxedTupP :: [PatQ] -> PatQ
unboxedTupP ps :: [PatQ]
ps =do{[Pat]
ps1 <-[PatQ] -> Q [Pat]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[PatQ]
ps ;Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Pat] -> Pat
UnboxedTupP [Pat]
ps1 )}unboxedSumP ::PatQ ->SumAlt ->SumArity ->PatQ unboxedSumP :: PatQ -> SumAlt -> SumAlt -> PatQ
unboxedSumP p :: PatQ
p alt :: SumAlt
alt arity :: SumAlt
arity =do{Pat
p1 <-PatQ
p ;Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Pat -> SumAlt -> SumAlt -> Pat
UnboxedSumP Pat
p1 SumAlt
alt SumAlt
arity )}conP ::Name ->[PatQ ]->PatQ conP :: Name -> [PatQ] -> PatQ
conP n :: Name
n ps :: [PatQ]
ps =do[Pat]
ps' <-[PatQ] -> Q [Pat]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[PatQ]
ps Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> [Pat] -> Pat
ConP Name
n [Pat]
ps' )infixP ::PatQ ->Name ->PatQ ->PatQ infixP :: PatQ -> Name -> PatQ -> PatQ
infixP p1 :: PatQ
p1 n :: Name
n p2 :: PatQ
p2 =doPat
p1' <-PatQ
p1 Pat
p2' <-PatQ
p2 Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Pat -> Name -> Pat -> Pat
InfixP Pat
p1' Name
n Pat
p2' )uInfixP ::PatQ ->Name ->PatQ ->PatQ uInfixP :: PatQ -> Name -> PatQ -> PatQ
uInfixP p1 :: PatQ
p1 n :: Name
n p2 :: PatQ
p2 =doPat
p1' <-PatQ
p1 Pat
p2' <-PatQ
p2 Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Pat -> Name -> Pat -> Pat
UInfixP Pat
p1' Name
n Pat
p2' )parensP ::PatQ ->PatQ parensP :: PatQ -> PatQ
parensP p :: PatQ
p =doPat
p' <-PatQ
p Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Pat -> Pat
ParensP Pat
p' )tildeP ::PatQ ->PatQ tildeP :: PatQ -> PatQ
tildeP p :: PatQ
p =doPat
p' <-PatQ
p Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Pat -> Pat
TildeP Pat
p' )bangP ::PatQ ->PatQ bangP :: PatQ -> PatQ
bangP p :: PatQ
p =doPat
p' <-PatQ
p Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Pat -> Pat
BangP Pat
p' )asP ::Name ->PatQ ->PatQ asP :: Name -> PatQ -> PatQ
asP n :: Name
n p :: PatQ
p =doPat
p' <-PatQ
p Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> Pat -> Pat
AsP Name
n Pat
p' )wildP ::PatQ wildP :: PatQ
wildP =Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
returnPat
WildP recP ::Name ->[FieldPatQ ]->PatQ recP :: Name -> [FieldPatQ] -> PatQ
recP n :: Name
n fps :: [FieldPatQ]
fps =do[FieldPat]
fps' <-[FieldPatQ] -> Q [FieldPat]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[FieldPatQ]
fps Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> [FieldPat] -> Pat
RecP Name
n [FieldPat]
fps' )listP ::[PatQ ]->PatQ listP :: [PatQ] -> PatQ
listP ps :: [PatQ]
ps =do[Pat]
ps' <-[PatQ] -> Q [Pat]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[PatQ]
ps Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Pat] -> Pat
ListP [Pat]
ps' )sigP ::PatQ ->TypeQ ->PatQ sigP :: PatQ -> TypeQ -> PatQ
sigP p :: PatQ
p t :: TypeQ
t =doPat
p' <-PatQ
p Type
t' <-TypeQ
t Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Pat -> Type -> Pat
SigP Pat
p' Type
t' )viewP ::ExpQ ->PatQ ->PatQ viewP :: ExpQ -> PatQ -> PatQ
viewP e :: ExpQ
e p :: PatQ
p =doExp
e' <-ExpQ
e Pat
p' <-PatQ
p Pat -> PatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Pat -> Pat
ViewP Exp
e' Pat
p' )fieldPat ::Name ->PatQ ->FieldPatQ fieldPat :: Name -> PatQ -> FieldPatQ
fieldPat n :: Name
n p :: PatQ
p =doPat
p' <-PatQ
p FieldPat -> FieldPatQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name
n ,Pat
p' )--------------------------------------------------------------------------------- * StmtbindS ::PatQ ->ExpQ ->StmtQ bindS :: PatQ -> ExpQ -> StmtQ
bindS p :: PatQ
p e :: ExpQ
e =(Pat -> Exp -> Stmt) -> PatQ -> ExpQ -> StmtQ
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2Pat -> Exp -> Stmt
BindS PatQ
p ExpQ
e letS ::[DecQ ]->StmtQ letS :: [DecQ] -> StmtQ
letS ds :: [DecQ]
ds =do{[Dec]
ds1 <-[DecQ] -> Q [Dec]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[DecQ]
ds ;Stmt -> StmtQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Dec] -> Stmt
LetS [Dec]
ds1 )}noBindS ::ExpQ ->StmtQ noBindS :: ExpQ -> StmtQ
noBindS e :: ExpQ
e =do{Exp
e1 <-ExpQ
e ;Stmt -> StmtQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Stmt
NoBindS Exp
e1 )}parS ::[[StmtQ ]]->StmtQ parS :: [[StmtQ]] -> StmtQ
parS sss :: [[StmtQ]]
sss =do{[[Stmt]]
sss1 <-([StmtQ] -> Q [Stmt]) -> [[StmtQ]] -> Q [[Stmt]]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM[StmtQ] -> Q [Stmt]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[[StmtQ]]
sss ;Stmt -> StmtQ
forall (m :: * -> *) a. Monad m => a -> m a
return([[Stmt]] -> Stmt
ParS [[Stmt]]
sss1 )}recS ::[StmtQ ]->StmtQ recS :: [StmtQ] -> StmtQ
recS ss :: [StmtQ]
ss =do{[Stmt]
ss1 <-[StmtQ] -> Q [Stmt]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[StmtQ]
ss ;Stmt -> StmtQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Stmt] -> Stmt
RecS [Stmt]
ss1 )}--------------------------------------------------------------------------------- * RangefromR ::ExpQ ->RangeQ fromR :: ExpQ -> RangeQ
fromR x :: ExpQ
x =do{Exp
a <-ExpQ
x ;Range -> RangeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Range
FromR Exp
a )}fromThenR ::ExpQ ->ExpQ ->RangeQ fromThenR :: ExpQ -> ExpQ -> RangeQ
fromThenR x :: ExpQ
x y :: ExpQ
y =do{Exp
a <-ExpQ
x ;Exp
b <-ExpQ
y ;Range -> RangeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Exp -> Range
FromThenR Exp
a Exp
b )}fromToR ::ExpQ ->ExpQ ->RangeQ fromToR :: ExpQ -> ExpQ -> RangeQ
fromToR x :: ExpQ
x y :: ExpQ
y =do{Exp
a <-ExpQ
x ;Exp
b <-ExpQ
y ;Range -> RangeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Exp -> Range
FromToR Exp
a Exp
b )}fromThenToR ::ExpQ ->ExpQ ->ExpQ ->RangeQ fromThenToR :: ExpQ -> ExpQ -> ExpQ -> RangeQ
fromThenToR x :: ExpQ
x y :: ExpQ
y z :: ExpQ
z =do{Exp
a <-ExpQ
x ;Exp
b <-ExpQ
y ;Exp
c <-ExpQ
z ;Range -> RangeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Exp -> Exp -> Range
FromThenToR Exp
a Exp
b Exp
c )}--------------------------------------------------------------------------------- * BodynormalB ::ExpQ ->BodyQ normalB :: ExpQ -> BodyQ
normalB e :: ExpQ
e =do{Exp
e1 <-ExpQ
e ;Body -> BodyQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Body
NormalB Exp
e1 )}guardedB ::[Q (Guard ,Exp )]->BodyQ guardedB :: [Q (Guard, Exp)] -> BodyQ
guardedB ges :: [Q (Guard, Exp)]
ges =do{[(Guard, Exp)]
ges' <-[Q (Guard, Exp)] -> Q [(Guard, Exp)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[Q (Guard, Exp)]
ges ;Body -> BodyQ
forall (m :: * -> *) a. Monad m => a -> m a
return([(Guard, Exp)] -> Body
GuardedB [(Guard, Exp)]
ges' )}--------------------------------------------------------------------------------- * GuardnormalG ::ExpQ ->GuardQ normalG :: ExpQ -> GuardQ
normalG e :: ExpQ
e =do{Exp
e1 <-ExpQ
e ;Guard -> GuardQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Guard
NormalG Exp
e1 )}normalGE ::ExpQ ->ExpQ ->Q (Guard ,Exp )normalGE :: ExpQ -> ExpQ -> Q (Guard, Exp)
normalGE g :: ExpQ
g e :: ExpQ
e =do{Exp
g1 <-ExpQ
g ;Exp
e1 <-ExpQ
e ;(Guard, Exp) -> Q (Guard, Exp)
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Guard
NormalG Exp
g1 ,Exp
e1 )}patG ::[StmtQ ]->GuardQ patG :: [StmtQ] -> GuardQ
patG ss :: [StmtQ]
ss =do{[Stmt]
ss' <-[StmtQ] -> Q [Stmt]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[StmtQ]
ss ;Guard -> GuardQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Stmt] -> Guard
PatG [Stmt]
ss' )}patGE ::[StmtQ ]->ExpQ ->Q (Guard ,Exp )patGE :: [StmtQ] -> ExpQ -> Q (Guard, Exp)
patGE ss :: [StmtQ]
ss e :: ExpQ
e =do{[Stmt]
ss' <-[StmtQ] -> Q [Stmt]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[StmtQ]
ss ;Exp
e' <-ExpQ
e ;(Guard, Exp) -> Q (Guard, Exp)
forall (m :: * -> *) a. Monad m => a -> m a
return([Stmt] -> Guard
PatG [Stmt]
ss' ,Exp
e' )}--------------------------------------------------------------------------------- * Match and Clause-- | Use with 'caseE'match ::PatQ ->BodyQ ->[DecQ ]->MatchQ match :: PatQ -> BodyQ -> [DecQ] -> MatchQ
match p :: PatQ
p rhs :: BodyQ
rhs ds :: [DecQ]
ds =do{Pat
p' <-PatQ
p ;Body
r' <-BodyQ
rhs ;[Dec]
ds' <-[DecQ] -> Q [Dec]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[DecQ]
ds ;Match -> MatchQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Pat -> Body -> [Dec] -> Match
Match Pat
p' Body
r' [Dec]
ds' )}-- | Use with 'funD'clause ::[PatQ ]->BodyQ ->[DecQ ]->ClauseQ clause :: [PatQ] -> BodyQ -> [DecQ] -> ClauseQ
clause ps :: [PatQ]
ps r :: BodyQ
r ds :: [DecQ]
ds =do{[Pat]
ps' <-[PatQ] -> Q [Pat]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[PatQ]
ps ;Body
r' <-BodyQ
r ;[Dec]
ds' <-[DecQ] -> Q [Dec]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[DecQ]
ds ;Clause -> ClauseQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Pat] -> Body -> [Dec] -> Clause
Clause [Pat]
ps' Body
r' [Dec]
ds' )}----------------------------------------------------------------------------- * Exp-- | Dynamically binding a variable (unhygenic)dyn ::String->ExpQ dyn :: String -> ExpQ
dyn s :: String
s =Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> Exp
VarE (String -> Name
mkName String
s ))varE ::Name ->ExpQ varE :: Name -> ExpQ
varE s :: Name
s =Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> Exp
VarE Name
s )conE ::Name ->ExpQ conE :: Name -> ExpQ
conE s :: Name
s =Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> Exp
ConE Name
s )litE ::Lit ->ExpQ litE :: Lit -> ExpQ
litE c :: Lit
c =Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Lit -> Exp
LitE Lit
c )appE ::ExpQ ->ExpQ ->ExpQ appE :: ExpQ -> ExpQ -> ExpQ
appE x :: ExpQ
x y :: ExpQ
y =do{Exp
a <-ExpQ
x ;Exp
b <-ExpQ
y ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Exp -> Exp
AppE Exp
a Exp
b )}appTypeE ::ExpQ ->TypeQ ->ExpQ appTypeE :: ExpQ -> TypeQ -> ExpQ
appTypeE x :: ExpQ
x t :: TypeQ
t =do{Exp
a <-ExpQ
x ;Type
s <-TypeQ
t ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Type -> Exp
AppTypeE Exp
a Type
s )}parensE ::ExpQ ->ExpQ parensE :: ExpQ -> ExpQ
parensE x :: ExpQ
x =do{Exp
x' <-ExpQ
x ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Exp
ParensE Exp
x' )}uInfixE ::ExpQ ->ExpQ ->ExpQ ->ExpQ uInfixE :: ExpQ -> ExpQ -> ExpQ -> ExpQ
uInfixE x :: ExpQ
x s :: ExpQ
s y :: ExpQ
y =do{Exp
x' <-ExpQ
x ;Exp
s' <-ExpQ
s ;Exp
y' <-ExpQ
y ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Exp -> Exp -> Exp
UInfixE Exp
x' Exp
s' Exp
y' )}infixE ::MaybeExpQ ->ExpQ ->MaybeExpQ ->ExpQ infixE :: Maybe ExpQ -> ExpQ -> Maybe ExpQ -> ExpQ
infixE (Justx :: ExpQ
x )s :: ExpQ
s (Justy :: ExpQ
y )=do{Exp
a <-ExpQ
x ;Exp
s' <-ExpQ
s ;Exp
b <-ExpQ
y ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Maybe Exp -> Exp -> Maybe Exp -> Exp
InfixE (Exp -> Maybe Exp
forall a. a -> Maybe a
JustExp
a )Exp
s' (Exp -> Maybe Exp
forall a. a -> Maybe a
JustExp
b ))}infixE Nothings :: ExpQ
s (Justy :: ExpQ
y )=do{Exp
s' <-ExpQ
s ;Exp
b <-ExpQ
y ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Maybe Exp -> Exp -> Maybe Exp -> Exp
InfixE Maybe Exp
forall a. Maybe a
NothingExp
s' (Exp -> Maybe Exp
forall a. a -> Maybe a
JustExp
b ))}infixE (Justx :: ExpQ
x )s :: ExpQ
s Nothing=do{Exp
a <-ExpQ
x ;Exp
s' <-ExpQ
s ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Maybe Exp -> Exp -> Maybe Exp -> Exp
InfixE (Exp -> Maybe Exp
forall a. a -> Maybe a
JustExp
a )Exp
s' Maybe Exp
forall a. Maybe a
Nothing)}infixE Nothings :: ExpQ
s Nothing=do{Exp
s' <-ExpQ
s ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Maybe Exp -> Exp -> Maybe Exp -> Exp
InfixE Maybe Exp
forall a. Maybe a
NothingExp
s' Maybe Exp
forall a. Maybe a
Nothing)}infixApp ::ExpQ ->ExpQ ->ExpQ ->ExpQ infixApp :: ExpQ -> ExpQ -> ExpQ -> ExpQ
infixApp x :: ExpQ
x y :: ExpQ
y z :: ExpQ
z =Maybe ExpQ -> ExpQ -> Maybe ExpQ -> ExpQ
infixE (ExpQ -> Maybe ExpQ
forall a. a -> Maybe a
JustExpQ
x )ExpQ
y (ExpQ -> Maybe ExpQ
forall a. a -> Maybe a
JustExpQ
z )sectionL ::ExpQ ->ExpQ ->ExpQ sectionL :: ExpQ -> ExpQ -> ExpQ
sectionL x :: ExpQ
x y :: ExpQ
y =Maybe ExpQ -> ExpQ -> Maybe ExpQ -> ExpQ
infixE (ExpQ -> Maybe ExpQ
forall a. a -> Maybe a
JustExpQ
x )ExpQ
y Maybe ExpQ
forall a. Maybe a
NothingsectionR ::ExpQ ->ExpQ ->ExpQ sectionR :: ExpQ -> ExpQ -> ExpQ
sectionR x :: ExpQ
x y :: ExpQ
y =Maybe ExpQ -> ExpQ -> Maybe ExpQ -> ExpQ
infixE Maybe ExpQ
forall a. Maybe a
NothingExpQ
x (ExpQ -> Maybe ExpQ
forall a. a -> Maybe a
JustExpQ
y )lamE ::[PatQ ]->ExpQ ->ExpQ lamE :: [PatQ] -> ExpQ -> ExpQ
lamE ps :: [PatQ]
ps e :: ExpQ
e =do[Pat]
ps' <-[PatQ] -> Q [Pat]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[PatQ]
ps Exp
e' <-ExpQ
e Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Pat] -> Exp -> Exp
LamE [Pat]
ps' Exp
e' )-- | Single-arg lambdalam1E ::PatQ ->ExpQ ->ExpQ lam1E :: PatQ -> ExpQ -> ExpQ
lam1E p :: PatQ
p e :: ExpQ
e =[PatQ] -> ExpQ -> ExpQ
lamE [PatQ
p ]ExpQ
e lamCaseE ::[MatchQ ]->ExpQ lamCaseE :: [MatchQ] -> ExpQ
lamCaseE ms :: [MatchQ]
ms =[MatchQ] -> Q [Match]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[MatchQ]
ms Q [Match] -> ([Match] -> ExpQ) -> ExpQ
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> ExpQ) -> ([Match] -> Exp) -> [Match] -> ExpQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[Match] -> Exp
LamCaseE tupE ::[ExpQ ]->ExpQ tupE :: [ExpQ] -> ExpQ
tupE es :: [ExpQ]
es =do{[Exp]
es1 <-[ExpQ] -> Q [Exp]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[ExpQ]
es ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Exp] -> Exp
TupE [Exp]
es1 )}unboxedTupE ::[ExpQ ]->ExpQ unboxedTupE :: [ExpQ] -> ExpQ
unboxedTupE es :: [ExpQ]
es =do{[Exp]
es1 <-[ExpQ] -> Q [Exp]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[ExpQ]
es ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Exp] -> Exp
UnboxedTupE [Exp]
es1 )}unboxedSumE ::ExpQ ->SumAlt ->SumArity ->ExpQ unboxedSumE :: ExpQ -> SumAlt -> SumAlt -> ExpQ
unboxedSumE e :: ExpQ
e alt :: SumAlt
alt arity :: SumAlt
arity =do{Exp
e1 <-ExpQ
e ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> SumAlt -> SumAlt -> Exp
UnboxedSumE Exp
e1 SumAlt
alt SumAlt
arity )}condE ::ExpQ ->ExpQ ->ExpQ ->ExpQ condE :: ExpQ -> ExpQ -> ExpQ -> ExpQ
condE x :: ExpQ
x y :: ExpQ
y z :: ExpQ
z =do{Exp
a <-ExpQ
x ;Exp
b <-ExpQ
y ;Exp
c <-ExpQ
z ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Exp -> Exp -> Exp
CondE Exp
a Exp
b Exp
c )}multiIfE ::[Q (Guard ,Exp )]->ExpQ multiIfE :: [Q (Guard, Exp)] -> ExpQ
multiIfE alts :: [Q (Guard, Exp)]
alts =[Q (Guard, Exp)] -> Q [(Guard, Exp)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[Q (Guard, Exp)]
alts Q [(Guard, Exp)] -> ([(Guard, Exp)] -> ExpQ) -> ExpQ
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> ExpQ) -> ([(Guard, Exp)] -> Exp) -> [(Guard, Exp)] -> ExpQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[(Guard, Exp)] -> Exp
MultiIfE letE ::[DecQ ]->ExpQ ->ExpQ letE :: [DecQ] -> ExpQ -> ExpQ
letE ds :: [DecQ]
ds e :: ExpQ
e =do{[Dec]
ds2 <-[DecQ] -> Q [Dec]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[DecQ]
ds ;Exp
e2 <-ExpQ
e ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Dec] -> Exp -> Exp
LetE [Dec]
ds2 Exp
e2 )}caseE ::ExpQ ->[MatchQ ]->ExpQ caseE :: ExpQ -> [MatchQ] -> ExpQ
caseE e :: ExpQ
e ms :: [MatchQ]
ms =do{Exp
e1 <-ExpQ
e ;[Match]
ms1 <-[MatchQ] -> Q [Match]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[MatchQ]
ms ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> [Match] -> Exp
CaseE Exp
e1 [Match]
ms1 )}doE ::[StmtQ ]->ExpQ doE :: [StmtQ] -> ExpQ
doE ss :: [StmtQ]
ss =do{[Stmt]
ss1 <-[StmtQ] -> Q [Stmt]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[StmtQ]
ss ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Stmt] -> Exp
DoE [Stmt]
ss1 )}mdoE ::[StmtQ ]->ExpQ mdoE :: [StmtQ] -> ExpQ
mdoE ss :: [StmtQ]
ss =do{[Stmt]
ss1 <-[StmtQ] -> Q [Stmt]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[StmtQ]
ss ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Stmt] -> Exp
MDoE [Stmt]
ss1 )}compE ::[StmtQ ]->ExpQ compE :: [StmtQ] -> ExpQ
compE ss :: [StmtQ]
ss =do{[Stmt]
ss1 <-[StmtQ] -> Q [Stmt]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[StmtQ]
ss ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Stmt] -> Exp
CompE [Stmt]
ss1 )}arithSeqE ::RangeQ ->ExpQ arithSeqE :: RangeQ -> ExpQ
arithSeqE r :: RangeQ
r =do{Range
r' <-RangeQ
r ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Range -> Exp
ArithSeqE Range
r' )}listE ::[ExpQ ]->ExpQ listE :: [ExpQ] -> ExpQ
listE es :: [ExpQ]
es =do{[Exp]
es1 <-[ExpQ] -> Q [Exp]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[ExpQ]
es ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Exp] -> Exp
ListE [Exp]
es1 )}sigE ::ExpQ ->TypeQ ->ExpQ sigE :: ExpQ -> TypeQ -> ExpQ
sigE e :: ExpQ
e t :: TypeQ
t =do{Exp
e1 <-ExpQ
e ;Type
t1 <-TypeQ
t ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> Type -> Exp
SigE Exp
e1 Type
t1 )}recConE ::Name ->[Q (Name ,Exp )]->ExpQ recConE :: Name -> [Q (Name, Exp)] -> ExpQ
recConE c :: Name
c fs :: [Q (Name, Exp)]
fs =do{[(Name, Exp)]
flds <-[Q (Name, Exp)] -> Q [(Name, Exp)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[Q (Name, Exp)]
fs ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> [(Name, Exp)] -> Exp
RecConE Name
c [(Name, Exp)]
flds )}recUpdE ::ExpQ ->[Q (Name ,Exp )]->ExpQ recUpdE :: ExpQ -> [Q (Name, Exp)] -> ExpQ
recUpdE e :: ExpQ
e fs :: [Q (Name, Exp)]
fs =do{Exp
e1 <-ExpQ
e ;[(Name, Exp)]
flds <-[Q (Name, Exp)] -> Q [(Name, Exp)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[Q (Name, Exp)]
fs ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Exp -> [(Name, Exp)] -> Exp
RecUpdE Exp
e1 [(Name, Exp)]
flds )}stringE ::String->ExpQ stringE :: String -> ExpQ
stringE =Lit -> ExpQ
litE (Lit -> ExpQ) -> (String -> Lit) -> String -> ExpQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
.String -> Lit
stringL fieldExp ::Name ->ExpQ ->Q (Name ,Exp )fieldExp :: Name -> ExpQ -> Q (Name, Exp)
fieldExp s :: Name
s e :: ExpQ
e =do{Exp
e' <-ExpQ
e ;(Name, Exp) -> Q (Name, Exp)
forall (m :: * -> *) a. Monad m => a -> m a
return(Name
s ,Exp
e' )}-- | @staticE x = [| static x |]@staticE ::ExpQ ->ExpQ staticE :: ExpQ -> ExpQ
staticE =(Exp -> Exp) -> ExpQ -> ExpQ
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmapExp -> Exp
StaticE unboundVarE ::Name ->ExpQ unboundVarE :: Name -> ExpQ
unboundVarE s :: Name
s =Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> Exp
UnboundVarE Name
s )labelE ::String->ExpQ labelE :: String -> ExpQ
labelE s :: String
s =Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(String -> Exp
LabelE String
s )implicitParamVarE ::String->ExpQ implicitParamVarE :: String -> ExpQ
implicitParamVarE n :: String
n =Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(String -> Exp
ImplicitParamVarE String
n )-- ** 'arithSeqE' ShortcutsfromE ::ExpQ ->ExpQ fromE :: ExpQ -> ExpQ
fromE x :: ExpQ
x =do{Exp
a <-ExpQ
x ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Range -> Exp
ArithSeqE (Exp -> Range
FromR Exp
a ))}fromThenE ::ExpQ ->ExpQ ->ExpQ fromThenE :: ExpQ -> ExpQ -> ExpQ
fromThenE x :: ExpQ
x y :: ExpQ
y =do{Exp
a <-ExpQ
x ;Exp
b <-ExpQ
y ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Range -> Exp
ArithSeqE (Exp -> Exp -> Range
FromThenR Exp
a Exp
b ))}fromToE ::ExpQ ->ExpQ ->ExpQ fromToE :: ExpQ -> ExpQ -> ExpQ
fromToE x :: ExpQ
x y :: ExpQ
y =do{Exp
a <-ExpQ
x ;Exp
b <-ExpQ
y ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Range -> Exp
ArithSeqE (Exp -> Exp -> Range
FromToR Exp
a Exp
b ))}fromThenToE ::ExpQ ->ExpQ ->ExpQ ->ExpQ fromThenToE :: ExpQ -> ExpQ -> ExpQ -> ExpQ
fromThenToE x :: ExpQ
x y :: ExpQ
y z :: ExpQ
z =do{Exp
a <-ExpQ
x ;Exp
b <-ExpQ
y ;Exp
c <-ExpQ
z ;Exp -> ExpQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Range -> Exp
ArithSeqE (Exp -> Exp -> Exp -> Range
FromThenToR Exp
a Exp
b Exp
c ))}--------------------------------------------------------------------------------- * DecvalD ::PatQ ->BodyQ ->[DecQ ]->DecQ valD :: PatQ -> BodyQ -> [DecQ] -> DecQ
valD p :: PatQ
p b :: BodyQ
b ds :: [DecQ]
ds =do{Pat
p' <-PatQ
p ;[Dec]
ds' <-[DecQ] -> Q [Dec]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[DecQ]
ds ;Body
b' <-BodyQ
b ;Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Pat -> Body -> [Dec] -> Dec
ValD Pat
p' Body
b' [Dec]
ds' )}funD ::Name ->[ClauseQ ]->DecQ funD :: Name -> [ClauseQ] -> DecQ
funD nm :: Name
nm cs :: [ClauseQ]
cs =do{[Clause]
cs1 <-[ClauseQ] -> Q [Clause]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[ClauseQ]
cs ;Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> [Clause] -> Dec
FunD Name
nm [Clause]
cs1 )}tySynD ::Name ->[TyVarBndrQ ]->TypeQ ->DecQ tySynD :: Name -> [TyVarBndrQ] -> TypeQ -> DecQ
tySynD tc :: Name
tc tvs :: [TyVarBndrQ]
tvs rhs :: TypeQ
rhs =do{[TyVarBndr]
tvs1 <-[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TyVarBndrQ]
tvs ;Type
rhs1 <-TypeQ
rhs ;Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> [TyVarBndr] -> Type -> Dec
TySynD Name
tc [TyVarBndr]
tvs1 Type
rhs1 )}dataD ::CxtQ ->Name ->[TyVarBndrQ ]->MaybeKindQ ->[ConQ ]->[DerivClauseQ ]->DecQ dataD :: CxtQ
-> Name
-> [TyVarBndrQ]
-> Maybe TypeQ
-> [ConQ]
-> [DerivClauseQ]
-> DecQ
dataD ctxt :: CxtQ
ctxt tc :: Name
tc tvs :: [TyVarBndrQ]
tvs ksig :: Maybe TypeQ
ksig cons :: [ConQ]
cons derivs :: [DerivClauseQ]
derivs =doCxt
ctxt1 <-CxtQ
ctxt [TyVarBndr]
tvs1 <-[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TyVarBndrQ]
tvs Maybe Type
ksig1 <-Maybe TypeQ -> Q (Maybe Type)
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceAMaybe TypeQ
ksig [Con]
cons1 <-[ConQ] -> Q [Con]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[ConQ]
cons [DerivClause]
derivs1 <-[DerivClauseQ] -> Q [DerivClause]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[DerivClauseQ]
derivs Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Cxt
-> Name
-> [TyVarBndr]
-> Maybe Type
-> [Con]
-> [DerivClause]
-> Dec
DataD Cxt
ctxt1 Name
tc [TyVarBndr]
tvs1 Maybe Type
ksig1 [Con]
cons1 [DerivClause]
derivs1 )newtypeD ::CxtQ ->Name ->[TyVarBndrQ ]->MaybeKindQ ->ConQ ->[DerivClauseQ ]->DecQ newtypeD :: CxtQ
-> Name
-> [TyVarBndrQ]
-> Maybe TypeQ
-> ConQ
-> [DerivClauseQ]
-> DecQ
newtypeD ctxt :: CxtQ
ctxt tc :: Name
tc tvs :: [TyVarBndrQ]
tvs ksig :: Maybe TypeQ
ksig con :: ConQ
con derivs :: [DerivClauseQ]
derivs =doCxt
ctxt1 <-CxtQ
ctxt [TyVarBndr]
tvs1 <-[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TyVarBndrQ]
tvs Maybe Type
ksig1 <-Maybe TypeQ -> Q (Maybe Type)
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceAMaybe TypeQ
ksig Con
con1 <-ConQ
con [DerivClause]
derivs1 <-[DerivClauseQ] -> Q [DerivClause]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[DerivClauseQ]
derivs Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Cxt
-> Name -> [TyVarBndr] -> Maybe Type -> Con -> [DerivClause] -> Dec
NewtypeD Cxt
ctxt1 Name
tc [TyVarBndr]
tvs1 Maybe Type
ksig1 Con
con1 [DerivClause]
derivs1 )classD ::CxtQ ->Name ->[TyVarBndrQ ]->[FunDep ]->[DecQ ]->DecQ classD :: CxtQ -> Name -> [TyVarBndrQ] -> [FunDep] -> [DecQ] -> DecQ
classD ctxt :: CxtQ
ctxt cls :: Name
cls tvs :: [TyVarBndrQ]
tvs fds :: [FunDep]
fds decs :: [DecQ]
decs =do[TyVarBndr]
tvs1 <-[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TyVarBndrQ]
tvs [Dec]
decs1 <-[DecQ] -> Q [Dec]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[DecQ]
decs Cxt
ctxt1 <-CxtQ
ctxt Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Cxt -> Name -> [TyVarBndr] -> [FunDep] -> [Dec] -> Dec
ClassD Cxt
ctxt1 Name
cls [TyVarBndr]
tvs1 [FunDep]
fds [Dec]
decs1 instanceD ::CxtQ ->TypeQ ->[DecQ ]->DecQ instanceD :: CxtQ -> TypeQ -> [DecQ] -> DecQ
instanceD =Maybe Overlap -> CxtQ -> TypeQ -> [DecQ] -> DecQ
instanceWithOverlapD Maybe Overlap
forall a. Maybe a
NothinginstanceWithOverlapD ::MaybeOverlap ->CxtQ ->TypeQ ->[DecQ ]->DecQ instanceWithOverlapD :: Maybe Overlap -> CxtQ -> TypeQ -> [DecQ] -> DecQ
instanceWithOverlapD o :: Maybe Overlap
o ctxt :: CxtQ
ctxt ty :: TypeQ
ty decs :: [DecQ]
decs =doCxt
ctxt1 <-CxtQ
ctxt [Dec]
decs1 <-[DecQ] -> Q [Dec]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[DecQ]
decs Type
ty1 <-TypeQ
ty Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Maybe Overlap -> Cxt -> Type -> [Dec] -> Dec
InstanceD Maybe Overlap
o Cxt
ctxt1 Type
ty1 [Dec]
decs1 sigD ::Name ->TypeQ ->DecQ sigD :: Name -> TypeQ -> DecQ
sigD fun :: Name
fun ty :: TypeQ
ty =(Type -> Dec) -> TypeQ -> DecQ
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM(Name -> Type -> Dec
SigD Name
fun )(TypeQ -> DecQ) -> TypeQ -> DecQ
forall a b. (a -> b) -> a -> b
$TypeQ
ty forImpD ::Callconv ->Safety ->String->Name ->TypeQ ->DecQ forImpD :: Callconv -> Safety -> String -> Name -> TypeQ -> DecQ
forImpD cc :: Callconv
cc s :: Safety
s str :: String
str n :: Name
n ty :: TypeQ
ty =doType
ty' <-TypeQ
ty Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Foreign -> Dec
ForeignD (Callconv -> Safety -> String -> Name -> Type -> Foreign
ImportF Callconv
cc Safety
s String
str Name
n Type
ty' )infixLD ::Int->Name ->DecQ infixLD :: SumAlt -> Name -> DecQ
infixLD prec :: SumAlt
prec nm :: Name
nm =Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Fixity -> Name -> Dec
InfixD (SumAlt -> FixityDirection -> Fixity
Fixity SumAlt
prec FixityDirection
InfixL )Name
nm )infixRD ::Int->Name ->DecQ infixRD :: SumAlt -> Name -> DecQ
infixRD prec :: SumAlt
prec nm :: Name
nm =Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Fixity -> Name -> Dec
InfixD (SumAlt -> FixityDirection -> Fixity
Fixity SumAlt
prec FixityDirection
InfixR )Name
nm )infixND ::Int->Name ->DecQ infixND :: SumAlt -> Name -> DecQ
infixND prec :: SumAlt
prec nm :: Name
nm =Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Fixity -> Name -> Dec
InfixD (SumAlt -> FixityDirection -> Fixity
Fixity SumAlt
prec FixityDirection
InfixN )Name
nm )pragInlD ::Name ->Inline ->RuleMatch ->Phases ->DecQ pragInlD :: Name -> Inline -> RuleMatch -> Phases -> DecQ
pragInlD name :: Name
name inline :: Inline
inline rm :: RuleMatch
rm phases :: Phases
phases =Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Pragma -> Dec
PragmaD (Pragma -> Dec) -> Pragma -> Dec
forall a b. (a -> b) -> a -> b
$Name -> Inline -> RuleMatch -> Phases -> Pragma
InlineP Name
name Inline
inline RuleMatch
rm Phases
phases pragSpecD ::Name ->TypeQ ->Phases ->DecQ pragSpecD :: Name -> TypeQ -> Phases -> DecQ
pragSpecD n :: Name
n ty :: TypeQ
ty phases :: Phases
phases =doType
ty1 <-TypeQ
ty Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Pragma -> Dec
PragmaD (Pragma -> Dec) -> Pragma -> Dec
forall a b. (a -> b) -> a -> b
$Name -> Type -> Maybe Inline -> Phases -> Pragma
SpecialiseP Name
n Type
ty1 Maybe Inline
forall a. Maybe a
NothingPhases
phases pragSpecInlD ::Name ->TypeQ ->Inline ->Phases ->DecQ pragSpecInlD :: Name -> TypeQ -> Inline -> Phases -> DecQ
pragSpecInlD n :: Name
n ty :: TypeQ
ty inline :: Inline
inline phases :: Phases
phases =doType
ty1 <-TypeQ
ty Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Pragma -> Dec
PragmaD (Pragma -> Dec) -> Pragma -> Dec
forall a b. (a -> b) -> a -> b
$Name -> Type -> Maybe Inline -> Phases -> Pragma
SpecialiseP Name
n Type
ty1 (Inline -> Maybe Inline
forall a. a -> Maybe a
JustInline
inline )Phases
phases pragSpecInstD ::TypeQ ->DecQ pragSpecInstD :: TypeQ -> DecQ
pragSpecInstD ty :: TypeQ
ty =doType
ty1 <-TypeQ
ty Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Pragma -> Dec
PragmaD (Pragma -> Dec) -> Pragma -> Dec
forall a b. (a -> b) -> a -> b
$Type -> Pragma
SpecialiseInstP Type
ty1 pragRuleD ::String->Maybe[TyVarBndrQ ]->[RuleBndrQ ]->ExpQ ->ExpQ ->Phases ->DecQ pragRuleD :: String
-> Maybe [TyVarBndrQ]
-> [RuleBndrQ]
-> ExpQ
-> ExpQ
-> Phases
-> DecQ
pragRuleD n :: String
n ty_bndrs :: Maybe [TyVarBndrQ]
ty_bndrs tm_bndrs :: [RuleBndrQ]
tm_bndrs lhs :: ExpQ
lhs rhs :: ExpQ
rhs phases :: Phases
phases =doMaybe [TyVarBndr]
ty_bndrs1 <-([TyVarBndrQ] -> Q [TyVarBndr])
-> Maybe [TyVarBndrQ] -> Q (Maybe [TyVarBndr])
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequenceMaybe [TyVarBndrQ]
ty_bndrs [RuleBndr]
tm_bndrs1 <-[RuleBndrQ] -> Q [RuleBndr]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[RuleBndrQ]
tm_bndrs Exp
lhs1 <-ExpQ
lhs Exp
rhs1 <-ExpQ
rhs Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Pragma -> Dec
PragmaD (Pragma -> Dec) -> Pragma -> Dec
forall a b. (a -> b) -> a -> b
$String
-> Maybe [TyVarBndr]
-> [RuleBndr]
-> Exp
-> Exp
-> Phases
-> Pragma
RuleP String
n Maybe [TyVarBndr]
ty_bndrs1 [RuleBndr]
tm_bndrs1 Exp
lhs1 Exp
rhs1 Phases
phases pragAnnD ::AnnTarget ->ExpQ ->DecQ pragAnnD :: AnnTarget -> ExpQ -> DecQ
pragAnnD target :: AnnTarget
target expr :: ExpQ
expr =doExp
exp1 <-ExpQ
expr Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Pragma -> Dec
PragmaD (Pragma -> Dec) -> Pragma -> Dec
forall a b. (a -> b) -> a -> b
$AnnTarget -> Exp -> Pragma
AnnP AnnTarget
target Exp
exp1 pragLineD ::Int->String->DecQ pragLineD :: SumAlt -> String -> DecQ
pragLineD line :: SumAlt
line file :: String
file =Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Pragma -> Dec
PragmaD (Pragma -> Dec) -> Pragma -> Dec
forall a b. (a -> b) -> a -> b
$SumAlt -> String -> Pragma
LineP SumAlt
line String
file pragCompleteD ::[Name ]->MaybeName ->DecQ pragCompleteD :: [Name] -> Maybe Name -> DecQ
pragCompleteD cls :: [Name]
cls mty :: Maybe Name
mty =Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Pragma -> Dec
PragmaD (Pragma -> Dec) -> Pragma -> Dec
forall a b. (a -> b) -> a -> b
$[Name] -> Maybe Name -> Pragma
CompleteP [Name]
cls Maybe Name
mty dataInstD ::CxtQ ->(Maybe[TyVarBndrQ ])->TypeQ ->MaybeKindQ ->[ConQ ]->[DerivClauseQ ]->DecQ dataInstD :: CxtQ
-> Maybe [TyVarBndrQ]
-> TypeQ
-> Maybe TypeQ
-> [ConQ]
-> [DerivClauseQ]
-> DecQ
dataInstD ctxt :: CxtQ
ctxt mb_bndrs :: Maybe [TyVarBndrQ]
mb_bndrs ty :: TypeQ
ty ksig :: Maybe TypeQ
ksig cons :: [ConQ]
cons derivs :: [DerivClauseQ]
derivs =doCxt
ctxt1 <-CxtQ
ctxt Maybe [TyVarBndr]
mb_bndrs1 <-([TyVarBndrQ] -> Q [TyVarBndr])
-> Maybe [TyVarBndrQ] -> Q (Maybe [TyVarBndr])
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequenceMaybe [TyVarBndrQ]
mb_bndrs Type
ty1 <-TypeQ
ty Maybe Type
ksig1 <-Maybe TypeQ -> Q (Maybe Type)
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceAMaybe TypeQ
ksig [Con]
cons1 <-[ConQ] -> Q [Con]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[ConQ]
cons [DerivClause]
derivs1 <-[DerivClauseQ] -> Q [DerivClause]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[DerivClauseQ]
derivs Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Cxt
-> Maybe [TyVarBndr]
-> Type
-> Maybe Type
-> [Con]
-> [DerivClause]
-> Dec
DataInstD Cxt
ctxt1 Maybe [TyVarBndr]
mb_bndrs1 Type
ty1 Maybe Type
ksig1 [Con]
cons1 [DerivClause]
derivs1 )newtypeInstD ::CxtQ ->(Maybe[TyVarBndrQ ])->TypeQ ->MaybeKindQ ->ConQ ->[DerivClauseQ ]->DecQ newtypeInstD :: CxtQ
-> Maybe [TyVarBndrQ]
-> TypeQ
-> Maybe TypeQ
-> ConQ
-> [DerivClauseQ]
-> DecQ
newtypeInstD ctxt :: CxtQ
ctxt mb_bndrs :: Maybe [TyVarBndrQ]
mb_bndrs ty :: TypeQ
ty ksig :: Maybe TypeQ
ksig con :: ConQ
con derivs :: [DerivClauseQ]
derivs =doCxt
ctxt1 <-CxtQ
ctxt Maybe [TyVarBndr]
mb_bndrs1 <-([TyVarBndrQ] -> Q [TyVarBndr])
-> Maybe [TyVarBndrQ] -> Q (Maybe [TyVarBndr])
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequenceMaybe [TyVarBndrQ]
mb_bndrs Type
ty1 <-TypeQ
ty Maybe Type
ksig1 <-Maybe TypeQ -> Q (Maybe Type)
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceAMaybe TypeQ
ksig Con
con1 <-ConQ
con [DerivClause]
derivs1 <-[DerivClauseQ] -> Q [DerivClause]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[DerivClauseQ]
derivs Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Cxt
-> Maybe [TyVarBndr]
-> Type
-> Maybe Type
-> Con
-> [DerivClause]
-> Dec
NewtypeInstD Cxt
ctxt1 Maybe [TyVarBndr]
mb_bndrs1 Type
ty1 Maybe Type
ksig1 Con
con1 [DerivClause]
derivs1 )tySynInstD ::TySynEqnQ ->DecQ tySynInstD :: TySynEqnQ -> DecQ
tySynInstD eqn :: TySynEqnQ
eqn =doTySynEqn
eqn1 <-TySynEqnQ
eqn Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(TySynEqn -> Dec
TySynInstD TySynEqn
eqn1 )dataFamilyD ::Name ->[TyVarBndrQ ]->MaybeKindQ ->DecQ dataFamilyD :: Name -> [TyVarBndrQ] -> Maybe TypeQ -> DecQ
dataFamilyD tc :: Name
tc tvs :: [TyVarBndrQ]
tvs kind :: Maybe TypeQ
kind =do[TyVarBndr]
tvs' <-[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TyVarBndrQ]
tvs Maybe Type
kind' <-Maybe TypeQ -> Q (Maybe Type)
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceAMaybe TypeQ
kind Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Name -> [TyVarBndr] -> Maybe Type -> Dec
DataFamilyD Name
tc [TyVarBndr]
tvs' Maybe Type
kind' openTypeFamilyD ::Name ->[TyVarBndrQ ]->FamilyResultSigQ ->MaybeInjectivityAnn ->DecQ openTypeFamilyD :: Name
-> [TyVarBndrQ] -> FamilyResultSigQ -> Maybe InjectivityAnn -> DecQ
openTypeFamilyD tc :: Name
tc tvs :: [TyVarBndrQ]
tvs res :: FamilyResultSigQ
res inj :: Maybe InjectivityAnn
inj =do[TyVarBndr]
tvs' <-[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TyVarBndrQ]
tvs FamilyResultSig
res' <-FamilyResultSigQ
res Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$TypeFamilyHead -> Dec
OpenTypeFamilyD (Name
-> [TyVarBndr]
-> FamilyResultSig
-> Maybe InjectivityAnn
-> TypeFamilyHead
TypeFamilyHead Name
tc [TyVarBndr]
tvs' FamilyResultSig
res' Maybe InjectivityAnn
inj )closedTypeFamilyD ::Name ->[TyVarBndrQ ]->FamilyResultSigQ ->MaybeInjectivityAnn ->[TySynEqnQ ]->DecQ closedTypeFamilyD :: Name
-> [TyVarBndrQ]
-> FamilyResultSigQ
-> Maybe InjectivityAnn
-> [TySynEqnQ]
-> DecQ
closedTypeFamilyD tc :: Name
tc tvs :: [TyVarBndrQ]
tvs result :: FamilyResultSigQ
result injectivity :: Maybe InjectivityAnn
injectivity eqns :: [TySynEqnQ]
eqns =do[TyVarBndr]
tvs1 <-[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TyVarBndrQ]
tvs FamilyResultSig
result1 <-FamilyResultSigQ
result [TySynEqn]
eqns1 <-[TySynEqnQ] -> Q [TySynEqn]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TySynEqnQ]
eqns Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(TypeFamilyHead -> [TySynEqn] -> Dec
ClosedTypeFamilyD (Name
-> [TyVarBndr]
-> FamilyResultSig
-> Maybe InjectivityAnn
-> TypeFamilyHead
TypeFamilyHead Name
tc [TyVarBndr]
tvs1 FamilyResultSig
result1 Maybe InjectivityAnn
injectivity )[TySynEqn]
eqns1 )roleAnnotD ::Name ->[Role ]->DecQ roleAnnotD :: Name -> [Role] -> DecQ
roleAnnotD name :: Name
name roles :: [Role]
roles =Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Name -> [Role] -> Dec
RoleAnnotD Name
name [Role]
roles standaloneDerivD ::CxtQ ->TypeQ ->DecQ standaloneDerivD :: CxtQ -> TypeQ -> DecQ
standaloneDerivD =Maybe DerivStrategyQ -> CxtQ -> TypeQ -> DecQ
standaloneDerivWithStrategyD Maybe DerivStrategyQ
forall a. Maybe a
NothingstandaloneDerivWithStrategyD ::MaybeDerivStrategyQ ->CxtQ ->TypeQ ->DecQ standaloneDerivWithStrategyD :: Maybe DerivStrategyQ -> CxtQ -> TypeQ -> DecQ
standaloneDerivWithStrategyD mdsq :: Maybe DerivStrategyQ
mdsq ctxtq :: CxtQ
ctxtq tyq :: TypeQ
tyq =doMaybe DerivStrategy
mds <-Maybe DerivStrategyQ -> Q (Maybe DerivStrategy)
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceAMaybe DerivStrategyQ
mdsq Cxt
ctxt <-CxtQ
ctxtq Type
ty <-TypeQ
tyq Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Maybe DerivStrategy -> Cxt -> Type -> Dec
StandaloneDerivD Maybe DerivStrategy
mds Cxt
ctxt Type
ty defaultSigD ::Name ->TypeQ ->DecQ defaultSigD :: Name -> TypeQ -> DecQ
defaultSigD n :: Name
n tyq :: TypeQ
tyq =doType
ty <-TypeQ
tyq Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Name -> Type -> Dec
DefaultSigD Name
n Type
ty -- | Pattern synonym declarationpatSynD ::Name ->PatSynArgsQ ->PatSynDirQ ->PatQ ->DecQ patSynD :: Name -> PatSynArgsQ -> PatSynDirQ -> PatQ -> DecQ
patSynD name :: Name
name args :: PatSynArgsQ
args dir :: PatSynDirQ
dir pat :: PatQ
pat =doPatSynArgs
args' <-PatSynArgsQ
args PatSynDir
dir' <-PatSynDirQ
dir Pat
pat' <-PatQ
pat Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name -> PatSynArgs -> PatSynDir -> Pat -> Dec
PatSynD Name
name PatSynArgs
args' PatSynDir
dir' Pat
pat' )-- | Pattern synonym type signaturepatSynSigD ::Name ->TypeQ ->DecQ patSynSigD :: Name -> TypeQ -> DecQ
patSynSigD nm :: Name
nm ty :: TypeQ
ty =doType
ty' <-TypeQ
ty Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$Name -> Type -> Dec
PatSynSigD Name
nm Type
ty' -- | Implicit parameter binding declaration. Can only be used in let-- and where clauses which consist entirely of implicit bindings.implicitParamBindD ::String->ExpQ ->DecQ implicitParamBindD :: String -> ExpQ -> DecQ
implicitParamBindD n :: String
n e :: ExpQ
e =doExp
e' <-ExpQ
e Dec -> DecQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Dec -> DecQ) -> Dec -> DecQ
forall a b. (a -> b) -> a -> b
$String -> Exp -> Dec
ImplicitParamBindD String
n Exp
e' tySynEqn ::(Maybe[TyVarBndrQ ])->TypeQ ->TypeQ ->TySynEqnQ tySynEqn :: Maybe [TyVarBndrQ] -> TypeQ -> TypeQ -> TySynEqnQ
tySynEqn mb_bndrs :: Maybe [TyVarBndrQ]
mb_bndrs lhs :: TypeQ
lhs rhs :: TypeQ
rhs =doMaybe [TyVarBndr]
mb_bndrs1 <-([TyVarBndrQ] -> Q [TyVarBndr])
-> Maybe [TyVarBndrQ] -> Q (Maybe [TyVarBndr])
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequenceMaybe [TyVarBndrQ]
mb_bndrs Type
lhs1 <-TypeQ
lhs Type
rhs1 <-TypeQ
rhs TySynEqn -> TySynEqnQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Maybe [TyVarBndr] -> Type -> Type -> TySynEqn
TySynEqn Maybe [TyVarBndr]
mb_bndrs1 Type
lhs1 Type
rhs1 )cxt ::[PredQ ]->CxtQ cxt :: [TypeQ] -> CxtQ
cxt =[TypeQ] -> CxtQ
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequencederivClause ::MaybeDerivStrategyQ ->[PredQ ]->DerivClauseQ derivClause :: Maybe DerivStrategyQ -> [TypeQ] -> DerivClauseQ
derivClause mds :: Maybe DerivStrategyQ
mds p :: [TypeQ]
p =doMaybe DerivStrategy
mds' <-Maybe DerivStrategyQ -> Q (Maybe DerivStrategy)
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceAMaybe DerivStrategyQ
mds Cxt
p' <-[TypeQ] -> CxtQ
cxt [TypeQ]
p DerivClause -> DerivClauseQ
forall (m :: * -> *) a. Monad m => a -> m a
return(DerivClause -> DerivClauseQ) -> DerivClause -> DerivClauseQ
forall a b. (a -> b) -> a -> b
$Maybe DerivStrategy -> Cxt -> DerivClause
DerivClause Maybe DerivStrategy
mds' Cxt
p' stockStrategy ::DerivStrategyQ stockStrategy :: DerivStrategyQ
stockStrategy =DerivStrategy -> DerivStrategyQ
forall (f :: * -> *) a. Applicative f => a -> f a
pureDerivStrategy
StockStrategy anyclassStrategy ::DerivStrategyQ anyclassStrategy :: DerivStrategyQ
anyclassStrategy =DerivStrategy -> DerivStrategyQ
forall (f :: * -> *) a. Applicative f => a -> f a
pureDerivStrategy
AnyclassStrategy newtypeStrategy ::DerivStrategyQ newtypeStrategy :: DerivStrategyQ
newtypeStrategy =DerivStrategy -> DerivStrategyQ
forall (f :: * -> *) a. Applicative f => a -> f a
pureDerivStrategy
NewtypeStrategy viaStrategy ::TypeQ ->DerivStrategyQ viaStrategy :: TypeQ -> DerivStrategyQ
viaStrategy =(Type -> DerivStrategy) -> TypeQ -> DerivStrategyQ
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmapType -> DerivStrategy
ViaStrategy normalC ::Name ->[BangTypeQ ]->ConQ normalC :: Name -> [BangTypeQ] -> ConQ
normalC con :: Name
con strtys :: [BangTypeQ]
strtys =([BangType] -> Con) -> Q [BangType] -> ConQ
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM(Name -> [BangType] -> Con
NormalC Name
con )(Q [BangType] -> ConQ) -> Q [BangType] -> ConQ
forall a b. (a -> b) -> a -> b
$[BangTypeQ] -> Q [BangType]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[BangTypeQ]
strtys recC ::Name ->[VarBangTypeQ ]->ConQ recC :: Name -> [VarBangTypeQ] -> ConQ
recC con :: Name
con varstrtys :: [VarBangTypeQ]
varstrtys =([VarBangType] -> Con) -> Q [VarBangType] -> ConQ
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM(Name -> [VarBangType] -> Con
RecC Name
con )(Q [VarBangType] -> ConQ) -> Q [VarBangType] -> ConQ
forall a b. (a -> b) -> a -> b
$[VarBangTypeQ] -> Q [VarBangType]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[VarBangTypeQ]
varstrtys infixC ::Q (Bang ,Type )->Name ->Q (Bang ,Type )->ConQ infixC :: BangTypeQ -> Name -> BangTypeQ -> ConQ
infixC st1 :: BangTypeQ
st1 con :: Name
con st2 :: BangTypeQ
st2 =doBangType
st1' <-BangTypeQ
st1 BangType
st2' <-BangTypeQ
st2 Con -> ConQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Con -> ConQ) -> Con -> ConQ
forall a b. (a -> b) -> a -> b
$BangType -> Name -> BangType -> Con
InfixC BangType
st1' Name
con BangType
st2' forallC ::[TyVarBndrQ ]->CxtQ ->ConQ ->ConQ forallC :: [TyVarBndrQ] -> CxtQ -> ConQ -> ConQ
forallC ns :: [TyVarBndrQ]
ns ctxt :: CxtQ
ctxt con :: ConQ
con =do[TyVarBndr]
ns' <-[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TyVarBndrQ]
ns Cxt
ctxt' <-CxtQ
ctxt Con
con' <-ConQ
con Con -> ConQ
forall (f :: * -> *) a. Applicative f => a -> f a
pure(Con -> ConQ) -> Con -> ConQ
forall a b. (a -> b) -> a -> b
$[TyVarBndr] -> Cxt -> Con -> Con
ForallC [TyVarBndr]
ns' Cxt
ctxt' Con
con' gadtC ::[Name ]->[StrictTypeQ ]->TypeQ ->ConQ gadtC :: [Name] -> [BangTypeQ] -> TypeQ -> ConQ
gadtC cons :: [Name]
cons strtys :: [BangTypeQ]
strtys ty :: TypeQ
ty =([BangType] -> Type -> Con) -> Q [BangType] -> TypeQ -> ConQ
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2([Name] -> [BangType] -> Type -> Con
GadtC [Name]
cons )([BangTypeQ] -> Q [BangType]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[BangTypeQ]
strtys )TypeQ
ty recGadtC ::[Name ]->[VarStrictTypeQ ]->TypeQ ->ConQ recGadtC :: [Name] -> [VarBangTypeQ] -> TypeQ -> ConQ
recGadtC cons :: [Name]
cons varstrtys :: [VarBangTypeQ]
varstrtys ty :: TypeQ
ty =([VarBangType] -> Type -> Con) -> Q [VarBangType] -> TypeQ -> ConQ
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2([Name] -> [VarBangType] -> Type -> Con
RecGadtC [Name]
cons )([VarBangTypeQ] -> Q [VarBangType]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[VarBangTypeQ]
varstrtys )TypeQ
ty --------------------------------------------------------------------------------- * TypeforallT ::[TyVarBndrQ ]->CxtQ ->TypeQ ->TypeQ forallT :: [TyVarBndrQ] -> CxtQ -> TypeQ -> TypeQ
forallT tvars :: [TyVarBndrQ]
tvars ctxt :: CxtQ
ctxt ty :: TypeQ
ty =do[TyVarBndr]
tvars1 <-[TyVarBndrQ] -> Q [TyVarBndr]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA[TyVarBndrQ]
tvars Cxt
ctxt1 <-CxtQ
ctxt Type
ty1 <-TypeQ
ty Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> TypeQ) -> Type -> TypeQ
forall a b. (a -> b) -> a -> b
$[TyVarBndr] -> Cxt -> Type -> Type
ForallT [TyVarBndr]
tvars1 Cxt
ctxt1 Type
ty1 varT ::Name ->TypeQ varT :: Name -> TypeQ
varT =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> TypeQ) -> (Name -> Type) -> Name -> TypeQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Name -> Type
VarT conT ::Name ->TypeQ conT :: Name -> TypeQ
conT =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> TypeQ) -> (Name -> Type) -> Name -> TypeQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Name -> Type
ConT infixT ::TypeQ ->Name ->TypeQ ->TypeQ infixT :: TypeQ -> Name -> TypeQ -> TypeQ
infixT t1 :: TypeQ
t1 n :: Name
n t2 :: TypeQ
t2 =doType
t1' <-TypeQ
t1 Type
t2' <-TypeQ
t2 Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> Name -> Type -> Type
InfixT Type
t1' Name
n Type
t2' )uInfixT ::TypeQ ->Name ->TypeQ ->TypeQ uInfixT :: TypeQ -> Name -> TypeQ -> TypeQ
uInfixT t1 :: TypeQ
t1 n :: Name
n t2 :: TypeQ
t2 =doType
t1' <-TypeQ
t1 Type
t2' <-TypeQ
t2 Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> Name -> Type -> Type
UInfixT Type
t1' Name
n Type
t2' )parensT ::TypeQ ->TypeQ parensT :: TypeQ -> TypeQ
parensT t :: TypeQ
t =doType
t' <-TypeQ
t Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> Type
ParensT Type
t' )appT ::TypeQ ->TypeQ ->TypeQ appT :: TypeQ -> TypeQ -> TypeQ
appT t1 :: TypeQ
t1 t2 :: TypeQ
t2 =doType
t1' <-TypeQ
t1 Type
t2' <-TypeQ
t2 Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> TypeQ) -> Type -> TypeQ
forall a b. (a -> b) -> a -> b
$Type -> Type -> Type
AppT Type
t1' Type
t2' appKindT ::TypeQ ->KindQ ->TypeQ appKindT :: TypeQ -> TypeQ -> TypeQ
appKindT ty :: TypeQ
ty ki :: TypeQ
ki =doType
ty' <-TypeQ
ty Type
ki' <-TypeQ
ki Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> TypeQ) -> Type -> TypeQ
forall a b. (a -> b) -> a -> b
$Type -> Type -> Type
AppKindT Type
ty' Type
ki' arrowT ::TypeQ arrowT :: TypeQ
arrowT =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
returnType
ArrowT listT ::TypeQ listT :: TypeQ
listT =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
returnType
ListT litT ::TyLitQ ->TypeQ litT :: TyLitQ -> TypeQ
litT l :: TyLitQ
l =(TyLit -> Type) -> TyLitQ -> TypeQ
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmapTyLit -> Type
LitT TyLitQ
l tupleT ::Int->TypeQ tupleT :: SumAlt -> TypeQ
tupleT i :: SumAlt
i =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(SumAlt -> Type
TupleT SumAlt
i )unboxedTupleT ::Int->TypeQ unboxedTupleT :: SumAlt -> TypeQ
unboxedTupleT i :: SumAlt
i =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(SumAlt -> Type
UnboxedTupleT SumAlt
i )unboxedSumT ::SumArity ->TypeQ unboxedSumT :: SumAlt -> TypeQ
unboxedSumT arity :: SumAlt
arity =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(SumAlt -> Type
UnboxedSumT SumAlt
arity )sigT ::TypeQ ->KindQ ->TypeQ sigT :: TypeQ -> TypeQ -> TypeQ
sigT t :: TypeQ
t k :: TypeQ
k =doType
t' <-TypeQ
t Type
k' <-TypeQ
k Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> TypeQ) -> Type -> TypeQ
forall a b. (a -> b) -> a -> b
$Type -> Type -> Type
SigT Type
t' Type
k' equalityT ::TypeQ equalityT :: TypeQ
equalityT =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
returnType
EqualityT wildCardT ::TypeQ wildCardT :: TypeQ
wildCardT =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
returnType
WildCardT implicitParamT ::String->TypeQ ->TypeQ implicitParamT :: String -> TypeQ -> TypeQ
implicitParamT n :: String
n t :: TypeQ
t =doType
t' <-TypeQ
t Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> TypeQ) -> Type -> TypeQ
forall a b. (a -> b) -> a -> b
$String -> Type -> Type
ImplicitParamT String
n Type
t' {-# DEPRECATEDclassP"As of template-haskell-2.10, constraint predicates (Pred) are just types (Type), in keeping with ConstraintKinds. Please use 'conT' and 'appT'."#-}classP ::Name ->[Q Type ]->Q Pred classP :: Name -> [TypeQ] -> TypeQ
classP cla :: Name
cla tys :: [TypeQ]
tys =doCxt
tysl <-[TypeQ] -> CxtQ
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[TypeQ]
tys Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return((Type -> Type -> Type) -> Type -> Cxt -> Type
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldlType -> Type -> Type
AppT (Name -> Type
ConT Name
cla )Cxt
tysl ){-# DEPRECATEDequalP"As of template-haskell-2.10, constraint predicates (Pred) are just types (Type), in keeping with ConstraintKinds. Please see 'equalityT'."#-}equalP ::TypeQ ->TypeQ ->PredQ equalP :: TypeQ -> TypeQ -> TypeQ
equalP tleft :: TypeQ
tleft tright :: TypeQ
tright =doType
tleft1 <-TypeQ
tleft Type
tright1 <-TypeQ
tright Type
eqT <-TypeQ
equalityT Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return((Type -> Type -> Type) -> Type -> Cxt -> Type
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldlType -> Type -> Type
AppT Type
eqT [Type
tleft1 ,Type
tright1 ])promotedT ::Name ->TypeQ promotedT :: Name -> TypeQ
promotedT =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Type -> TypeQ) -> (Name -> Type) -> Name -> TypeQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Name -> Type
PromotedT promotedTupleT ::Int->TypeQ promotedTupleT :: SumAlt -> TypeQ
promotedTupleT i :: SumAlt
i =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(SumAlt -> Type
PromotedTupleT SumAlt
i )promotedNilT ::TypeQ promotedNilT :: TypeQ
promotedNilT =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
returnType
PromotedNilT promotedConsT ::TypeQ promotedConsT :: TypeQ
promotedConsT =Type -> TypeQ
forall (m :: * -> *) a. Monad m => a -> m a
returnType
PromotedConsT noSourceUnpackedness ,sourceNoUnpack ,sourceUnpack ::SourceUnpackednessQ noSourceUnpackedness :: SourceUnpackednessQ
noSourceUnpackedness =SourceUnpackedness -> SourceUnpackednessQ
forall (m :: * -> *) a. Monad m => a -> m a
returnSourceUnpackedness
NoSourceUnpackedness sourceNoUnpack :: SourceUnpackednessQ
sourceNoUnpack =SourceUnpackedness -> SourceUnpackednessQ
forall (m :: * -> *) a. Monad m => a -> m a
returnSourceUnpackedness
SourceNoUnpack sourceUnpack :: SourceUnpackednessQ
sourceUnpack =SourceUnpackedness -> SourceUnpackednessQ
forall (m :: * -> *) a. Monad m => a -> m a
returnSourceUnpackedness
SourceUnpack noSourceStrictness ,sourceLazy ,sourceStrict ::SourceStrictnessQ noSourceStrictness :: SourceStrictnessQ
noSourceStrictness =SourceStrictness -> SourceStrictnessQ
forall (m :: * -> *) a. Monad m => a -> m a
returnSourceStrictness
NoSourceStrictness sourceLazy :: SourceStrictnessQ
sourceLazy =SourceStrictness -> SourceStrictnessQ
forall (m :: * -> *) a. Monad m => a -> m a
returnSourceStrictness
SourceLazy sourceStrict :: SourceStrictnessQ
sourceStrict =SourceStrictness -> SourceStrictnessQ
forall (m :: * -> *) a. Monad m => a -> m a
returnSourceStrictness
SourceStrict {-# DEPRECATEDisStrict["Use 'bang'. See https://ghc.haskell.org/trac/ghc/wiki/Migration/8.0. ","Example usage: 'bang noSourceUnpackedness sourceStrict'"]#-}{-# DEPRECATEDnotStrict["Use 'bang'. See https://ghc.haskell.org/trac/ghc/wiki/Migration/8.0. ","Example usage: 'bang noSourceUnpackedness noSourceStrictness'"]#-}{-# DEPRECATEDunpacked["Use 'bang'. See https://ghc.haskell.org/trac/ghc/wiki/Migration/8.0. ","Example usage: 'bang sourceUnpack sourceStrict'"]#-}isStrict ,notStrict ,unpacked ::Q Strict isStrict :: Q Strict
isStrict =SourceUnpackednessQ -> SourceStrictnessQ -> Q Strict
bang SourceUnpackednessQ
noSourceUnpackedness SourceStrictnessQ
sourceStrict notStrict :: Q Strict
notStrict =SourceUnpackednessQ -> SourceStrictnessQ -> Q Strict
bang SourceUnpackednessQ
noSourceUnpackedness SourceStrictnessQ
noSourceStrictness unpacked :: Q Strict
unpacked =SourceUnpackednessQ -> SourceStrictnessQ -> Q Strict
bang SourceUnpackednessQ
sourceUnpack SourceStrictnessQ
sourceStrict bang ::SourceUnpackednessQ ->SourceStrictnessQ ->BangQ bang :: SourceUnpackednessQ -> SourceStrictnessQ -> Q Strict
bang u :: SourceUnpackednessQ
u s :: SourceStrictnessQ
s =doSourceUnpackedness
u' <-SourceUnpackednessQ
u SourceStrictness
s' <-SourceStrictnessQ
s Strict -> Q Strict
forall (m :: * -> *) a. Monad m => a -> m a
return(SourceUnpackedness -> SourceStrictness -> Strict
Bang SourceUnpackedness
u' SourceStrictness
s' )bangType ::BangQ ->TypeQ ->BangTypeQ bangType :: Q Strict -> TypeQ -> BangTypeQ
bangType =(Strict -> Type -> BangType) -> Q Strict -> TypeQ -> BangTypeQ
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2(,)varBangType ::Name ->BangTypeQ ->VarBangTypeQ varBangType :: Name -> BangTypeQ -> VarBangTypeQ
varBangType v :: Name
v bt :: BangTypeQ
bt =do(b :: Strict
b ,t :: Type
t )<-BangTypeQ
bt VarBangType -> VarBangTypeQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Name
v ,Strict
b ,Type
t ){-# DEPRECATEDstrictType"As of @template-haskell-2.11.0.0@, 'StrictType' has been replaced by 'BangType'. Please use 'bangType' instead."#-}strictType ::Q Strict ->TypeQ ->StrictTypeQ strictType :: Q Strict -> TypeQ -> BangTypeQ
strictType =Q Strict -> TypeQ -> BangTypeQ
bangType {-# DEPRECATEDvarStrictType"As of @template-haskell-2.11.0.0@, 'VarStrictType' has been replaced by 'VarBangType'. Please use 'varBangType' instead."#-}varStrictType ::Name ->StrictTypeQ ->VarStrictTypeQ varStrictType :: Name -> BangTypeQ -> VarBangTypeQ
varStrictType =Name -> BangTypeQ -> VarBangTypeQ
varBangType -- * Type LiteralsnumTyLit ::Integer->TyLitQ numTyLit :: Integer -> TyLitQ
numTyLit n :: Integer
n =ifInteger
n Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
>=0thenTyLit -> TyLitQ
forall (m :: * -> *) a. Monad m => a -> m a
return(Integer -> TyLit
NumTyLit Integer
n )elseString -> TyLitQ
forall (m :: * -> *) a. MonadFail m => String -> m a
fail("Negative type-level number: "String -> String -> String
forall a. [a] -> [a] -> [a]
++Integer -> String
forall a. Show a => a -> String
showInteger
n )strTyLit ::String->TyLitQ strTyLit :: String -> TyLitQ
strTyLit s :: String
s =TyLit -> TyLitQ
forall (m :: * -> *) a. Monad m => a -> m a
return(String -> TyLit
StrTyLit String
s )--------------------------------------------------------------------------------- * KindplainTV ::Name ->TyVarBndrQ plainTV :: Name -> TyVarBndrQ
plainTV =TyVarBndr -> TyVarBndrQ
forall (f :: * -> *) a. Applicative f => a -> f a
pure(TyVarBndr -> TyVarBndrQ)
-> (Name -> TyVarBndr) -> Name -> TyVarBndrQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Name -> TyVarBndr
PlainTV kindedTV ::Name ->KindQ ->TyVarBndrQ kindedTV :: Name -> TypeQ -> TyVarBndrQ
kindedTV n :: Name
n =(Type -> TyVarBndr) -> TypeQ -> TyVarBndrQ
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap(Name -> Type -> TyVarBndr
KindedTV Name
n )varK ::Name ->Kind varK :: Name -> Type
varK =Name -> Type
VarT conK ::Name ->Kind conK :: Name -> Type
conK =Name -> Type
ConT tupleK ::Int->Kind tupleK :: SumAlt -> Type
tupleK =SumAlt -> Type
TupleT arrowK ::Kind arrowK :: Type
arrowK =Type
ArrowT listK ::Kind listK :: Type
listK =Type
ListT appK ::Kind ->Kind ->Kind appK :: Type -> Type -> Type
appK =Type -> Type -> Type
AppT starK ::KindQ starK :: TypeQ
starK =Type -> TypeQ
forall (f :: * -> *) a. Applicative f => a -> f a
pureType
StarT constraintK ::KindQ constraintK :: TypeQ
constraintK =Type -> TypeQ
forall (f :: * -> *) a. Applicative f => a -> f a
pureType
ConstraintT --------------------------------------------------------------------------------- * Type family resultnoSig ::FamilyResultSigQ noSig :: FamilyResultSigQ
noSig =FamilyResultSig -> FamilyResultSigQ
forall (f :: * -> *) a. Applicative f => a -> f a
pureFamilyResultSig
NoSig kindSig ::KindQ ->FamilyResultSigQ kindSig :: TypeQ -> FamilyResultSigQ
kindSig =(Type -> FamilyResultSig) -> TypeQ -> FamilyResultSigQ
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmapType -> FamilyResultSig
KindSig tyVarSig ::TyVarBndrQ ->FamilyResultSigQ tyVarSig :: TyVarBndrQ -> FamilyResultSigQ
tyVarSig =(TyVarBndr -> FamilyResultSig) -> TyVarBndrQ -> FamilyResultSigQ
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmapTyVarBndr -> FamilyResultSig
TyVarSig --------------------------------------------------------------------------------- * Injectivity annotationinjectivityAnn ::Name ->[Name ]->InjectivityAnn injectivityAnn :: Name -> [Name] -> InjectivityAnn
injectivityAnn =Name -> [Name] -> InjectivityAnn
TH.InjectivityAnn --------------------------------------------------------------------------------- * RolenominalR ,representationalR ,phantomR ,inferR ::Role nominalR :: Role
nominalR =Role
NominalR representationalR :: Role
representationalR =Role
RepresentationalR phantomR :: Role
phantomR =Role
PhantomR inferR :: Role
inferR =Role
InferR --------------------------------------------------------------------------------- * CallconvcCall ,stdCall ,cApi ,prim ,javaScript ::Callconv cCall :: Callconv
cCall =Callconv
CCall stdCall :: Callconv
stdCall =Callconv
StdCall cApi :: Callconv
cApi =Callconv
CApi prim :: Callconv
prim =Callconv
Prim javaScript :: Callconv
javaScript =Callconv
JavaScript --------------------------------------------------------------------------------- * Safetyunsafe ,safe ,interruptible ::Safety unsafe :: Safety
unsafe =Safety
Unsafe safe :: Safety
safe =Safety
Safe interruptible :: Safety
interruptible =Safety
Interruptible --------------------------------------------------------------------------------- * FunDepfunDep ::[Name ]->[Name ]->FunDep funDep :: [Name] -> [Name] -> FunDep
funDep =[Name] -> [Name] -> FunDep
FunDep --------------------------------------------------------------------------------- * RuleBndrruleVar ::Name ->RuleBndrQ ruleVar :: Name -> RuleBndrQ
ruleVar =RuleBndr -> RuleBndrQ
forall (m :: * -> *) a. Monad m => a -> m a
return(RuleBndr -> RuleBndrQ) -> (Name -> RuleBndr) -> Name -> RuleBndrQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Name -> RuleBndr
RuleVar typedRuleVar ::Name ->TypeQ ->RuleBndrQ typedRuleVar :: Name -> TypeQ -> RuleBndrQ
typedRuleVar n :: Name
n ty :: TypeQ
ty =TypeQ
ty TypeQ -> (Type -> RuleBndrQ) -> RuleBndrQ
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=RuleBndr -> RuleBndrQ
forall (m :: * -> *) a. Monad m => a -> m a
return(RuleBndr -> RuleBndrQ) -> (Type -> RuleBndr) -> Type -> RuleBndrQ
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Name -> Type -> RuleBndr
TypedRuleVar Name
n --------------------------------------------------------------------------------- * AnnTargetvalueAnnotation ::Name ->AnnTarget valueAnnotation :: Name -> AnnTarget
valueAnnotation =Name -> AnnTarget
ValueAnnotation typeAnnotation ::Name ->AnnTarget typeAnnotation :: Name -> AnnTarget
typeAnnotation =Name -> AnnTarget
TypeAnnotation moduleAnnotation ::AnnTarget moduleAnnotation :: AnnTarget
moduleAnnotation =AnnTarget
ModuleAnnotation --------------------------------------------------------------------------------- * Pattern Synonyms (sub constructs)unidir ,implBidir ::PatSynDirQ unidir :: PatSynDirQ
unidir =PatSynDir -> PatSynDirQ
forall (m :: * -> *) a. Monad m => a -> m a
returnPatSynDir
Unidir implBidir :: PatSynDirQ
implBidir =PatSynDir -> PatSynDirQ
forall (m :: * -> *) a. Monad m => a -> m a
returnPatSynDir
ImplBidir explBidir ::[ClauseQ ]->PatSynDirQ explBidir :: [ClauseQ] -> PatSynDirQ
explBidir cls :: [ClauseQ]
cls =do[Clause]
cls' <-[ClauseQ] -> Q [Clause]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence[ClauseQ]
cls PatSynDir -> PatSynDirQ
forall (m :: * -> *) a. Monad m => a -> m a
return([Clause] -> PatSynDir
ExplBidir [Clause]
cls' )prefixPatSyn ::[Name ]->PatSynArgsQ prefixPatSyn :: [Name] -> PatSynArgsQ
prefixPatSyn args :: [Name]
args =PatSynArgs -> PatSynArgsQ
forall (m :: * -> *) a. Monad m => a -> m a
return(PatSynArgs -> PatSynArgsQ) -> PatSynArgs -> PatSynArgsQ
forall a b. (a -> b) -> a -> b
$[Name] -> PatSynArgs
PrefixPatSyn [Name]
args recordPatSyn ::[Name ]->PatSynArgsQ recordPatSyn :: [Name] -> PatSynArgsQ
recordPatSyn sels :: [Name]
sels =PatSynArgs -> PatSynArgsQ
forall (m :: * -> *) a. Monad m => a -> m a
return(PatSynArgs -> PatSynArgsQ) -> PatSynArgs -> PatSynArgsQ
forall a b. (a -> b) -> a -> b
$[Name] -> PatSynArgs
RecordPatSyn [Name]
sels infixPatSyn ::Name ->Name ->PatSynArgsQ infixPatSyn :: Name -> Name -> PatSynArgsQ
infixPatSyn arg1 :: Name
arg1 arg2 :: Name
arg2 =PatSynArgs -> PatSynArgsQ
forall (m :: * -> *) a. Monad m => a -> m a
return(PatSynArgs -> PatSynArgsQ) -> PatSynArgs -> PatSynArgsQ
forall a b. (a -> b) -> a -> b
$Name -> Name -> PatSynArgs
InfixPatSyn Name
arg1 Name
arg2 ---------------------------------------------------------------- * Useful helper functionappsE ::[ExpQ ]->ExpQ appsE :: [ExpQ] -> ExpQ
appsE []=String -> ExpQ
forall a. HasCallStack => String -> a
error"appsE []"appsE [x :: ExpQ
x ]=ExpQ
x appsE (x :: ExpQ
x :y :: ExpQ
y :zs :: [ExpQ]
zs )=[ExpQ] -> ExpQ
appsE ((ExpQ -> ExpQ -> ExpQ
appE ExpQ
x ExpQ
y )ExpQ -> [ExpQ] -> [ExpQ]
forall a. a -> [a] -> [a]
:[ExpQ]
zs )-- | Return the Module at the place of splicing. Can be used as an-- input for 'reifyModule'.thisModule ::Q Module thisModule :: Q Module
thisModule =doLoc
loc <-Q Loc
location Module -> Q Module
forall (m :: * -> *) a. Monad m => a -> m a
return(Module -> Q Module) -> Module -> Q Module
forall a b. (a -> b) -> a -> b
$PkgName -> ModName -> Module
Module (String -> PkgName
mkPkgName (String -> PkgName) -> String -> PkgName
forall a b. (a -> b) -> a -> b
$Loc -> String
loc_package Loc
loc )(String -> ModName
mkModName (String -> ModName) -> String -> ModName
forall a b. (a -> b) -> a -> b
$Loc -> String
loc_module Loc
loc )

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