packages feed

template-haskell 2.16.0.0 → 2.17.0.0

raw patch · 8 files changed

+901/−595 lines, 8 filesdep ~basedep ~ghc-boot-thnew-uploaderPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base, ghc-boot-th

API changes (from Hackage documentation)

- Language.Haskell.TH.Lib: type TyVarBndrQ = Q TyVarBndr
- Language.Haskell.TH.Lib.Internal: type TyVarBndrQ = Q TyVarBndr
- Language.Haskell.TH.Ppr: instance Language.Haskell.TH.Ppr.Ppr Language.Haskell.TH.Syntax.TyVarBndr
- Language.Haskell.TH.Syntax: bindQ :: Q a -> (a -> Q b) -> Q b
- Language.Haskell.TH.Syntax: instance Data.Data.Data Language.Haskell.TH.Syntax.TyVarBndr
- Language.Haskell.TH.Syntax: instance GHC.Classes.Eq Language.Haskell.TH.Syntax.TyVarBndr
- Language.Haskell.TH.Syntax: instance GHC.Classes.Ord Language.Haskell.TH.Syntax.TyVarBndr
- Language.Haskell.TH.Syntax: instance GHC.Generics.Generic Language.Haskell.TH.Syntax.TyVarBndr
- Language.Haskell.TH.Syntax: instance GHC.Show.Show Language.Haskell.TH.Syntax.TyVarBndr
- Language.Haskell.TH.Syntax: instance Language.Haskell.TH.Syntax.Lift GHC.Integer.Type.Integer
- Language.Haskell.TH.Syntax: instance Language.Haskell.TH.Syntax.Lift GHC.Natural.Natural
- Language.Haskell.TH.Syntax: returnQ :: a -> Q a
+ Language.Haskell.TH: Code :: m (TExp a) -> Code m (a :: TYPE (r :: RuntimeRep))
+ Language.Haskell.TH: InferredSpec :: Specificity
+ Language.Haskell.TH: LexicalNegation :: Extension
+ Language.Haskell.TH: LinearTypes :: Extension
+ Language.Haskell.TH: MulArrowT :: Type
+ Language.Haskell.TH: QualifiedDo :: Extension
+ Language.Haskell.TH: SpecifiedSpec :: Specificity
+ Language.Haskell.TH: [examineCode] :: Code m (a :: TYPE (r :: RuntimeRep)) -> m (TExp a)
+ Language.Haskell.TH: bindCode :: forall m a (r :: RuntimeRep) (b :: TYPE r). Monad m => m a -> (a -> Code m b) -> Code m b
+ Language.Haskell.TH: bindCode_ :: forall m a (r :: RuntimeRep) (b :: TYPE r). Monad m => m a -> Code m b -> Code m b
+ Language.Haskell.TH: class Monad m => Quote m
+ Language.Haskell.TH: data Specificity
+ Language.Haskell.TH: hoistCode :: forall m n (r :: RuntimeRep) (a :: TYPE r). Monad m => (forall x. m x -> n x) -> Code m a -> Code n a
+ Language.Haskell.TH: joinCode :: forall m (r :: RuntimeRep) (a :: TYPE r). Monad m => m (Code m a) -> Code m a
+ Language.Haskell.TH: liftCode :: forall (r :: RuntimeRep) (a :: TYPE r) m. m (TExp a) -> Code m a
+ Language.Haskell.TH: newtype Code m (a :: TYPE (r :: RuntimeRep))
+ Language.Haskell.TH: type BangType = (Bang, Type)
+ Language.Haskell.TH: type VarBangType = (Name, Bang, Type)
+ Language.Haskell.TH: unTypeCode :: forall (r :: RuntimeRep) (a :: TYPE r) m. Quote m => Code m a -> m Exp
+ Language.Haskell.TH: unsafeCodeCoerce :: forall (r :: RuntimeRep) (a :: TYPE r) m. Quote m => m Exp -> Code m a
+ Language.Haskell.TH.CodeDo: (>>) :: Monad m => m a -> Code m b -> Code m b
+ Language.Haskell.TH.CodeDo: (>>=) :: Monad m => m a -> (a -> Code m b) -> Code m b
+ Language.Haskell.TH.LanguageExtensions: LexicalNegation :: Extension
+ Language.Haskell.TH.LanguageExtensions: LinearTypes :: Extension
+ Language.Haskell.TH.LanguageExtensions: QualifiedDo :: Extension
+ Language.Haskell.TH.Lib: inferredSpec :: Specificity
+ Language.Haskell.TH.Lib: kindedInvisTV :: Quote m => Name -> Specificity -> m Kind -> m (TyVarBndr Specificity)
+ Language.Haskell.TH.Lib: mulArrowT :: Quote m => m Type
+ Language.Haskell.TH.Lib: plainInvisTV :: Quote m => Name -> Specificity -> m (TyVarBndr Specificity)
+ Language.Haskell.TH.Lib: specifiedSpec :: Specificity
+ Language.Haskell.TH.Lib: type CodeQ = Code Q :: (TYPE r -> Type)
+ Language.Haskell.TH.Lib: type TyVarBndrSpec = TyVarBndr Specificity
+ Language.Haskell.TH.Lib: type TyVarBndrUnit = TyVarBndr ()
+ Language.Haskell.TH.Lib.Internal: inferredSpec :: Specificity
+ Language.Haskell.TH.Lib.Internal: kindedInvisTV :: Quote m => Name -> Specificity -> m Kind -> m (TyVarBndr Specificity)
+ Language.Haskell.TH.Lib.Internal: mulArrowT :: Quote m => m Type
+ Language.Haskell.TH.Lib.Internal: plainInvisTV :: Quote m => Name -> Specificity -> m (TyVarBndr Specificity)
+ Language.Haskell.TH.Lib.Internal: specifiedSpec :: Specificity
+ Language.Haskell.TH.Lib.Internal: type CodeQ = Code Q :: (TYPE r -> Type)
+ Language.Haskell.TH.Lib.Internal: type Decs = [Dec]
+ Language.Haskell.TH.Lib.Internal: type TyVarBndrSpec = TyVarBndr Specificity
+ Language.Haskell.TH.Lib.Internal: type TyVarBndrUnit = TyVarBndr ()
+ Language.Haskell.TH.Ppr: class PprFlag flag
+ Language.Haskell.TH.Ppr: fromTANormal :: TypeArg -> Maybe Type
+ Language.Haskell.TH.Ppr: instance Language.Haskell.TH.Ppr.PprFlag ()
+ Language.Haskell.TH.Ppr: instance Language.Haskell.TH.Ppr.PprFlag Language.Haskell.TH.Syntax.Specificity
+ Language.Haskell.TH.Ppr: instance Language.Haskell.TH.Ppr.PprFlag flag => Language.Haskell.TH.Ppr.Ppr (Language.Haskell.TH.Syntax.TyVarBndr flag)
+ Language.Haskell.TH.Ppr: isStarT :: Type -> Bool
+ Language.Haskell.TH.Ppr: pprTyVarBndr :: PprFlag flag => TyVarBndr flag -> Doc
+ Language.Haskell.TH.Syntax: Code :: m (TExp a) -> Code m (a :: TYPE (r :: RuntimeRep))
+ Language.Haskell.TH.Syntax: InferredSpec :: Specificity
+ Language.Haskell.TH.Syntax: MulArrowT :: Type
+ Language.Haskell.TH.Syntax: SpecifiedSpec :: Specificity
+ Language.Haskell.TH.Syntax: [examineCode] :: Code m (a :: TYPE (r :: RuntimeRep)) -> m (TExp a)
+ Language.Haskell.TH.Syntax: bindCode :: forall m a (r :: RuntimeRep) (b :: TYPE r). Monad m => m a -> (a -> Code m b) -> Code m b
+ Language.Haskell.TH.Syntax: bindCode_ :: forall m a (r :: RuntimeRep) (b :: TYPE r). Monad m => m a -> Code m b -> Code m b
+ Language.Haskell.TH.Syntax: class Monad m => Quote m
+ Language.Haskell.TH.Syntax: compareBytes :: Bytes -> Bytes -> Ordering
+ Language.Haskell.TH.Syntax: data Specificity
+ Language.Haskell.TH.Syntax: eqBytes :: Bytes -> Bytes -> Bool
+ Language.Haskell.TH.Syntax: hoistCode :: forall m n (r :: RuntimeRep) (a :: TYPE r). Monad m => (forall x. m x -> n x) -> Code m a -> Code n a
+ Language.Haskell.TH.Syntax: instance Control.Monad.Fix.MonadFix Language.Haskell.TH.Syntax.Q
+ Language.Haskell.TH.Syntax: instance Data.Data.Data Language.Haskell.TH.Syntax.Specificity
+ Language.Haskell.TH.Syntax: instance Data.Data.Data flag => Data.Data.Data (Language.Haskell.TH.Syntax.TyVarBndr flag)
+ Language.Haskell.TH.Syntax: instance GHC.Base.Functor Language.Haskell.TH.Syntax.TyVarBndr
+ Language.Haskell.TH.Syntax: instance GHC.Base.Monoid a => GHC.Base.Monoid (Language.Haskell.TH.Syntax.Q a)
+ Language.Haskell.TH.Syntax: instance GHC.Base.Semigroup a => GHC.Base.Semigroup (Language.Haskell.TH.Syntax.Q a)
+ Language.Haskell.TH.Syntax: instance GHC.Classes.Eq Language.Haskell.TH.Syntax.Specificity
+ Language.Haskell.TH.Syntax: instance GHC.Classes.Eq flag => GHC.Classes.Eq (Language.Haskell.TH.Syntax.TyVarBndr flag)
+ Language.Haskell.TH.Syntax: instance GHC.Classes.Ord Language.Haskell.TH.Syntax.Specificity
+ Language.Haskell.TH.Syntax: instance GHC.Classes.Ord flag => GHC.Classes.Ord (Language.Haskell.TH.Syntax.TyVarBndr flag)
+ Language.Haskell.TH.Syntax: instance GHC.Generics.Generic (Language.Haskell.TH.Syntax.TyVarBndr flag)
+ Language.Haskell.TH.Syntax: instance GHC.Generics.Generic Language.Haskell.TH.Syntax.Specificity
+ Language.Haskell.TH.Syntax: instance GHC.Show.Show Language.Haskell.TH.Syntax.Specificity
+ Language.Haskell.TH.Syntax: instance GHC.Show.Show flag => GHC.Show.Show (Language.Haskell.TH.Syntax.TyVarBndr flag)
+ Language.Haskell.TH.Syntax: instance Language.Haskell.TH.Syntax.Lift GHC.Num.Integer.Integer
+ Language.Haskell.TH.Syntax: instance Language.Haskell.TH.Syntax.Lift GHC.Num.Natural.Natural
+ Language.Haskell.TH.Syntax: instance Language.Haskell.TH.Syntax.Quote GHC.Types.IO
+ Language.Haskell.TH.Syntax: instance Language.Haskell.TH.Syntax.Quote Language.Haskell.TH.Syntax.Q
+ Language.Haskell.TH.Syntax: joinCode :: forall m (r :: RuntimeRep) (a :: TYPE r). Monad m => m (Code m a) -> Code m a
+ Language.Haskell.TH.Syntax: liftCode :: forall (r :: RuntimeRep) (a :: TYPE r) m. m (TExp a) -> Code m a
+ Language.Haskell.TH.Syntax: manyName :: Name
+ Language.Haskell.TH.Syntax: memcmp :: Ptr a -> Ptr b -> CSize -> IO CInt
+ Language.Haskell.TH.Syntax: newNameIO :: String -> IO Name
+ Language.Haskell.TH.Syntax: newtype Code m (a :: TYPE (r :: RuntimeRep))
+ Language.Haskell.TH.Syntax: oneName :: Name
+ Language.Haskell.TH.Syntax: unTypeCode :: forall (r :: RuntimeRep) (a :: TYPE r) m. Quote m => Code m a -> m Exp
+ Language.Haskell.TH.Syntax: unsafeCodeCoerce :: forall (r :: RuntimeRep) (a :: TYPE r) m. Quote m => m Exp -> Code m a
- Language.Haskell.TH: ClassD :: Cxt -> Name -> [TyVarBndr] -> [FunDep] -> [Dec] -> Dec
+ Language.Haskell.TH: ClassD :: Cxt -> Name -> [TyVarBndr ()] -> [FunDep] -> [Dec] -> Dec
- Language.Haskell.TH: DataD :: Cxt -> Name -> [TyVarBndr] -> Maybe Kind -> [Con] -> [DerivClause] -> Dec
+ Language.Haskell.TH: DataD :: Cxt -> Name -> [TyVarBndr ()] -> Maybe Kind -> [Con] -> [DerivClause] -> Dec
- Language.Haskell.TH: DataFamilyD :: Name -> [TyVarBndr] -> Maybe Kind -> Dec
+ Language.Haskell.TH: DataFamilyD :: Name -> [TyVarBndr ()] -> Maybe Kind -> Dec
- Language.Haskell.TH: DataInstD :: Cxt -> Maybe [TyVarBndr] -> Type -> Maybe Kind -> [Con] -> [DerivClause] -> Dec
+ Language.Haskell.TH: DataInstD :: Cxt -> Maybe [TyVarBndr ()] -> Type -> Maybe Kind -> [Con] -> [DerivClause] -> Dec
- Language.Haskell.TH: DoE :: [Stmt] -> Exp
+ Language.Haskell.TH: DoE :: Maybe ModName -> [Stmt] -> Exp
- Language.Haskell.TH: ForallC :: [TyVarBndr] -> Cxt -> Con -> Con
+ Language.Haskell.TH: ForallC :: [TyVarBndr Specificity] -> Cxt -> Con -> Con
- Language.Haskell.TH: ForallT :: [TyVarBndr] -> Cxt -> Type -> Type
+ Language.Haskell.TH: ForallT :: [TyVarBndr Specificity] -> Cxt -> Type -> Type
- Language.Haskell.TH: ForallVisT :: [TyVarBndr] -> Type -> Type
+ Language.Haskell.TH: ForallVisT :: [TyVarBndr ()] -> Type -> Type
- Language.Haskell.TH: KindedTV :: Name -> Kind -> TyVarBndr
+ Language.Haskell.TH: KindedTV :: Name -> flag -> Kind -> TyVarBndr flag
- Language.Haskell.TH: MDoE :: [Stmt] -> Exp
+ Language.Haskell.TH: MDoE :: Maybe ModName -> [Stmt] -> Exp
- Language.Haskell.TH: NewtypeD :: Cxt -> Name -> [TyVarBndr] -> Maybe Kind -> Con -> [DerivClause] -> Dec
+ Language.Haskell.TH: NewtypeD :: Cxt -> Name -> [TyVarBndr ()] -> Maybe Kind -> Con -> [DerivClause] -> Dec
- Language.Haskell.TH: NewtypeInstD :: Cxt -> Maybe [TyVarBndr] -> Type -> Maybe Kind -> Con -> [DerivClause] -> Dec
+ Language.Haskell.TH: NewtypeInstD :: Cxt -> Maybe [TyVarBndr ()] -> Type -> Maybe Kind -> Con -> [DerivClause] -> Dec
- Language.Haskell.TH: PlainTV :: Name -> TyVarBndr
+ Language.Haskell.TH: PlainTV :: Name -> flag -> TyVarBndr flag
- Language.Haskell.TH: RuleP :: String -> Maybe [TyVarBndr] -> [RuleBndr] -> Exp -> Exp -> Phases -> Pragma
+ Language.Haskell.TH: RuleP :: String -> Maybe [TyVarBndr ()] -> [RuleBndr] -> Exp -> Exp -> Phases -> Pragma
- Language.Haskell.TH: TySynD :: Name -> [TyVarBndr] -> Type -> Dec
+ Language.Haskell.TH: TySynD :: Name -> [TyVarBndr ()] -> Type -> Dec
- Language.Haskell.TH: TySynEqn :: Maybe [TyVarBndr] -> Type -> Type -> TySynEqn
+ Language.Haskell.TH: TySynEqn :: Maybe [TyVarBndr ()] -> Type -> Type -> TySynEqn
- Language.Haskell.TH: TyVarSig :: TyVarBndr -> FamilyResultSig
+ Language.Haskell.TH: TyVarSig :: TyVarBndr () -> FamilyResultSig
- Language.Haskell.TH: TypeFamilyHead :: Name -> [TyVarBndr] -> FamilyResultSig -> Maybe InjectivityAnn -> TypeFamilyHead
+ Language.Haskell.TH: TypeFamilyHead :: Name -> [TyVarBndr ()] -> FamilyResultSig -> Maybe InjectivityAnn -> TypeFamilyHead
- Language.Haskell.TH: data TyVarBndr
+ Language.Haskell.TH: data TyVarBndr flag
- Language.Haskell.TH: newName :: String -> Q Name
+ Language.Haskell.TH: newName :: Quote m => String -> m Name
- Language.Haskell.TH.Lib: anyclassStrategy :: DerivStrategyQ
+ Language.Haskell.TH.Lib: anyclassStrategy :: Quote m => m DerivStrategy
- Language.Haskell.TH.Lib: appE :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: appE :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib: appKindT :: TypeQ -> KindQ -> TypeQ
+ Language.Haskell.TH.Lib: appKindT :: Quote m => m Type -> m Kind -> m Type
- Language.Haskell.TH.Lib: appT :: TypeQ -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib: appT :: Quote m => m Type -> m Type -> m Type
- Language.Haskell.TH.Lib: appTypeE :: ExpQ -> TypeQ -> ExpQ
+ Language.Haskell.TH.Lib: appTypeE :: Quote m => m Exp -> m Type -> m Exp
- Language.Haskell.TH.Lib: appsE :: [ExpQ] -> ExpQ
+ Language.Haskell.TH.Lib: appsE :: Quote m => [m Exp] -> m Exp
- Language.Haskell.TH.Lib: arithSeqE :: RangeQ -> ExpQ
+ Language.Haskell.TH.Lib: arithSeqE :: Quote m => m Range -> m Exp
- Language.Haskell.TH.Lib: arrowT :: TypeQ
+ Language.Haskell.TH.Lib: arrowT :: Quote m => m Type
- Language.Haskell.TH.Lib: asP :: Name -> PatQ -> PatQ
+ Language.Haskell.TH.Lib: asP :: Quote m => Name -> m Pat -> m Pat
- Language.Haskell.TH.Lib: bang :: SourceUnpackednessQ -> SourceStrictnessQ -> BangQ
+ Language.Haskell.TH.Lib: bang :: Quote m => m SourceUnpackedness -> m SourceStrictness -> m Bang
- Language.Haskell.TH.Lib: bangP :: PatQ -> PatQ
+ Language.Haskell.TH.Lib: bangP :: Quote m => m Pat -> m Pat
- Language.Haskell.TH.Lib: bangType :: BangQ -> TypeQ -> BangTypeQ
+ Language.Haskell.TH.Lib: bangType :: Quote m => m Bang -> m Type -> m BangType
- Language.Haskell.TH.Lib: bindS :: PatQ -> ExpQ -> StmtQ
+ Language.Haskell.TH.Lib: bindS :: Quote m => m Pat -> m Exp -> m Stmt
- Language.Haskell.TH.Lib: caseE :: ExpQ -> [MatchQ] -> ExpQ
+ Language.Haskell.TH.Lib: caseE :: Quote m => m Exp -> [m Match] -> m Exp
- Language.Haskell.TH.Lib: classD :: CxtQ -> Name -> [TyVarBndr] -> [FunDep] -> [DecQ] -> DecQ
+ Language.Haskell.TH.Lib: classD :: Quote m => m Cxt -> Name -> [TyVarBndr ()] -> [FunDep] -> [m Dec] -> m Dec
- Language.Haskell.TH.Lib: classP :: Name -> [Q Type] -> Q Pred
+ Language.Haskell.TH.Lib: classP :: Quote m => Name -> [m Type] -> m Pred
- Language.Haskell.TH.Lib: clause :: [PatQ] -> BodyQ -> [DecQ] -> ClauseQ
+ Language.Haskell.TH.Lib: clause :: Quote m => [m Pat] -> m Body -> [m Dec] -> m Clause
- Language.Haskell.TH.Lib: closedTypeFamilyD :: Name -> [TyVarBndr] -> FamilyResultSig -> Maybe InjectivityAnn -> [TySynEqnQ] -> DecQ
+ Language.Haskell.TH.Lib: closedTypeFamilyD :: Quote m => Name -> [TyVarBndr ()] -> FamilyResultSig -> Maybe InjectivityAnn -> [m TySynEqn] -> m Dec
- Language.Haskell.TH.Lib: compE :: [StmtQ] -> ExpQ
+ Language.Haskell.TH.Lib: compE :: Quote m => [m Stmt] -> m Exp
- Language.Haskell.TH.Lib: conE :: Name -> ExpQ
+ Language.Haskell.TH.Lib: conE :: Quote m => Name -> m Exp
- Language.Haskell.TH.Lib: conP :: Name -> [PatQ] -> PatQ
+ Language.Haskell.TH.Lib: conP :: Quote m => Name -> [m Pat] -> m Pat
- Language.Haskell.TH.Lib: conT :: Name -> TypeQ
+ Language.Haskell.TH.Lib: conT :: Quote m => Name -> m Type
- Language.Haskell.TH.Lib: condE :: ExpQ -> ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: condE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib: cxt :: [PredQ] -> CxtQ
+ Language.Haskell.TH.Lib: cxt :: Quote m => [m Pred] -> m Cxt
- Language.Haskell.TH.Lib: dataD :: CxtQ -> Name -> [TyVarBndr] -> Maybe Kind -> [ConQ] -> [DerivClauseQ] -> DecQ
+ Language.Haskell.TH.Lib: dataD :: Quote m => m Cxt -> Name -> [TyVarBndr ()] -> Maybe Kind -> [m Con] -> [m DerivClause] -> m Dec
- Language.Haskell.TH.Lib: dataFamilyD :: Name -> [TyVarBndr] -> Maybe Kind -> DecQ
+ Language.Haskell.TH.Lib: dataFamilyD :: Quote m => Name -> [TyVarBndr ()] -> Maybe Kind -> m Dec
- Language.Haskell.TH.Lib: dataInstD :: CxtQ -> Name -> [TypeQ] -> Maybe Kind -> [ConQ] -> [DerivClauseQ] -> DecQ
+ Language.Haskell.TH.Lib: dataInstD :: Quote m => m Cxt -> Name -> [m Type] -> Maybe Kind -> [m Con] -> [m DerivClause] -> m Dec
- Language.Haskell.TH.Lib: defaultSigD :: Name -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib: defaultSigD :: Quote m => Name -> m Type -> m Dec
- Language.Haskell.TH.Lib: derivClause :: Maybe DerivStrategy -> [PredQ] -> DerivClauseQ
+ Language.Haskell.TH.Lib: derivClause :: Quote m => Maybe DerivStrategy -> [m Pred] -> m DerivClause
- Language.Haskell.TH.Lib: doE :: [StmtQ] -> ExpQ
+ Language.Haskell.TH.Lib: doE :: Quote m => [m Stmt] -> m Exp
- Language.Haskell.TH.Lib: dyn :: String -> ExpQ
+ Language.Haskell.TH.Lib: dyn :: Quote m => String -> m Exp
- Language.Haskell.TH.Lib: equalP :: TypeQ -> TypeQ -> PredQ
+ Language.Haskell.TH.Lib: equalP :: Quote m => m Type -> m Type -> m Pred
- Language.Haskell.TH.Lib: equalityT :: TypeQ
+ Language.Haskell.TH.Lib: equalityT :: Quote m => m Type
- Language.Haskell.TH.Lib: explBidir :: [ClauseQ] -> PatSynDirQ
+ Language.Haskell.TH.Lib: explBidir :: Quote m => [m Clause] -> m PatSynDir
- Language.Haskell.TH.Lib: fieldExp :: Name -> ExpQ -> Q (Name, Exp)
+ Language.Haskell.TH.Lib: fieldExp :: Quote m => Name -> m Exp -> m (Name, Exp)
- Language.Haskell.TH.Lib: fieldPat :: Name -> PatQ -> FieldPatQ
+ Language.Haskell.TH.Lib: fieldPat :: Quote m => Name -> m Pat -> m FieldPat
- Language.Haskell.TH.Lib: forImpD :: Callconv -> Safety -> String -> Name -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib: forImpD :: Quote m => Callconv -> Safety -> String -> Name -> m Type -> m Dec
- Language.Haskell.TH.Lib: forallC :: [TyVarBndr] -> CxtQ -> ConQ -> ConQ
+ Language.Haskell.TH.Lib: forallC :: Quote m => [TyVarBndr Specificity] -> m Cxt -> m Con -> m Con
- Language.Haskell.TH.Lib: forallT :: [TyVarBndr] -> CxtQ -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib: forallT :: Quote m => [TyVarBndr Specificity] -> m Cxt -> m Type -> m Type
- Language.Haskell.TH.Lib: forallVisT :: [TyVarBndrQ] -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib: forallVisT :: Quote m => [m (TyVarBndr ())] -> m Type -> m Type
- Language.Haskell.TH.Lib: fromE :: ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: fromE :: Quote m => m Exp -> m Exp
- Language.Haskell.TH.Lib: fromR :: ExpQ -> RangeQ
+ Language.Haskell.TH.Lib: fromR :: Quote m => m Exp -> m Range
- Language.Haskell.TH.Lib: fromThenE :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: fromThenE :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib: fromThenR :: ExpQ -> ExpQ -> RangeQ
+ Language.Haskell.TH.Lib: fromThenR :: Quote m => m Exp -> m Exp -> m Range
- Language.Haskell.TH.Lib: fromThenToE :: ExpQ -> ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: fromThenToE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib: fromThenToR :: ExpQ -> ExpQ -> ExpQ -> RangeQ
+ Language.Haskell.TH.Lib: fromThenToR :: Quote m => m Exp -> m Exp -> m Exp -> m Range
- Language.Haskell.TH.Lib: fromToE :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: fromToE :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib: fromToR :: ExpQ -> ExpQ -> RangeQ
+ Language.Haskell.TH.Lib: fromToR :: Quote m => m Exp -> m Exp -> m Range
- Language.Haskell.TH.Lib: funD :: Name -> [ClauseQ] -> DecQ
+ Language.Haskell.TH.Lib: funD :: Quote m => Name -> [m Clause] -> m Dec
- Language.Haskell.TH.Lib: gadtC :: [Name] -> [StrictTypeQ] -> TypeQ -> ConQ
+ Language.Haskell.TH.Lib: gadtC :: Quote m => [Name] -> [m StrictType] -> m Type -> m Con
- Language.Haskell.TH.Lib: guardedB :: [Q (Guard, Exp)] -> BodyQ
+ Language.Haskell.TH.Lib: guardedB :: Quote m => [m (Guard, Exp)] -> m Body
- Language.Haskell.TH.Lib: implBidir :: PatSynDirQ
+ Language.Haskell.TH.Lib: implBidir :: Quote m => m PatSynDir
- Language.Haskell.TH.Lib: implicitParamBindD :: String -> ExpQ -> DecQ
+ Language.Haskell.TH.Lib: implicitParamBindD :: Quote m => String -> m Exp -> m Dec
- Language.Haskell.TH.Lib: implicitParamT :: String -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib: implicitParamT :: Quote m => String -> m Type -> m Type
- Language.Haskell.TH.Lib: implicitParamVarE :: String -> ExpQ
+ Language.Haskell.TH.Lib: implicitParamVarE :: Quote m => String -> m Exp
- Language.Haskell.TH.Lib: infixApp :: ExpQ -> ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: infixApp :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib: infixC :: Q (Bang, Type) -> Name -> Q (Bang, Type) -> ConQ
+ Language.Haskell.TH.Lib: infixC :: Quote m => m (Bang, Type) -> Name -> m (Bang, Type) -> m Con
- Language.Haskell.TH.Lib: infixE :: Maybe ExpQ -> ExpQ -> Maybe ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: infixE :: Quote m => Maybe (m Exp) -> m Exp -> Maybe (m Exp) -> m Exp
- Language.Haskell.TH.Lib: infixLD :: Int -> Name -> DecQ
+ Language.Haskell.TH.Lib: infixLD :: Quote m => Int -> Name -> m Dec
- Language.Haskell.TH.Lib: infixND :: Int -> Name -> DecQ
+ Language.Haskell.TH.Lib: infixND :: Quote m => Int -> Name -> m Dec
- Language.Haskell.TH.Lib: infixP :: PatQ -> Name -> PatQ -> PatQ
+ Language.Haskell.TH.Lib: infixP :: Quote m => m Pat -> Name -> m Pat -> m Pat
- Language.Haskell.TH.Lib: infixPatSyn :: Name -> Name -> PatSynArgsQ
+ Language.Haskell.TH.Lib: infixPatSyn :: Quote m => Name -> Name -> m PatSynArgs
- Language.Haskell.TH.Lib: infixRD :: Int -> Name -> DecQ
+ Language.Haskell.TH.Lib: infixRD :: Quote m => Int -> Name -> m Dec
- Language.Haskell.TH.Lib: infixT :: TypeQ -> Name -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib: infixT :: Quote m => m Type -> Name -> m Type -> m Type
- Language.Haskell.TH.Lib: instanceD :: CxtQ -> TypeQ -> [DecQ] -> DecQ
+ Language.Haskell.TH.Lib: instanceD :: Quote m => m Cxt -> m Type -> [m Dec] -> m Dec
- Language.Haskell.TH.Lib: instanceWithOverlapD :: Maybe Overlap -> CxtQ -> TypeQ -> [DecQ] -> DecQ
+ Language.Haskell.TH.Lib: instanceWithOverlapD :: Quote m => Maybe Overlap -> m Cxt -> m Type -> [m Dec] -> m Dec
- Language.Haskell.TH.Lib: isStrict :: Q Strict
+ Language.Haskell.TH.Lib: isStrict :: Quote m => m Strict
- Language.Haskell.TH.Lib: kiSigD :: Name -> KindQ -> DecQ
+ Language.Haskell.TH.Lib: kiSigD :: Quote m => Name -> m Kind -> m Dec
- Language.Haskell.TH.Lib: kindedTV :: Name -> Kind -> TyVarBndr
+ Language.Haskell.TH.Lib: kindedTV :: Name -> Kind -> TyVarBndr ()
- Language.Haskell.TH.Lib: labelE :: String -> ExpQ
+ Language.Haskell.TH.Lib: labelE :: Quote m => String -> m Exp
- Language.Haskell.TH.Lib: lam1E :: PatQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: lam1E :: Quote m => m Pat -> m Exp -> m Exp
- Language.Haskell.TH.Lib: lamCaseE :: [MatchQ] -> ExpQ
+ Language.Haskell.TH.Lib: lamCaseE :: Quote m => [m Match] -> m Exp
- Language.Haskell.TH.Lib: lamE :: [PatQ] -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: lamE :: Quote m => [m Pat] -> m Exp -> m Exp
- Language.Haskell.TH.Lib: letE :: [DecQ] -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: letE :: Quote m => [m Dec] -> m Exp -> m Exp
- Language.Haskell.TH.Lib: letS :: [DecQ] -> StmtQ
+ Language.Haskell.TH.Lib: letS :: Quote m => [m Dec] -> m Stmt
- Language.Haskell.TH.Lib: listE :: [ExpQ] -> ExpQ
+ Language.Haskell.TH.Lib: listE :: Quote m => [m Exp] -> m Exp
- Language.Haskell.TH.Lib: listP :: [PatQ] -> PatQ
+ Language.Haskell.TH.Lib: listP :: Quote m => [m Pat] -> m Pat
- Language.Haskell.TH.Lib: listT :: TypeQ
+ Language.Haskell.TH.Lib: listT :: Quote m => m Type
- Language.Haskell.TH.Lib: litE :: Lit -> ExpQ
+ Language.Haskell.TH.Lib: litE :: Quote m => Lit -> m Exp
- Language.Haskell.TH.Lib: litP :: Lit -> PatQ
+ Language.Haskell.TH.Lib: litP :: Quote m => Lit -> m Pat
- Language.Haskell.TH.Lib: litT :: TyLitQ -> TypeQ
+ Language.Haskell.TH.Lib: litT :: Quote m => m TyLit -> m Type
- Language.Haskell.TH.Lib: match :: PatQ -> BodyQ -> [DecQ] -> MatchQ
+ Language.Haskell.TH.Lib: match :: Quote m => m Pat -> m Body -> [m Dec] -> m Match
- Language.Haskell.TH.Lib: mdoE :: [StmtQ] -> ExpQ
+ Language.Haskell.TH.Lib: mdoE :: Quote m => [m Stmt] -> m Exp
- Language.Haskell.TH.Lib: multiIfE :: [Q (Guard, Exp)] -> ExpQ
+ Language.Haskell.TH.Lib: multiIfE :: Quote m => [m (Guard, Exp)] -> m Exp
- Language.Haskell.TH.Lib: newtypeD :: CxtQ -> Name -> [TyVarBndr] -> Maybe Kind -> ConQ -> [DerivClauseQ] -> DecQ
+ Language.Haskell.TH.Lib: newtypeD :: Quote m => m Cxt -> Name -> [TyVarBndr ()] -> Maybe Kind -> m Con -> [m DerivClause] -> m Dec
- Language.Haskell.TH.Lib: newtypeInstD :: CxtQ -> Name -> [TypeQ] -> Maybe Kind -> ConQ -> [DerivClauseQ] -> DecQ
+ Language.Haskell.TH.Lib: newtypeInstD :: Quote m => m Cxt -> Name -> [m Type] -> Maybe Kind -> m Con -> [m DerivClause] -> m Dec
- Language.Haskell.TH.Lib: newtypeStrategy :: DerivStrategyQ
+ Language.Haskell.TH.Lib: newtypeStrategy :: Quote m => m DerivStrategy
- Language.Haskell.TH.Lib: noBindS :: ExpQ -> StmtQ
+ Language.Haskell.TH.Lib: noBindS :: Quote m => m Exp -> m Stmt
- Language.Haskell.TH.Lib: noSourceStrictness :: SourceStrictnessQ
+ Language.Haskell.TH.Lib: noSourceStrictness :: Quote m => m SourceStrictness
- Language.Haskell.TH.Lib: noSourceUnpackedness :: SourceUnpackednessQ
+ Language.Haskell.TH.Lib: noSourceUnpackedness :: Quote m => m SourceUnpackedness
- Language.Haskell.TH.Lib: normalB :: ExpQ -> BodyQ
+ Language.Haskell.TH.Lib: normalB :: Quote m => m Exp -> m Body
- Language.Haskell.TH.Lib: normalC :: Name -> [BangTypeQ] -> ConQ
+ Language.Haskell.TH.Lib: normalC :: Quote m => Name -> [m BangType] -> m Con
- Language.Haskell.TH.Lib: normalG :: ExpQ -> GuardQ
+ Language.Haskell.TH.Lib: normalG :: Quote m => m Exp -> m Guard
- Language.Haskell.TH.Lib: normalGE :: ExpQ -> ExpQ -> Q (Guard, Exp)
+ Language.Haskell.TH.Lib: normalGE :: Quote m => m Exp -> m Exp -> m (Guard, Exp)
- Language.Haskell.TH.Lib: notStrict :: Q Strict
+ Language.Haskell.TH.Lib: notStrict :: Quote m => m Strict
- Language.Haskell.TH.Lib: numTyLit :: Integer -> TyLitQ
+ Language.Haskell.TH.Lib: numTyLit :: Quote m => Integer -> m TyLit
- Language.Haskell.TH.Lib: openTypeFamilyD :: Name -> [TyVarBndr] -> FamilyResultSig -> Maybe InjectivityAnn -> DecQ
+ Language.Haskell.TH.Lib: openTypeFamilyD :: Quote m => Name -> [TyVarBndr ()] -> FamilyResultSig -> Maybe InjectivityAnn -> m Dec
- Language.Haskell.TH.Lib: parS :: [[StmtQ]] -> StmtQ
+ Language.Haskell.TH.Lib: parS :: Quote m => [[m Stmt]] -> m Stmt
- Language.Haskell.TH.Lib: parensE :: ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: parensE :: Quote m => m Exp -> m Exp
- Language.Haskell.TH.Lib: parensP :: PatQ -> PatQ
+ Language.Haskell.TH.Lib: parensP :: Quote m => m Pat -> m Pat
- Language.Haskell.TH.Lib: parensT :: TypeQ -> TypeQ
+ Language.Haskell.TH.Lib: parensT :: Quote m => m Type -> m Type
- Language.Haskell.TH.Lib: patG :: [StmtQ] -> GuardQ
+ Language.Haskell.TH.Lib: patG :: Quote m => [m Stmt] -> m Guard
- Language.Haskell.TH.Lib: patGE :: [StmtQ] -> ExpQ -> Q (Guard, Exp)
+ Language.Haskell.TH.Lib: patGE :: Quote m => [m Stmt] -> m Exp -> m (Guard, Exp)
- Language.Haskell.TH.Lib: patSynD :: Name -> PatSynArgsQ -> PatSynDirQ -> PatQ -> DecQ
+ Language.Haskell.TH.Lib: patSynD :: Quote m => Name -> m PatSynArgs -> m PatSynDir -> m Pat -> m Dec
- Language.Haskell.TH.Lib: patSynSigD :: Name -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib: patSynSigD :: Quote m => Name -> m Type -> m Dec
- Language.Haskell.TH.Lib: plainTV :: Name -> TyVarBndr
+ Language.Haskell.TH.Lib: plainTV :: Name -> TyVarBndr ()
- Language.Haskell.TH.Lib: pragAnnD :: AnnTarget -> ExpQ -> DecQ
+ Language.Haskell.TH.Lib: pragAnnD :: Quote m => AnnTarget -> m Exp -> m Dec
- Language.Haskell.TH.Lib: pragCompleteD :: [Name] -> Maybe Name -> DecQ
+ Language.Haskell.TH.Lib: pragCompleteD :: Quote m => [Name] -> Maybe Name -> m Dec
- Language.Haskell.TH.Lib: pragInlD :: Name -> Inline -> RuleMatch -> Phases -> DecQ
+ Language.Haskell.TH.Lib: pragInlD :: Quote m => Name -> Inline -> RuleMatch -> Phases -> m Dec
- Language.Haskell.TH.Lib: pragLineD :: Int -> String -> DecQ
+ Language.Haskell.TH.Lib: pragLineD :: Quote m => Int -> String -> m Dec
- Language.Haskell.TH.Lib: pragRuleD :: String -> [RuleBndrQ] -> ExpQ -> ExpQ -> Phases -> DecQ
+ Language.Haskell.TH.Lib: pragRuleD :: Quote m => String -> [m RuleBndr] -> m Exp -> m Exp -> Phases -> m Dec
- Language.Haskell.TH.Lib: pragSpecD :: Name -> TypeQ -> Phases -> DecQ
+ Language.Haskell.TH.Lib: pragSpecD :: Quote m => Name -> m Type -> Phases -> m Dec
- Language.Haskell.TH.Lib: pragSpecInlD :: Name -> TypeQ -> Inline -> Phases -> DecQ
+ Language.Haskell.TH.Lib: pragSpecInlD :: Quote m => Name -> m Type -> Inline -> Phases -> m Dec
- Language.Haskell.TH.Lib: pragSpecInstD :: TypeQ -> DecQ
+ Language.Haskell.TH.Lib: pragSpecInstD :: Quote m => m Type -> m Dec
- Language.Haskell.TH.Lib: prefixPatSyn :: [Name] -> PatSynArgsQ
+ Language.Haskell.TH.Lib: prefixPatSyn :: Quote m => [Name] -> m PatSynArgs
- Language.Haskell.TH.Lib: promotedConsT :: TypeQ
+ Language.Haskell.TH.Lib: promotedConsT :: Quote m => m Type
- Language.Haskell.TH.Lib: promotedNilT :: TypeQ
+ Language.Haskell.TH.Lib: promotedNilT :: Quote m => m Type
- Language.Haskell.TH.Lib: promotedT :: Name -> TypeQ
+ Language.Haskell.TH.Lib: promotedT :: Quote m => Name -> m Type
- Language.Haskell.TH.Lib: promotedTupleT :: Int -> TypeQ
+ Language.Haskell.TH.Lib: promotedTupleT :: Quote m => Int -> m Type
- Language.Haskell.TH.Lib: recC :: Name -> [VarBangTypeQ] -> ConQ
+ Language.Haskell.TH.Lib: recC :: Quote m => Name -> [m VarBangType] -> m Con
- Language.Haskell.TH.Lib: recConE :: Name -> [Q (Name, Exp)] -> ExpQ
+ Language.Haskell.TH.Lib: recConE :: Quote m => Name -> [m (Name, Exp)] -> m Exp
- Language.Haskell.TH.Lib: recGadtC :: [Name] -> [VarStrictTypeQ] -> TypeQ -> ConQ
+ Language.Haskell.TH.Lib: recGadtC :: Quote m => [Name] -> [m VarStrictType] -> m Type -> m Con
- Language.Haskell.TH.Lib: recP :: Name -> [FieldPatQ] -> PatQ
+ Language.Haskell.TH.Lib: recP :: Quote m => Name -> [m FieldPat] -> m Pat
- Language.Haskell.TH.Lib: recS :: [StmtQ] -> StmtQ
+ Language.Haskell.TH.Lib: recS :: Quote m => [m Stmt] -> m Stmt
- Language.Haskell.TH.Lib: recUpdE :: ExpQ -> [Q (Name, Exp)] -> ExpQ
+ Language.Haskell.TH.Lib: recUpdE :: Quote m => m Exp -> [m (Name, Exp)] -> m Exp
- Language.Haskell.TH.Lib: recordPatSyn :: [Name] -> PatSynArgsQ
+ Language.Haskell.TH.Lib: recordPatSyn :: Quote m => [Name] -> m PatSynArgs
- Language.Haskell.TH.Lib: roleAnnotD :: Name -> [Role] -> DecQ
+ Language.Haskell.TH.Lib: roleAnnotD :: Quote m => Name -> [Role] -> m Dec
- Language.Haskell.TH.Lib: ruleVar :: Name -> RuleBndrQ
+ Language.Haskell.TH.Lib: ruleVar :: Quote m => Name -> m RuleBndr
- Language.Haskell.TH.Lib: sectionL :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: sectionL :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib: sectionR :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: sectionR :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib: sigD :: Name -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib: sigD :: Quote m => Name -> m Type -> m Dec
- Language.Haskell.TH.Lib: sigE :: ExpQ -> TypeQ -> ExpQ
+ Language.Haskell.TH.Lib: sigE :: Quote m => m Exp -> m Type -> m Exp
- Language.Haskell.TH.Lib: sigP :: PatQ -> TypeQ -> PatQ
+ Language.Haskell.TH.Lib: sigP :: Quote m => m Pat -> m Type -> m Pat
- Language.Haskell.TH.Lib: sigT :: TypeQ -> Kind -> TypeQ
+ Language.Haskell.TH.Lib: sigT :: Quote m => m Type -> Kind -> m Type
- Language.Haskell.TH.Lib: sourceLazy :: SourceStrictnessQ
+ Language.Haskell.TH.Lib: sourceLazy :: Quote m => m SourceStrictness
- Language.Haskell.TH.Lib: sourceNoUnpack :: SourceUnpackednessQ
+ Language.Haskell.TH.Lib: sourceNoUnpack :: Quote m => m SourceUnpackedness
- Language.Haskell.TH.Lib: sourceStrict :: SourceStrictnessQ
+ Language.Haskell.TH.Lib: sourceStrict :: Quote m => m SourceStrictness
- Language.Haskell.TH.Lib: sourceUnpack :: SourceUnpackednessQ
+ Language.Haskell.TH.Lib: sourceUnpack :: Quote m => m SourceUnpackedness
- Language.Haskell.TH.Lib: standaloneDerivD :: CxtQ -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib: standaloneDerivD :: Quote m => m Cxt -> m Type -> m Dec
- Language.Haskell.TH.Lib: standaloneDerivWithStrategyD :: Maybe DerivStrategy -> CxtQ -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib: standaloneDerivWithStrategyD :: Quote m => Maybe DerivStrategy -> m Cxt -> m Type -> m Dec
- Language.Haskell.TH.Lib: staticE :: ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: staticE :: Quote m => m Exp -> m Exp
- Language.Haskell.TH.Lib: stockStrategy :: DerivStrategyQ
+ Language.Haskell.TH.Lib: stockStrategy :: Quote m => m DerivStrategy
- Language.Haskell.TH.Lib: strTyLit :: String -> TyLitQ
+ Language.Haskell.TH.Lib: strTyLit :: Quote m => String -> m TyLit
- Language.Haskell.TH.Lib: strictType :: Q Strict -> TypeQ -> StrictTypeQ
+ Language.Haskell.TH.Lib: strictType :: Quote m => m Strict -> m Type -> m StrictType
- Language.Haskell.TH.Lib: stringE :: String -> ExpQ
+ Language.Haskell.TH.Lib: stringE :: Quote m => String -> m Exp
- Language.Haskell.TH.Lib: tildeP :: PatQ -> PatQ
+ Language.Haskell.TH.Lib: tildeP :: Quote m => m Pat -> m Pat
- Language.Haskell.TH.Lib: tupE :: [ExpQ] -> ExpQ
+ Language.Haskell.TH.Lib: tupE :: Quote m => [m Exp] -> m Exp
- Language.Haskell.TH.Lib: tupP :: [PatQ] -> PatQ
+ Language.Haskell.TH.Lib: tupP :: Quote m => [m Pat] -> m Pat
- Language.Haskell.TH.Lib: tupleT :: Int -> TypeQ
+ Language.Haskell.TH.Lib: tupleT :: Quote m => Int -> m Type
- Language.Haskell.TH.Lib: tySynD :: Name -> [TyVarBndr] -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib: tySynD :: Quote m => Name -> [TyVarBndr ()] -> m Type -> m Dec
- Language.Haskell.TH.Lib: tySynEqn :: Maybe [TyVarBndr] -> TypeQ -> TypeQ -> TySynEqnQ
+ Language.Haskell.TH.Lib: tySynEqn :: Quote m => Maybe [TyVarBndr ()] -> m Type -> m Type -> m TySynEqn
- Language.Haskell.TH.Lib: tySynInstD :: TySynEqnQ -> DecQ
+ Language.Haskell.TH.Lib: tySynInstD :: Quote m => m TySynEqn -> m Dec
- Language.Haskell.TH.Lib: tyVarSig :: TyVarBndr -> FamilyResultSig
+ Language.Haskell.TH.Lib: tyVarSig :: TyVarBndr () -> FamilyResultSig
- Language.Haskell.TH.Lib: type TExpQ a = Q (TExp a)
+ Language.Haskell.TH.Lib: type TExpQ (a :: TYPE r) = Q (TExp a)
- Language.Haskell.TH.Lib: typedRuleVar :: Name -> TypeQ -> RuleBndrQ
+ Language.Haskell.TH.Lib: typedRuleVar :: Quote m => Name -> m Type -> m RuleBndr
- Language.Haskell.TH.Lib: uInfixE :: ExpQ -> ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib: uInfixE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib: uInfixP :: PatQ -> Name -> PatQ -> PatQ
+ Language.Haskell.TH.Lib: uInfixP :: Quote m => m Pat -> Name -> m Pat -> m Pat
- Language.Haskell.TH.Lib: uInfixT :: TypeQ -> Name -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib: uInfixT :: Quote m => m Type -> Name -> m Type -> m Type
- Language.Haskell.TH.Lib: unboundVarE :: Name -> ExpQ
+ Language.Haskell.TH.Lib: unboundVarE :: Quote m => Name -> m Exp
- Language.Haskell.TH.Lib: unboxedSumE :: ExpQ -> SumAlt -> SumArity -> ExpQ
+ Language.Haskell.TH.Lib: unboxedSumE :: Quote m => m Exp -> SumAlt -> SumArity -> m Exp
- Language.Haskell.TH.Lib: unboxedSumP :: PatQ -> SumAlt -> SumArity -> PatQ
+ Language.Haskell.TH.Lib: unboxedSumP :: Quote m => m Pat -> SumAlt -> SumArity -> m Pat
- Language.Haskell.TH.Lib: unboxedSumT :: SumArity -> TypeQ
+ Language.Haskell.TH.Lib: unboxedSumT :: Quote m => SumArity -> m Type
- Language.Haskell.TH.Lib: unboxedTupE :: [ExpQ] -> ExpQ
+ Language.Haskell.TH.Lib: unboxedTupE :: Quote m => [m Exp] -> m Exp
- Language.Haskell.TH.Lib: unboxedTupP :: [PatQ] -> PatQ
+ Language.Haskell.TH.Lib: unboxedTupP :: Quote m => [m Pat] -> m Pat
- Language.Haskell.TH.Lib: unboxedTupleT :: Int -> TypeQ
+ Language.Haskell.TH.Lib: unboxedTupleT :: Quote m => Int -> m Type
- Language.Haskell.TH.Lib: unidir :: PatSynDirQ
+ Language.Haskell.TH.Lib: unidir :: Quote m => m PatSynDir
- Language.Haskell.TH.Lib: unpacked :: Q Strict
+ Language.Haskell.TH.Lib: unpacked :: Quote m => m Strict
- Language.Haskell.TH.Lib: valD :: PatQ -> BodyQ -> [DecQ] -> DecQ
+ Language.Haskell.TH.Lib: valD :: Quote m => m Pat -> m Body -> [m Dec] -> m Dec
- Language.Haskell.TH.Lib: varBangType :: Name -> BangTypeQ -> VarBangTypeQ
+ Language.Haskell.TH.Lib: varBangType :: Quote m => Name -> m BangType -> m VarBangType
- Language.Haskell.TH.Lib: varE :: Name -> ExpQ
+ Language.Haskell.TH.Lib: varE :: Quote m => Name -> m Exp
- Language.Haskell.TH.Lib: varP :: Name -> PatQ
+ Language.Haskell.TH.Lib: varP :: Quote m => Name -> m Pat
- Language.Haskell.TH.Lib: varStrictType :: Name -> StrictTypeQ -> VarStrictTypeQ
+ Language.Haskell.TH.Lib: varStrictType :: Quote m => Name -> m StrictType -> m VarStrictType
- Language.Haskell.TH.Lib: varT :: Name -> TypeQ
+ Language.Haskell.TH.Lib: varT :: Quote m => Name -> m Type
- Language.Haskell.TH.Lib: viaStrategy :: TypeQ -> DerivStrategyQ
+ Language.Haskell.TH.Lib: viaStrategy :: Quote m => m Type -> m DerivStrategy
- Language.Haskell.TH.Lib: viewP :: ExpQ -> PatQ -> PatQ
+ Language.Haskell.TH.Lib: viewP :: Quote m => m Exp -> m Pat -> m Pat
- Language.Haskell.TH.Lib: wildCardT :: TypeQ
+ Language.Haskell.TH.Lib: wildCardT :: Quote m => m Type
- Language.Haskell.TH.Lib: wildP :: PatQ
+ Language.Haskell.TH.Lib: wildP :: Quote m => m Pat
- Language.Haskell.TH.Lib.Internal: anyclassStrategy :: DerivStrategyQ
+ Language.Haskell.TH.Lib.Internal: anyclassStrategy :: Quote m => m DerivStrategy
- Language.Haskell.TH.Lib.Internal: appE :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: appE :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: appKindT :: TypeQ -> KindQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: appKindT :: Quote m => m Type -> m Kind -> m Type
- Language.Haskell.TH.Lib.Internal: appT :: TypeQ -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: appT :: Quote m => m Type -> m Type -> m Type
- Language.Haskell.TH.Lib.Internal: appTypeE :: ExpQ -> TypeQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: appTypeE :: Quote m => m Exp -> m Type -> m Exp
- Language.Haskell.TH.Lib.Internal: appsE :: [ExpQ] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: appsE :: Quote m => [m Exp] -> m Exp
- Language.Haskell.TH.Lib.Internal: arithSeqE :: RangeQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: arithSeqE :: Quote m => m Range -> m Exp
- Language.Haskell.TH.Lib.Internal: arrowT :: TypeQ
+ Language.Haskell.TH.Lib.Internal: arrowT :: Quote m => m Type
- Language.Haskell.TH.Lib.Internal: asP :: Name -> PatQ -> PatQ
+ Language.Haskell.TH.Lib.Internal: asP :: Quote m => Name -> m Pat -> m Pat
- Language.Haskell.TH.Lib.Internal: bang :: SourceUnpackednessQ -> SourceStrictnessQ -> BangQ
+ Language.Haskell.TH.Lib.Internal: bang :: Quote m => m SourceUnpackedness -> m SourceStrictness -> m Bang
- Language.Haskell.TH.Lib.Internal: bangP :: PatQ -> PatQ
+ Language.Haskell.TH.Lib.Internal: bangP :: Quote m => m Pat -> m Pat
- Language.Haskell.TH.Lib.Internal: bangType :: BangQ -> TypeQ -> BangTypeQ
+ Language.Haskell.TH.Lib.Internal: bangType :: Quote m => m Bang -> m Type -> m BangType
- Language.Haskell.TH.Lib.Internal: bindS :: PatQ -> ExpQ -> StmtQ
+ Language.Haskell.TH.Lib.Internal: bindS :: Quote m => m Pat -> m Exp -> m Stmt
- Language.Haskell.TH.Lib.Internal: caseE :: ExpQ -> [MatchQ] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: caseE :: Quote m => m Exp -> [m Match] -> m Exp
- Language.Haskell.TH.Lib.Internal: classD :: CxtQ -> Name -> [TyVarBndrQ] -> [FunDep] -> [DecQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: classD :: Quote m => m Cxt -> Name -> [m (TyVarBndr ())] -> [FunDep] -> [m Dec] -> m Dec
- Language.Haskell.TH.Lib.Internal: classP :: Name -> [Q Type] -> Q Pred
+ Language.Haskell.TH.Lib.Internal: classP :: Quote m => Name -> [m Type] -> m Pred
- Language.Haskell.TH.Lib.Internal: clause :: [PatQ] -> BodyQ -> [DecQ] -> ClauseQ
+ Language.Haskell.TH.Lib.Internal: clause :: Quote m => [m Pat] -> m Body -> [m Dec] -> m Clause
- Language.Haskell.TH.Lib.Internal: closedTypeFamilyD :: Name -> [TyVarBndrQ] -> FamilyResultSigQ -> Maybe InjectivityAnn -> [TySynEqnQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: closedTypeFamilyD :: Quote m => Name -> [m (TyVarBndr ())] -> m FamilyResultSig -> Maybe InjectivityAnn -> [m TySynEqn] -> m Dec
- Language.Haskell.TH.Lib.Internal: compE :: [StmtQ] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: compE :: Quote m => [m Stmt] -> m Exp
- Language.Haskell.TH.Lib.Internal: conE :: Name -> ExpQ
+ Language.Haskell.TH.Lib.Internal: conE :: Quote m => Name -> m Exp
- Language.Haskell.TH.Lib.Internal: conP :: Name -> [PatQ] -> PatQ
+ Language.Haskell.TH.Lib.Internal: conP :: Quote m => Name -> [m Pat] -> m Pat
- Language.Haskell.TH.Lib.Internal: conT :: Name -> TypeQ
+ Language.Haskell.TH.Lib.Internal: conT :: Quote m => Name -> m Type
- Language.Haskell.TH.Lib.Internal: condE :: ExpQ -> ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: condE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: constraintK :: KindQ
+ Language.Haskell.TH.Lib.Internal: constraintK :: Quote m => m Kind
- Language.Haskell.TH.Lib.Internal: cxt :: [PredQ] -> CxtQ
+ Language.Haskell.TH.Lib.Internal: cxt :: Quote m => [m Pred] -> m Cxt
- Language.Haskell.TH.Lib.Internal: dataD :: CxtQ -> Name -> [TyVarBndrQ] -> Maybe KindQ -> [ConQ] -> [DerivClauseQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: dataD :: Quote m => m Cxt -> Name -> [m (TyVarBndr ())] -> Maybe (m Kind) -> [m Con] -> [m DerivClause] -> m Dec
- Language.Haskell.TH.Lib.Internal: dataFamilyD :: Name -> [TyVarBndrQ] -> Maybe KindQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: dataFamilyD :: Quote m => Name -> [m (TyVarBndr ())] -> Maybe (m Kind) -> m Dec
- Language.Haskell.TH.Lib.Internal: dataInstD :: CxtQ -> Maybe [TyVarBndrQ] -> TypeQ -> Maybe KindQ -> [ConQ] -> [DerivClauseQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: dataInstD :: Quote m => m Cxt -> Maybe [m (TyVarBndr ())] -> m Type -> Maybe (m Kind) -> [m Con] -> [m DerivClause] -> m Dec
- Language.Haskell.TH.Lib.Internal: defaultSigD :: Name -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: defaultSigD :: Quote m => Name -> m Type -> m Dec
- Language.Haskell.TH.Lib.Internal: derivClause :: Maybe DerivStrategyQ -> [PredQ] -> DerivClauseQ
+ Language.Haskell.TH.Lib.Internal: derivClause :: Quote m => Maybe (m DerivStrategy) -> [m Pred] -> m DerivClause
- Language.Haskell.TH.Lib.Internal: doE :: [StmtQ] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: doE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp
- Language.Haskell.TH.Lib.Internal: dyn :: String -> ExpQ
+ Language.Haskell.TH.Lib.Internal: dyn :: Quote m => String -> m Exp
- Language.Haskell.TH.Lib.Internal: equalP :: TypeQ -> TypeQ -> PredQ
+ Language.Haskell.TH.Lib.Internal: equalP :: Quote m => m Type -> m Type -> m Pred
- Language.Haskell.TH.Lib.Internal: equalityT :: TypeQ
+ Language.Haskell.TH.Lib.Internal: equalityT :: Quote m => m Type
- Language.Haskell.TH.Lib.Internal: explBidir :: [ClauseQ] -> PatSynDirQ
+ Language.Haskell.TH.Lib.Internal: explBidir :: Quote m => [m Clause] -> m PatSynDir
- Language.Haskell.TH.Lib.Internal: fieldExp :: Name -> ExpQ -> Q (Name, Exp)
+ Language.Haskell.TH.Lib.Internal: fieldExp :: Quote m => Name -> m Exp -> m (Name, Exp)
- Language.Haskell.TH.Lib.Internal: fieldPat :: Name -> PatQ -> FieldPatQ
+ Language.Haskell.TH.Lib.Internal: fieldPat :: Quote m => Name -> m Pat -> m FieldPat
- Language.Haskell.TH.Lib.Internal: forImpD :: Callconv -> Safety -> String -> Name -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: forImpD :: Quote m => Callconv -> Safety -> String -> Name -> m Type -> m Dec
- Language.Haskell.TH.Lib.Internal: forallC :: [TyVarBndrQ] -> CxtQ -> ConQ -> ConQ
+ Language.Haskell.TH.Lib.Internal: forallC :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Con -> m Con
- Language.Haskell.TH.Lib.Internal: forallT :: [TyVarBndrQ] -> CxtQ -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: forallT :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Type -> m Type
- Language.Haskell.TH.Lib.Internal: forallVisT :: [TyVarBndrQ] -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: forallVisT :: Quote m => [m (TyVarBndr ())] -> m Type -> m Type
- Language.Haskell.TH.Lib.Internal: fromE :: ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: fromE :: Quote m => m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: fromR :: ExpQ -> RangeQ
+ Language.Haskell.TH.Lib.Internal: fromR :: Quote m => m Exp -> m Range
- Language.Haskell.TH.Lib.Internal: fromThenE :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: fromThenE :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: fromThenR :: ExpQ -> ExpQ -> RangeQ
+ Language.Haskell.TH.Lib.Internal: fromThenR :: Quote m => m Exp -> m Exp -> m Range
- Language.Haskell.TH.Lib.Internal: fromThenToE :: ExpQ -> ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: fromThenToE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: fromThenToR :: ExpQ -> ExpQ -> ExpQ -> RangeQ
+ Language.Haskell.TH.Lib.Internal: fromThenToR :: Quote m => m Exp -> m Exp -> m Exp -> m Range
- Language.Haskell.TH.Lib.Internal: fromToE :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: fromToE :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: fromToR :: ExpQ -> ExpQ -> RangeQ
+ Language.Haskell.TH.Lib.Internal: fromToR :: Quote m => m Exp -> m Exp -> m Range
- Language.Haskell.TH.Lib.Internal: funD :: Name -> [ClauseQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: funD :: Quote m => Name -> [m Clause] -> m Dec
- Language.Haskell.TH.Lib.Internal: gadtC :: [Name] -> [StrictTypeQ] -> TypeQ -> ConQ
+ Language.Haskell.TH.Lib.Internal: gadtC :: Quote m => [Name] -> [m StrictType] -> m Type -> m Con
- Language.Haskell.TH.Lib.Internal: guardedB :: [Q (Guard, Exp)] -> BodyQ
+ Language.Haskell.TH.Lib.Internal: guardedB :: Quote m => [m (Guard, Exp)] -> m Body
- Language.Haskell.TH.Lib.Internal: implBidir :: PatSynDirQ
+ Language.Haskell.TH.Lib.Internal: implBidir :: Quote m => m PatSynDir
- Language.Haskell.TH.Lib.Internal: implicitParamBindD :: String -> ExpQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: implicitParamBindD :: Quote m => String -> m Exp -> m Dec
- Language.Haskell.TH.Lib.Internal: implicitParamT :: String -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: implicitParamT :: Quote m => String -> m Type -> m Type
- Language.Haskell.TH.Lib.Internal: implicitParamVarE :: String -> ExpQ
+ Language.Haskell.TH.Lib.Internal: implicitParamVarE :: Quote m => String -> m Exp
- Language.Haskell.TH.Lib.Internal: infixApp :: ExpQ -> ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: infixApp :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: infixC :: Q (Bang, Type) -> Name -> Q (Bang, Type) -> ConQ
+ Language.Haskell.TH.Lib.Internal: infixC :: Quote m => m (Bang, Type) -> Name -> m (Bang, Type) -> m Con
- Language.Haskell.TH.Lib.Internal: infixE :: Maybe ExpQ -> ExpQ -> Maybe ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: infixE :: Quote m => Maybe (m Exp) -> m Exp -> Maybe (m Exp) -> m Exp
- Language.Haskell.TH.Lib.Internal: infixLD :: Int -> Name -> DecQ
+ Language.Haskell.TH.Lib.Internal: infixLD :: Quote m => Int -> Name -> m Dec
- Language.Haskell.TH.Lib.Internal: infixND :: Int -> Name -> DecQ
+ Language.Haskell.TH.Lib.Internal: infixND :: Quote m => Int -> Name -> m Dec
- Language.Haskell.TH.Lib.Internal: infixP :: PatQ -> Name -> PatQ -> PatQ
+ Language.Haskell.TH.Lib.Internal: infixP :: Quote m => m Pat -> Name -> m Pat -> m Pat
- Language.Haskell.TH.Lib.Internal: infixPatSyn :: Name -> Name -> PatSynArgsQ
+ Language.Haskell.TH.Lib.Internal: infixPatSyn :: Quote m => Name -> Name -> m PatSynArgs
- Language.Haskell.TH.Lib.Internal: infixRD :: Int -> Name -> DecQ
+ Language.Haskell.TH.Lib.Internal: infixRD :: Quote m => Int -> Name -> m Dec
- Language.Haskell.TH.Lib.Internal: infixT :: TypeQ -> Name -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: infixT :: Quote m => m Type -> Name -> m Type -> m Type
- Language.Haskell.TH.Lib.Internal: instanceD :: CxtQ -> TypeQ -> [DecQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: instanceD :: Quote m => m Cxt -> m Type -> [m Dec] -> m Dec
- Language.Haskell.TH.Lib.Internal: instanceWithOverlapD :: Maybe Overlap -> CxtQ -> TypeQ -> [DecQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: instanceWithOverlapD :: Quote m => Maybe Overlap -> m Cxt -> m Type -> [m Dec] -> m Dec
- Language.Haskell.TH.Lib.Internal: isStrict :: Q Strict
+ Language.Haskell.TH.Lib.Internal: isStrict :: Quote m => m Strict
- Language.Haskell.TH.Lib.Internal: kiSigD :: Name -> KindQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: kiSigD :: Quote m => Name -> m Kind -> m Dec
- Language.Haskell.TH.Lib.Internal: kindSig :: KindQ -> FamilyResultSigQ
+ Language.Haskell.TH.Lib.Internal: kindSig :: Quote m => m Kind -> m FamilyResultSig
- Language.Haskell.TH.Lib.Internal: kindedTV :: Name -> KindQ -> TyVarBndrQ
+ Language.Haskell.TH.Lib.Internal: kindedTV :: Quote m => Name -> m Kind -> m (TyVarBndr ())
- Language.Haskell.TH.Lib.Internal: labelE :: String -> ExpQ
+ Language.Haskell.TH.Lib.Internal: labelE :: Quote m => String -> m Exp
- Language.Haskell.TH.Lib.Internal: lam1E :: PatQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: lam1E :: Quote m => m Pat -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: lamCaseE :: [MatchQ] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: lamCaseE :: Quote m => [m Match] -> m Exp
- Language.Haskell.TH.Lib.Internal: lamE :: [PatQ] -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: lamE :: Quote m => [m Pat] -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: letE :: [DecQ] -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: letE :: Quote m => [m Dec] -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: letS :: [DecQ] -> StmtQ
+ Language.Haskell.TH.Lib.Internal: letS :: Quote m => [m Dec] -> m Stmt
- Language.Haskell.TH.Lib.Internal: listE :: [ExpQ] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: listE :: Quote m => [m Exp] -> m Exp
- Language.Haskell.TH.Lib.Internal: listP :: [PatQ] -> PatQ
+ Language.Haskell.TH.Lib.Internal: listP :: Quote m => [m Pat] -> m Pat
- Language.Haskell.TH.Lib.Internal: listT :: TypeQ
+ Language.Haskell.TH.Lib.Internal: listT :: Quote m => m Type
- Language.Haskell.TH.Lib.Internal: litE :: Lit -> ExpQ
+ Language.Haskell.TH.Lib.Internal: litE :: Quote m => Lit -> m Exp
- Language.Haskell.TH.Lib.Internal: litP :: Lit -> PatQ
+ Language.Haskell.TH.Lib.Internal: litP :: Quote m => Lit -> m Pat
- Language.Haskell.TH.Lib.Internal: litT :: TyLitQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: litT :: Quote m => m TyLit -> m Type
- Language.Haskell.TH.Lib.Internal: match :: PatQ -> BodyQ -> [DecQ] -> MatchQ
+ Language.Haskell.TH.Lib.Internal: match :: Quote m => m Pat -> m Body -> [m Dec] -> m Match
- Language.Haskell.TH.Lib.Internal: mdoE :: [StmtQ] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: mdoE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp
- Language.Haskell.TH.Lib.Internal: multiIfE :: [Q (Guard, Exp)] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: multiIfE :: Quote m => [m (Guard, Exp)] -> m Exp
- Language.Haskell.TH.Lib.Internal: newtypeD :: CxtQ -> Name -> [TyVarBndrQ] -> Maybe KindQ -> ConQ -> [DerivClauseQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: newtypeD :: Quote m => m Cxt -> Name -> [m (TyVarBndr ())] -> Maybe (m Kind) -> m Con -> [m DerivClause] -> m Dec
- Language.Haskell.TH.Lib.Internal: newtypeInstD :: CxtQ -> Maybe [TyVarBndrQ] -> TypeQ -> Maybe KindQ -> ConQ -> [DerivClauseQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: newtypeInstD :: Quote m => m Cxt -> Maybe [m (TyVarBndr ())] -> m Type -> Maybe (m Kind) -> m Con -> [m DerivClause] -> m Dec
- Language.Haskell.TH.Lib.Internal: newtypeStrategy :: DerivStrategyQ
+ Language.Haskell.TH.Lib.Internal: newtypeStrategy :: Quote m => m DerivStrategy
- Language.Haskell.TH.Lib.Internal: noBindS :: ExpQ -> StmtQ
+ Language.Haskell.TH.Lib.Internal: noBindS :: Quote m => m Exp -> m Stmt
- Language.Haskell.TH.Lib.Internal: noSig :: FamilyResultSigQ
+ Language.Haskell.TH.Lib.Internal: noSig :: Quote m => m FamilyResultSig
- Language.Haskell.TH.Lib.Internal: noSourceStrictness :: SourceStrictnessQ
+ Language.Haskell.TH.Lib.Internal: noSourceStrictness :: Quote m => m SourceStrictness
- Language.Haskell.TH.Lib.Internal: noSourceUnpackedness :: SourceUnpackednessQ
+ Language.Haskell.TH.Lib.Internal: noSourceUnpackedness :: Quote m => m SourceUnpackedness
- Language.Haskell.TH.Lib.Internal: normalB :: ExpQ -> BodyQ
+ Language.Haskell.TH.Lib.Internal: normalB :: Quote m => m Exp -> m Body
- Language.Haskell.TH.Lib.Internal: normalC :: Name -> [BangTypeQ] -> ConQ
+ Language.Haskell.TH.Lib.Internal: normalC :: Quote m => Name -> [m BangType] -> m Con
- Language.Haskell.TH.Lib.Internal: normalG :: ExpQ -> GuardQ
+ Language.Haskell.TH.Lib.Internal: normalG :: Quote m => m Exp -> m Guard
- Language.Haskell.TH.Lib.Internal: normalGE :: ExpQ -> ExpQ -> Q (Guard, Exp)
+ Language.Haskell.TH.Lib.Internal: normalGE :: Quote m => m Exp -> m Exp -> m (Guard, Exp)
- Language.Haskell.TH.Lib.Internal: notStrict :: Q Strict
+ Language.Haskell.TH.Lib.Internal: notStrict :: Quote m => m Strict
- Language.Haskell.TH.Lib.Internal: numTyLit :: Integer -> TyLitQ
+ Language.Haskell.TH.Lib.Internal: numTyLit :: Quote m => Integer -> m TyLit
- Language.Haskell.TH.Lib.Internal: openTypeFamilyD :: Name -> [TyVarBndrQ] -> FamilyResultSigQ -> Maybe InjectivityAnn -> DecQ
+ Language.Haskell.TH.Lib.Internal: openTypeFamilyD :: Quote m => Name -> [m (TyVarBndr ())] -> m FamilyResultSig -> Maybe InjectivityAnn -> m Dec
- Language.Haskell.TH.Lib.Internal: parS :: [[StmtQ]] -> StmtQ
+ Language.Haskell.TH.Lib.Internal: parS :: Quote m => [[m Stmt]] -> m Stmt
- Language.Haskell.TH.Lib.Internal: parensE :: ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: parensE :: Quote m => m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: parensP :: PatQ -> PatQ
+ Language.Haskell.TH.Lib.Internal: parensP :: Quote m => m Pat -> m Pat
- Language.Haskell.TH.Lib.Internal: parensT :: TypeQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: parensT :: Quote m => m Type -> m Type
- Language.Haskell.TH.Lib.Internal: patG :: [StmtQ] -> GuardQ
+ Language.Haskell.TH.Lib.Internal: patG :: Quote m => [m Stmt] -> m Guard
- Language.Haskell.TH.Lib.Internal: patGE :: [StmtQ] -> ExpQ -> Q (Guard, Exp)
+ Language.Haskell.TH.Lib.Internal: patGE :: Quote m => [m Stmt] -> m Exp -> m (Guard, Exp)
- Language.Haskell.TH.Lib.Internal: patSynD :: Name -> PatSynArgsQ -> PatSynDirQ -> PatQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: patSynD :: Quote m => Name -> m PatSynArgs -> m PatSynDir -> m Pat -> m Dec
- Language.Haskell.TH.Lib.Internal: patSynSigD :: Name -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: patSynSigD :: Quote m => Name -> m Type -> m Dec
- Language.Haskell.TH.Lib.Internal: plainTV :: Name -> TyVarBndrQ
+ Language.Haskell.TH.Lib.Internal: plainTV :: Quote m => Name -> m (TyVarBndr ())
- Language.Haskell.TH.Lib.Internal: pragAnnD :: AnnTarget -> ExpQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: pragAnnD :: Quote m => AnnTarget -> m Exp -> m Dec
- Language.Haskell.TH.Lib.Internal: pragCompleteD :: [Name] -> Maybe Name -> DecQ
+ Language.Haskell.TH.Lib.Internal: pragCompleteD :: Quote m => [Name] -> Maybe Name -> m Dec
- Language.Haskell.TH.Lib.Internal: pragInlD :: Name -> Inline -> RuleMatch -> Phases -> DecQ
+ Language.Haskell.TH.Lib.Internal: pragInlD :: Quote m => Name -> Inline -> RuleMatch -> Phases -> m Dec
- Language.Haskell.TH.Lib.Internal: pragLineD :: Int -> String -> DecQ
+ Language.Haskell.TH.Lib.Internal: pragLineD :: Quote m => Int -> String -> m Dec
- Language.Haskell.TH.Lib.Internal: pragRuleD :: String -> Maybe [TyVarBndrQ] -> [RuleBndrQ] -> ExpQ -> ExpQ -> Phases -> DecQ
+ Language.Haskell.TH.Lib.Internal: pragRuleD :: Quote m => String -> Maybe [m (TyVarBndr ())] -> [m RuleBndr] -> m Exp -> m Exp -> Phases -> m Dec
- Language.Haskell.TH.Lib.Internal: pragSpecD :: Name -> TypeQ -> Phases -> DecQ
+ Language.Haskell.TH.Lib.Internal: pragSpecD :: Quote m => Name -> m Type -> Phases -> m Dec
- Language.Haskell.TH.Lib.Internal: pragSpecInlD :: Name -> TypeQ -> Inline -> Phases -> DecQ
+ Language.Haskell.TH.Lib.Internal: pragSpecInlD :: Quote m => Name -> m Type -> Inline -> Phases -> m Dec
- Language.Haskell.TH.Lib.Internal: pragSpecInstD :: TypeQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: pragSpecInstD :: Quote m => m Type -> m Dec
- Language.Haskell.TH.Lib.Internal: prefixPatSyn :: [Name] -> PatSynArgsQ
+ Language.Haskell.TH.Lib.Internal: prefixPatSyn :: Quote m => [Name] -> m PatSynArgs
- Language.Haskell.TH.Lib.Internal: promotedConsT :: TypeQ
+ Language.Haskell.TH.Lib.Internal: promotedConsT :: Quote m => m Type
- Language.Haskell.TH.Lib.Internal: promotedNilT :: TypeQ
+ Language.Haskell.TH.Lib.Internal: promotedNilT :: Quote m => m Type
- Language.Haskell.TH.Lib.Internal: promotedT :: Name -> TypeQ
+ Language.Haskell.TH.Lib.Internal: promotedT :: Quote m => Name -> m Type
- Language.Haskell.TH.Lib.Internal: promotedTupleT :: Int -> TypeQ
+ Language.Haskell.TH.Lib.Internal: promotedTupleT :: Quote m => Int -> m Type
- Language.Haskell.TH.Lib.Internal: recC :: Name -> [VarBangTypeQ] -> ConQ
+ Language.Haskell.TH.Lib.Internal: recC :: Quote m => Name -> [m VarBangType] -> m Con
- Language.Haskell.TH.Lib.Internal: recConE :: Name -> [Q (Name, Exp)] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: recConE :: Quote m => Name -> [m (Name, Exp)] -> m Exp
- Language.Haskell.TH.Lib.Internal: recGadtC :: [Name] -> [VarStrictTypeQ] -> TypeQ -> ConQ
+ Language.Haskell.TH.Lib.Internal: recGadtC :: Quote m => [Name] -> [m VarStrictType] -> m Type -> m Con
- Language.Haskell.TH.Lib.Internal: recP :: Name -> [FieldPatQ] -> PatQ
+ Language.Haskell.TH.Lib.Internal: recP :: Quote m => Name -> [m FieldPat] -> m Pat
- Language.Haskell.TH.Lib.Internal: recS :: [StmtQ] -> StmtQ
+ Language.Haskell.TH.Lib.Internal: recS :: Quote m => [m Stmt] -> m Stmt
- Language.Haskell.TH.Lib.Internal: recUpdE :: ExpQ -> [Q (Name, Exp)] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: recUpdE :: Quote m => m Exp -> [m (Name, Exp)] -> m Exp
- Language.Haskell.TH.Lib.Internal: recordPatSyn :: [Name] -> PatSynArgsQ
+ Language.Haskell.TH.Lib.Internal: recordPatSyn :: Quote m => [Name] -> m PatSynArgs
- Language.Haskell.TH.Lib.Internal: roleAnnotD :: Name -> [Role] -> DecQ
+ Language.Haskell.TH.Lib.Internal: roleAnnotD :: Quote m => Name -> [Role] -> m Dec
- Language.Haskell.TH.Lib.Internal: ruleVar :: Name -> RuleBndrQ
+ Language.Haskell.TH.Lib.Internal: ruleVar :: Quote m => Name -> m RuleBndr
- Language.Haskell.TH.Lib.Internal: sectionL :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: sectionL :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: sectionR :: ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: sectionR :: Quote m => m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: sigD :: Name -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: sigD :: Quote m => Name -> m Type -> m Dec
- Language.Haskell.TH.Lib.Internal: sigE :: ExpQ -> TypeQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: sigE :: Quote m => m Exp -> m Type -> m Exp
- Language.Haskell.TH.Lib.Internal: sigP :: PatQ -> TypeQ -> PatQ
+ Language.Haskell.TH.Lib.Internal: sigP :: Quote m => m Pat -> m Type -> m Pat
- Language.Haskell.TH.Lib.Internal: sigT :: TypeQ -> KindQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: sigT :: Quote m => m Type -> m Kind -> m Type
- Language.Haskell.TH.Lib.Internal: sourceLazy :: SourceStrictnessQ
+ Language.Haskell.TH.Lib.Internal: sourceLazy :: Quote m => m SourceStrictness
- Language.Haskell.TH.Lib.Internal: sourceNoUnpack :: SourceUnpackednessQ
+ Language.Haskell.TH.Lib.Internal: sourceNoUnpack :: Quote m => m SourceUnpackedness
- Language.Haskell.TH.Lib.Internal: sourceStrict :: SourceStrictnessQ
+ Language.Haskell.TH.Lib.Internal: sourceStrict :: Quote m => m SourceStrictness
- Language.Haskell.TH.Lib.Internal: sourceUnpack :: SourceUnpackednessQ
+ Language.Haskell.TH.Lib.Internal: sourceUnpack :: Quote m => m SourceUnpackedness
- Language.Haskell.TH.Lib.Internal: standaloneDerivD :: CxtQ -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: standaloneDerivD :: Quote m => m Cxt -> m Type -> m Dec
- Language.Haskell.TH.Lib.Internal: standaloneDerivWithStrategyD :: Maybe DerivStrategyQ -> CxtQ -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: standaloneDerivWithStrategyD :: Quote m => Maybe (m DerivStrategy) -> m Cxt -> m Type -> m Dec
- Language.Haskell.TH.Lib.Internal: starK :: KindQ
+ Language.Haskell.TH.Lib.Internal: starK :: Quote m => m Kind
- Language.Haskell.TH.Lib.Internal: staticE :: ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: staticE :: Quote m => m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: stockStrategy :: DerivStrategyQ
+ Language.Haskell.TH.Lib.Internal: stockStrategy :: Quote m => m DerivStrategy
- Language.Haskell.TH.Lib.Internal: strTyLit :: String -> TyLitQ
+ Language.Haskell.TH.Lib.Internal: strTyLit :: Quote m => String -> m TyLit
- Language.Haskell.TH.Lib.Internal: strictType :: Q Strict -> TypeQ -> StrictTypeQ
+ Language.Haskell.TH.Lib.Internal: strictType :: Quote m => m Strict -> m Type -> m StrictType
- Language.Haskell.TH.Lib.Internal: stringE :: String -> ExpQ
+ Language.Haskell.TH.Lib.Internal: stringE :: Quote m => String -> m Exp
- Language.Haskell.TH.Lib.Internal: tildeP :: PatQ -> PatQ
+ Language.Haskell.TH.Lib.Internal: tildeP :: Quote m => m Pat -> m Pat
- Language.Haskell.TH.Lib.Internal: tupE :: [Maybe ExpQ] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: tupE :: Quote m => [Maybe (m Exp)] -> m Exp
- Language.Haskell.TH.Lib.Internal: tupP :: [PatQ] -> PatQ
+ Language.Haskell.TH.Lib.Internal: tupP :: Quote m => [m Pat] -> m Pat
- Language.Haskell.TH.Lib.Internal: tupleT :: Int -> TypeQ
+ Language.Haskell.TH.Lib.Internal: tupleT :: Quote m => Int -> m Type
- Language.Haskell.TH.Lib.Internal: tySynD :: Name -> [TyVarBndrQ] -> TypeQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: tySynD :: Quote m => Name -> [m (TyVarBndr ())] -> m Type -> m Dec
- Language.Haskell.TH.Lib.Internal: tySynEqn :: Maybe [TyVarBndrQ] -> TypeQ -> TypeQ -> TySynEqnQ
+ Language.Haskell.TH.Lib.Internal: tySynEqn :: Quote m => Maybe [m (TyVarBndr ())] -> m Type -> m Type -> m TySynEqn
- Language.Haskell.TH.Lib.Internal: tySynInstD :: TySynEqnQ -> DecQ
+ Language.Haskell.TH.Lib.Internal: tySynInstD :: Quote m => m TySynEqn -> m Dec
- Language.Haskell.TH.Lib.Internal: tyVarSig :: TyVarBndrQ -> FamilyResultSigQ
+ Language.Haskell.TH.Lib.Internal: tyVarSig :: Quote m => m (TyVarBndr ()) -> m FamilyResultSig
- Language.Haskell.TH.Lib.Internal: type TExpQ a = Q (TExp a)
+ Language.Haskell.TH.Lib.Internal: type TExpQ (a :: TYPE r) = Q (TExp a)
- Language.Haskell.TH.Lib.Internal: typedRuleVar :: Name -> TypeQ -> RuleBndrQ
+ Language.Haskell.TH.Lib.Internal: typedRuleVar :: Quote m => Name -> m Type -> m RuleBndr
- Language.Haskell.TH.Lib.Internal: uInfixE :: ExpQ -> ExpQ -> ExpQ -> ExpQ
+ Language.Haskell.TH.Lib.Internal: uInfixE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp
- Language.Haskell.TH.Lib.Internal: uInfixP :: PatQ -> Name -> PatQ -> PatQ
+ Language.Haskell.TH.Lib.Internal: uInfixP :: Quote m => m Pat -> Name -> m Pat -> m Pat
- Language.Haskell.TH.Lib.Internal: uInfixT :: TypeQ -> Name -> TypeQ -> TypeQ
+ Language.Haskell.TH.Lib.Internal: uInfixT :: Quote m => m Type -> Name -> m Type -> m Type
- Language.Haskell.TH.Lib.Internal: unboundVarE :: Name -> ExpQ
+ Language.Haskell.TH.Lib.Internal: unboundVarE :: Quote m => Name -> m Exp
- Language.Haskell.TH.Lib.Internal: unboxedSumE :: ExpQ -> SumAlt -> SumArity -> ExpQ
+ Language.Haskell.TH.Lib.Internal: unboxedSumE :: Quote m => m Exp -> SumAlt -> SumArity -> m Exp
- Language.Haskell.TH.Lib.Internal: unboxedSumP :: PatQ -> SumAlt -> SumArity -> PatQ
+ Language.Haskell.TH.Lib.Internal: unboxedSumP :: Quote m => m Pat -> SumAlt -> SumArity -> m Pat
- Language.Haskell.TH.Lib.Internal: unboxedSumT :: SumArity -> TypeQ
+ Language.Haskell.TH.Lib.Internal: unboxedSumT :: Quote m => SumArity -> m Type
- Language.Haskell.TH.Lib.Internal: unboxedTupE :: [Maybe ExpQ] -> ExpQ
+ Language.Haskell.TH.Lib.Internal: unboxedTupE :: Quote m => [Maybe (m Exp)] -> m Exp
- Language.Haskell.TH.Lib.Internal: unboxedTupP :: [PatQ] -> PatQ
+ Language.Haskell.TH.Lib.Internal: unboxedTupP :: Quote m => [m Pat] -> m Pat
- Language.Haskell.TH.Lib.Internal: unboxedTupleT :: Int -> TypeQ
+ Language.Haskell.TH.Lib.Internal: unboxedTupleT :: Quote m => Int -> m Type
- Language.Haskell.TH.Lib.Internal: unidir :: PatSynDirQ
+ Language.Haskell.TH.Lib.Internal: unidir :: Quote m => m PatSynDir
- Language.Haskell.TH.Lib.Internal: unpacked :: Q Strict
+ Language.Haskell.TH.Lib.Internal: unpacked :: Quote m => m Strict
- Language.Haskell.TH.Lib.Internal: valD :: PatQ -> BodyQ -> [DecQ] -> DecQ
+ Language.Haskell.TH.Lib.Internal: valD :: Quote m => m Pat -> m Body -> [m Dec] -> m Dec
- Language.Haskell.TH.Lib.Internal: varBangType :: Name -> BangTypeQ -> VarBangTypeQ
+ Language.Haskell.TH.Lib.Internal: varBangType :: Quote m => Name -> m BangType -> m VarBangType
- Language.Haskell.TH.Lib.Internal: varE :: Name -> ExpQ
+ Language.Haskell.TH.Lib.Internal: varE :: Quote m => Name -> m Exp
- Language.Haskell.TH.Lib.Internal: varP :: Name -> PatQ
+ Language.Haskell.TH.Lib.Internal: varP :: Quote m => Name -> m Pat
- Language.Haskell.TH.Lib.Internal: varStrictType :: Name -> StrictTypeQ -> VarStrictTypeQ
+ Language.Haskell.TH.Lib.Internal: varStrictType :: Quote m => Name -> m StrictType -> m VarStrictType
- Language.Haskell.TH.Lib.Internal: varT :: Name -> TypeQ
+ Language.Haskell.TH.Lib.Internal: varT :: Quote m => Name -> m Type
- Language.Haskell.TH.Lib.Internal: viaStrategy :: TypeQ -> DerivStrategyQ
+ Language.Haskell.TH.Lib.Internal: viaStrategy :: Quote m => m Type -> m DerivStrategy
- Language.Haskell.TH.Lib.Internal: viewP :: ExpQ -> PatQ -> PatQ
+ Language.Haskell.TH.Lib.Internal: viewP :: Quote m => m Exp -> m Pat -> m Pat
- Language.Haskell.TH.Lib.Internal: wildCardT :: TypeQ
+ Language.Haskell.TH.Lib.Internal: wildCardT :: Quote m => m Type
- Language.Haskell.TH.Lib.Internal: wildP :: PatQ
+ Language.Haskell.TH.Lib.Internal: wildP :: Quote m => m Pat
- Language.Haskell.TH.Ppr: pprForall :: [TyVarBndr] -> Cxt -> Doc
+ Language.Haskell.TH.Ppr: pprForall :: [TyVarBndr Specificity] -> Cxt -> Doc
- Language.Haskell.TH.Ppr: pprForall' :: ForallVisFlag -> [TyVarBndr] -> Cxt -> Doc
+ Language.Haskell.TH.Ppr: pprForall' :: PprFlag flag => ForallVisFlag -> [TyVarBndr flag] -> Cxt -> Doc
- Language.Haskell.TH.Ppr: pprForallVis :: [TyVarBndr] -> Cxt -> Doc
+ Language.Haskell.TH.Ppr: pprForallVis :: [TyVarBndr ()] -> Cxt -> Doc
- Language.Haskell.TH.Ppr: ppr_bndrs :: Maybe [TyVarBndr] -> Doc
+ Language.Haskell.TH.Ppr: ppr_bndrs :: PprFlag flag => Maybe [TyVarBndr flag] -> Doc
- Language.Haskell.TH.Quote: dataToExpQ :: Data a => (forall b. Data b => b -> Maybe (Q Exp)) -> a -> Q Exp
+ Language.Haskell.TH.Quote: dataToExpQ :: (Quote m, Data a) => (forall b. Data b => b -> Maybe (m Exp)) -> a -> m Exp
- Language.Haskell.TH.Quote: dataToPatQ :: Data a => (forall b. Data b => b -> Maybe (Q Pat)) -> a -> Q Pat
+ Language.Haskell.TH.Quote: dataToPatQ :: (Quote m, Data a) => (forall b. Data b => b -> Maybe (m Pat)) -> a -> m Pat
- Language.Haskell.TH.Quote: dataToQa :: forall a k q. Data a => (Name -> k) -> (Lit -> Q q) -> (k -> [Q q] -> Q q) -> (forall b. Data b => b -> Maybe (Q q)) -> a -> Q q
+ Language.Haskell.TH.Quote: dataToQa :: forall m a k q. (Quote m, Data a) => (Name -> k) -> (Lit -> m q) -> (k -> [m q] -> m q) -> (forall b. Data b => b -> Maybe (m q)) -> a -> m q
- Language.Haskell.TH.Syntax: ClassD :: Cxt -> Name -> [TyVarBndr] -> [FunDep] -> [Dec] -> Dec
+ Language.Haskell.TH.Syntax: ClassD :: Cxt -> Name -> [TyVarBndr ()] -> [FunDep] -> [Dec] -> Dec
- Language.Haskell.TH.Syntax: DataD :: Cxt -> Name -> [TyVarBndr] -> Maybe Kind -> [Con] -> [DerivClause] -> Dec
+ Language.Haskell.TH.Syntax: DataD :: Cxt -> Name -> [TyVarBndr ()] -> Maybe Kind -> [Con] -> [DerivClause] -> Dec
- Language.Haskell.TH.Syntax: DataFamilyD :: Name -> [TyVarBndr] -> Maybe Kind -> Dec
+ Language.Haskell.TH.Syntax: DataFamilyD :: Name -> [TyVarBndr ()] -> Maybe Kind -> Dec
- Language.Haskell.TH.Syntax: DataInstD :: Cxt -> Maybe [TyVarBndr] -> Type -> Maybe Kind -> [Con] -> [DerivClause] -> Dec
+ Language.Haskell.TH.Syntax: DataInstD :: Cxt -> Maybe [TyVarBndr ()] -> Type -> Maybe Kind -> [Con] -> [DerivClause] -> Dec
- Language.Haskell.TH.Syntax: DoE :: [Stmt] -> Exp
+ Language.Haskell.TH.Syntax: DoE :: Maybe ModName -> [Stmt] -> Exp
- Language.Haskell.TH.Syntax: ForallC :: [TyVarBndr] -> Cxt -> Con -> Con
+ Language.Haskell.TH.Syntax: ForallC :: [TyVarBndr Specificity] -> Cxt -> Con -> Con
- Language.Haskell.TH.Syntax: ForallT :: [TyVarBndr] -> Cxt -> Type -> Type
+ Language.Haskell.TH.Syntax: ForallT :: [TyVarBndr Specificity] -> Cxt -> Type -> Type
- Language.Haskell.TH.Syntax: ForallVisT :: [TyVarBndr] -> Type -> Type
+ Language.Haskell.TH.Syntax: ForallVisT :: [TyVarBndr ()] -> Type -> Type
- Language.Haskell.TH.Syntax: KindedTV :: Name -> Kind -> TyVarBndr
+ Language.Haskell.TH.Syntax: KindedTV :: Name -> flag -> Kind -> TyVarBndr flag
- Language.Haskell.TH.Syntax: MDoE :: [Stmt] -> Exp
+ Language.Haskell.TH.Syntax: MDoE :: Maybe ModName -> [Stmt] -> Exp
- Language.Haskell.TH.Syntax: NewtypeD :: Cxt -> Name -> [TyVarBndr] -> Maybe Kind -> Con -> [DerivClause] -> Dec
+ Language.Haskell.TH.Syntax: NewtypeD :: Cxt -> Name -> [TyVarBndr ()] -> Maybe Kind -> Con -> [DerivClause] -> Dec
- Language.Haskell.TH.Syntax: NewtypeInstD :: Cxt -> Maybe [TyVarBndr] -> Type -> Maybe Kind -> Con -> [DerivClause] -> Dec
+ Language.Haskell.TH.Syntax: NewtypeInstD :: Cxt -> Maybe [TyVarBndr ()] -> Type -> Maybe Kind -> Con -> [DerivClause] -> Dec
- Language.Haskell.TH.Syntax: PlainTV :: Name -> TyVarBndr
+ Language.Haskell.TH.Syntax: PlainTV :: Name -> flag -> TyVarBndr flag
- Language.Haskell.TH.Syntax: RuleP :: String -> Maybe [TyVarBndr] -> [RuleBndr] -> Exp -> Exp -> Phases -> Pragma
+ Language.Haskell.TH.Syntax: RuleP :: String -> Maybe [TyVarBndr ()] -> [RuleBndr] -> Exp -> Exp -> Phases -> Pragma
- Language.Haskell.TH.Syntax: TySynD :: Name -> [TyVarBndr] -> Type -> Dec
+ Language.Haskell.TH.Syntax: TySynD :: Name -> [TyVarBndr ()] -> Type -> Dec
- Language.Haskell.TH.Syntax: TySynEqn :: Maybe [TyVarBndr] -> Type -> Type -> TySynEqn
+ Language.Haskell.TH.Syntax: TySynEqn :: Maybe [TyVarBndr ()] -> Type -> Type -> TySynEqn
- Language.Haskell.TH.Syntax: TyVarSig :: TyVarBndr -> FamilyResultSig
+ Language.Haskell.TH.Syntax: TyVarSig :: TyVarBndr () -> FamilyResultSig
- Language.Haskell.TH.Syntax: TypeFamilyHead :: Name -> [TyVarBndr] -> FamilyResultSig -> Maybe InjectivityAnn -> TypeFamilyHead
+ Language.Haskell.TH.Syntax: TypeFamilyHead :: Name -> [TyVarBndr ()] -> FamilyResultSig -> Maybe InjectivityAnn -> TypeFamilyHead
- Language.Haskell.TH.Syntax: data TyVarBndr
+ Language.Haskell.TH.Syntax: data TyVarBndr flag
- Language.Haskell.TH.Syntax: dataToExpQ :: Data a => (forall b. Data b => b -> Maybe (Q Exp)) -> a -> Q Exp
+ Language.Haskell.TH.Syntax: dataToExpQ :: (Quote m, Data a) => (forall b. Data b => b -> Maybe (m Exp)) -> a -> m Exp
- Language.Haskell.TH.Syntax: dataToPatQ :: Data a => (forall b. Data b => b -> Maybe (Q Pat)) -> a -> Q Pat
+ Language.Haskell.TH.Syntax: dataToPatQ :: (Quote m, Data a) => (forall b. Data b => b -> Maybe (m Pat)) -> a -> m Pat
- Language.Haskell.TH.Syntax: dataToQa :: forall a k q. Data a => (Name -> k) -> (Lit -> Q q) -> (k -> [Q q] -> Q q) -> (forall b. Data b => b -> Maybe (Q q)) -> a -> Q q
+ Language.Haskell.TH.Syntax: dataToQa :: forall m a k q. (Quote m, Data a) => (Name -> k) -> (Lit -> m q) -> (k -> [m q] -> m q) -> (forall b. Data b => b -> Maybe (m q)) -> a -> m q
- Language.Haskell.TH.Syntax: lift :: (Lift t, r ~ 'LiftedRep) => t -> Q Exp
+ Language.Haskell.TH.Syntax: lift :: (Lift t, r ~ 'LiftedRep, Quote m) => t -> m Exp
- Language.Haskell.TH.Syntax: liftData :: Data a => a -> Q Exp
+ Language.Haskell.TH.Syntax: liftData :: (Quote m, Data a) => a -> m Exp
- Language.Haskell.TH.Syntax: liftString :: String -> Q Exp
+ Language.Haskell.TH.Syntax: liftString :: Quote m => String -> m Exp
- Language.Haskell.TH.Syntax: liftTyped :: Lift t => t -> Q (TExp t)
+ Language.Haskell.TH.Syntax: liftTyped :: (Lift t, Quote m) => t -> Code m t
- Language.Haskell.TH.Syntax: newName :: String -> Q Name
+ Language.Haskell.TH.Syntax: newName :: Quote m => String -> m Name
- Language.Haskell.TH.Syntax: sequenceQ :: [Q a] -> Q [a]
+ Language.Haskell.TH.Syntax: sequenceQ :: forall m. Monad m => forall a. [m a] -> m [a]
- Language.Haskell.TH.Syntax: unTypeQ :: forall (r :: RuntimeRep) (a :: TYPE r). Q (TExp a) -> Q Exp
+ Language.Haskell.TH.Syntax: unTypeQ :: forall (r :: RuntimeRep) (a :: TYPE r) m. Quote m => m (TExp a) -> m Exp
- Language.Haskell.TH.Syntax: unsafeTExpCoerce :: forall (r :: RuntimeRep) (a :: TYPE r). Q Exp -> Q (TExp a)
+ Language.Haskell.TH.Syntax: unsafeTExpCoerce :: forall (r :: RuntimeRep) (a :: TYPE r) m. Quote m => m Exp -> m (TExp a)

Files

Language/Haskell/TH.hs view
@@ -9,6 +9,7 @@         -- * The monad and its operations         Q,         runQ,+        Quote(..),         -- ** Administration: errors, locations and IO         reportError,              -- :: String -> Q ()         reportWarning,            -- :: String -> Q ()@@ -49,12 +50,13 @@          -- * Typed expressions         TExp, unType,+        Code(..), unTypeCode, unsafeCodeCoerce, hoistCode, bindCode,+        bindCode_, joinCode, liftCode,          -- * Names         Name, NameSpace,        -- Abstract         -- ** Constructing names         mkName,         -- :: String -> Name-        newName,        -- :: String -> Q Name         -- ** Deconstructing names         nameBase,       -- :: Name -> String         nameModule,     -- :: Name -> Maybe String@@ -85,7 +87,8 @@         Pat(..), FieldExp, FieldPat,     -- ** Types         Type(..), TyVarBndr(..), TyLit(..), Kind, Cxt, Pred, Syntax.Role(..),-        FamilyResultSig(..), Syntax.InjectivityAnn(..), PatSynType,+        Syntax.Specificity(..),+        FamilyResultSig(..), Syntax.InjectivityAnn(..), PatSynType, BangType, VarBangType,      -- * Library functions     module Language.Haskell.TH.Lib,
+ Language/Haskell/TH/CodeDo.hs view
@@ -0,0 +1,20 @@+-- | This module exists to work nicely with the QualifiedDo+-- extension.+-- @+-- import qualified Language.Haskell.TH.CodeDo as Code+-- myExample :: Monad m => Code m a -> Code m a -> Code m a+-- myExample opt1 opt2 =+--   Code.do+--    x <- someSideEffect               -- This one is of type `M Bool`+--    if x then opt1 else opt2+-- @+module Language.Haskell.TH.CodeDo((>>=), (>>)) where++import Language.Haskell.TH.Syntax+import Prelude(Monad)++-- | Module over monad operator for 'Code'+(>>=) :: Monad m => m a -> (a -> Code m b) -> Code m b+(>>=) = bindCode+(>>) :: Monad m => m a -> Code m b -> Code m b+(>>)  = bindCode_
Language/Haskell/TH/Lib.hs view
@@ -18,12 +18,13 @@      -- * Library functions     -- ** Abbreviations-        InfoQ, ExpQ, TExpQ, DecQ, DecsQ, ConQ, TypeQ, KindQ, TyVarBndrQ,+        InfoQ, ExpQ, TExpQ, CodeQ, DecQ, DecsQ, ConQ, TypeQ, KindQ,         TyLitQ, CxtQ, PredQ, DerivClauseQ, MatchQ, ClauseQ, BodyQ, GuardQ,         StmtQ, RangeQ, SourceStrictnessQ, SourceUnpackednessQ, BangQ,         BangTypeQ, VarBangTypeQ, StrictTypeQ, VarStrictTypeQ, FieldExpQ, PatQ,         FieldPatQ, RuleBndrQ, TySynEqnQ, PatSynDirQ, PatSynArgsQ,         FamilyResultSigQ, DerivStrategyQ,+        TyVarBndrUnit, TyVarBndrSpec,      -- ** Constructors lifted to 'Q'     -- *** Literals@@ -55,6 +56,7 @@      -- *** Types         forallT, forallVisT, varT, conT, appT, appKindT, arrowT, infixT,+        mulArrowT,         uInfixT, parensT, equalityT, listT, tupleT, unboxedTupleT, unboxedSumT,         sigT, litT, wildCardT, promotedT, promotedTupleT, promotedNilT,         promotedConsT, implicitParamT,@@ -75,6 +77,8 @@      -- *** Type variable binders     plainTV, kindedTV,+    plainInvisTV, kindedInvisTV,+    specifiedSpec, inferredSpec,      -- *** Roles     nominalR, representationalR, phantomR, inferR,@@ -153,15 +157,18 @@   , derivClause   , standaloneDerivWithStrategyD +  , doE+  , mdoE   , tupE   , unboxedTupE    , Role   , InjectivityAnn   )+import qualified Language.Haskell.TH.Lib.Internal as Internal import Language.Haskell.TH.Syntax -import Control.Monad (liftM2)+import Control.Applicative ( liftA2 ) import Foreign.ForeignPtr import Data.Word import Prelude@@ -174,97 +181,97 @@ ------------------------------------------------------------------------------- -- *   Dec -tySynD :: Name -> [TyVarBndr] -> TypeQ -> DecQ+tySynD :: Quote m => Name -> [TyVarBndr ()] -> m Type -> m Dec tySynD tc tvs rhs = do { rhs1 <- rhs; return (TySynD tc tvs rhs1) } -dataD :: CxtQ -> Name -> [TyVarBndr] -> Maybe Kind -> [ConQ] -> [DerivClauseQ]-      -> DecQ+dataD :: Quote m => m Cxt -> Name -> [TyVarBndr ()] -> Maybe Kind -> [m Con] -> [m DerivClause]+      -> m Dec dataD ctxt tc tvs ksig cons derivs =   do     ctxt1 <- ctxt-    cons1 <- sequence cons-    derivs1 <- sequence derivs+    cons1 <- sequenceA cons+    derivs1 <- sequenceA derivs     return (DataD ctxt1 tc tvs ksig cons1 derivs1) -newtypeD :: CxtQ -> Name -> [TyVarBndr] -> Maybe Kind -> ConQ -> [DerivClauseQ]-         -> DecQ+newtypeD :: Quote m => m Cxt -> Name -> [TyVarBndr ()] -> Maybe Kind -> m Con -> [m DerivClause]+         -> m Dec newtypeD ctxt tc tvs ksig con derivs =   do     ctxt1 <- ctxt     con1 <- con-    derivs1 <- sequence derivs+    derivs1 <- sequenceA derivs     return (NewtypeD ctxt1 tc tvs ksig con1 derivs1) -classD :: CxtQ -> Name -> [TyVarBndr] -> [FunDep] -> [DecQ] -> DecQ+classD :: Quote m => m Cxt -> Name -> [TyVarBndr ()] -> [FunDep] -> [m Dec] -> m Dec classD ctxt cls tvs fds decs =   do-    decs1 <- sequence decs+    decs1 <- sequenceA decs     ctxt1 <- ctxt     return $ ClassD ctxt1 cls tvs fds decs1 -pragRuleD :: String -> [RuleBndrQ] -> ExpQ -> ExpQ -> Phases -> DecQ+pragRuleD :: Quote m => String -> [m RuleBndr] -> m Exp -> m Exp -> Phases -> m Dec pragRuleD n bndrs lhs rhs phases   = do-      bndrs1 <- sequence bndrs+      bndrs1 <- sequenceA bndrs       lhs1   <- lhs       rhs1   <- rhs       return $ PragmaD $ RuleP n Nothing bndrs1 lhs1 rhs1 phases -dataInstD :: CxtQ -> Name -> [TypeQ] -> Maybe Kind -> [ConQ] -> [DerivClauseQ]-          -> DecQ+dataInstD :: Quote m => m Cxt -> Name -> [m Type] -> Maybe Kind -> [m Con] -> [m DerivClause]+          -> m Dec dataInstD ctxt tc tys ksig cons derivs =   do     ctxt1 <- ctxt     ty1 <- foldl appT (conT tc) tys-    cons1 <- sequence cons-    derivs1 <- sequence derivs+    cons1 <- sequenceA cons+    derivs1 <- sequenceA derivs     return (DataInstD ctxt1 Nothing ty1 ksig cons1 derivs1) -newtypeInstD :: CxtQ -> Name -> [TypeQ] -> Maybe Kind -> ConQ -> [DerivClauseQ]-             -> DecQ+newtypeInstD :: Quote m => m Cxt -> Name -> [m Type] -> Maybe Kind -> m Con -> [m DerivClause]+             -> m Dec newtypeInstD ctxt tc tys ksig con derivs =   do     ctxt1 <- ctxt     ty1 <- foldl appT (conT tc) tys     con1  <- con-    derivs1 <- sequence derivs+    derivs1 <- sequenceA derivs     return (NewtypeInstD ctxt1 Nothing ty1 ksig con1 derivs1) -dataFamilyD :: Name -> [TyVarBndr] -> Maybe Kind -> DecQ+dataFamilyD :: Quote m => Name -> [TyVarBndr ()] -> Maybe Kind -> m Dec dataFamilyD tc tvs kind-    = return $ DataFamilyD tc tvs kind+    = pure $ DataFamilyD tc tvs kind -openTypeFamilyD :: Name -> [TyVarBndr] -> FamilyResultSig-                -> Maybe InjectivityAnn -> DecQ+openTypeFamilyD :: Quote m => Name -> [TyVarBndr ()] -> FamilyResultSig+                -> Maybe InjectivityAnn -> m Dec openTypeFamilyD tc tvs res inj-    = return $ OpenTypeFamilyD (TypeFamilyHead tc tvs res inj)+    = pure $ OpenTypeFamilyD (TypeFamilyHead tc tvs res inj) -closedTypeFamilyD :: Name -> [TyVarBndr] -> FamilyResultSig-                  -> Maybe InjectivityAnn -> [TySynEqnQ] -> DecQ+closedTypeFamilyD :: Quote m => Name -> [TyVarBndr ()] -> FamilyResultSig+                  -> Maybe InjectivityAnn -> [m TySynEqn] -> m Dec closedTypeFamilyD tc tvs result injectivity eqns =-  do eqns1 <- sequence eqns+  do eqns1 <- sequenceA eqns      return (ClosedTypeFamilyD (TypeFamilyHead tc tvs result injectivity) eqns1) -tySynEqn :: (Maybe [TyVarBndr]) -> TypeQ -> TypeQ -> TySynEqnQ+tySynEqn :: Quote m => (Maybe [TyVarBndr ()]) -> m Type -> m Type -> m TySynEqn tySynEqn tvs lhs rhs =   do     lhs1 <- lhs     rhs1 <- rhs     return (TySynEqn tvs lhs1 rhs1) -forallC :: [TyVarBndr] -> CxtQ -> ConQ -> ConQ-forallC ns ctxt con = liftM2 (ForallC ns) ctxt con+forallC :: Quote m => [TyVarBndr Specificity] -> m Cxt -> m Con -> m Con+forallC ns ctxt con = liftA2 (ForallC ns) ctxt con  ------------------------------------------------------------------------------- -- *   Type -forallT :: [TyVarBndr] -> CxtQ -> TypeQ -> TypeQ+forallT :: Quote m => [TyVarBndr Specificity] -> m Cxt -> m Type -> m Type forallT tvars ctxt ty = do     ctxt1 <- ctxt     ty1   <- ty     return $ ForallT tvars ctxt1 ty1 -sigT :: TypeQ -> Kind -> TypeQ+sigT :: Quote m => m Type -> Kind -> m Type sigT t k   = do       t' <- t@@ -273,11 +280,11 @@ ------------------------------------------------------------------------------- -- *   Kind -plainTV :: Name -> TyVarBndr-plainTV = PlainTV+plainTV :: Name -> TyVarBndr ()+plainTV n = PlainTV n () -kindedTV :: Name -> Kind -> TyVarBndr-kindedTV = KindedTV+kindedTV :: Name -> Kind -> TyVarBndr ()+kindedTV n k = KindedTV n () k  starK :: Kind starK = StarT@@ -294,18 +301,18 @@ kindSig :: Kind -> FamilyResultSig kindSig = KindSig -tyVarSig :: TyVarBndr -> FamilyResultSig+tyVarSig :: TyVarBndr () -> FamilyResultSig tyVarSig = TyVarSig  ------------------------------------------------------------------------------- -- * Top Level Declarations -derivClause :: Maybe DerivStrategy -> [PredQ] -> DerivClauseQ+derivClause :: Quote m => Maybe DerivStrategy -> [m Pred] -> m DerivClause derivClause mds p = do   p' <- cxt p   return $ DerivClause mds p' -standaloneDerivWithStrategyD :: Maybe DerivStrategy -> CxtQ -> TypeQ -> DecQ+standaloneDerivWithStrategyD :: Quote m => Maybe DerivStrategy -> m Cxt -> m Type -> m Dec standaloneDerivWithStrategyD mds ctxt ty = do   ctxt' <- ctxt   ty'   <- ty@@ -328,8 +335,17 @@ ------------------------------------------------------------------------------- -- * Tuple expressions -tupE :: [ExpQ] -> ExpQ-tupE es = do { es1 <- sequence es; return (TupE $ map Just es1)}+tupE :: Quote m => [m Exp] -> m Exp+tupE es = do { es1 <- sequenceA es; return (TupE $ map Just es1)} -unboxedTupE :: [ExpQ] -> ExpQ-unboxedTupE es = do { es1 <- sequence es; return (UnboxedTupE $ map Just es1)}+unboxedTupE :: Quote m => [m Exp] -> m Exp+unboxedTupE es = do { es1 <- sequenceA es; return (UnboxedTupE $ map Just es1)}++-------------------------------------------------------------------------------+-- * Do expressions++doE :: Quote m => [m Stmt] -> m Exp+doE = Internal.doE Nothing++mdoE :: Quote m => [m Stmt] -> m Exp+mdoE = Internal.mdoE Nothing
Language/Haskell/TH/Lib/Internal.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE Safe #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE Trustworthy #-}  -- | -- Language.Haskell.TH.Lib.Internal exposes some additional functionality that@@ -18,25 +19,38 @@  import Language.Haskell.TH.Syntax hiding (Role, InjectivityAnn) import qualified Language.Haskell.TH.Syntax as TH-import Control.Monad( liftM, liftM2 )+import Control.Applicative(liftA, liftA2)+import qualified Data.Kind as Kind (Type) import Data.Word( Word8 )+import GHC.Exts (TYPE) import Prelude  ---------------------------------------------------------- -- * Type synonyms ---------------------------------------------------------- +-- Since GHC 8.8 is currently the minimum boot compiler version that we must+-- support, we must use inline kind signatures to make TExpQ and CodeQ+-- levity polymorphic. When we drop support for GHC 8.8, we can instead use+-- standalone kind signatures, which are provided as comments.++-- | Levity-polymorphic since /template-haskell-2.17.0.0/.+-- type TExpQ :: TYPE r -> Kind.Type+type TExpQ (a :: TYPE r) = Q (TExp a)++-- type CodeQ :: TYPE r -> Kind.Type+type CodeQ = Code Q :: (TYPE r -> Kind.Type)+ type InfoQ               = Q Info type PatQ                = Q Pat type FieldPatQ           = Q FieldPat type ExpQ                = Q Exp-type TExpQ a             = Q (TExp a) type DecQ                = Q Dec type DecsQ               = Q [Dec]+type Decs                = [Dec] -- Defined as it is more convenient to wire-in type ConQ                = Q Con type TypeQ               = Q Type type KindQ               = Q Kind-type TyVarBndrQ          = Q TyVarBndr type TyLitQ              = Q TyLit type CxtQ                = Q Cxt type PredQ               = Q Pred@@ -66,6 +80,9 @@ type Role                = TH.Role type InjectivityAnn      = TH.InjectivityAnn +type TyVarBndrUnit       = TyVarBndr ()+type TyVarBndrSpec       = TyVarBndr Specificity+ ---------------------------------------------------------- -- * Lowercase pattern syntax functions ----------------------------------------------------------@@ -93,675 +110,678 @@ rationalL   :: Rational -> Lit rationalL   = RationalL -litP :: Lit -> PatQ-litP l = return (LitP l)+litP :: Quote m => Lit -> m Pat+litP l = pure (LitP l) -varP :: Name -> PatQ-varP v = return (VarP v)+varP :: Quote m => Name -> m Pat+varP v = pure (VarP v) -tupP :: [PatQ] -> PatQ-tupP ps = do { ps1 <- sequence ps; return (TupP ps1)}+tupP :: Quote m => [m Pat] -> m Pat+tupP ps = do { ps1 <- sequenceA ps; pure (TupP ps1)} -unboxedTupP :: [PatQ] -> PatQ-unboxedTupP ps = do { ps1 <- sequence ps; return (UnboxedTupP ps1)}+unboxedTupP :: Quote m => [m Pat] -> m Pat+unboxedTupP ps = do { ps1 <- sequenceA ps; pure (UnboxedTupP ps1)} -unboxedSumP :: PatQ -> SumAlt -> SumArity -> PatQ-unboxedSumP p alt arity = do { p1 <- p; return (UnboxedSumP p1 alt arity) }+unboxedSumP :: Quote m => m Pat -> SumAlt -> SumArity -> m Pat+unboxedSumP p alt arity = do { p1 <- p; pure (UnboxedSumP p1 alt arity) } -conP :: Name -> [PatQ] -> PatQ-conP n ps = do ps' <- sequence ps-               return (ConP n ps')-infixP :: PatQ -> Name -> PatQ -> PatQ+conP :: Quote m => Name -> [m Pat] -> m Pat+conP n ps = do ps' <- sequenceA ps+               pure (ConP n ps')+infixP :: Quote m => m Pat -> Name -> m Pat -> m Pat infixP p1 n p2 = do p1' <- p1                     p2' <- p2-                    return (InfixP p1' n p2')-uInfixP :: PatQ -> Name -> PatQ -> PatQ+                    pure (InfixP p1' n p2')+uInfixP :: Quote m => m Pat -> Name -> m Pat -> m Pat uInfixP p1 n p2 = do p1' <- p1                      p2' <- p2-                     return (UInfixP p1' n p2')-parensP :: PatQ -> PatQ+                     pure (UInfixP p1' n p2')+parensP :: Quote m => m Pat -> m Pat parensP p = do p' <- p-               return (ParensP p')+               pure (ParensP p') -tildeP :: PatQ -> PatQ+tildeP :: Quote m => m Pat -> m Pat tildeP p = do p' <- p-              return (TildeP p')-bangP :: PatQ -> PatQ+              pure (TildeP p')+bangP :: Quote m => m Pat -> m Pat bangP p = do p' <- p-             return (BangP p')-asP :: Name -> PatQ -> PatQ+             pure (BangP p')+asP :: Quote m => Name -> m Pat -> m Pat asP n p = do p' <- p-             return (AsP n p')-wildP :: PatQ-wildP = return WildP-recP :: Name -> [FieldPatQ] -> PatQ-recP n fps = do fps' <- sequence fps-                return (RecP n fps')-listP :: [PatQ] -> PatQ-listP ps = do ps' <- sequence ps-              return (ListP ps')-sigP :: PatQ -> TypeQ -> PatQ+             pure (AsP n p')+wildP :: Quote m => m Pat+wildP = pure WildP+recP :: Quote m => Name -> [m FieldPat] -> m Pat+recP n fps = do fps' <- sequenceA fps+                pure (RecP n fps')+listP :: Quote m => [m Pat] -> m Pat+listP ps = do ps' <- sequenceA ps+              pure (ListP ps')+sigP :: Quote m => m Pat -> m Type -> m Pat sigP p t = do p' <- p               t' <- t-              return (SigP p' t')-viewP :: ExpQ -> PatQ -> PatQ+              pure (SigP p' t')+viewP :: Quote m => m Exp -> m Pat -> m Pat viewP e p = do e' <- e                p' <- p-               return (ViewP e' p')+               pure (ViewP e' p') -fieldPat :: Name -> PatQ -> FieldPatQ+fieldPat :: Quote m => Name -> m Pat -> m FieldPat fieldPat n p = do p' <- p-                  return (n, p')+                  pure (n, p')   ------------------------------------------------------------------------------- -- *   Stmt -bindS :: PatQ -> ExpQ -> StmtQ-bindS p e = liftM2 BindS p e+bindS :: Quote m => m Pat -> m Exp -> m Stmt+bindS p e = liftA2 BindS p e -letS :: [DecQ] -> StmtQ-letS ds = do { ds1 <- sequence ds; return (LetS ds1) }+letS :: Quote m => [m Dec] -> m Stmt+letS ds = do { ds1 <- sequenceA ds; pure (LetS ds1) } -noBindS :: ExpQ -> StmtQ-noBindS e = do { e1 <- e; return (NoBindS e1) }+noBindS :: Quote m => m Exp -> m Stmt+noBindS e = do { e1 <- e; pure (NoBindS e1) } -parS :: [[StmtQ]] -> StmtQ-parS sss = do { sss1 <- mapM sequence sss; return (ParS sss1) }+parS :: Quote m => [[m Stmt]] -> m Stmt+parS sss = do { sss1 <- traverse sequenceA sss; pure (ParS sss1) } -recS :: [StmtQ] -> StmtQ-recS ss = do { ss1 <- sequence ss; return (RecS ss1) }+recS :: Quote m => [m Stmt] -> m Stmt+recS ss = do { ss1 <- sequenceA ss; pure (RecS ss1) }  ------------------------------------------------------------------------------- -- *   Range -fromR :: ExpQ -> RangeQ-fromR x = do { a <- x; return (FromR a) }+fromR :: Quote m => m Exp -> m Range+fromR x = do { a <- x; pure (FromR a) } -fromThenR :: ExpQ -> ExpQ -> RangeQ-fromThenR x y = do { a <- x; b <- y; return (FromThenR a b) }+fromThenR :: Quote m => m Exp -> m Exp -> m Range+fromThenR x y = do { a <- x; b <- y; pure (FromThenR a b) } -fromToR :: ExpQ -> ExpQ -> RangeQ-fromToR x y = do { a <- x; b <- y; return (FromToR a b) }+fromToR :: Quote m => m Exp -> m Exp -> m Range+fromToR x y = do { a <- x; b <- y; pure (FromToR a b) } -fromThenToR :: ExpQ -> ExpQ -> ExpQ -> RangeQ+fromThenToR :: Quote m => m Exp -> m Exp -> m Exp -> m Range fromThenToR x y z = do { a <- x; b <- y; c <- z;-                         return (FromThenToR a b c) }+                         pure (FromThenToR a b c) } ------------------------------------------------------------------------------- -- *   Body -normalB :: ExpQ -> BodyQ-normalB e = do { e1 <- e; return (NormalB e1) }+normalB :: Quote m => m Exp -> m Body+normalB e = do { e1 <- e; pure (NormalB e1) } -guardedB :: [Q (Guard,Exp)] -> BodyQ-guardedB ges = do { ges' <- sequence ges; return (GuardedB ges') }+guardedB :: Quote m => [m (Guard,Exp)] -> m Body+guardedB ges = do { ges' <- sequenceA ges; pure (GuardedB ges') }  ------------------------------------------------------------------------------- -- *   Guard -normalG :: ExpQ -> GuardQ-normalG e = do { e1 <- e; return (NormalG e1) }+normalG :: Quote m => m Exp -> m Guard+normalG e = do { e1 <- e; pure (NormalG e1) } -normalGE :: ExpQ -> ExpQ -> Q (Guard, Exp)-normalGE g e = do { g1 <- g; e1 <- e; return (NormalG g1, e1) }+normalGE :: Quote m => m Exp -> m Exp -> m (Guard, Exp)+normalGE g e = do { g1 <- g; e1 <- e; pure (NormalG g1, e1) } -patG :: [StmtQ] -> GuardQ-patG ss = do { ss' <- sequence ss; return (PatG ss') }+patG :: Quote m => [m Stmt] -> m Guard+patG ss = do { ss' <- sequenceA ss; pure (PatG ss') } -patGE :: [StmtQ] -> ExpQ -> Q (Guard, Exp)-patGE ss e = do { ss' <- sequence ss;+patGE :: Quote m => [m Stmt] -> m Exp -> m (Guard, Exp)+patGE ss e = do { ss' <- sequenceA ss;                   e'  <- e;-                  return (PatG ss', e') }+                  pure (PatG ss', e') }  ------------------------------------------------------------------------------- -- *   Match and Clause  -- | Use with 'caseE'-match :: PatQ -> BodyQ -> [DecQ] -> MatchQ+match :: Quote m => m Pat -> m Body -> [m Dec] -> m Match match p rhs ds = do { p' <- p;                       r' <- rhs;-                      ds' <- sequence ds;-                      return (Match p' r' ds') }+                      ds' <- sequenceA ds;+                      pure (Match p' r' ds') }  -- | Use with 'funD'-clause :: [PatQ] -> BodyQ -> [DecQ] -> ClauseQ-clause ps r ds = do { ps' <- sequence ps;+clause :: Quote m => [m Pat] -> m Body -> [m Dec] -> m Clause+clause ps r ds = do { ps' <- sequenceA ps;                       r' <- r;-                      ds' <- sequence ds;-                      return (Clause ps' r' ds') }+                      ds' <- sequenceA ds;+                      pure (Clause ps' r' ds') }   --------------------------------------------------------------------------- -- *   Exp  -- | Dynamically binding a variable (unhygenic)-dyn :: String -> ExpQ-dyn s = return (VarE (mkName s))+dyn :: Quote m => String -> m Exp+dyn s = pure (VarE (mkName s)) -varE :: Name -> ExpQ-varE s = return (VarE s)+varE :: Quote m => Name -> m Exp+varE s = pure (VarE s) -conE :: Name -> ExpQ-conE s =  return (ConE s)+conE :: Quote m => Name -> m Exp+conE s =  pure (ConE s) -litE :: Lit -> ExpQ-litE c = return (LitE c)+litE :: Quote m => Lit -> m Exp+litE c = pure (LitE c) -appE :: ExpQ -> ExpQ -> ExpQ-appE x y = do { a <- x; b <- y; return (AppE a b)}+appE :: Quote m => m Exp -> m Exp -> m Exp+appE x y = do { a <- x; b <- y; pure (AppE a b)} -appTypeE :: ExpQ -> TypeQ -> ExpQ-appTypeE x t = do { a <- x; s <- t; return (AppTypeE a s) }+appTypeE :: Quote m => m Exp -> m Type -> m Exp+appTypeE x t = do { a <- x; s <- t; pure (AppTypeE a s) } -parensE :: ExpQ -> ExpQ-parensE x = do { x' <- x; return (ParensE x') }+parensE :: Quote m => m Exp -> m Exp+parensE x = do { x' <- x; pure (ParensE x') } -uInfixE :: ExpQ -> ExpQ -> ExpQ -> ExpQ+uInfixE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp uInfixE x s y = do { x' <- x; s' <- s; y' <- y;-                     return (UInfixE x' s' y') }+                     pure (UInfixE x' s' y') } -infixE :: Maybe ExpQ -> ExpQ -> Maybe ExpQ -> ExpQ+infixE :: Quote m => Maybe (m Exp) -> m Exp -> Maybe (m Exp) -> m Exp infixE (Just x) s (Just y) = do { a <- x; s' <- s; b <- y;-                                  return (InfixE (Just a) s' (Just b))}+                                  pure (InfixE (Just a) s' (Just b))} infixE Nothing  s (Just y) = do { s' <- s; b <- y;-                                  return (InfixE Nothing s' (Just b))}+                                  pure (InfixE Nothing s' (Just b))} infixE (Just x) s Nothing  = do { a <- x; s' <- s;-                                  return (InfixE (Just a) s' Nothing)}-infixE Nothing  s Nothing  = do { s' <- s; return (InfixE Nothing s' Nothing) }+                                  pure (InfixE (Just a) s' Nothing)}+infixE Nothing  s Nothing  = do { s' <- s; pure (InfixE Nothing s' Nothing) } -infixApp :: ExpQ -> ExpQ -> ExpQ -> ExpQ+infixApp :: Quote m => m Exp -> m Exp -> m Exp -> m Exp infixApp x y z = infixE (Just x) y (Just z)-sectionL :: ExpQ -> ExpQ -> ExpQ+sectionL :: Quote m => m Exp -> m Exp -> m Exp sectionL x y = infixE (Just x) y Nothing-sectionR :: ExpQ -> ExpQ -> ExpQ+sectionR :: Quote m => m Exp -> m Exp -> m Exp sectionR x y = infixE Nothing x (Just y) -lamE :: [PatQ] -> ExpQ -> ExpQ-lamE ps e = do ps' <- sequence ps+lamE :: Quote m => [m Pat] -> m Exp -> m Exp+lamE ps e = do ps' <- sequenceA ps                e' <- e-               return (LamE ps' e')+               pure (LamE ps' e')  -- | Single-arg lambda-lam1E :: PatQ -> ExpQ -> ExpQ+lam1E :: Quote m => m Pat -> m Exp -> m Exp lam1E p e = lamE [p] e -lamCaseE :: [MatchQ] -> ExpQ-lamCaseE ms = sequence ms >>= return . LamCaseE+lamCaseE :: Quote m => [m Match] -> m Exp+lamCaseE ms = LamCaseE <$> sequenceA ms -tupE :: [Maybe ExpQ] -> ExpQ-tupE es = do { es1 <- traverse sequence es; return (TupE es1)}+tupE :: Quote m => [Maybe (m Exp)] -> m Exp+tupE es = do { es1 <- traverse sequenceA es; pure (TupE es1)} -unboxedTupE :: [Maybe ExpQ] -> ExpQ-unboxedTupE es = do { es1 <- traverse sequence es; return (UnboxedTupE es1)}+unboxedTupE :: Quote m => [Maybe (m Exp)] -> m Exp+unboxedTupE es = do { es1 <- traverse sequenceA es; pure (UnboxedTupE es1)} -unboxedSumE :: ExpQ -> SumAlt -> SumArity -> ExpQ-unboxedSumE e alt arity = do { e1 <- e; return (UnboxedSumE e1 alt arity) }+unboxedSumE :: Quote m => m Exp -> SumAlt -> SumArity -> m Exp+unboxedSumE e alt arity = do { e1 <- e; pure (UnboxedSumE e1 alt arity) } -condE :: ExpQ -> ExpQ -> ExpQ -> ExpQ-condE x y z =  do { a <- x; b <- y; c <- z; return (CondE a b c)}+condE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp+condE x y z =  do { a <- x; b <- y; c <- z; pure (CondE a b c)} -multiIfE :: [Q (Guard, Exp)] -> ExpQ-multiIfE alts = sequence alts >>= return . MultiIfE+multiIfE :: Quote m => [m (Guard, Exp)] -> m Exp+multiIfE alts = MultiIfE <$> sequenceA alts -letE :: [DecQ] -> ExpQ -> ExpQ-letE ds e = do { ds2 <- sequence ds; e2 <- e; return (LetE ds2 e2) }+letE :: Quote m => [m Dec] -> m Exp -> m Exp+letE ds e = do { ds2 <- sequenceA ds; e2 <- e; pure (LetE ds2 e2) } -caseE :: ExpQ -> [MatchQ] -> ExpQ-caseE e ms = do { e1 <- e; ms1 <- sequence ms; return (CaseE e1 ms1) }+caseE :: Quote m => m Exp -> [m Match] -> m Exp+caseE e ms = do { e1 <- e; ms1 <- sequenceA ms; pure (CaseE e1 ms1) } -doE :: [StmtQ] -> ExpQ-doE ss = do { ss1 <- sequence ss; return (DoE ss1) }+doE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp+doE m ss = do { ss1 <- sequenceA ss; pure (DoE m ss1) } -mdoE :: [StmtQ] -> ExpQ-mdoE ss = do { ss1 <- sequence ss; return (MDoE ss1) }+mdoE :: Quote m => Maybe ModName -> [m Stmt] -> m Exp+mdoE m ss = do { ss1 <- sequenceA ss; pure (MDoE m ss1) } -compE :: [StmtQ] -> ExpQ-compE ss = do { ss1 <- sequence ss; return (CompE ss1) }+compE :: Quote m => [m Stmt] -> m Exp+compE ss = do { ss1 <- sequenceA ss; pure (CompE ss1) } -arithSeqE :: RangeQ -> ExpQ-arithSeqE r = do { r' <- r; return (ArithSeqE r') }+arithSeqE :: Quote m => m Range -> m Exp+arithSeqE r = do { r' <- r; pure (ArithSeqE r') } -listE :: [ExpQ] -> ExpQ-listE es = do { es1 <- sequence es; return (ListE es1) }+listE :: Quote m => [m Exp] -> m Exp+listE es = do { es1 <- sequenceA es; pure (ListE es1) } -sigE :: ExpQ -> TypeQ -> ExpQ-sigE e t = do { e1 <- e; t1 <- t; return (SigE e1 t1) }+sigE :: Quote m => m Exp -> m Type -> m Exp+sigE e t = do { e1 <- e; t1 <- t; pure (SigE e1 t1) } -recConE :: Name -> [Q (Name,Exp)] -> ExpQ-recConE c fs = do { flds <- sequence fs; return (RecConE c flds) }+recConE :: Quote m => Name -> [m (Name,Exp)] -> m Exp+recConE c fs = do { flds <- sequenceA fs; pure (RecConE c flds) } -recUpdE :: ExpQ -> [Q (Name,Exp)] -> ExpQ-recUpdE e fs = do { e1 <- e; flds <- sequence fs; return (RecUpdE e1 flds) }+recUpdE :: Quote m => m Exp -> [m (Name,Exp)] -> m Exp+recUpdE e fs = do { e1 <- e; flds <- sequenceA fs; pure (RecUpdE e1 flds) } -stringE :: String -> ExpQ+stringE :: Quote m => String -> m Exp stringE = litE . stringL -fieldExp :: Name -> ExpQ -> Q (Name, Exp)-fieldExp s e = do { e' <- e; return (s,e') }+fieldExp :: Quote m => Name -> m Exp -> m (Name, Exp)+fieldExp s e = do { e' <- e; pure (s,e') }  -- | @staticE x = [| static x |]@-staticE :: ExpQ -> ExpQ+staticE :: Quote m => m Exp -> m Exp staticE = fmap StaticE -unboundVarE :: Name -> ExpQ-unboundVarE s = return (UnboundVarE s)+unboundVarE :: Quote m => Name -> m Exp+unboundVarE s = pure (UnboundVarE s) -labelE :: String -> ExpQ-labelE s = return (LabelE s)+labelE :: Quote m => String -> m Exp+labelE s = pure (LabelE s) -implicitParamVarE :: String -> ExpQ-implicitParamVarE n = return (ImplicitParamVarE n)+implicitParamVarE :: Quote m => String -> m Exp+implicitParamVarE n = pure (ImplicitParamVarE n)  -- ** 'arithSeqE' Shortcuts-fromE :: ExpQ -> ExpQ-fromE x = do { a <- x; return (ArithSeqE (FromR a)) }+fromE :: Quote m => m Exp -> m Exp+fromE x = do { a <- x; pure (ArithSeqE (FromR a)) } -fromThenE :: ExpQ -> ExpQ -> ExpQ-fromThenE x y = do { a <- x; b <- y; return (ArithSeqE (FromThenR a b)) }+fromThenE :: Quote m => m Exp -> m Exp -> m Exp+fromThenE x y = do { a <- x; b <- y; pure (ArithSeqE (FromThenR a b)) } -fromToE :: ExpQ -> ExpQ -> ExpQ-fromToE x y = do { a <- x; b <- y; return (ArithSeqE (FromToR a b)) }+fromToE :: Quote m => m Exp -> m Exp -> m Exp+fromToE x y = do { a <- x; b <- y; pure (ArithSeqE (FromToR a b)) } -fromThenToE :: ExpQ -> ExpQ -> ExpQ -> ExpQ+fromThenToE :: Quote m => m Exp -> m Exp -> m Exp -> m Exp fromThenToE x y z = do { a <- x; b <- y; c <- z;-                         return (ArithSeqE (FromThenToR a b c)) }+                         pure (ArithSeqE (FromThenToR a b c)) }   ------------------------------------------------------------------------------- -- *   Dec -valD :: PatQ -> BodyQ -> [DecQ] -> DecQ+valD :: Quote m => m Pat -> m Body -> [m Dec] -> m Dec valD p b ds =   do { p' <- p-     ; ds' <- sequence ds+     ; ds' <- sequenceA ds      ; b' <- b-     ; return (ValD p' b' ds')+     ; pure (ValD p' b' ds')      } -funD :: Name -> [ClauseQ] -> DecQ+funD :: Quote m => Name -> [m Clause] -> m Dec funD nm cs =- do { cs1 <- sequence cs-    ; return (FunD nm cs1)+ do { cs1 <- sequenceA cs+    ; pure (FunD nm cs1)     } -tySynD :: Name -> [TyVarBndrQ] -> TypeQ -> DecQ+tySynD :: Quote m => Name -> [m (TyVarBndr ())] -> m Type -> m Dec tySynD tc tvs rhs =   do { tvs1 <- sequenceA tvs      ; rhs1 <- rhs-     ; return (TySynD tc tvs1 rhs1)+     ; pure (TySynD tc tvs1 rhs1)      } -dataD :: CxtQ -> Name -> [TyVarBndrQ] -> Maybe KindQ -> [ConQ]-      -> [DerivClauseQ] -> DecQ+dataD :: Quote m => m Cxt -> Name -> [m (TyVarBndr ())] -> Maybe (m Kind) -> [m Con]+      -> [m DerivClause] -> m Dec dataD ctxt tc tvs ksig cons derivs =   do     ctxt1   <- ctxt     tvs1    <- sequenceA tvs     ksig1   <- sequenceA ksig-    cons1   <- sequence cons-    derivs1 <- sequence derivs-    return (DataD ctxt1 tc tvs1 ksig1 cons1 derivs1)+    cons1   <- sequenceA cons+    derivs1 <- sequenceA derivs+    pure (DataD ctxt1 tc tvs1 ksig1 cons1 derivs1) -newtypeD :: CxtQ -> Name -> [TyVarBndrQ] -> Maybe KindQ -> ConQ-         -> [DerivClauseQ] -> DecQ+newtypeD :: Quote m => m Cxt -> Name -> [m (TyVarBndr ())] -> Maybe (m Kind) -> m Con+         -> [m DerivClause] -> m Dec newtypeD ctxt tc tvs ksig con derivs =   do     ctxt1   <- ctxt     tvs1    <- sequenceA tvs     ksig1   <- sequenceA ksig     con1    <- con-    derivs1 <- sequence derivs-    return (NewtypeD ctxt1 tc tvs1 ksig1 con1 derivs1)+    derivs1 <- sequenceA derivs+    pure (NewtypeD ctxt1 tc tvs1 ksig1 con1 derivs1) -classD :: CxtQ -> Name -> [TyVarBndrQ] -> [FunDep] -> [DecQ] -> DecQ+classD :: Quote m => m Cxt -> Name -> [m (TyVarBndr ())] -> [FunDep] -> [m Dec] -> m Dec classD ctxt cls tvs fds decs =   do     tvs1  <- sequenceA tvs     decs1 <- sequenceA decs     ctxt1 <- ctxt-    return $ ClassD ctxt1 cls tvs1 fds decs1+    pure $ ClassD ctxt1 cls tvs1 fds decs1 -instanceD :: CxtQ -> TypeQ -> [DecQ] -> DecQ+instanceD :: Quote m => m Cxt -> m Type -> [m Dec] -> m Dec instanceD = instanceWithOverlapD Nothing -instanceWithOverlapD :: Maybe Overlap -> CxtQ -> TypeQ -> [DecQ] -> DecQ+instanceWithOverlapD :: Quote m => Maybe Overlap -> m Cxt -> m Type -> [m Dec] -> m Dec instanceWithOverlapD o ctxt ty decs =   do     ctxt1 <- ctxt-    decs1 <- sequence decs+    decs1 <- sequenceA decs     ty1   <- ty-    return $ InstanceD o ctxt1 ty1 decs1+    pure $ InstanceD o ctxt1 ty1 decs1   -sigD :: Name -> TypeQ -> DecQ-sigD fun ty = liftM (SigD fun) $ ty+sigD :: Quote m => Name -> m Type -> m Dec+sigD fun ty = liftA (SigD fun) $ ty -kiSigD :: Name -> KindQ -> DecQ-kiSigD fun ki = liftM (KiSigD fun) $ ki+kiSigD :: Quote m => Name -> m Kind -> m Dec+kiSigD fun ki = liftA (KiSigD fun) $ ki -forImpD :: Callconv -> Safety -> String -> Name -> TypeQ -> DecQ+forImpD :: Quote m => Callconv -> Safety -> String -> Name -> m Type -> m Dec forImpD cc s str n ty  = do ty' <- ty-      return $ ForeignD (ImportF cc s str n ty')+      pure $ ForeignD (ImportF cc s str n ty') -infixLD :: Int -> Name -> DecQ-infixLD prec nm = return (InfixD (Fixity prec InfixL) nm)+infixLD :: Quote m => Int -> Name -> m Dec+infixLD prec nm = pure (InfixD (Fixity prec InfixL) nm) -infixRD :: Int -> Name -> DecQ-infixRD prec nm = return (InfixD (Fixity prec InfixR) nm)+infixRD :: Quote m => Int -> Name -> m Dec+infixRD prec nm = pure (InfixD (Fixity prec InfixR) nm) -infixND :: Int -> Name -> DecQ-infixND prec nm = return (InfixD (Fixity prec InfixN) nm)+infixND :: Quote m => Int -> Name -> m Dec+infixND prec nm = pure (InfixD (Fixity prec InfixN) nm) -pragInlD :: Name -> Inline -> RuleMatch -> Phases -> DecQ+pragInlD :: Quote m => Name -> Inline -> RuleMatch -> Phases -> m Dec pragInlD name inline rm phases-  = return $ PragmaD $ InlineP name inline rm phases+  = pure $ PragmaD $ InlineP name inline rm phases -pragSpecD :: Name -> TypeQ -> Phases -> DecQ+pragSpecD :: Quote m => Name -> m Type -> Phases -> m Dec pragSpecD n ty phases   = do       ty1    <- ty-      return $ PragmaD $ SpecialiseP n ty1 Nothing phases+      pure $ PragmaD $ SpecialiseP n ty1 Nothing phases -pragSpecInlD :: Name -> TypeQ -> Inline -> Phases -> DecQ+pragSpecInlD :: Quote m => Name -> m Type -> Inline -> Phases -> m Dec pragSpecInlD n ty inline phases   = do       ty1    <- ty-      return $ PragmaD $ SpecialiseP n ty1 (Just inline) phases+      pure $ PragmaD $ SpecialiseP n ty1 (Just inline) phases -pragSpecInstD :: TypeQ -> DecQ+pragSpecInstD :: Quote m => m Type -> m Dec pragSpecInstD ty   = do       ty1    <- ty-      return $ PragmaD $ SpecialiseInstP ty1+      pure $ PragmaD $ SpecialiseInstP ty1 -pragRuleD :: String -> Maybe [TyVarBndrQ] -> [RuleBndrQ] -> ExpQ -> ExpQ-          -> Phases -> DecQ+pragRuleD :: Quote m => String -> Maybe [m (TyVarBndr ())] -> [m RuleBndr] -> m Exp -> m Exp+          -> Phases -> m Dec pragRuleD n ty_bndrs tm_bndrs lhs rhs phases   = do-      ty_bndrs1 <- traverse sequence ty_bndrs-      tm_bndrs1 <- sequence tm_bndrs+      ty_bndrs1 <- traverse sequenceA ty_bndrs+      tm_bndrs1 <- sequenceA tm_bndrs       lhs1   <- lhs       rhs1   <- rhs-      return $ PragmaD $ RuleP n ty_bndrs1 tm_bndrs1 lhs1 rhs1 phases+      pure $ PragmaD $ RuleP n ty_bndrs1 tm_bndrs1 lhs1 rhs1 phases -pragAnnD :: AnnTarget -> ExpQ -> DecQ+pragAnnD :: Quote m => AnnTarget -> m Exp -> m Dec pragAnnD target expr   = do       exp1 <- expr-      return $ PragmaD $ AnnP target exp1+      pure $ PragmaD $ AnnP target exp1 -pragLineD :: Int -> String -> DecQ-pragLineD line file = return $ PragmaD $ LineP line file+pragLineD :: Quote m => Int -> String -> m Dec+pragLineD line file = pure $ PragmaD $ LineP line file -pragCompleteD :: [Name] -> Maybe Name -> DecQ-pragCompleteD cls mty = return $ PragmaD $ CompleteP cls mty+pragCompleteD :: Quote m => [Name] -> Maybe Name -> m Dec+pragCompleteD cls mty = pure $ PragmaD $ CompleteP cls mty -dataInstD :: CxtQ -> (Maybe [TyVarBndrQ]) -> TypeQ -> Maybe KindQ -> [ConQ]-          -> [DerivClauseQ] -> DecQ+dataInstD :: Quote m => m Cxt -> (Maybe [m (TyVarBndr ())]) -> m Type -> Maybe (m Kind) -> [m Con]+          -> [m DerivClause] -> m Dec dataInstD ctxt mb_bndrs ty ksig cons derivs =   do     ctxt1   <- ctxt-    mb_bndrs1 <- traverse sequence mb_bndrs+    mb_bndrs1 <- traverse sequenceA mb_bndrs     ty1    <- ty     ksig1   <- sequenceA ksig     cons1   <- sequenceA cons     derivs1 <- sequenceA derivs-    return (DataInstD ctxt1 mb_bndrs1 ty1 ksig1 cons1 derivs1)+    pure (DataInstD ctxt1 mb_bndrs1 ty1 ksig1 cons1 derivs1) -newtypeInstD :: CxtQ -> (Maybe [TyVarBndrQ]) -> TypeQ -> Maybe KindQ -> ConQ-             -> [DerivClauseQ] -> DecQ+newtypeInstD :: Quote m => m Cxt -> (Maybe [m (TyVarBndr ())]) -> m Type -> Maybe (m Kind) -> m Con+             -> [m DerivClause] -> m Dec newtypeInstD ctxt mb_bndrs ty ksig con derivs =   do     ctxt1   <- ctxt-    mb_bndrs1 <- traverse sequence mb_bndrs+    mb_bndrs1 <- traverse sequenceA mb_bndrs     ty1    <- ty     ksig1   <- sequenceA ksig     con1    <- con-    derivs1 <- sequence derivs-    return (NewtypeInstD ctxt1 mb_bndrs1 ty1 ksig1 con1 derivs1)+    derivs1 <- sequenceA derivs+    pure (NewtypeInstD ctxt1 mb_bndrs1 ty1 ksig1 con1 derivs1) -tySynInstD :: TySynEqnQ -> DecQ+tySynInstD :: Quote m => m TySynEqn -> m Dec tySynInstD eqn =   do     eqn1 <- eqn-    return (TySynInstD eqn1)+    pure (TySynInstD eqn1) -dataFamilyD :: Name -> [TyVarBndrQ] -> Maybe KindQ -> DecQ+dataFamilyD :: Quote m => Name -> [m (TyVarBndr ())] -> Maybe (m Kind) -> m Dec dataFamilyD tc tvs kind =   do tvs'  <- sequenceA tvs      kind' <- sequenceA kind-     return $ DataFamilyD tc tvs' kind'+     pure $ DataFamilyD tc tvs' kind' -openTypeFamilyD :: Name -> [TyVarBndrQ] -> FamilyResultSigQ-                -> Maybe InjectivityAnn -> DecQ+openTypeFamilyD :: Quote m => Name -> [m (TyVarBndr ())] -> m FamilyResultSig+                -> Maybe InjectivityAnn -> m Dec openTypeFamilyD tc tvs res inj =   do tvs' <- sequenceA tvs      res' <- res-     return $ OpenTypeFamilyD (TypeFamilyHead tc tvs' res' inj)+     pure $ OpenTypeFamilyD (TypeFamilyHead tc tvs' res' inj) -closedTypeFamilyD :: Name -> [TyVarBndrQ] -> FamilyResultSigQ-                  -> Maybe InjectivityAnn -> [TySynEqnQ] -> DecQ+closedTypeFamilyD :: Quote m => Name -> [m (TyVarBndr ())] -> m FamilyResultSig+                  -> Maybe InjectivityAnn -> [m TySynEqn] -> m Dec closedTypeFamilyD tc tvs result injectivity eqns =   do tvs1    <- sequenceA tvs      result1 <- result      eqns1   <- sequenceA eqns-     return (ClosedTypeFamilyD (TypeFamilyHead tc tvs1 result1 injectivity) eqns1)+     pure (ClosedTypeFamilyD (TypeFamilyHead tc tvs1 result1 injectivity) eqns1) -roleAnnotD :: Name -> [Role] -> DecQ-roleAnnotD name roles = return $ RoleAnnotD name roles+roleAnnotD :: Quote m => Name -> [Role] -> m Dec+roleAnnotD name roles = pure $ RoleAnnotD name roles -standaloneDerivD :: CxtQ -> TypeQ -> DecQ+standaloneDerivD :: Quote m => m Cxt -> m Type -> m Dec standaloneDerivD = standaloneDerivWithStrategyD Nothing -standaloneDerivWithStrategyD :: Maybe DerivStrategyQ -> CxtQ -> TypeQ -> DecQ+standaloneDerivWithStrategyD :: Quote m => Maybe (m DerivStrategy) -> m Cxt -> m Type -> m Dec standaloneDerivWithStrategyD mdsq ctxtq tyq =   do     mds  <- sequenceA mdsq     ctxt <- ctxtq     ty   <- tyq-    return $ StandaloneDerivD mds ctxt ty+    pure $ StandaloneDerivD mds ctxt ty -defaultSigD :: Name -> TypeQ -> DecQ+defaultSigD :: Quote m => Name -> m Type -> m Dec defaultSigD n tyq =   do     ty <- tyq-    return $ DefaultSigD n ty+    pure $ DefaultSigD n ty  -- | Pattern synonym declaration-patSynD :: Name -> PatSynArgsQ -> PatSynDirQ -> PatQ -> DecQ+patSynD :: Quote m => Name -> m PatSynArgs -> m PatSynDir -> m Pat -> m Dec patSynD name args dir pat = do   args'    <- args   dir'     <- dir   pat'     <- pat-  return (PatSynD name args' dir' pat')+  pure (PatSynD name args' dir' pat')  -- | Pattern synonym type signature-patSynSigD :: Name -> TypeQ -> DecQ+patSynSigD :: Quote m => Name -> m Type -> m Dec patSynSigD nm ty =   do ty' <- ty-     return $ PatSynSigD nm ty'+     pure $ PatSynSigD nm 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 :: Quote m => String -> m Exp -> m Dec implicitParamBindD n e =   do     e' <- e-    return $ ImplicitParamBindD n e'+    pure $ ImplicitParamBindD n e' -tySynEqn :: (Maybe [TyVarBndrQ]) -> TypeQ -> TypeQ -> TySynEqnQ+tySynEqn :: Quote m => (Maybe [m (TyVarBndr ())]) -> m Type -> m Type -> m TySynEqn tySynEqn mb_bndrs lhs rhs =   do-    mb_bndrs1 <- traverse sequence mb_bndrs+    mb_bndrs1 <- traverse sequenceA mb_bndrs     lhs1 <- lhs     rhs1 <- rhs-    return (TySynEqn mb_bndrs1 lhs1 rhs1)+    pure (TySynEqn mb_bndrs1 lhs1 rhs1) -cxt :: [PredQ] -> CxtQ-cxt = sequence+cxt :: Quote m => [m Pred] -> m Cxt+cxt = sequenceA -derivClause :: Maybe DerivStrategyQ -> [PredQ] -> DerivClauseQ+derivClause :: Quote m => Maybe (m DerivStrategy) -> [m Pred] -> m DerivClause derivClause mds p = do mds' <- sequenceA mds                        p'   <- cxt p-                       return $ DerivClause mds' p'+                       pure $ DerivClause mds' p' -stockStrategy :: DerivStrategyQ+stockStrategy :: Quote m => m DerivStrategy stockStrategy = pure StockStrategy -anyclassStrategy :: DerivStrategyQ+anyclassStrategy :: Quote m => m DerivStrategy anyclassStrategy = pure AnyclassStrategy -newtypeStrategy :: DerivStrategyQ+newtypeStrategy :: Quote m => m DerivStrategy newtypeStrategy = pure NewtypeStrategy -viaStrategy :: TypeQ -> DerivStrategyQ+viaStrategy :: Quote m => m Type -> m DerivStrategy viaStrategy = fmap ViaStrategy -normalC :: Name -> [BangTypeQ] -> ConQ-normalC con strtys = liftM (NormalC con) $ sequence strtys+normalC :: Quote m => Name -> [m BangType] -> m Con+normalC con strtys = liftA (NormalC con) $ sequenceA strtys -recC :: Name -> [VarBangTypeQ] -> ConQ-recC con varstrtys = liftM (RecC con) $ sequence varstrtys+recC :: Quote m => Name -> [m VarBangType] -> m Con+recC con varstrtys = liftA (RecC con) $ sequenceA varstrtys -infixC :: Q (Bang, Type) -> Name -> Q (Bang, Type) -> ConQ+infixC :: Quote m => m (Bang, Type) -> Name -> m (Bang, Type) -> m Con infixC st1 con st2 = do st1' <- st1                         st2' <- st2-                        return $ InfixC st1' con st2'+                        pure $ InfixC st1' con st2' -forallC :: [TyVarBndrQ] -> CxtQ -> ConQ -> ConQ+forallC :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Con -> m Con forallC ns ctxt con = do   ns'   <- sequenceA ns   ctxt' <- ctxt   con'  <- con   pure $ ForallC ns' ctxt' con' -gadtC :: [Name] -> [StrictTypeQ] -> TypeQ -> ConQ-gadtC cons strtys ty = liftM2 (GadtC cons) (sequence strtys) ty+gadtC :: Quote m => [Name] -> [m StrictType] -> m Type -> m Con+gadtC cons strtys ty = liftA2 (GadtC cons) (sequenceA strtys) ty -recGadtC :: [Name] -> [VarStrictTypeQ] -> TypeQ -> ConQ-recGadtC cons varstrtys ty = liftM2 (RecGadtC cons) (sequence varstrtys) ty+recGadtC :: Quote m => [Name] -> [m VarStrictType] -> m Type -> m Con+recGadtC cons varstrtys ty = liftA2 (RecGadtC cons) (sequenceA varstrtys) ty  ------------------------------------------------------------------------------- -- *   Type -forallT :: [TyVarBndrQ] -> CxtQ -> TypeQ -> TypeQ+forallT :: Quote m => [m (TyVarBndr Specificity)] -> m Cxt -> m Type -> m Type forallT tvars ctxt ty = do     tvars1 <- sequenceA tvars     ctxt1  <- ctxt     ty1    <- ty-    return $ ForallT tvars1 ctxt1 ty1+    pure $ ForallT tvars1 ctxt1 ty1 -forallVisT :: [TyVarBndrQ] -> TypeQ -> TypeQ+forallVisT :: Quote m => [m (TyVarBndr ())] -> m Type -> m Type forallVisT tvars ty = ForallVisT <$> sequenceA tvars <*> ty -varT :: Name -> TypeQ-varT = return . VarT+varT :: Quote m => Name -> m Type+varT = pure . VarT -conT :: Name -> TypeQ-conT = return . ConT+conT :: Quote m => Name -> m Type+conT = pure . ConT -infixT :: TypeQ -> Name -> TypeQ -> TypeQ+infixT :: Quote m => m Type -> Name -> m Type -> m Type infixT t1 n t2 = do t1' <- t1                     t2' <- t2-                    return (InfixT t1' n t2')+                    pure (InfixT t1' n t2') -uInfixT :: TypeQ -> Name -> TypeQ -> TypeQ+uInfixT :: Quote m => m Type -> Name -> m Type -> m Type uInfixT t1 n t2 = do t1' <- t1                      t2' <- t2-                     return (UInfixT t1' n t2')+                     pure (UInfixT t1' n t2') -parensT :: TypeQ -> TypeQ+parensT :: Quote m => m Type -> m Type parensT t = do t' <- t-               return (ParensT t')+               pure (ParensT t') -appT :: TypeQ -> TypeQ -> TypeQ+appT :: Quote m => m Type -> m Type -> m Type appT t1 t2 = do            t1' <- t1            t2' <- t2-           return $ AppT t1' t2'+           pure $ AppT t1' t2' -appKindT :: TypeQ -> KindQ -> TypeQ+appKindT :: Quote m => m Type -> m Kind -> m Type appKindT ty ki = do                ty' <- ty                ki' <- ki-               return $ AppKindT ty' ki'+               pure $ AppKindT ty' ki' -arrowT :: TypeQ-arrowT = return ArrowT+arrowT :: Quote m => m Type+arrowT = pure ArrowT -listT :: TypeQ-listT = return ListT+mulArrowT :: Quote m => m Type+mulArrowT = pure MulArrowT -litT :: TyLitQ -> TypeQ+listT :: Quote m => m Type+listT = pure ListT++litT :: Quote m => m TyLit -> m Type litT l = fmap LitT l -tupleT :: Int -> TypeQ-tupleT i = return (TupleT i)+tupleT :: Quote m => Int -> m Type+tupleT i = pure (TupleT i) -unboxedTupleT :: Int -> TypeQ-unboxedTupleT i = return (UnboxedTupleT i)+unboxedTupleT :: Quote m => Int -> m Type+unboxedTupleT i = pure (UnboxedTupleT i) -unboxedSumT :: SumArity -> TypeQ-unboxedSumT arity = return (UnboxedSumT arity)+unboxedSumT :: Quote m => SumArity -> m Type+unboxedSumT arity = pure (UnboxedSumT arity) -sigT :: TypeQ -> KindQ -> TypeQ+sigT :: Quote m => m Type -> m Kind -> m Type sigT t k   = do       t' <- t       k' <- k-      return $ SigT t' k'+      pure $ SigT t' k' -equalityT :: TypeQ-equalityT = return EqualityT+equalityT :: Quote m => m Type+equalityT = pure EqualityT -wildCardT :: TypeQ-wildCardT = return WildCardT+wildCardT :: Quote m => m Type+wildCardT = pure WildCardT -implicitParamT :: String -> TypeQ -> TypeQ+implicitParamT :: Quote m => String -> m Type -> m Type implicitParamT n t   = do       t' <- t-      return $ ImplicitParamT n t'+      pure $ ImplicitParamT n t'  {-# DEPRECATED classP "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 :: Quote m => Name -> [m Type] -> m Pred classP cla tys   = do-      tysl <- sequence tys-      return (foldl AppT (ConT cla) tysl)+      tysl <- sequenceA tys+      pure (foldl AppT (ConT cla) tysl)  {-# DEPRECATED equalP "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 :: Quote m => m Type -> m Type -> m Pred equalP tleft tright   = do       tleft1  <- tleft       tright1 <- tright       eqT <- equalityT-      return (foldl AppT eqT [tleft1, tright1])+      pure (foldl AppT eqT [tleft1, tright1]) -promotedT :: Name -> TypeQ-promotedT = return . PromotedT+promotedT :: Quote m => Name -> m Type+promotedT = pure . PromotedT -promotedTupleT :: Int -> TypeQ-promotedTupleT i = return (PromotedTupleT i)+promotedTupleT :: Quote m => Int -> m Type+promotedTupleT i = pure (PromotedTupleT i) -promotedNilT :: TypeQ-promotedNilT = return PromotedNilT+promotedNilT :: Quote m => m Type+promotedNilT = pure PromotedNilT -promotedConsT :: TypeQ-promotedConsT = return PromotedConsT+promotedConsT :: Quote m => m Type+promotedConsT = pure PromotedConsT -noSourceUnpackedness, sourceNoUnpack, sourceUnpack :: SourceUnpackednessQ-noSourceUnpackedness = return NoSourceUnpackedness-sourceNoUnpack       = return SourceNoUnpack-sourceUnpack         = return SourceUnpack+noSourceUnpackedness, sourceNoUnpack, sourceUnpack :: Quote m => m SourceUnpackedness+noSourceUnpackedness = pure NoSourceUnpackedness+sourceNoUnpack       = pure SourceNoUnpack+sourceUnpack         = pure SourceUnpack -noSourceStrictness, sourceLazy, sourceStrict :: SourceStrictnessQ-noSourceStrictness = return NoSourceStrictness-sourceLazy         = return SourceLazy-sourceStrict       = return SourceStrict+noSourceStrictness, sourceLazy, sourceStrict :: Quote m => m SourceStrictness+noSourceStrictness = pure NoSourceStrictness+sourceLazy         = pure SourceLazy+sourceStrict       = pure SourceStrict  {-# DEPRECATED isStrict     ["Use 'bang'. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. ",@@ -772,51 +792,66 @@ {-# DEPRECATED unpacked     ["Use 'bang'. See https://gitlab.haskell.org/ghc/ghc/wikis/migration/8.0. ",      "Example usage: 'bang sourceUnpack sourceStrict'"] #-}-isStrict, notStrict, unpacked :: Q Strict+isStrict, notStrict, unpacked :: Quote m => m Strict isStrict = bang noSourceUnpackedness sourceStrict notStrict = bang noSourceUnpackedness noSourceStrictness unpacked = bang sourceUnpack sourceStrict -bang :: SourceUnpackednessQ -> SourceStrictnessQ -> BangQ+bang :: Quote m => m SourceUnpackedness -> m SourceStrictness -> m Bang bang u s = do u' <- u               s' <- s-              return (Bang u' s')+              pure (Bang u' s') -bangType :: BangQ -> TypeQ -> BangTypeQ-bangType = liftM2 (,)+bangType :: Quote m => m Bang -> m Type -> m BangType+bangType = liftA2 (,) -varBangType :: Name -> BangTypeQ -> VarBangTypeQ-varBangType v bt = do (b, t) <- bt-                      return (v, b, t)+varBangType :: Quote m => Name -> m BangType -> m VarBangType+varBangType v bt = (\(b, t) -> (v, b, t)) <$> bt  {-# DEPRECATED strictType                "As of @template-haskell-2.11.0.0@, 'StrictType' has been replaced by 'BangType'. Please use 'bangType' instead." #-}-strictType :: Q Strict -> TypeQ -> StrictTypeQ+strictType :: Quote m => m Strict -> m Type -> m StrictType strictType = bangType  {-# DEPRECATED varStrictType                "As of @template-haskell-2.11.0.0@, 'VarStrictType' has been replaced by 'VarBangType'. Please use 'varBangType' instead." #-}-varStrictType :: Name -> StrictTypeQ -> VarStrictTypeQ+varStrictType :: Quote m => Name -> m StrictType -> m VarStrictType varStrictType = varBangType  -- * Type Literals -numTyLit :: Integer -> TyLitQ-numTyLit n = if n >= 0 then return (NumTyLit n)-                       else fail ("Negative type-level number: " ++ show n)+-- MonadFail here complicates things (a lot) because it would mean we would+-- have to emit a MonadFail constraint during typechecking if there was any+-- chance the desugaring would use numTyLit, which in general is hard to+-- predict.+numTyLit :: Quote m => Integer -> m TyLit+numTyLit n = if n >= 0 then pure (NumTyLit n)+                       else error ("Negative type-level number: " ++ show n) -strTyLit :: String -> TyLitQ-strTyLit s = return (StrTyLit s)+strTyLit :: Quote m => String -> m TyLit+strTyLit s = pure (StrTyLit s)  ------------------------------------------------------------------------------- -- *   Kind -plainTV :: Name -> TyVarBndrQ-plainTV = pure . PlainTV+plainTV :: Quote m => Name -> m (TyVarBndr ())+plainTV n = pure $ PlainTV n () -kindedTV :: Name -> KindQ -> TyVarBndrQ-kindedTV n = fmap (KindedTV n)+plainInvisTV :: Quote m => Name -> Specificity -> m (TyVarBndr Specificity)+plainInvisTV n s = pure $ PlainTV n s +kindedTV :: Quote m => Name -> m Kind -> m (TyVarBndr ())+kindedTV n = fmap (KindedTV n ())++kindedInvisTV :: Quote m => Name -> Specificity -> m Kind -> m (TyVarBndr Specificity)+kindedInvisTV n s = fmap (KindedTV n s)++specifiedSpec :: Specificity+specifiedSpec = SpecifiedSpec++inferredSpec :: Specificity+inferredSpec = InferredSpec+ varK :: Name -> Kind varK = VarT @@ -826,31 +861,31 @@ tupleK :: Int -> Kind tupleK = TupleT -arrowK :: Kind+arrowK ::  Kind arrowK = ArrowT -listK :: Kind+listK ::  Kind listK = ListT  appK :: Kind -> Kind -> Kind appK = AppT -starK :: KindQ+starK :: Quote m => m Kind starK = pure StarT -constraintK :: KindQ+constraintK :: Quote m => m Kind constraintK = pure ConstraintT  ------------------------------------------------------------------------------- -- *   Type family result -noSig :: FamilyResultSigQ+noSig :: Quote m => m FamilyResultSig noSig = pure NoSig -kindSig :: KindQ -> FamilyResultSigQ+kindSig :: Quote m => m Kind -> m FamilyResultSig kindSig = fmap KindSig -tyVarSig :: TyVarBndrQ -> FamilyResultSigQ+tyVarSig :: Quote m => m (TyVarBndr ()) -> m FamilyResultSig tyVarSig = fmap TyVarSig  -------------------------------------------------------------------------------@@ -889,23 +924,23 @@ ------------------------------------------------------------------------------- -- *   FunDep -funDep :: [Name] -> [Name] -> FunDep+funDep ::  [Name] -> [Name] -> FunDep funDep = FunDep  ------------------------------------------------------------------------------- -- *   RuleBndr-ruleVar :: Name -> RuleBndrQ-ruleVar = return . RuleVar+ruleVar :: Quote m => Name -> m RuleBndr+ruleVar = pure . RuleVar -typedRuleVar :: Name -> TypeQ -> RuleBndrQ-typedRuleVar n ty = ty >>= return . TypedRuleVar n+typedRuleVar :: Quote m => Name -> m Type -> m RuleBndr+typedRuleVar n ty = TypedRuleVar n <$> ty  ------------------------------------------------------------------------------- -- *   AnnTarget-valueAnnotation :: Name -> AnnTarget+valueAnnotation ::  Name -> AnnTarget valueAnnotation = ValueAnnotation -typeAnnotation :: Name -> AnnTarget+typeAnnotation ::  Name -> AnnTarget typeAnnotation = TypeAnnotation  moduleAnnotation :: AnnTarget@@ -914,35 +949,35 @@ ------------------------------------------------------------------------------- -- * Pattern Synonyms (sub constructs) -unidir, implBidir :: PatSynDirQ-unidir    = return Unidir-implBidir = return ImplBidir+unidir, implBidir :: Quote m => m PatSynDir+unidir    = pure Unidir+implBidir = pure ImplBidir -explBidir :: [ClauseQ] -> PatSynDirQ+explBidir :: Quote m => [m Clause] -> m PatSynDir explBidir cls = do-  cls' <- sequence cls-  return (ExplBidir cls')+  cls' <- sequenceA cls+  pure (ExplBidir cls') -prefixPatSyn :: [Name] -> PatSynArgsQ-prefixPatSyn args = return $ PrefixPatSyn args+prefixPatSyn :: Quote m => [Name] -> m PatSynArgs+prefixPatSyn args = pure $ PrefixPatSyn args -recordPatSyn :: [Name] -> PatSynArgsQ-recordPatSyn sels = return $ RecordPatSyn sels+recordPatSyn :: Quote m => [Name] -> m PatSynArgs+recordPatSyn sels = pure $ RecordPatSyn sels -infixPatSyn :: Name -> Name -> PatSynArgsQ-infixPatSyn arg1 arg2 = return $ InfixPatSyn arg1 arg2+infixPatSyn :: Quote m => Name -> Name -> m PatSynArgs+infixPatSyn arg1 arg2 = pure $ InfixPatSyn arg1 arg2  -------------------------------------------------------------- -- * Useful helper function -appsE :: [ExpQ] -> ExpQ+appsE :: Quote m => [m Exp] -> m Exp appsE [] = error "appsE []" appsE [x] = x appsE (x:y:zs) = appsE ( (appE x y) : zs ) --- | Return the Module at the place of splicing.  Can be used as an+-- | pure the Module at the place of splicing.  Can be used as an -- input for 'reifyModule'. thisModule :: Q Module thisModule = do   loc <- location-  return $ Module (mkPkgName $ loc_package loc) (mkModName $ loc_module loc)+  pure $ Module (mkPkgName $ loc_package loc) (mkModName $ loc_module loc)
Language/Haskell/TH/Ppr.hs view
@@ -182,13 +182,19 @@ pprExp i (CaseE e ms)  = parensIf (i > noPrec) $ text "case" <+> ppr e <+> text "of"                         $$ nest nestDepth (ppr ms)-pprExp i (DoE ss_) = parensIf (i > noPrec) $ text "do" <+> pprStms ss_+pprExp i (DoE m ss_) = parensIf (i > noPrec) $+    pprQualifier m <> text "do" <+> pprStms ss_   where+    pprQualifier Nothing = empty+    pprQualifier (Just modName) = text (modString modName) <> char '.'     pprStms []  = empty     pprStms [s] = ppr s     pprStms ss  = braces (semiSep ss)-pprExp i (MDoE ss_) = parensIf (i > noPrec) $ text "mdo" <+> pprStms ss_+pprExp i (MDoE m ss_) = parensIf (i > noPrec) $+    pprQualifier m <> text "mdo" <+> pprStms ss_   where+    pprQualifier Nothing = empty+    pprQualifier (Just modName) = text (modString modName) <> char '.'     pprStms []  = empty     pprStms [s] = ppr s     pprStms ss  = braces (semiSep ss)@@ -511,7 +517,7 @@     maybeInj | (Just inj') <- inj = ppr inj'              | otherwise          = empty -ppr_bndrs :: Maybe [TyVarBndr] -> Doc+ppr_bndrs :: PprFlag flag => Maybe [TyVarBndr flag] -> Doc ppr_bndrs (Just bndrs) = text "forall" <+> sep (map ppr bndrs) <> text "." ppr_bndrs Nothing = empty @@ -660,13 +666,13 @@ commaSepApplied :: [Name] -> Doc commaSepApplied = commaSepWith (pprName' Applied) -pprForall :: [TyVarBndr] -> Cxt -> Doc+pprForall :: [TyVarBndr Specificity] -> Cxt -> Doc pprForall = pprForall' ForallInvis -pprForallVis :: [TyVarBndr] -> Cxt -> Doc+pprForallVis :: [TyVarBndr ()] -> Cxt -> Doc pprForallVis = pprForall' ForallVis -pprForall' :: ForallVisFlag -> [TyVarBndr] -> Cxt -> Doc+pprForall' :: PprFlag flag => ForallVisFlag -> [TyVarBndr flag] -> Cxt -> Doc pprForall' fvf tvs cxt   -- even in the case without any tvs, there could be a non-empty   -- context cxt (e.g., in the case of pattern synonyms, where there@@ -756,6 +762,7 @@ pprParendType (UnboxedTupleT n)   = hashParens $ hcat $ replicate (n-1) comma pprParendType (UnboxedSumT arity) = hashParens $ hcat $ replicate (arity-1) bar pprParendType ArrowT              = parens (text "->")+pprParendType MulArrowT           = text "FUN" pprParendType ListT               = text "[]" pprParendType (LitT l)            = pprTyLit l pprParendType (PromotedT c)       = text "'" <> pprName' Applied c@@ -789,15 +796,20 @@     ppr (ForallT tvars ctxt ty) = sep [pprForall tvars ctxt, ppr ty]     ppr (ForallVisT tvars ty)   = sep [pprForallVis tvars [], ppr ty]     ppr ty = pprTyApp (split ty)-       -- Works, in a degnerate way, for SigT, and puts parens round (ty :: kind)+       -- Works, in a degenerate way, for SigT, and puts parens round (ty :: kind)        -- See Note [Pretty-printing kind signatures] instance Ppr TypeArg where-    ppr (TANormal ty) = ppr ty-    ppr (TyArg ki) = char '@' <> ppr ki+    ppr (TANormal ty) = parensIf (isStarT ty) (ppr ty)+    ppr (TyArg ki) = char '@' <> parensIf (isStarT ki) (ppr ki)  pprParendTypeArg :: TypeArg -> Doc-pprParendTypeArg (TANormal ty) = pprParendType ty-pprParendTypeArg (TyArg ki) = char '@' <> pprParendType ki+pprParendTypeArg (TANormal ty) = parensIf (isStarT ty) (pprParendType ty)+pprParendTypeArg (TyArg ki) = char '@' <> parensIf (isStarT ki) (pprParendType ki)++isStarT :: Type -> Bool+isStarT StarT = True+isStarT _ = False+ {- Note [Pretty-printing kind signatures] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GHC's parser only recognises a kind signature in a type when there are@@ -807,26 +819,34 @@ So we always print a SigT with parens (see #10050). -}  pprTyApp :: (Type, [TypeArg]) -> Doc+pprTyApp (MulArrowT, [TANormal (PromotedT c), TANormal arg1, TANormal arg2])+  | c == oneName  = sep [pprFunArgType arg1 <+> text "%1 ->", ppr arg2]+  | c == manyName = sep [pprFunArgType arg1 <+> text "->", ppr arg2]+pprTyApp (MulArrowT, [TANormal argm, TANormal arg1, TANormal arg2]) =+                     sep [pprFunArgType arg1 <+> text "%" <> ppr argm <+> text "->", ppr arg2] pprTyApp (ArrowT, [TANormal arg1, TANormal arg2]) = sep [pprFunArgType arg1 <+> text "->", ppr arg2] pprTyApp (EqualityT, [TANormal arg1, TANormal arg2]) =     sep [pprFunArgType arg1 <+> text "~", ppr arg2] pprTyApp (ListT, [TANormal arg]) = brackets (ppr arg)+pprTyApp (TupleT 1, args) = pprTyApp (ConT (tupleTypeName 1), args)+pprTyApp (PromotedTupleT 1, args) = pprTyApp (PromotedT (tupleDataName 1), args) pprTyApp (TupleT n, args)- | length args == n- = if n == 1-   then pprTyApp (ConT (tupleTypeName 1), args)-   else parens (commaSep args)+ | length args == n, Just args' <- traverse fromTANormal args+ = parens (commaSep args') pprTyApp (PromotedTupleT n, args)- | length args == n- = if n == 1-   then pprTyApp (PromotedT (tupleDataName 1), args)-   else quoteParens (commaSep args)+ | length args == n, Just args' <- traverse fromTANormal args+ = quoteParens (commaSep args') pprTyApp (fun, args) = pprParendType fun <+> sep (map pprParendTypeArg args) +fromTANormal :: TypeArg -> Maybe Type+fromTANormal (TANormal arg) = Just arg+fromTANormal (TyArg _) = Nothing+ pprFunArgType :: Type -> Doc    -- Should really use a precedence argument -- Everything except forall and (->) binds more tightly than (->) pprFunArgType ty@(ForallT {})                 = parens (ppr ty) pprFunArgType ty@(ForallVisT {})              = parens (ppr ty)+pprFunArgType ty@(((MulArrowT `AppT` _) `AppT` _) `AppT` _)  = parens (ppr ty) pprFunArgType ty@((ArrowT `AppT` _) `AppT` _) = parens (ppr ty) pprFunArgType ty@(SigT _ _)                   = parens (ppr ty) pprFunArgType ty                              = ppr ty@@ -852,9 +872,21 @@   ppr = pprTyLit  -------------------------------instance Ppr TyVarBndr where-    ppr (PlainTV nm)    = ppr nm-    ppr (KindedTV nm k) = parens (ppr nm <+> dcolon <+> ppr k)+class PprFlag flag where+    pprTyVarBndr :: (TyVarBndr flag) -> Doc++instance PprFlag () where+    pprTyVarBndr (PlainTV nm ())    = ppr nm+    pprTyVarBndr (KindedTV nm () k) = parens (ppr nm <+> dcolon <+> ppr k)++instance PprFlag Specificity where+    pprTyVarBndr (PlainTV nm SpecifiedSpec)    = ppr nm+    pprTyVarBndr (PlainTV nm InferredSpec)     = braces (ppr nm)+    pprTyVarBndr (KindedTV nm SpecifiedSpec k) = parens (ppr nm <+> dcolon <+> ppr k)+    pprTyVarBndr (KindedTV nm InferredSpec  k) = braces (ppr nm <+> dcolon <+> ppr k)++instance PprFlag flag => Ppr (TyVarBndr flag) where+    ppr bndr = pprTyVarBndr bndr  instance Ppr Role where     ppr NominalR          = text "nominal"
Language/Haskell/TH/Syntax.hs view
@@ -3,7 +3,7 @@              RankNTypes, RoleAnnotations, ScopedTypeVariables,              MagicHash, KindSignatures, PolyKinds, TypeApplications, DataKinds,              GADTs, UnboxedTuples, UnboxedSums, TypeInType,-             Trustworthy #-}+             Trustworthy, DeriveFunctor #-}  {-# OPTIONS_GHC -fno-warn-inline-rule-shadowing #-} @@ -31,8 +31,14 @@ import Data.Data hiding (Fixity(..)) import Data.IORef import System.IO.Unsafe ( unsafePerformIO )+import GHC.IO.Unsafe    ( unsafeDupableInterleaveIO ) import Control.Monad (liftM) import Control.Monad.IO.Class (MonadIO (..))+import Control.Monad.Fix (MonadFix (..))+import Control.Applicative (liftA2)+import Control.Exception (BlockedIndefinitelyOnMVar (..), catch, throwIO)+import Control.Exception.Base (FixIOException (..))+import Control.Concurrent.MVar (newEmptyMVar, readMVar, putMVar) import System.IO        ( hPutStrLn, stderr ) import Data.Char        ( isAlpha, isAlphaNum, isUpper, ord ) import Data.Int@@ -45,14 +51,15 @@ import GHC.Types        ( Int(..), Word(..), Char(..), Double(..), Float(..),                           TYPE, RuntimeRep(..) ) import GHC.Prim         ( Int#, Word#, Char#, Double#, Float#, Addr# )+import GHC.Ptr          ( Ptr, plusPtr ) import GHC.Lexeme       ( startsVarSym, startsVarId ) import GHC.ForeignSrcLang.Type import Language.Haskell.TH.LanguageExtensions import Numeric.Natural import Prelude import Foreign.ForeignPtr--import qualified Control.Monad.Fail as Fail+import Foreign.C.String+import Foreign.C.Types  ----------------------------------------------------- --@@ -60,7 +67,7 @@ -- ----------------------------------------------------- -class (MonadIO m, Fail.MonadFail m) => Quasi m where+class (MonadIO m, MonadFail m) => Quasi m where   qNewName :: String -> m Name         -- ^ Fresh names @@ -124,8 +131,7 @@ -----------------------------------------------------  instance Quasi IO where-  qNewName s = do { n <- atomicModifyIORef' counter (\x -> (x + 1, x))-                  ; pure (mkNameU s n) }+  qNewName = newNameIO    qReport True  msg = hPutStrLn stderr ("Template Haskell error: " ++ msg)   qReport False msg = hPutStrLn stderr ("Template Haskell error: " ++ msg)@@ -152,6 +158,13 @@   qIsExtEnabled _       = badIO "isExtEnabled"   qExtsEnabled          = badIO "extsEnabled" +instance Quote IO where+  newName = newNameIO++newNameIO :: String -> IO Name+newNameIO s = do { n <- atomicModifyIORef' counter (\x -> (x + 1, x))+                 ; pure (mkNameU s n) }+ badIO :: String -> IO a badIO op = do   { qReport True ("Can't do `" ++ op ++ "' in the IO monad")                 ; fail "Template Haskell failure" }@@ -187,12 +200,9 @@ instance Monad Q where   Q m >>= k  = Q (m >>= \x -> unQ (k x))   (>>) = (*>)-#if !MIN_VERSION_base(4,13,0)-  fail       = Fail.fail-#endif -instance Fail.MonadFail Q where-  fail s     = report True s >> Q (Fail.fail "Q monad failure")+instance MonadFail Q where+  fail s     = report True s >> Q (fail "Q monad failure")  instance Functor Q where   fmap f (Q x) = Q (fmap f x)@@ -202,8 +212,94 @@   Q f <*> Q x = Q (f <*> x)   Q m *> Q n = Q (m *> n) +-- | @since 2.17.0.0+instance Semigroup a => Semigroup (Q a) where+  (<>) = liftA2 (<>)++-- | @since 2.17.0.0+instance Monoid a => Monoid (Q a) where+  mempty = pure mempty++-- | If the function passed to 'mfix' inspects its argument,+-- the resulting action will throw a 'FixIOException'.+--+-- @since 2.17.0.0+instance MonadFix Q where+  -- We use the same blackholing approach as in fixIO.+  -- See Note [Blackholing in fixIO] in System.IO in base.+  mfix k = do+    m <- runIO newEmptyMVar+    ans <- runIO (unsafeDupableInterleaveIO+             (readMVar m `catch` \BlockedIndefinitelyOnMVar ->+                                    throwIO FixIOException))+    result <- k ans+    runIO (putMVar m result)+    return result++ ----------------------------------------------------- --+--              The Quote class+--+-----------------------------------------------------++++-- | The 'Quote' class implements the minimal interface which is necessary for+-- desugaring quotations.+--+-- * The @Monad m@ superclass is needed to stitch together the different+-- AST fragments.+-- * 'newName' is used when desugaring binding structures such as lambdas+-- to generate fresh names.+--+-- Therefore the type of an untyped quotation in GHC is `Quote m => m Exp`+--+-- For many years the type of a quotation was fixed to be `Q Exp` but by+-- more precisely specifying the minimal interface it enables the `Exp` to+-- be extracted purely from the quotation without interacting with `Q`.+class Monad m => Quote m where+  {- |+  Generate a fresh name, which cannot be captured.++  For example, this:++  @f = $(do+    nm1 <- newName \"x\"+    let nm2 = 'mkName' \"x\"+    return ('LamE' ['VarP' nm1] (LamE [VarP nm2] ('VarE' nm1)))+   )@++  will produce the splice++  >f = \x0 -> \x -> x0++  In particular, the occurrence @VarE nm1@ refers to the binding @VarP nm1@,+  and is not captured by the binding @VarP nm2@.++  Although names generated by @newName@ cannot /be captured/, they can+  /capture/ other names. For example, this:++  >g = $(do+  >  nm1 <- newName "x"+  >  let nm2 = mkName "x"+  >  return (LamE [VarP nm2] (LamE [VarP nm1] (VarE nm2)))+  > )++  will produce the splice++  >g = \x -> \x0 -> x0++  since the occurrence @VarE nm2@ is captured by the innermost binding+  of @x@, namely @VarP nm1@.+  -}+  newName :: String -> m Name++instance Quote Q where+  newName s = Q (qNewName s)++-----------------------------------------------------+-- --              The TExp type -- -----------------------------------------------------@@ -245,12 +341,14 @@ --     • In the Template Haskell quotation [|| "foo" ||] --       In the expression: [|| "foo" ||] --       In the Template Haskell splice $$([|| "foo" ||])+--+-- Levity-polymorphic since /template-haskell-2.16.0.0/.  -- | Discard the type annotation and produce a plain Template Haskell -- expression -- -- Levity-polymorphic since /template-haskell-2.16.0.0/.-unTypeQ :: forall (r :: RuntimeRep) (a :: TYPE r). Q (TExp a) -> Q Exp+unTypeQ :: forall (r :: RuntimeRep) (a :: TYPE r) m . Quote m => m (TExp a) -> m Exp unTypeQ m = do { TExp e <- m                ; return e } @@ -260,7 +358,8 @@ -- really does have the type you claim it has. -- -- Levity-polymorphic since /template-haskell-2.16.0.0/.-unsafeTExpCoerce :: forall (r :: RuntimeRep) (a :: TYPE r). Q Exp -> Q (TExp a)+unsafeTExpCoerce :: forall (r :: RuntimeRep) (a :: TYPE r) m .+                      Quote m => m Exp -> m (TExp a) unsafeTExpCoerce m = do { e <- m                         ; return (TExp e) } @@ -277,45 +376,66 @@ The splice will evaluate to (MkAge 3) and you can't add that to 4::Int. So you can't coerce a (TExp Age) to a (TExp Int). -} -------------------------------------------------------- Packaged versions for the programmer, hiding the Quasi-ness+-- Code constructor -{- |-Generate a fresh name, which cannot be captured.+type role Code representational nominal   -- See Note [Role of TExp]+newtype Code m (a :: TYPE (r :: RuntimeRep)) = Code+  { examineCode :: m (TExp a) -- ^ Underlying monadic value+  } -For example, this:+-- | Unsafely convert an untyped code representation into a typed code+-- representation.+unsafeCodeCoerce :: forall (r :: RuntimeRep) (a :: TYPE r) m .+                      Quote m => m Exp -> Code m a+unsafeCodeCoerce m = Code (unsafeTExpCoerce m) -@f = $(do-  nm1 <- newName \"x\"-  let nm2 = 'mkName' \"x\"-  return ('LamE' ['VarP' nm1] (LamE [VarP nm2] ('VarE' nm1)))- )@+-- | Lift a monadic action producing code into the typed 'Code'+-- representation+liftCode :: forall (r :: RuntimeRep) (a :: TYPE r) m . m (TExp a) -> Code m a+liftCode = Code -will produce the splice+-- | Extract the untyped representation from the typed representation+unTypeCode :: forall (r :: RuntimeRep) (a :: TYPE r) m . Quote m+           => Code m a -> m Exp+unTypeCode = unTypeQ . examineCode ->f = \x0 -> \x -> x0+-- | Modify the ambient monad used during code generation. For example, you+-- can use `hoistCode` to handle a state effect:+-- @+--  handleState :: Code (StateT Int Q) a -> Code Q a+--  handleState = hoistCode (flip runState 0)+-- @+hoistCode :: forall m n (r :: RuntimeRep) (a :: TYPE r) . Monad m+          => (forall x . m x -> n x) -> Code m a -> Code n a+hoistCode f (Code a) = Code (f a) -In particular, the occurrence @VarE nm1@ refers to the binding @VarP nm1@,-and is not captured by the binding @VarP nm2@. -Although names generated by @newName@ cannot /be captured/, they can-/capture/ other names. For example, this:+-- | Variant of (>>=) which allows effectful computations to be injected+-- into code generation.+bindCode :: forall m a (r :: RuntimeRep) (b :: TYPE r) . Monad m+         => m a -> (a -> Code m b) -> Code m b+bindCode q k = liftCode (q >>= examineCode . k) ->g = $(do->  nm1 <- newName "x"->  let nm2 = mkName "x"->  return (LamE [VarP nm2] (LamE [VarP nm1] (VarE nm2)))-> )+-- | Variant of (>>) which allows effectful computations to be injected+-- into code generation.+bindCode_ :: forall m a (r :: RuntimeRep) (b :: TYPE r) . Monad m+          => m a -> Code m b -> Code m b+bindCode_ q c = liftCode ( q >> examineCode c) -will produce the splice+-- | A useful combinator for embedding monadic actions into 'Code'+-- @+-- myCode :: ... => Code m a+-- myCode = joinCode $ do+--   x <- someSideEffect+--   return (makeCodeWith x)+-- @+joinCode :: forall m (r :: RuntimeRep) (a :: TYPE r) . Monad m+         => m (Code m a) -> Code m a+joinCode = flip bindCode id ->g = \x -> \x0 -> x0+----------------------------------------------------+-- Packaged versions for the programmer, hiding the Quasi-ness -since the occurrence @VarE nm2@ is captured by the innermost binding-of @x@, namely @VarP nm1@.--}-newName :: String -> Q Name-newName s = Q (qNewName s)  -- | Report an error (True) or warning (False), -- but carry on; use 'fail' to stop.@@ -651,16 +771,11 @@   ------------------------------------------------------- The following operations are used solely in DsMeta when desugaring brackets--- They are not necessary for the user, who can use ordinary return and (>>=) etc--returnQ :: a -> Q a-returnQ = return--bindQ :: Q a -> (a -> Q b) -> Q b-bindQ = (>>=)+-- The following operations are used solely in GHC.HsToCore.Quote when+-- desugaring brackets. They are not necessary for the user, who can use+-- ordinary return and (>>=) etc -sequenceQ :: [Q a] -> Q [a]+sequenceQ :: forall m . Monad m => forall a . [m a] -> m [a] sequenceQ = sequence  @@ -700,109 +815,109 @@ class Lift (t :: TYPE r) where   -- | Turn a value into a Template Haskell expression, suitable for use in   -- a splice.-  lift :: t -> Q Exp-  default lift :: (r ~ 'LiftedRep) => t -> Q Exp-  lift = unTypeQ . liftTyped+  lift :: Quote m => t -> m Exp+  default lift :: (r ~ 'LiftedRep, Quote m) => t -> m Exp+  lift = unTypeCode . liftTyped    -- | Turn a value into a Template Haskell typed expression, suitable for use   -- in a typed splice.   --   -- @since 2.16.0.0-  liftTyped :: t -> Q (TExp t)+  liftTyped :: Quote m => t -> Code m t   -- If you add any instances here, consider updating test th/TH_Lift instance Lift Integer where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL x))  instance Lift Int where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  -- | @since 2.16.0.0 instance Lift Int# where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntPrimL (fromIntegral (I# x))))  instance Lift Int8 where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  instance Lift Int16 where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  instance Lift Int32 where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  instance Lift Int64 where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  -- | @since 2.16.0.0 instance Lift Word# where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (WordPrimL (fromIntegral (W# x))))  instance Lift Word where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  instance Lift Word8 where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  instance Lift Word16 where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  instance Lift Word32 where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  instance Lift Word64 where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  instance Lift Natural where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (IntegerL (fromIntegral x)))  instance Integral a => Lift (Ratio a) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (RationalL (toRational x)))  instance Lift Float where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (RationalL (toRational x)))  -- | @since 2.16.0.0 instance Lift Float# where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (FloatPrimL (toRational (F# x))))  instance Lift Double where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (RationalL (toRational x)))  -- | @since 2.16.0.0 instance Lift Double# where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (DoublePrimL (toRational (D# x))))  instance Lift Char where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (CharL x))  -- | @since 2.16.0.0 instance Lift Char# where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x = return (LitE (CharPrimL (C# x)))  instance Lift Bool where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)    lift True  = return (ConE trueName)   lift False = return (ConE falseName)@@ -812,33 +927,33 @@ -- -- @since 2.16.0.0 instance Lift Addr# where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x     = return (LitE (StringPrimL (map (fromIntegral . ord) (unpackCString# x))))  instance Lift a => Lift (Maybe a) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)    lift Nothing  = return (ConE nothingName)   lift (Just x) = liftM (ConE justName `AppE`) (lift x)  instance (Lift a, Lift b) => Lift (Either a b) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)    lift (Left x)  = liftM (ConE leftName  `AppE`) (lift x)   lift (Right y) = liftM (ConE rightName `AppE`) (lift y)  instance Lift a => Lift [a] where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift xs = do { xs' <- mapM lift xs; return (ListE xs') } -liftString :: String -> Q Exp--- Used in TcExpr to short-circuit the lifting for strings+liftString :: Quote m => String -> m Exp+-- Used in GHC.Tc.Gen.Expr to short-circuit the lifting for strings liftString s = return (LitE (StringL s))  -- | @since 2.15.0.0 instance Lift a => Lift (NonEmpty a) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)    lift (x :| xs) = do     x' <- lift x@@ -847,77 +962,77 @@  -- | @since 2.15.0.0 instance Lift Void where-  liftTyped = pure . absurd+  liftTyped = liftCode . absurd   lift = pure . absurd  instance Lift () where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift () = return (ConE (tupleDataName 0))  instance (Lift a, Lift b) => Lift (a, b) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (a, b)     = liftM TupE $ sequence $ map (fmap Just) [lift a, lift b]  instance (Lift a, Lift b, Lift c) => Lift (a, b, c) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (a, b, c)     = liftM TupE $ sequence $ map (fmap Just) [lift a, lift b, lift c]  instance (Lift a, Lift b, Lift c, Lift d) => Lift (a, b, c, d) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (a, b, c, d)     = liftM TupE $ sequence $ map (fmap Just) [lift a, lift b, lift c, lift d]  instance (Lift a, Lift b, Lift c, Lift d, Lift e)       => Lift (a, b, c, d, e) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (a, b, c, d, e)     = liftM TupE $ sequence $ map (fmap Just) [ lift a, lift b                                               , lift c, lift d, lift e ]  instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f)       => Lift (a, b, c, d, e, f) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (a, b, c, d, e, f)     = liftM TupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c                                               , lift d, lift e, lift f ]  instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g)       => Lift (a, b, c, d, e, f, g) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (a, b, c, d, e, f, g)     = liftM TupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c                                               , lift d, lift e, lift f, lift g ]  -- | @since 2.16.0.0 instance Lift (# #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (# #) = return (ConE (unboxedTupleTypeName 0))  -- | @since 2.16.0.0 instance (Lift a) => Lift (# a #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (# a #)     = liftM UnboxedTupE $ sequence $ map (fmap Just) [lift a]  -- | @since 2.16.0.0 instance (Lift a, Lift b) => Lift (# a, b #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (# a, b #)     = liftM UnboxedTupE $ sequence $ map (fmap Just) [lift a, lift b]  -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c)       => Lift (# a, b, c #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (# a, b, c #)     = liftM UnboxedTupE $ sequence $ map (fmap Just) [lift a, lift b, lift c]  -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c, Lift d)       => Lift (# a, b, c, d #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (# a, b, c, d #)     = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b                                                      , lift c, lift d ]@@ -925,7 +1040,7 @@ -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c, Lift d, Lift e)       => Lift (# a, b, c, d, e #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (# a, b, c, d, e #)     = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b                                                      , lift c, lift d, lift e ]@@ -933,7 +1048,7 @@ -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f)       => Lift (# a, b, c, d, e, f #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (# a, b, c, d, e, f #)     = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c                                                      , lift d, lift e, lift f ]@@ -941,7 +1056,7 @@ -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g)       => Lift (# a, b, c, d, e, f, g #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift (# a, b, c, d, e, f, g #)     = liftM UnboxedTupE $ sequence $ map (fmap Just) [ lift a, lift b, lift c                                                      , lift d, lift e, lift f@@ -949,7 +1064,7 @@  -- | @since 2.16.0.0 instance (Lift a, Lift b) => Lift (# a | b #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x     = case x of         (# y | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 2@@ -958,7 +1073,7 @@ -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c)       => Lift (# a | b | c #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x     = case x of         (# y | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 3@@ -968,7 +1083,7 @@ -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c, Lift d)       => Lift (# a | b | c | d #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x     = case x of         (# y | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 4@@ -979,7 +1094,7 @@ -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c, Lift d, Lift e)       => Lift (# a | b | c | d | e #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x     = case x of         (# y | | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 5@@ -991,7 +1106,7 @@ -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f)       => Lift (# a | b | c | d | e | f #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x     = case x of         (# y | | | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 6@@ -1004,7 +1119,7 @@ -- | @since 2.16.0.0 instance (Lift a, Lift b, Lift c, Lift d, Lift e, Lift f, Lift g)       => Lift (# a | b | c | d | e | f | g #) where-  liftTyped x = unsafeTExpCoerce (lift x)+  liftTyped x = unsafeCodeCoerce (lift x)   lift x     = case x of         (# y | | | | | | #) -> UnboxedSumE <$> lift y <*> pure 1 <*> pure 7@@ -1039,6 +1154,9 @@ nonemptyName :: Name nonemptyName = mkNameG DataName "base" "GHC.Base" ":|" +oneName, manyName :: Name+oneName  = mkNameG DataName "ghc-prim" "GHC.Types" "One"+manyName = mkNameG DataName "ghc-prim" "GHC.Types" "Many" ----------------------------------------------------- -- --              Generic Lift implementations@@ -1053,13 +1171,13 @@ -- expressions and patterns; @antiQ@ allows you to override type-specific -- cases, a common usage is just @const Nothing@, which results in -- no overloading.-dataToQa  ::  forall a k q. Data a+dataToQa  ::  forall m a k q. (Quote m, Data a)           =>  (Name -> k)-          ->  (Lit -> Q q)-          ->  (k -> [Q q] -> Q q)-          ->  (forall b . Data b => b -> Maybe (Q q))+          ->  (Lit -> m q)+          ->  (k -> [m q] -> m q)+          ->  (forall b . Data b => b -> Maybe (m q))           ->  a-          ->  Q q+          ->  m q dataToQa mkCon mkLit appCon antiQ t =     case antiQ t of       Nothing ->@@ -1096,7 +1214,7 @@                     tyconPkg = tyConPackage tycon                     tyconMod = tyConModule  tycon -                conArgs :: [Q q]+                conArgs :: [m q]                 conArgs = gmapQ (dataToQa mkCon mkLit appCon antiQ) t             IntConstr n ->                 mkLit $ IntegerL n@@ -1138,14 +1256,14 @@   "pack" is defined in a different module than the data type "Text".   -} --- | 'dataToExpQ' converts a value to a 'Q Exp' representation of the+-- | 'dataToExpQ' converts a value to a 'Exp' representation of the -- same value, in the SYB style. It is generalized to take a function -- override type-specific cases; see 'liftData' for a more commonly -- used variant.-dataToExpQ  ::  Data a-            =>  (forall b . Data b => b -> Maybe (Q Exp))+dataToExpQ  ::  (Quote m, Data a)+            =>  (forall b . Data b => b -> Maybe (m Exp))             ->  a-            ->  Q Exp+            ->  m Exp dataToExpQ = dataToQa varOrConE litE (foldl appE)     where           -- Make sure that VarE is used if the Constr value relies on a@@ -1155,23 +1273,23 @@             case nameSpace s of                  Just VarName  -> return (VarE s)                  Just DataName -> return (ConE s)-                 _ -> fail $ "Can't construct an expression from name "-                          ++ showName s+                 _ -> error $ "Can't construct an expression from name "+                           ++ showName s           appE x y = do { a <- x; b <- y; return (AppE a b)}           litE c = return (LitE c)  -- | 'liftData' is a variant of 'lift' in the 'Lift' type class which -- works for any type with a 'Data' instance.-liftData :: Data a => a -> Q Exp+liftData :: (Quote m, Data a) => a -> m Exp liftData = dataToExpQ (const Nothing) --- | 'dataToPatQ' converts a value to a 'Q Pat' representation of the same+-- | 'dataToPatQ' converts a value to a 'Pat' representation of the same -- value, in the SYB style. It takes a function to handle type-specific cases, -- alternatively, pass @const Nothing@ to get default behavior.-dataToPatQ  ::  Data a-            =>  (forall b . Data b => b -> Maybe (Q Pat))+dataToPatQ  ::  (Quote m, Data a)+            =>  (forall b . Data b => b -> Maybe (m Pat))             ->  a-            ->  Q Pat+            ->  m Pat dataToPatQ = dataToQa id litP conP     where litP l = return (LitP l)           conP n ps =@@ -1179,8 +1297,8 @@                 Just DataName -> do                     ps' <- sequence ps                     return (ConP n ps')-                _ -> fail $ "Can't construct a pattern from name "-                         ++ showName n+                _ -> error $ "Can't construct a pattern from name "+                          ++ showName n  ----------------------------------------------------- --              Names and uniques@@ -1553,7 +1671,7 @@     withParens thing       | boxed     = "("  ++ thing ++ ")"       | otherwise = "(#" ++ thing ++ "#)"-    tup_occ | n == 1    = if boxed then "Unit" else "Unit#"+    tup_occ | n == 1    = if boxed then "Solo" else "Solo#"             | otherwise = withParens (replicate n_commas ',')     n_commas = n - 1     tup_mod  = mkModName "GHC.Tuple"@@ -1582,7 +1700,7 @@     prefix     = "unboxedSumDataName: "     debug_info = " (alt: " ++ show alt ++ ", arity: " ++ show arity ++ ")" -    -- Synced with the definition of mkSumDataConOcc in TysWiredIn+    -- Synced with the definition of mkSumDataConOcc in GHC.Builtin.Types     sum_occ = '(' : '#' : bars nbars_before ++ '_' : bars nbars_after ++ "#)"     bars i = replicate i '|'     nbars_before = alt - 1@@ -1598,7 +1716,7 @@          (NameG TcClsName (mkPkgName "ghc-prim") (mkModName "GHC.Prim"))    where-    -- Synced with the definition of mkSumTyConOcc in TysWiredIn+    -- Synced with the definition of mkSumTyConOcc in GHC.Builtin.Types     sum_occ = '(' : '#' : replicate (arity - 1) '|' ++ "#)"  -----------------------------------------------------@@ -1724,7 +1842,7 @@ -- | In 'PrimTyConI', is the type constructor unlifted? type Unlifted = Bool --- | 'InstanceDec' desribes a single instance of a class or type function.+-- | 'InstanceDec' describes a single instance of a class or type function. -- It is just a 'Dec', but guaranteed to be one of the following: -- --   * 'InstanceD' (with empty @['Dec']@)@@ -1852,9 +1970,47 @@    -- , bytesInitialized :: Bool -- ^ False: only use `bytesSize` to allocate    --                            --   an uninitialized region    }-   deriving (Eq,Ord,Data,Generic,Show)+   deriving (Data,Generic) +-- We can't derive Show instance for Bytes because we don't want to show the+-- pointer value but the actual bytes (similarly to what ByteString does). See+-- #16457.+instance Show Bytes where+   show b = unsafePerformIO $ withForeignPtr (bytesPtr b) $ \ptr ->+               peekCStringLen ( ptr `plusPtr` fromIntegral (bytesOffset b)+                              , fromIntegral (bytesSize b)+                              ) +-- We can't derive Eq and Ord instances for Bytes because we don't want to+-- compare pointer values but the actual bytes (similarly to what ByteString+-- does).  See #16457+instance Eq Bytes where+   (==) = eqBytes++instance Ord Bytes where+   compare = compareBytes++eqBytes :: Bytes -> Bytes -> Bool+eqBytes a@(Bytes fp off len) b@(Bytes fp' off' len')+  | len /= len'              = False    -- short cut on length+  | fp == fp' && off == off' = True     -- short cut for the same bytes+  | otherwise                = compareBytes a b == EQ++compareBytes :: Bytes -> Bytes -> Ordering+compareBytes (Bytes _   _    0)    (Bytes _   _    0)    = EQ  -- short cut for empty Bytes+compareBytes (Bytes fp1 off1 len1) (Bytes fp2 off2 len2) =+    unsafePerformIO $+      withForeignPtr fp1 $ \p1 ->+      withForeignPtr fp2 $ \p2 -> do+        i <- memcmp (p1 `plusPtr` fromIntegral off1)+                    (p2 `plusPtr` fromIntegral off2)+                    (fromIntegral (min len1 len2))+        return $! (i `compare` 0) <> (len1 `compare` len2)++foreign import ccall unsafe "memcmp"+  memcmp :: Ptr a -> Ptr b -> CSize -> IO CInt++ -- | Pattern in Haskell given in @{}@ data Pat   = LitP Lit                        -- ^ @{ 5 or \'c\' }@@@ -1942,8 +2098,10 @@   | MultiIfE [(Guard, Exp)]            -- ^ @{ if | g1 -> e1 | g2 -> e2 }@   | LetE [Dec] Exp                     -- ^ @{ let { x=e1; y=e2 } in e3 }@   | CaseE Exp [Match]                  -- ^ @{ case e of m1; m2 }@-  | DoE [Stmt]                         -- ^ @{ do { p <- e1; e2 }  }@-  | MDoE [Stmt]                        -- ^ @{ mdo { x <- e1 y; y <- e2 x; } }@+  | DoE (Maybe ModName) [Stmt]         -- ^ @{ do { p <- e1; e2 }  }@ or a qualified do if+                                       -- the module name is present+  | MDoE (Maybe ModName) [Stmt]        -- ^ @{ mdo { x <- e1 y; y <- e2 x; } }@ or a qualified+                                       -- mdo if the module name is present   | CompE [Stmt]                       -- ^ @{ [ (x,y) | x <- xs, y <- ys ] }@       --       -- The result expression of the comprehension is@@ -2002,19 +2160,19 @@ data Dec   = FunD Name [Clause]            -- ^ @{ f p1 p2 = b where decs }@   | ValD Pat Body [Dec]           -- ^ @{ p = b where decs }@-  | DataD Cxt Name [TyVarBndr]+  | DataD Cxt Name [TyVarBndr ()]           (Maybe Kind)            -- Kind signature (allowed only for GADTs)           [Con] [DerivClause]                                   -- ^ @{ data Cxt x => T x = A x | B (T x)                                   --       deriving (Z,W)                                   --       deriving stock Eq }@-  | NewtypeD Cxt Name [TyVarBndr]+  | NewtypeD Cxt Name [TyVarBndr ()]              (Maybe Kind)         -- Kind signature              Con [DerivClause]    -- ^ @{ newtype Cxt x => T x = A (B x)                                   --       deriving (Z,W Q)                                   --       deriving stock Eq }@-  | TySynD Name [TyVarBndr] Type  -- ^ @{ type T x = (x,x) }@-  | ClassD Cxt Name [TyVarBndr]+  | TySynD Name [TyVarBndr ()] Type -- ^ @{ type T x = (x,x) }@+  | ClassD Cxt Name [TyVarBndr ()]          [FunDep] [Dec]           -- ^ @{ class Eq a => Ord a where ds }@   | InstanceD (Maybe Overlap) Cxt Type [Dec]                                   -- ^ @{ instance {\-\# OVERLAPS \#-\}@@ -2030,18 +2188,18 @@   | PragmaD Pragma                -- ^ @{ {\-\# INLINE [1] foo \#-\} }@    -- | data families (may also appear in [Dec] of 'ClassD' and 'InstanceD')-  | DataFamilyD Name [TyVarBndr]+  | DataFamilyD Name [TyVarBndr ()]                (Maybe Kind)          -- ^ @{ data family T a b c :: * }@ -  | DataInstD Cxt (Maybe [TyVarBndr]) Type+  | DataInstD Cxt (Maybe [TyVarBndr ()]) Type              (Maybe Kind)         -- Kind signature              [Con] [DerivClause]  -- ^ @{ data instance Cxt x => T [x]                                   --       = A x | B (T x)                                   --       deriving (Z,W)                                   --       deriving stock Eq }@ -  | NewtypeInstD Cxt (Maybe [TyVarBndr]) Type -- Quantified type vars+  | NewtypeInstD Cxt (Maybe [TyVarBndr ()]) Type -- Quantified type vars                  (Maybe Kind)      -- Kind signature                  Con [DerivClause] -- ^ @{ newtype instance Cxt x => T [x]                                    --        = A (B x)@@ -2154,7 +2312,7 @@ -- @TypeFamilyHead@ is defined to be the elements of the declaration -- between @type family@ and @where@. data TypeFamilyHead =-  TypeFamilyHead Name [TyVarBndr] FamilyResultSig (Maybe InjectivityAnn)+  TypeFamilyHead Name [TyVarBndr ()] FamilyResultSig (Maybe InjectivityAnn)   deriving( Show, Eq, Ord, Data, Generic )  -- | One equation of a type family instance or closed type family. The@@ -2174,7 +2332,7 @@ --            ('AppT' ('AppKindT' ('ConT' ''Foo) ('VarT' k)) ('VarT' a)) --            ('VarT' a) -- @-data TySynEqn = TySynEqn (Maybe [TyVarBndr]) Type Type+data TySynEqn = TySynEqn (Maybe [TyVarBndr ()]) Type Type   deriving( Show, Eq, Ord, Data, Generic )  data FunDep = FunDep [Name] [Name]@@ -2184,7 +2342,7 @@              | ExportF Callconv        String Name Type          deriving( Show, Eq, Ord, Data, Generic ) --- keep Callconv in sync with module ForeignCall in ghc/compiler/prelude/ForeignCall.hs+-- keep Callconv in sync with module ForeignCall in ghc/compiler/GHC/Types/ForeignCall.hs data Callconv = CCall | StdCall | CApi | Prim | JavaScript           deriving( Show, Eq, Ord, Data, Generic ) @@ -2194,7 +2352,7 @@ data Pragma = InlineP         Name Inline RuleMatch Phases             | SpecialiseP     Name Type (Maybe Inline) Phases             | SpecialiseInstP Type-            | RuleP           String (Maybe [TyVarBndr]) [RuleBndr] Exp Exp Phases+            | RuleP           String (Maybe [TyVarBndr ()]) [RuleBndr] Exp Exp Phases             | AnnP            AnnTarget Exp             | LineP           Int String             | CompleteP       [Name] (Maybe Name)@@ -2283,7 +2441,7 @@ data Con = NormalC Name [BangType]       -- ^ @C Int a@          | RecC Name [VarBangType]       -- ^ @C { v :: Int, w :: a }@          | InfixC BangType Name BangType -- ^ @Int :+ a@-         | ForallC [TyVarBndr] Cxt Con   -- ^ @forall a. Eq a => C [a]@+         | ForallC [TyVarBndr Specificity] Cxt Con -- ^ @forall a. Eq a => C [a]@          | GadtC [Name] [BangType]                  Type                    -- See Note [GADT return type]                                          -- ^ @C :: a -> b -> T b Int@@@ -2352,8 +2510,8 @@   | RecordPatSyn [Name]        -- ^ @pattern P { {x,y,z} } = p@   deriving( Show, Eq, Ord, Data, Generic ) -data Type = ForallT [TyVarBndr] Cxt Type  -- ^ @forall \<vars\>. \<ctxt\> => \<type\>@-          | ForallVisT [TyVarBndr] Type   -- ^ @forall \<vars\> -> \<type\>@+data Type = ForallT [TyVarBndr Specificity] Cxt Type -- ^ @forall \<vars\>. \<ctxt\> => \<type\>@+          | ForallVisT [TyVarBndr ()] Type  -- ^ @forall \<vars\> -> \<type\>@           | AppT Type Type                -- ^ @T a b@           | AppKindT Type Kind            -- ^ @T \@k t@           | SigT Type Kind                -- ^ @t :: k@@@ -2371,6 +2529,7 @@           | UnboxedTupleT Int             -- ^ @(\#,\#), (\#,,\#), etc.@           | UnboxedSumT SumArity          -- ^ @(\#|\#), (\#||\#), etc.@           | ArrowT                        -- ^ @->@+          | MulArrowT                     -- ^ @FUN@           | EqualityT                     -- ^ @~@           | ListT                         -- ^ @[]@           | PromotedTupleT Int            -- ^ @'(), '(,), '(,,), etc.@@@ -2383,14 +2542,18 @@           | ImplicitParamT String Type    -- ^ @?x :: t@       deriving( Show, Eq, Ord, Data, Generic ) -data TyVarBndr = PlainTV  Name            -- ^ @a@-               | KindedTV Name Kind       -- ^ @(a :: k)@+data Specificity = SpecifiedSpec          -- ^ @a@+                 | InferredSpec           -- ^ @{a}@       deriving( Show, Eq, Ord, Data, Generic ) +data TyVarBndr flag = PlainTV  Name flag      -- ^ @a@+                    | KindedTV Name flag Kind -- ^ @(a :: k)@+      deriving( Show, Eq, Ord, Data, Generic, Functor )+ -- | Type family result signature data FamilyResultSig = NoSig              -- ^ no signature                      | KindSig  Kind      -- ^ @k@-                     | TyVarSig TyVarBndr -- ^ @= r, = (r :: k)@+                     | TyVarSig (TyVarBndr ()) -- ^ @= r, = (r :: k)@       deriving( Show, Eq, Ord, Data, Generic )  -- | Injectivity annotation
changelog.md view
@@ -1,5 +1,39 @@ # Changelog for [`template-haskell` package](http://hackage.haskell.org/package/template-haskell) +## 2.17.0.0+  * Typed Quotations now return a value of type `Code m a` (GHC Proposal #195).+    The main motiviation is to make writing instances easier and make it easier to+    store `Code` values in type-indexed maps.++  * Implement Overloaded Quotations (GHC Proposal #246). This patch modifies a+    few fundamental things in the API. All the library combinators are generalised+    to be in terms of a new minimal class `Quote`. The types of `lift`, `liftTyped`,+    and `liftData` are modified to return `m Exp` rather than `Q Exp`. Instances+    written in terms of `Q` are now disallowed. The types of `unsafeTExpCoerce`+    and `unTypeQ` are also generalised in terms of `Quote` rather than specific+    to `Q`.++  * Implement Explicit specificity in type variable binders (GHC Proposal #99).+    In `Language.Haskell.TH.Syntax`, `TyVarBndr` is now annotated with a `flag`,+    denoting the additional argument to its constructors `PlainTV` and `KindedTV`.+    `flag` is either the `Specificity` of the type variable (`SpecifiedSpec` or+    `InferredSpec`) or `()`.++  * Fix Eq/Ord instances for `Bytes`: we were comparing pointers while we should+    compare the actual bytes (#16457).++  * Fix Show instance for `Bytes`: we were showing the pointer value while we+    want to show the contents (#16457).++  * Add `Semigroup` and `Monoid` instances for `Q` (#18123).++  * Add `MonadFix` instance for `Q` (#12073).++  * Add support for QualifiedDo. The data constructors `DoE` and `MDoE` got a new+    `Maybe ModName` argument to describe the qualifier of do blocks.++  * The argument to `TExpQ` can now be levity polymorphic.+ ## 2.16.0.0 *Jan 2020*    * Bundled with GHC 8.10.1
template-haskell.cabal view
@@ -1,7 +1,9 @@-cabal-version:  >=1.10-name:           template-haskell-version:        2.16.0.0+-- WARNING: template-haskell.cabal is automatically generated from template-haskell.cabal.in by+-- ../../configure.  Make sure you are editing template-haskell.cabal.in, not+-- template-haskell.cabal. +name:           template-haskell+version:        2.17.0.0 -- NOTE: Don't forget to update ./changelog.md license:        BSD3 license-file:   LICENSE@@ -10,6 +12,7 @@ bug-reports:    https://gitlab.haskell.org/ghc/ghc/issues/new synopsis:       Support library for Template Haskell build-type:     Simple+Cabal-Version:  >= 1.10 description:     This package provides modules containing facilities for manipulating     Haskell source code using Template Haskell.@@ -45,15 +48,15 @@         Language.Haskell.TH.Quote         Language.Haskell.TH.Syntax         Language.Haskell.TH.LanguageExtensions-+        Language.Haskell.TH.CodeDo         Language.Haskell.TH.Lib.Internal      other-modules:         Language.Haskell.TH.Lib.Map      build-depends:-        base        >= 4.11 && < 4.15,-        ghc-boot-th == 8.10.1,+        base        >= 4.11 && < 4.16,+        ghc-boot-th == 9.0.1,         ghc-prim,         pretty      == 1.1.*