[Git][ghc/ghc][wip/spj-reinstallable-base2] More
Simon Peyton Jones pushed to branch wip/spj-reinstallable-base2 at Glasgow Haskell Compiler / GHC Commits: 145885ae by Simon Peyton Jones at 2026-04-19T00:49:30+01:00 More - - - - - 10 changed files: - compiler/GHC/Builtin/KnownKeys.hs - compiler/GHC/Builtin/KnownOccs.hs - compiler/GHC/Builtin/TH.hs - compiler/GHC/HsToCore/Pmc/Solver/Types.hs - compiler/GHC/HsToCore/Quote.hs - compiler/GHC/Tc/Gen/Arrow.hs - compiler/GHC/Tc/Gen/Splice.hs - compiler/GHC/Tc/Utils/Instantiate.hs - libraries/base/src/GHC/KnownKeyNames.hs - libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs Changes: ===================================== compiler/GHC/Builtin/KnownKeys.hs ===================================== @@ -112,6 +112,7 @@ import GHC.Prelude import GHC.Builtin.Modules import GHC.Builtin.Uniques +import GHC.Builtin.TH( thKnownKeyTable ) import GHC.Unit.Types @@ -169,24 +170,25 @@ wired in ones are defined in GHC.Builtin.Types etc. knownKeyTable :: [(OccName, KnownKey)] knownKeyTable - = [ (mkTcOcc "Read", readClassKey) + = thKnownKeyTable ++ + [ (mkTcOcc "IO", ioTyConKey) + + -- Classes + , (mkTcOcc "Eq", eqClassKey) + , (mkTcOcc "Ord", ordClassKey) + , (mkTcOcc "Enum", enumClassKey) + , (mkTcOcc "Bounded", boundedClassKey) + , (mkTcOcc "Read", readClassKey) , (mkTcOcc "Show", showClassKey) , (mkTcOcc "Foldable", foldableClassKey) , (mkTcOcc "Traversable", traversableClassKey) - , (mkTcOcc "Bounded", boundedClassKey) , (mkTcOcc "Data", dataClassKey) , (mkTcOcc "Ix", ixClassKey) , (mkTcOcc "Alternative", alternativeClassKey) , (mkTcOcc "Typeable", typeableClassKey) + , (mkTcOcc "Functor", functorClassKey) - -- Class Eq and Ord - , (mkTcOcc "Eq", eqClassKey) - , (mkTcOcc "Ord", ordClassKey) - - -- Enum - , (mkTcOcc "Enum", enumClassKey) - - -- Numeric operations + -- Numeric classes , (mkTcOcc "Num", numClassKey) , (mkTcOcc "Integral", integralClassKey) , (mkTcOcc "Real", realClassKey) @@ -201,9 +203,6 @@ knownKeyTable , (mkVarOcc "toRational", toRationalClassOpKey) , (mkVarOcc "realToFrac", realToFracIdKey) - -- Class Functor - , (mkTcOcc "Functor", functorClassKey) - -- Class Monad, MonadFix, MonadZip , (mkTcOcc "Monad", monadClassKey) , (thenMClassOpOcc, thenMClassOpKey) @@ -220,15 +219,12 @@ knownKeyTable , (mkTcOcc "Monoid", monoidClassKey) , (sappendClassOpOcc, sappendClassOpKey) , (mappendClassOpOcc, mappendClassOpKey) - , (mkVarOcc "mempty", memptyClassOpKey) -- Class IsString , (mkTcOcc "IsString", isStringClassKey) - , (mkVarOcc "fromString", fromStringClassOpKey) -- DataToTag , (mkTcOcc "DataToTag", dataToTagClassKey) - , (mkVarOcc "dataToTag#", dataToTagClassOpKey) -- Lists , (mkVarOcc "build", buildIdKey) @@ -1427,10 +1423,6 @@ failMClassOpKey = mkPreludeMiscIdUnique 159 fromLabelClassOpKey :: KnownKey fromLabelClassOpKey = mkPreludeMiscIdUnique 160 --- DataToTag -dataToTagClassOpKey :: KnownKey -dataToTagClassOpKey = mkPreludeMiscIdUnique 161 - -- Arrow notation arrAIdKey, composeAIdKey, firstAIdKey, appAIdKey, choiceAIdKey, loopAIdKey :: KnownKey ===================================== compiler/GHC/Builtin/KnownOccs.hs ===================================== @@ -543,8 +543,8 @@ fmap_RDR, replace_RDR, pure_RDR, ap_RDR, liftA2_RDR, foldable_foldr_RDR, fmap_RDR = knownOccRdrName fmapClassOpOcc pure_RDR = knownKeyRdrName pureAClassOpKey ap_RDR = knownOccRdrName apAClassOpOcc -mempty_RDR = knownKeyRdrName memptyClassOpKey mappend_RDR = knownKeyRdrName mappendClassOpKey +mempty_RDR = knownVarOccRdrName "mempty" replace_RDR = knownVarOccRdrName "<$" liftA2_RDR = knownVarOccRdrName "liftA2" foldable_foldr_RDR = knownVarOccRdrName "foldr" @@ -572,7 +572,7 @@ null_Expr = nlHsVar null_RDR minusInt_RDR, tagToEnum_RDR, dataToTag_RDR :: RdrName minusInt_RDR = primOpRdrName IntSubOp tagToEnum_RDR = primOpRdrName TagToEnumOp -dataToTag_RDR = knownKeyRdrName dataToTagClassOpKey +dataToTag_RDR = knownVarOccRdrName "dataToTag#" -- Generics (constructors and functions) u1DataCon_RDR, par1DataCon_RDR, rec1DataCon_RDR, ===================================== compiler/GHC/Builtin/TH.hs ===================================== @@ -9,7 +9,7 @@ module GHC.Builtin.TH where import GHC.Prelude () import GHC.Unit.Types -import GHC.Types.Name( Name, KnownOcc, mk_known_key_name ) +import GHC.Types.Name( Name, KnownOcc, KnownKey, mk_known_key_name ) import GHC.Types.Name.Occurrence import GHC.Types.Unique ( Unique ) import GHC.Builtin.Uniques @@ -17,6 +17,11 @@ import GHC.Data.FastString import Language.Haskell.Syntax.Module.Name +thKnownKeyTable :: [(OccName, KnownKey)] +thKnownKeyTable + = [ (liftClassOcc, liftClassKey) + ] + thKnownOccs :: [KnownOcc] thKnownOccs = [ qTyConOcc, nameTyConOcc, fieldExpTyConOcc, patTyConOcc @@ -31,7 +36,7 @@ thKnownOccs , litPOcc, varPOcc, tupPOcc, unboxedTupPOcc, unboxedSumPOcc, conPOcc , infixPOcc, tildePOcc, bangPOcc, asPOcc, wildPOcc, recPOcc, listPOcc , sigPOcc, viewPOcc, typePOcc, invisPOcc, orPOcc - , matchOcc, clauseOcc + , matchOcc, fieldPatOcc, clauseOcc , varEOcc, conEOcc, litEOcc, appEOcc, appTypeEOcc, infixEOcc, infixAppOcc , sectionLOcc, sectionROcc, lamEOcc, lamCaseEOcc, lamCasesEOcc, tupEOcc , unboxedTupEOcc, unboxedSumEOcc, condEOcc, multiIfEOcc, letEOcc @@ -54,6 +59,9 @@ thKnownOccs , tySynEqnTyConOcc, roleTyConOcc, derivClauseTyConOcc, kindTyConOcc , tyVarBndrUnitTyConOcc, tyVarBndrSpecTyConOcc, tyVarBndrVisTyConOcc , derivStrategyTyConOcc + , guardedBOcc, normalBOcc + , normalGEOcc, patGEOcc + , bindSOcc, letSOcc, noBindSOcc, parSOcc, recSOcc ] templateHaskellNames :: [Name] @@ -61,20 +69,13 @@ templateHaskellNames :: [Name] -- Should stay in sync with the import list of GHC.HsToCore.Quote templateHaskellNames = [ - sequenceQName, newNameName, + newNameName, mkNameName, mkNameG_vName, mkNameG_dName, mkNameG_tcName, mkNameG_fldName, mkNameLName, mkNameSName, mkNameQName, mkModNameName, unTypeName, unTypeCodeName, - -- FieldPat - fieldPatName, - -- Body - guardedBName, normalBName, - -- Guard - normalGEName, patGEName, - -- Stmt - bindSName, letSName, noBindSName, parSName, recSName, + -- Cxt cxtName, @@ -150,9 +151,6 @@ templateHaskellNames = [ -- DerivClause derivClauseName, - -- The type classes - liftClassName, quoteClassName, - -- Quasiquoting quoteDecName, quoteTypeName, quoteExpName, quotePatName] @@ -185,11 +183,9 @@ qqFld :: FastString -> Unique -> Name qqFld = mk_known_key_name (fieldName (fsLit "QuasiQuoter")) qqLib -------------------- TH.Syntax ----------------------- -liftClassName :: Name -liftClassName = mk_known_key_name clsName liftLib (fsLit "Lift") liftClassKey - -quoteClassName :: Name -quoteClassName = thMonadCls (fsLit "Quote") quoteClassKey +liftClassOcc, quoteClassOcc :: KnownOcc +liftClassOcc = mkTcOcc "Lift" +quoteClassOcc = mkTcOcc "Quote" qTyConOcc, nameTyConOcc, fieldExpTyConOcc, patTyConOcc, fieldPatTyConOcc, expTyConOcc, decTyConOcc, typeTyConOcc, @@ -215,11 +211,13 @@ overlapTyConOcc = mkTcOcc "Overlap" modNameTyConOcc = mkTcOcc "ModName" quasiQuoterTyConOcc = mkTcOcc "QuasiQuoter" -sequenceQName, newNameName, +sequenceQOcc :: KnownOcc +sequenceQOcc = mkVarOcc "sequenceQ" + +newNameName, mkNameName, mkNameG_vName, mkNameG_fldName, mkNameG_dName, mkNameG_tcName, mkNameLName, mkNameSName, unTypeName, unTypeCodeName, mkModNameName, mkNameQName :: Name -sequenceQName = thMonadFun (fsLit "sequenceQ") sequenceQIdKey newNameName = thMonadFun (fsLit "newName") newNameIdKey mkNameName = thFun (fsLit "mkName") mkNameIdKey mkNameG_vName = thFun (fsLit "mkNameG_v") mkNameG_vIdKey @@ -277,16 +275,10 @@ typePOcc = mkVarOcc "typeP" invisPOcc = mkVarOcc "invisP" -- type FieldPat = ... -fieldPatName :: Name -fieldPatName = libFun (fsLit "fieldPat") fieldPatIdKey - --- data Match = ... -matchOcc :: KnownOcc -matchOcc = mkVarOcc "match" - --- data Clause = ... -clauseOcc :: KnownOcc -clauseOcc = mkVarOcc "clause" +fieldPatOcc, matchOcc, clauseOcc ::KnownOcc +fieldPatOcc = mkVarOcc "fieldPat" +matchOcc = mkVarOcc "match" +clauseOcc = mkVarOcc "clause" -- data Exp = ... varEOcc, conEOcc, litEOcc, appEOcc, appTypeEOcc, infixEOcc, infixAppOcc, @@ -345,22 +337,22 @@ fieldExpOcc :: KnownOcc fieldExpOcc = mkVarOcc "fieldExp" -- data Body = ... -guardedBName, normalBName :: Name -guardedBName = libFun (fsLit "guardedB") guardedBIdKey -normalBName = libFun (fsLit "normalB") normalBIdKey +guardedBOcc, normalBOcc :: KnownOcc +guardedBOcc = mkVarOcc "guardedB" +normalBOcc = mkVarOcc "normalB" -- data Guard = ... -normalGEName, patGEName :: Name -normalGEName = libFun (fsLit "normalGE") normalGEIdKey -patGEName = libFun (fsLit "patGE") patGEIdKey +normalGEOcc, patGEOcc :: KnownOcc +normalGEOcc = mkVarOcc "normalGE" +patGEOcc = mkVarOcc "patGE" -- data Stmt = ... -bindSName, letSName, noBindSName, parSName, recSName :: Name -bindSName = libFun (fsLit "bindS") bindSIdKey -letSName = libFun (fsLit "letS") letSIdKey -noBindSName = libFun (fsLit "noBindS") noBindSIdKey -parSName = libFun (fsLit "parS") parSIdKey -recSName = libFun (fsLit "recS") recSIdKey +bindSOcc, letSOcc, noBindSOcc, parSOcc, recSOcc :: KnownOcc +bindSOcc = mkVarOcc "bindS" +letSOcc = mkVarOcc "letS" +noBindSOcc = mkVarOcc "noBindS" +parSOcc = mkVarOcc "parS" +recSOcc = mkVarOcc "recS" -- data Dec = ... funDOcc, valDOcc, dataDOcc, newtypeDOcc, typeDataDOcc, tySynDOcc, classDOcc, @@ -911,28 +903,11 @@ forallEIdKey = mkPreludeMiscIdUnique 802 forallVisEIdKey = mkPreludeMiscIdUnique 803 constrainedEIdKey = mkPreludeMiscIdUnique 804 --- type FieldExp = ... -fieldExpIdKey :: Unique -fieldExpIdKey = mkPreludeMiscIdUnique 307 - --- data Body = ... -guardedBIdKey, normalBIdKey :: Unique -guardedBIdKey = mkPreludeMiscIdUnique 308 -normalBIdKey = mkPreludeMiscIdUnique 309 - -- data Guard = ... normalGEIdKey, patGEIdKey :: Unique normalGEIdKey = mkPreludeMiscIdUnique 310 patGEIdKey = mkPreludeMiscIdUnique 311 --- data Stmt = ... -bindSIdKey, letSIdKey, noBindSIdKey, parSIdKey, recSIdKey :: Unique -bindSIdKey = mkPreludeMiscIdUnique 312 -letSIdKey = mkPreludeMiscIdUnique 313 -noBindSIdKey = mkPreludeMiscIdUnique 314 -parSIdKey = mkPreludeMiscIdUnique 315 -recSIdKey = mkPreludeMiscIdUnique 316 - -- data Dec = ... funDIdKey, valDIdKey, dataDIdKey, newtypeDIdKey, tySynDIdKey, classDIdKey, instanceWithOverlapDIdKey, instanceDIdKey, sigDIdKey, forImpDIdKey, ===================================== compiler/GHC/HsToCore/Pmc/Solver/Types.hs ===================================== @@ -795,7 +795,6 @@ coreExprAsPmLit e = case collectArgs e of | otherwise = Nothing - -- See Note [Detecting overloaded literals with -XRebindableSyntax] is_rebound_name :: Id -> KnownOcc -> Bool is_rebound_name x ko = getOccFS (idName x) == occNameFS ko ===================================== compiler/GHC/HsToCore/Quote.hs ===================================== @@ -114,7 +114,7 @@ mkMetaWrappers q@(QuoteWrapper quote_var_raw m_var) = do let quote_var = Var quote_var_raw -- Get the superclass selector to select the Monad dictionary, going -- to be used to construct the monadWrapper. - quote_tc <- dsLookupTyCon quoteClassName + quote_tc <- dsLookupKnownOccTyCon quoteClassOcc monad_tc <- dsLookupKnownKeyTyCon monadClassKey let cls = expectJust $ tyConClass_maybe quote_tc monad_cls = expectJust $ tyConClass_maybe monad_tc @@ -2221,7 +2221,7 @@ repP (ConPat NoExtField dc details) rep_fld :: LHsRecField GhcRn (LPat GhcRn) -> MetaM (Core (M (TH.Name, TH.Pat))) rep_fld (L _ fld) = do { MkC v <- lookupOcc (hsRecFieldSel fld) ; MkC p <- repLP (hfbRHS fld) - ; rep2 fieldPatName [v,p] } + ; krep2 fieldPatOcc [v,p] } repP (NPat _ (L _ l) Nothing _) = do { a <- repOverloadedLiteral l ; repPlit a } repP (ViewPat _ e p) = do { e' <- repLE e; p' <- repLP p; repPview e' p' } @@ -2424,12 +2424,12 @@ type family NotM a where NotM (M _) = TypeError ('Text ("rep2_nw must not produce something of overloaded type")) NotM _other = (() :: Constraint) -rep2M :: Name -> [CoreExpr] -> MetaM (Core (M a)) +-- rep2M :: Name -> [CoreExpr] -> MetaM (Core (M a)) rep2 :: Name -> [CoreExpr] -> MetaM (Core (M a)) rep2_nw :: NotM a => Name -> [CoreExpr] -> MetaM (Core a) rep2_nwDsM :: NotM a => Name -> [CoreExpr] -> DsM (Core a) rep2 = rep2X lift (asks quoteWrapper) -rep2M = rep2X lift (asks monadWrapper) +-- rep2M = rep2X lift (asks monadWrapper) rep2_nw n xs = lift (rep2_nwDsM n xs) rep2_nwDsM = rep2X id (return id) @@ -2444,12 +2444,12 @@ rep2X lift_dsm get_wrap n xs = do ; return (MkC $ (foldl' App (wrap (Var rep_id)) xs)) } --- krep2M :: KnownOcc -> [CoreExpr] -> MetaM (Core (M a)) +krep2M :: KnownOcc -> [CoreExpr] -> MetaM (Core (M a)) krep2 :: KnownOcc -> [CoreExpr] -> MetaM (Core (M a)) krep2_nw :: NotM a => KnownOcc -> [CoreExpr] -> MetaM (Core a) krep2_nwDsM :: NotM a => KnownOcc -> [CoreExpr] -> DsM (Core a) krep2 = krep2X lift (asks quoteWrapper) --- krep2M = krep2X lift (asks monadWrapper) +krep2M = krep2X lift (asks monadWrapper) krep2_nw n xs = lift (krep2_nwDsM n xs) krep2_nwDsM = krep2X id (return id) @@ -2650,10 +2650,10 @@ repImplicitParamVar (MkC x) = krep2 implicitParamVarEOcc [x] ------------ Right hand sides (guarded expressions) ---- repGuarded :: Core [M (TH.Guard, TH.Exp)] -> MetaM (Core (M TH.Body)) -repGuarded (MkC pairs) = rep2 guardedBName [pairs] +repGuarded (MkC pairs) = krep2 guardedBOcc [pairs] repNormal :: Core (M TH.Exp) -> MetaM (Core (M TH.Body)) -repNormal (MkC e) = rep2 normalBName [e] +repNormal (MkC e) = krep2 normalBOcc [e] ------------ Guards ---- repLNormalGE :: LHsExpr GhcRn -> LHsExpr GhcRn @@ -2663,26 +2663,26 @@ repLNormalGE g e = do g' <- repLE g repNormalGE g' e' repNormalGE :: Core (M TH.Exp) -> Core (M TH.Exp) -> MetaM (Core (M (TH.Guard, TH.Exp))) -repNormalGE (MkC g) (MkC e) = rep2 normalGEName [g, e] +repNormalGE (MkC g) (MkC e) = krep2 normalGEOcc [g, e] repPatGE :: Core [(M TH.Stmt)] -> Core (M TH.Exp) -> MetaM (Core (M (TH.Guard, TH.Exp))) -repPatGE (MkC ss) (MkC e) = rep2 patGEName [ss, e] +repPatGE (MkC ss) (MkC e) = krep2 patGEOcc [ss, e] ------------- Stmts ------------------- repBindSt :: Core (M TH.Pat) -> Core (M TH.Exp) -> MetaM (Core (M TH.Stmt)) -repBindSt (MkC p) (MkC e) = rep2 bindSName [p,e] +repBindSt (MkC p) (MkC e) = krep2 bindSOcc [p,e] repLetSt :: Core [(M TH.Dec)] -> MetaM (Core (M TH.Stmt)) -repLetSt (MkC ds) = rep2 letSName [ds] +repLetSt (MkC ds) = krep2 letSOcc [ds] repNoBindSt :: Core (M TH.Exp) -> MetaM (Core (M TH.Stmt)) -repNoBindSt (MkC e) = rep2 noBindSName [e] +repNoBindSt (MkC e) = krep2 noBindSOcc [e] repParSt :: Core [[(M TH.Stmt)]] -> MetaM (Core (M TH.Stmt)) -repParSt (MkC sss) = rep2 parSName [sss] +repParSt (MkC sss) = krep2 parSOcc [sss] repRecSt :: Core [(M TH.Stmt)] -> MetaM (Core (M TH.Stmt)) -repRecSt (MkC ss) = rep2 recSName [ss] +repRecSt (MkC ss) = krep2 recSOcc [ss] -------------- Range (Arithmetic sequences) ----------- repFrom :: Core (M TH.Exp) -> MetaM (Core (M TH.Exp)) @@ -3210,11 +3210,11 @@ repGensym (MkC lit_str) = rep2 newNameName [lit_str] repBindM :: Type -> Type -- a and b -> Core (M a) -> Core (a -> M b) -> MetaM (Core (M b)) repBindM ty_a ty_b (MkC x) (MkC y) - = rep2M bindMName [Type ty_a, Type ty_b, x, y] + = krep2M bindMClassOpOcc [Type ty_a, Type ty_b, x, y] repSequenceM :: Type -> Core [M a] -> MetaM (Core (M [a])) repSequenceM ty_a (MkC list) - = rep2M sequenceQName [Type ty_a, list] + = krep2M sequenceQOcc [Type ty_a, list] repUnboundVar :: Core TH.Name -> MetaM (Core (M TH.Exp)) repUnboundVar (MkC name) = krep2 unboundVarEOcc [name] ===================================== compiler/GHC/Tc/Gen/Arrow.hs ===================================== @@ -432,8 +432,7 @@ tcCmdSyntaxTable loc orig ty (CST tbl) ; return (CST tbl') } where do_one (std_occ, user_nm_expr) - = -- Use the user_nm_expr in place of the standard operation - do { std_id <- tcLookupKnownOccId std_occ + = do { std_id <- tcLookupKnownOccId std_occ ; if | HsVar _ (L _ (WithUserRdr _ user_nm)) <- user_nm_expr , idName std_id == user_nm -> -- Use the standard operation @@ -476,8 +475,8 @@ arity_map :: OccEnv Arity -- Domain is only the arrow operations arity_map = mkOccEnv [ (arrAIdOcc, 3) -- result used as an argument in, e.g., do_premap - , (composeAIdOcc, 3) -- result used as an argument in, e.g., dsCmdStmt/BodyStmt - , (firstAIdOcc, 5) -- result used as an argument in, e.g., dsCmdStmt/BodyStmt + , (composeAIdOcc, 5) -- result used as an argument in, e.g., dsCmdStmt/BodyStmt + , (firstAIdOcc, 4) -- result used as an argument in, e.g., dsCmdStmt/BodyStmt , (appAIdOcc, 2) -- result used as an argument in, e.g., dsCmd/HsCmdArrApp/HsHigherOrderApp , (choiceAIdOcc, 5) -- result used as an argument in, e.g., HsCmdIf , (loopAIdOcc, 4) -- result used as an argument in, e.g., HsCmdIf ===================================== compiler/GHC/Tc/Gen/Splice.hs ===================================== @@ -762,7 +762,7 @@ mkMetaTyVar = -- | For a type 'm', emit the constraint 'Quote m'. emitQuoteWanted :: Type -> TcM EvVar emitQuoteWanted m_var = do - quote_con <- tcLookupTyCon quoteClassName + quote_con <- tcLookupKnownOccTyCon quoteClassOcc emitWantedEvVar BracketOrigin $ mkTyConApp quote_con [m_var] ===================================== compiler/GHC/Tc/Utils/Instantiate.hs ===================================== @@ -99,7 +99,8 @@ import Data.Function ( on ) -} newKnownOccMethod - :: CtOrigin -- ^ why do we need this? + :: HasDebugCallStack + => CtOrigin -- ^ why do we need this? -> KnownOcc -- ^ name of the method -> [TcRhoType] -- ^ types with which to instantiate the class -> TcM (HsExpr GhcTc) @@ -115,12 +116,12 @@ newKnownOccMethod origin occ ty_args ; finish_nkko origin id ty_args } newKnownKeyMethod -- Same as newKnownOccMethod, but with a KnownKey - :: CtOrigin -> KnownKey -> [TcRhoType]-> TcM (HsExpr GhcTc) + :: HasDebugCallStack => CtOrigin -> KnownKey -> [TcRhoType]-> TcM (HsExpr GhcTc) newKnownKeyMethod origin key ty_args = do { id <- tcLookupKnownKeyId key ; finish_nkko origin id ty_args } -finish_nkko :: CtOrigin -> Id -> [TcRhoType] -> TcM (HsExpr GhcTc) +finish_nkko :: HasDebugCallStack => CtOrigin -> Id -> [TcRhoType] -> TcM (HsExpr GhcTc) finish_nkko origin id ty_args = do { let ty = piResultTys (idType id) ty_args (theta, _caller_knows_this) = tcSplitPhiTy ty ===================================== libraries/base/src/GHC/KnownKeyNames.hs ===================================== @@ -169,10 +169,11 @@ module GHC.KnownKeyNames , integerComplement, integerBit#, integerTestBit#, integerShiftL#, integerShiftR# -- Template Haskell + , Lift, Quote -- The Lift and Quote classeso , Q, DecsQ, ExpQ, TypeQ, PatQ , Name, Decs, TH.Type, FunDep , Pred, Code, InjectivityAnn, Overlap, ModName, QuasiQuoter - , Stmt, Con, BangType, VarBangType, RuleBndr, TySynEqn, Role, DerivClause + , Con, BangType, VarBangType, RuleBndr, TySynEqn, Role, DerivClause , Kind, TyVarBndrUnit, TyVarBndrSpec, TyVarBndrVis, DerivStrategy , sequenceQ, newName, mkName, mkNameG_v, mkNameG_d, mkNameG_tc, mkNameG_fld, mkNameL , mkNameQ, mkNameS, mkModName, unType, unTypeCode, unsafeCodeCoerce @@ -201,6 +202,7 @@ module GHC.KnownKeyNames , FieldPat, fieldPat , Match, match , Clause, clause + , Stmt, bindS, letS, noBindS, parS, recS ) where import GHC.Internal.Base hiding( foldr ) ===================================== libraries/ghc-internal/src/GHC/Internal/TH/Lift.hs ===================================== @@ -17,6 +17,9 @@ {-# LANGUAGE FlexibleInstances #-} {-# OPTIONS_GHC -fno-warn-inline-rule-shadowing #-} +{-# OPTIONS_GHC -fdefines-known-key-names #-} + -- Defines Lift + -- | This module gives the definition of the 'Lift' class. -- -- This is an internal module. View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/145885ae3709a244636c38b703073441... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/145885ae3709a244636c38b703073441... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Simon Peyton Jones (@simonpj)