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
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:
| ... | ... | @@ -112,6 +112,7 @@ import GHC.Prelude |
| 112 | 112 | |
| 113 | 113 | import GHC.Builtin.Modules
|
| 114 | 114 | import GHC.Builtin.Uniques
|
| 115 | +import GHC.Builtin.TH( thKnownKeyTable )
|
|
| 115 | 116 | |
| 116 | 117 | import GHC.Unit.Types
|
| 117 | 118 | |
| ... | ... | @@ -169,24 +170,25 @@ wired in ones are defined in GHC.Builtin.Types etc. |
| 169 | 170 | |
| 170 | 171 | knownKeyTable :: [(OccName, KnownKey)]
|
| 171 | 172 | knownKeyTable
|
| 172 | - = [ (mkTcOcc "Read", readClassKey)
|
|
| 173 | + = thKnownKeyTable ++
|
|
| 174 | + [ (mkTcOcc "IO", ioTyConKey)
|
|
| 175 | + |
|
| 176 | + -- Classes
|
|
| 177 | + , (mkTcOcc "Eq", eqClassKey)
|
|
| 178 | + , (mkTcOcc "Ord", ordClassKey)
|
|
| 179 | + , (mkTcOcc "Enum", enumClassKey)
|
|
| 180 | + , (mkTcOcc "Bounded", boundedClassKey)
|
|
| 181 | + , (mkTcOcc "Read", readClassKey)
|
|
| 173 | 182 | , (mkTcOcc "Show", showClassKey)
|
| 174 | 183 | , (mkTcOcc "Foldable", foldableClassKey)
|
| 175 | 184 | , (mkTcOcc "Traversable", traversableClassKey)
|
| 176 | - , (mkTcOcc "Bounded", boundedClassKey)
|
|
| 177 | 185 | , (mkTcOcc "Data", dataClassKey)
|
| 178 | 186 | , (mkTcOcc "Ix", ixClassKey)
|
| 179 | 187 | , (mkTcOcc "Alternative", alternativeClassKey)
|
| 180 | 188 | , (mkTcOcc "Typeable", typeableClassKey)
|
| 189 | + , (mkTcOcc "Functor", functorClassKey)
|
|
| 181 | 190 | |
| 182 | - -- Class Eq and Ord
|
|
| 183 | - , (mkTcOcc "Eq", eqClassKey)
|
|
| 184 | - , (mkTcOcc "Ord", ordClassKey)
|
|
| 185 | - |
|
| 186 | - -- Enum
|
|
| 187 | - , (mkTcOcc "Enum", enumClassKey)
|
|
| 188 | - |
|
| 189 | - -- Numeric operations
|
|
| 191 | + -- Numeric classes
|
|
| 190 | 192 | , (mkTcOcc "Num", numClassKey)
|
| 191 | 193 | , (mkTcOcc "Integral", integralClassKey)
|
| 192 | 194 | , (mkTcOcc "Real", realClassKey)
|
| ... | ... | @@ -201,9 +203,6 @@ knownKeyTable |
| 201 | 203 | , (mkVarOcc "toRational", toRationalClassOpKey)
|
| 202 | 204 | , (mkVarOcc "realToFrac", realToFracIdKey)
|
| 203 | 205 | |
| 204 | - -- Class Functor
|
|
| 205 | - , (mkTcOcc "Functor", functorClassKey)
|
|
| 206 | - |
|
| 207 | 206 | -- Class Monad, MonadFix, MonadZip
|
| 208 | 207 | , (mkTcOcc "Monad", monadClassKey)
|
| 209 | 208 | , (thenMClassOpOcc, thenMClassOpKey)
|
| ... | ... | @@ -220,15 +219,12 @@ knownKeyTable |
| 220 | 219 | , (mkTcOcc "Monoid", monoidClassKey)
|
| 221 | 220 | , (sappendClassOpOcc, sappendClassOpKey)
|
| 222 | 221 | , (mappendClassOpOcc, mappendClassOpKey)
|
| 223 | - , (mkVarOcc "mempty", memptyClassOpKey)
|
|
| 224 | 222 | |
| 225 | 223 | -- Class IsString
|
| 226 | 224 | , (mkTcOcc "IsString", isStringClassKey)
|
| 227 | - , (mkVarOcc "fromString", fromStringClassOpKey)
|
|
| 228 | 225 | |
| 229 | 226 | -- DataToTag
|
| 230 | 227 | , (mkTcOcc "DataToTag", dataToTagClassKey)
|
| 231 | - , (mkVarOcc "dataToTag#", dataToTagClassOpKey)
|
|
| 232 | 228 | |
| 233 | 229 | -- Lists
|
| 234 | 230 | , (mkVarOcc "build", buildIdKey)
|
| ... | ... | @@ -1427,10 +1423,6 @@ failMClassOpKey = mkPreludeMiscIdUnique 159 |
| 1427 | 1423 | fromLabelClassOpKey :: KnownKey
|
| 1428 | 1424 | fromLabelClassOpKey = mkPreludeMiscIdUnique 160
|
| 1429 | 1425 | |
| 1430 | --- DataToTag
|
|
| 1431 | -dataToTagClassOpKey :: KnownKey
|
|
| 1432 | -dataToTagClassOpKey = mkPreludeMiscIdUnique 161
|
|
| 1433 | - |
|
| 1434 | 1426 | -- Arrow notation
|
| 1435 | 1427 | arrAIdKey, composeAIdKey, firstAIdKey, appAIdKey, choiceAIdKey,
|
| 1436 | 1428 | loopAIdKey :: KnownKey
|
| ... | ... | @@ -543,8 +543,8 @@ fmap_RDR, replace_RDR, pure_RDR, ap_RDR, liftA2_RDR, foldable_foldr_RDR, |
| 543 | 543 | fmap_RDR = knownOccRdrName fmapClassOpOcc
|
| 544 | 544 | pure_RDR = knownKeyRdrName pureAClassOpKey
|
| 545 | 545 | ap_RDR = knownOccRdrName apAClassOpOcc
|
| 546 | -mempty_RDR = knownKeyRdrName memptyClassOpKey
|
|
| 547 | 546 | mappend_RDR = knownKeyRdrName mappendClassOpKey
|
| 547 | +mempty_RDR = knownVarOccRdrName "mempty"
|
|
| 548 | 548 | replace_RDR = knownVarOccRdrName "<$"
|
| 549 | 549 | liftA2_RDR = knownVarOccRdrName "liftA2"
|
| 550 | 550 | foldable_foldr_RDR = knownVarOccRdrName "foldr"
|
| ... | ... | @@ -572,7 +572,7 @@ null_Expr = nlHsVar null_RDR |
| 572 | 572 | minusInt_RDR, tagToEnum_RDR, dataToTag_RDR :: RdrName
|
| 573 | 573 | minusInt_RDR = primOpRdrName IntSubOp
|
| 574 | 574 | tagToEnum_RDR = primOpRdrName TagToEnumOp
|
| 575 | -dataToTag_RDR = knownKeyRdrName dataToTagClassOpKey
|
|
| 575 | +dataToTag_RDR = knownVarOccRdrName "dataToTag#"
|
|
| 576 | 576 | |
| 577 | 577 | -- Generics (constructors and functions)
|
| 578 | 578 | u1DataCon_RDR, par1DataCon_RDR, rec1DataCon_RDR,
|
| ... | ... | @@ -9,7 +9,7 @@ module GHC.Builtin.TH where |
| 9 | 9 | import GHC.Prelude ()
|
| 10 | 10 | |
| 11 | 11 | import GHC.Unit.Types
|
| 12 | -import GHC.Types.Name( Name, KnownOcc, mk_known_key_name )
|
|
| 12 | +import GHC.Types.Name( Name, KnownOcc, KnownKey, mk_known_key_name )
|
|
| 13 | 13 | import GHC.Types.Name.Occurrence
|
| 14 | 14 | import GHC.Types.Unique ( Unique )
|
| 15 | 15 | import GHC.Builtin.Uniques
|
| ... | ... | @@ -17,6 +17,11 @@ import GHC.Data.FastString |
| 17 | 17 | |
| 18 | 18 | import Language.Haskell.Syntax.Module.Name
|
| 19 | 19 | |
| 20 | +thKnownKeyTable :: [(OccName, KnownKey)]
|
|
| 21 | +thKnownKeyTable
|
|
| 22 | + = [ (liftClassOcc, liftClassKey)
|
|
| 23 | + ]
|
|
| 24 | + |
|
| 20 | 25 | thKnownOccs :: [KnownOcc]
|
| 21 | 26 | thKnownOccs
|
| 22 | 27 | = [ qTyConOcc, nameTyConOcc, fieldExpTyConOcc, patTyConOcc
|
| ... | ... | @@ -31,7 +36,7 @@ thKnownOccs |
| 31 | 36 | , litPOcc, varPOcc, tupPOcc, unboxedTupPOcc, unboxedSumPOcc, conPOcc
|
| 32 | 37 | , infixPOcc, tildePOcc, bangPOcc, asPOcc, wildPOcc, recPOcc, listPOcc
|
| 33 | 38 | , sigPOcc, viewPOcc, typePOcc, invisPOcc, orPOcc
|
| 34 | - , matchOcc, clauseOcc
|
|
| 39 | + , matchOcc, fieldPatOcc, clauseOcc
|
|
| 35 | 40 | , varEOcc, conEOcc, litEOcc, appEOcc, appTypeEOcc, infixEOcc, infixAppOcc
|
| 36 | 41 | , sectionLOcc, sectionROcc, lamEOcc, lamCaseEOcc, lamCasesEOcc, tupEOcc
|
| 37 | 42 | , unboxedTupEOcc, unboxedSumEOcc, condEOcc, multiIfEOcc, letEOcc
|
| ... | ... | @@ -54,6 +59,9 @@ thKnownOccs |
| 54 | 59 | , tySynEqnTyConOcc, roleTyConOcc, derivClauseTyConOcc, kindTyConOcc
|
| 55 | 60 | , tyVarBndrUnitTyConOcc, tyVarBndrSpecTyConOcc, tyVarBndrVisTyConOcc
|
| 56 | 61 | , derivStrategyTyConOcc
|
| 62 | + , guardedBOcc, normalBOcc
|
|
| 63 | + , normalGEOcc, patGEOcc
|
|
| 64 | + , bindSOcc, letSOcc, noBindSOcc, parSOcc, recSOcc
|
|
| 57 | 65 | ]
|
| 58 | 66 | |
| 59 | 67 | templateHaskellNames :: [Name]
|
| ... | ... | @@ -61,20 +69,13 @@ templateHaskellNames :: [Name] |
| 61 | 69 | -- Should stay in sync with the import list of GHC.HsToCore.Quote
|
| 62 | 70 | |
| 63 | 71 | templateHaskellNames = [
|
| 64 | - sequenceQName, newNameName,
|
|
| 72 | + newNameName,
|
|
| 65 | 73 | mkNameName, mkNameG_vName, mkNameG_dName, mkNameG_tcName, mkNameG_fldName,
|
| 66 | 74 | mkNameLName,
|
| 67 | 75 | mkNameSName, mkNameQName,
|
| 68 | 76 | mkModNameName,
|
| 69 | 77 | unTypeName, unTypeCodeName,
|
| 70 | - -- FieldPat
|
|
| 71 | - fieldPatName,
|
|
| 72 | - -- Body
|
|
| 73 | - guardedBName, normalBName,
|
|
| 74 | - -- Guard
|
|
| 75 | - normalGEName, patGEName,
|
|
| 76 | - -- Stmt
|
|
| 77 | - bindSName, letSName, noBindSName, parSName, recSName,
|
|
| 78 | + |
|
| 78 | 79 | -- Cxt
|
| 79 | 80 | cxtName,
|
| 80 | 81 | |
| ... | ... | @@ -150,9 +151,6 @@ templateHaskellNames = [ |
| 150 | 151 | -- DerivClause
|
| 151 | 152 | derivClauseName,
|
| 152 | 153 | |
| 153 | - -- The type classes
|
|
| 154 | - liftClassName, quoteClassName,
|
|
| 155 | - |
|
| 156 | 154 | -- Quasiquoting
|
| 157 | 155 | quoteDecName, quoteTypeName, quoteExpName, quotePatName]
|
| 158 | 156 | |
| ... | ... | @@ -185,11 +183,9 @@ qqFld :: FastString -> Unique -> Name |
| 185 | 183 | qqFld = mk_known_key_name (fieldName (fsLit "QuasiQuoter")) qqLib
|
| 186 | 184 | |
| 187 | 185 | -------------------- TH.Syntax -----------------------
|
| 188 | -liftClassName :: Name
|
|
| 189 | -liftClassName = mk_known_key_name clsName liftLib (fsLit "Lift") liftClassKey
|
|
| 190 | - |
|
| 191 | -quoteClassName :: Name
|
|
| 192 | -quoteClassName = thMonadCls (fsLit "Quote") quoteClassKey
|
|
| 186 | +liftClassOcc, quoteClassOcc :: KnownOcc
|
|
| 187 | +liftClassOcc = mkTcOcc "Lift"
|
|
| 188 | +quoteClassOcc = mkTcOcc "Quote"
|
|
| 193 | 189 | |
| 194 | 190 | qTyConOcc, nameTyConOcc, fieldExpTyConOcc, patTyConOcc,
|
| 195 | 191 | fieldPatTyConOcc, expTyConOcc, decTyConOcc, typeTyConOcc,
|
| ... | ... | @@ -215,11 +211,13 @@ overlapTyConOcc = mkTcOcc "Overlap" |
| 215 | 211 | modNameTyConOcc = mkTcOcc "ModName"
|
| 216 | 212 | quasiQuoterTyConOcc = mkTcOcc "QuasiQuoter"
|
| 217 | 213 | |
| 218 | -sequenceQName, newNameName,
|
|
| 214 | +sequenceQOcc :: KnownOcc
|
|
| 215 | +sequenceQOcc = mkVarOcc "sequenceQ"
|
|
| 216 | + |
|
| 217 | +newNameName,
|
|
| 219 | 218 | mkNameName, mkNameG_vName, mkNameG_fldName, mkNameG_dName, mkNameG_tcName,
|
| 220 | 219 | mkNameLName, mkNameSName, unTypeName, unTypeCodeName,
|
| 221 | 220 | mkModNameName, mkNameQName :: Name
|
| 222 | -sequenceQName = thMonadFun (fsLit "sequenceQ") sequenceQIdKey
|
|
| 223 | 221 | newNameName = thMonadFun (fsLit "newName") newNameIdKey
|
| 224 | 222 | mkNameName = thFun (fsLit "mkName") mkNameIdKey
|
| 225 | 223 | mkNameG_vName = thFun (fsLit "mkNameG_v") mkNameG_vIdKey
|
| ... | ... | @@ -277,16 +275,10 @@ typePOcc = mkVarOcc "typeP" |
| 277 | 275 | invisPOcc = mkVarOcc "invisP"
|
| 278 | 276 | |
| 279 | 277 | -- type FieldPat = ...
|
| 280 | -fieldPatName :: Name
|
|
| 281 | -fieldPatName = libFun (fsLit "fieldPat") fieldPatIdKey
|
|
| 282 | - |
|
| 283 | --- data Match = ...
|
|
| 284 | -matchOcc :: KnownOcc
|
|
| 285 | -matchOcc = mkVarOcc "match"
|
|
| 286 | - |
|
| 287 | --- data Clause = ...
|
|
| 288 | -clauseOcc :: KnownOcc
|
|
| 289 | -clauseOcc = mkVarOcc "clause"
|
|
| 278 | +fieldPatOcc, matchOcc, clauseOcc ::KnownOcc
|
|
| 279 | +fieldPatOcc = mkVarOcc "fieldPat"
|
|
| 280 | +matchOcc = mkVarOcc "match"
|
|
| 281 | +clauseOcc = mkVarOcc "clause"
|
|
| 290 | 282 | |
| 291 | 283 | -- data Exp = ...
|
| 292 | 284 | varEOcc, conEOcc, litEOcc, appEOcc, appTypeEOcc, infixEOcc, infixAppOcc,
|
| ... | ... | @@ -345,22 +337,22 @@ fieldExpOcc :: KnownOcc |
| 345 | 337 | fieldExpOcc = mkVarOcc "fieldExp"
|
| 346 | 338 | |
| 347 | 339 | -- data Body = ...
|
| 348 | -guardedBName, normalBName :: Name
|
|
| 349 | -guardedBName = libFun (fsLit "guardedB") guardedBIdKey
|
|
| 350 | -normalBName = libFun (fsLit "normalB") normalBIdKey
|
|
| 340 | +guardedBOcc, normalBOcc :: KnownOcc
|
|
| 341 | +guardedBOcc = mkVarOcc "guardedB"
|
|
| 342 | +normalBOcc = mkVarOcc "normalB"
|
|
| 351 | 343 | |
| 352 | 344 | -- data Guard = ...
|
| 353 | -normalGEName, patGEName :: Name
|
|
| 354 | -normalGEName = libFun (fsLit "normalGE") normalGEIdKey
|
|
| 355 | -patGEName = libFun (fsLit "patGE") patGEIdKey
|
|
| 345 | +normalGEOcc, patGEOcc :: KnownOcc
|
|
| 346 | +normalGEOcc = mkVarOcc "normalGE"
|
|
| 347 | +patGEOcc = mkVarOcc "patGE"
|
|
| 356 | 348 | |
| 357 | 349 | -- data Stmt = ...
|
| 358 | -bindSName, letSName, noBindSName, parSName, recSName :: Name
|
|
| 359 | -bindSName = libFun (fsLit "bindS") bindSIdKey
|
|
| 360 | -letSName = libFun (fsLit "letS") letSIdKey
|
|
| 361 | -noBindSName = libFun (fsLit "noBindS") noBindSIdKey
|
|
| 362 | -parSName = libFun (fsLit "parS") parSIdKey
|
|
| 363 | -recSName = libFun (fsLit "recS") recSIdKey
|
|
| 350 | +bindSOcc, letSOcc, noBindSOcc, parSOcc, recSOcc :: KnownOcc
|
|
| 351 | +bindSOcc = mkVarOcc "bindS"
|
|
| 352 | +letSOcc = mkVarOcc "letS"
|
|
| 353 | +noBindSOcc = mkVarOcc "noBindS"
|
|
| 354 | +parSOcc = mkVarOcc "parS"
|
|
| 355 | +recSOcc = mkVarOcc "recS"
|
|
| 364 | 356 | |
| 365 | 357 | -- data Dec = ...
|
| 366 | 358 | funDOcc, valDOcc, dataDOcc, newtypeDOcc, typeDataDOcc, tySynDOcc, classDOcc,
|
| ... | ... | @@ -911,28 +903,11 @@ forallEIdKey = mkPreludeMiscIdUnique 802 |
| 911 | 903 | forallVisEIdKey = mkPreludeMiscIdUnique 803
|
| 912 | 904 | constrainedEIdKey = mkPreludeMiscIdUnique 804
|
| 913 | 905 | |
| 914 | --- type FieldExp = ...
|
|
| 915 | -fieldExpIdKey :: Unique
|
|
| 916 | -fieldExpIdKey = mkPreludeMiscIdUnique 307
|
|
| 917 | - |
|
| 918 | --- data Body = ...
|
|
| 919 | -guardedBIdKey, normalBIdKey :: Unique
|
|
| 920 | -guardedBIdKey = mkPreludeMiscIdUnique 308
|
|
| 921 | -normalBIdKey = mkPreludeMiscIdUnique 309
|
|
| 922 | - |
|
| 923 | 906 | -- data Guard = ...
|
| 924 | 907 | normalGEIdKey, patGEIdKey :: Unique
|
| 925 | 908 | normalGEIdKey = mkPreludeMiscIdUnique 310
|
| 926 | 909 | patGEIdKey = mkPreludeMiscIdUnique 311
|
| 927 | 910 | |
| 928 | --- data Stmt = ...
|
|
| 929 | -bindSIdKey, letSIdKey, noBindSIdKey, parSIdKey, recSIdKey :: Unique
|
|
| 930 | -bindSIdKey = mkPreludeMiscIdUnique 312
|
|
| 931 | -letSIdKey = mkPreludeMiscIdUnique 313
|
|
| 932 | -noBindSIdKey = mkPreludeMiscIdUnique 314
|
|
| 933 | -parSIdKey = mkPreludeMiscIdUnique 315
|
|
| 934 | -recSIdKey = mkPreludeMiscIdUnique 316
|
|
| 935 | - |
|
| 936 | 911 | -- data Dec = ...
|
| 937 | 912 | funDIdKey, valDIdKey, dataDIdKey, newtypeDIdKey, tySynDIdKey, classDIdKey,
|
| 938 | 913 | instanceWithOverlapDIdKey, instanceDIdKey, sigDIdKey, forImpDIdKey,
|
| ... | ... | @@ -795,7 +795,6 @@ coreExprAsPmLit e = case collectArgs e of |
| 795 | 795 | | otherwise
|
| 796 | 796 | = Nothing
|
| 797 | 797 | |
| 798 | - |
|
| 799 | 798 | -- See Note [Detecting overloaded literals with -XRebindableSyntax]
|
| 800 | 799 | is_rebound_name :: Id -> KnownOcc -> Bool
|
| 801 | 800 | is_rebound_name x ko = getOccFS (idName x) == occNameFS ko
|
| ... | ... | @@ -114,7 +114,7 @@ mkMetaWrappers q@(QuoteWrapper quote_var_raw m_var) = do |
| 114 | 114 | let quote_var = Var quote_var_raw
|
| 115 | 115 | -- Get the superclass selector to select the Monad dictionary, going
|
| 116 | 116 | -- to be used to construct the monadWrapper.
|
| 117 | - quote_tc <- dsLookupTyCon quoteClassName
|
|
| 117 | + quote_tc <- dsLookupKnownOccTyCon quoteClassOcc
|
|
| 118 | 118 | monad_tc <- dsLookupKnownKeyTyCon monadClassKey
|
| 119 | 119 | let cls = expectJust $ tyConClass_maybe quote_tc
|
| 120 | 120 | monad_cls = expectJust $ tyConClass_maybe monad_tc
|
| ... | ... | @@ -2221,7 +2221,7 @@ repP (ConPat NoExtField dc details) |
| 2221 | 2221 | rep_fld :: LHsRecField GhcRn (LPat GhcRn) -> MetaM (Core (M (TH.Name, TH.Pat)))
|
| 2222 | 2222 | rep_fld (L _ fld) = do { MkC v <- lookupOcc (hsRecFieldSel fld)
|
| 2223 | 2223 | ; MkC p <- repLP (hfbRHS fld)
|
| 2224 | - ; rep2 fieldPatName [v,p] }
|
|
| 2224 | + ; krep2 fieldPatOcc [v,p] }
|
|
| 2225 | 2225 | repP (NPat _ (L _ l) Nothing _) = do { a <- repOverloadedLiteral l
|
| 2226 | 2226 | ; repPlit a }
|
| 2227 | 2227 | repP (ViewPat _ e p) = do { e' <- repLE e; p' <- repLP p; repPview e' p' }
|
| ... | ... | @@ -2424,12 +2424,12 @@ type family NotM a where |
| 2424 | 2424 | NotM (M _) = TypeError ('Text ("rep2_nw must not produce something of overloaded type"))
|
| 2425 | 2425 | NotM _other = (() :: Constraint)
|
| 2426 | 2426 | |
| 2427 | -rep2M :: Name -> [CoreExpr] -> MetaM (Core (M a))
|
|
| 2427 | +-- rep2M :: Name -> [CoreExpr] -> MetaM (Core (M a))
|
|
| 2428 | 2428 | rep2 :: Name -> [CoreExpr] -> MetaM (Core (M a))
|
| 2429 | 2429 | rep2_nw :: NotM a => Name -> [CoreExpr] -> MetaM (Core a)
|
| 2430 | 2430 | rep2_nwDsM :: NotM a => Name -> [CoreExpr] -> DsM (Core a)
|
| 2431 | 2431 | rep2 = rep2X lift (asks quoteWrapper)
|
| 2432 | -rep2M = rep2X lift (asks monadWrapper)
|
|
| 2432 | +-- rep2M = rep2X lift (asks monadWrapper)
|
|
| 2433 | 2433 | rep2_nw n xs = lift (rep2_nwDsM n xs)
|
| 2434 | 2434 | rep2_nwDsM = rep2X id (return id)
|
| 2435 | 2435 | |
| ... | ... | @@ -2444,12 +2444,12 @@ rep2X lift_dsm get_wrap n xs = do |
| 2444 | 2444 | ; return (MkC $ (foldl' App (wrap (Var rep_id)) xs)) }
|
| 2445 | 2445 | |
| 2446 | 2446 | |
| 2447 | --- krep2M :: KnownOcc -> [CoreExpr] -> MetaM (Core (M a))
|
|
| 2447 | +krep2M :: KnownOcc -> [CoreExpr] -> MetaM (Core (M a))
|
|
| 2448 | 2448 | krep2 :: KnownOcc -> [CoreExpr] -> MetaM (Core (M a))
|
| 2449 | 2449 | krep2_nw :: NotM a => KnownOcc -> [CoreExpr] -> MetaM (Core a)
|
| 2450 | 2450 | krep2_nwDsM :: NotM a => KnownOcc -> [CoreExpr] -> DsM (Core a)
|
| 2451 | 2451 | krep2 = krep2X lift (asks quoteWrapper)
|
| 2452 | --- krep2M = krep2X lift (asks monadWrapper)
|
|
| 2452 | +krep2M = krep2X lift (asks monadWrapper)
|
|
| 2453 | 2453 | krep2_nw n xs = lift (krep2_nwDsM n xs)
|
| 2454 | 2454 | krep2_nwDsM = krep2X id (return id)
|
| 2455 | 2455 | |
| ... | ... | @@ -2650,10 +2650,10 @@ repImplicitParamVar (MkC x) = krep2 implicitParamVarEOcc [x] |
| 2650 | 2650 | |
| 2651 | 2651 | ------------ Right hand sides (guarded expressions) ----
|
| 2652 | 2652 | repGuarded :: Core [M (TH.Guard, TH.Exp)] -> MetaM (Core (M TH.Body))
|
| 2653 | -repGuarded (MkC pairs) = rep2 guardedBName [pairs]
|
|
| 2653 | +repGuarded (MkC pairs) = krep2 guardedBOcc [pairs]
|
|
| 2654 | 2654 | |
| 2655 | 2655 | repNormal :: Core (M TH.Exp) -> MetaM (Core (M TH.Body))
|
| 2656 | -repNormal (MkC e) = rep2 normalBName [e]
|
|
| 2656 | +repNormal (MkC e) = krep2 normalBOcc [e]
|
|
| 2657 | 2657 | |
| 2658 | 2658 | ------------ Guards ----
|
| 2659 | 2659 | repLNormalGE :: LHsExpr GhcRn -> LHsExpr GhcRn
|
| ... | ... | @@ -2663,26 +2663,26 @@ repLNormalGE g e = do g' <- repLE g |
| 2663 | 2663 | repNormalGE g' e'
|
| 2664 | 2664 | |
| 2665 | 2665 | repNormalGE :: Core (M TH.Exp) -> Core (M TH.Exp) -> MetaM (Core (M (TH.Guard, TH.Exp)))
|
| 2666 | -repNormalGE (MkC g) (MkC e) = rep2 normalGEName [g, e]
|
|
| 2666 | +repNormalGE (MkC g) (MkC e) = krep2 normalGEOcc [g, e]
|
|
| 2667 | 2667 | |
| 2668 | 2668 | repPatGE :: Core [(M TH.Stmt)] -> Core (M TH.Exp) -> MetaM (Core (M (TH.Guard, TH.Exp)))
|
| 2669 | -repPatGE (MkC ss) (MkC e) = rep2 patGEName [ss, e]
|
|
| 2669 | +repPatGE (MkC ss) (MkC e) = krep2 patGEOcc [ss, e]
|
|
| 2670 | 2670 | |
| 2671 | 2671 | ------------- Stmts -------------------
|
| 2672 | 2672 | repBindSt :: Core (M TH.Pat) -> Core (M TH.Exp) -> MetaM (Core (M TH.Stmt))
|
| 2673 | -repBindSt (MkC p) (MkC e) = rep2 bindSName [p,e]
|
|
| 2673 | +repBindSt (MkC p) (MkC e) = krep2 bindSOcc [p,e]
|
|
| 2674 | 2674 | |
| 2675 | 2675 | repLetSt :: Core [(M TH.Dec)] -> MetaM (Core (M TH.Stmt))
|
| 2676 | -repLetSt (MkC ds) = rep2 letSName [ds]
|
|
| 2676 | +repLetSt (MkC ds) = krep2 letSOcc [ds]
|
|
| 2677 | 2677 | |
| 2678 | 2678 | repNoBindSt :: Core (M TH.Exp) -> MetaM (Core (M TH.Stmt))
|
| 2679 | -repNoBindSt (MkC e) = rep2 noBindSName [e]
|
|
| 2679 | +repNoBindSt (MkC e) = krep2 noBindSOcc [e]
|
|
| 2680 | 2680 | |
| 2681 | 2681 | repParSt :: Core [[(M TH.Stmt)]] -> MetaM (Core (M TH.Stmt))
|
| 2682 | -repParSt (MkC sss) = rep2 parSName [sss]
|
|
| 2682 | +repParSt (MkC sss) = krep2 parSOcc [sss]
|
|
| 2683 | 2683 | |
| 2684 | 2684 | repRecSt :: Core [(M TH.Stmt)] -> MetaM (Core (M TH.Stmt))
|
| 2685 | -repRecSt (MkC ss) = rep2 recSName [ss]
|
|
| 2685 | +repRecSt (MkC ss) = krep2 recSOcc [ss]
|
|
| 2686 | 2686 | |
| 2687 | 2687 | -------------- Range (Arithmetic sequences) -----------
|
| 2688 | 2688 | repFrom :: Core (M TH.Exp) -> MetaM (Core (M TH.Exp))
|
| ... | ... | @@ -3210,11 +3210,11 @@ repGensym (MkC lit_str) = rep2 newNameName [lit_str] |
| 3210 | 3210 | repBindM :: Type -> Type -- a and b
|
| 3211 | 3211 | -> Core (M a) -> Core (a -> M b) -> MetaM (Core (M b))
|
| 3212 | 3212 | repBindM ty_a ty_b (MkC x) (MkC y)
|
| 3213 | - = rep2M bindMName [Type ty_a, Type ty_b, x, y]
|
|
| 3213 | + = krep2M bindMClassOpOcc [Type ty_a, Type ty_b, x, y]
|
|
| 3214 | 3214 | |
| 3215 | 3215 | repSequenceM :: Type -> Core [M a] -> MetaM (Core (M [a]))
|
| 3216 | 3216 | repSequenceM ty_a (MkC list)
|
| 3217 | - = rep2M sequenceQName [Type ty_a, list]
|
|
| 3217 | + = krep2M sequenceQOcc [Type ty_a, list]
|
|
| 3218 | 3218 | |
| 3219 | 3219 | repUnboundVar :: Core TH.Name -> MetaM (Core (M TH.Exp))
|
| 3220 | 3220 | repUnboundVar (MkC name) = krep2 unboundVarEOcc [name]
|
| ... | ... | @@ -432,8 +432,7 @@ tcCmdSyntaxTable loc orig ty (CST tbl) |
| 432 | 432 | ; return (CST tbl') }
|
| 433 | 433 | where
|
| 434 | 434 | do_one (std_occ, user_nm_expr)
|
| 435 | - = -- Use the user_nm_expr in place of the standard operation
|
|
| 436 | - do { std_id <- tcLookupKnownOccId std_occ
|
|
| 435 | + = do { std_id <- tcLookupKnownOccId std_occ
|
|
| 437 | 436 | ; if | HsVar _ (L _ (WithUserRdr _ user_nm)) <- user_nm_expr
|
| 438 | 437 | , idName std_id == user_nm
|
| 439 | 438 | -> -- Use the standard operation
|
| ... | ... | @@ -476,8 +475,8 @@ arity_map :: OccEnv Arity |
| 476 | 475 | -- Domain is only the arrow operations
|
| 477 | 476 | arity_map = mkOccEnv
|
| 478 | 477 | [ (arrAIdOcc, 3) -- result used as an argument in, e.g., do_premap
|
| 479 | - , (composeAIdOcc, 3) -- result used as an argument in, e.g., dsCmdStmt/BodyStmt
|
|
| 480 | - , (firstAIdOcc, 5) -- result used as an argument in, e.g., dsCmdStmt/BodyStmt
|
|
| 478 | + , (composeAIdOcc, 5) -- result used as an argument in, e.g., dsCmdStmt/BodyStmt
|
|
| 479 | + , (firstAIdOcc, 4) -- result used as an argument in, e.g., dsCmdStmt/BodyStmt
|
|
| 481 | 480 | , (appAIdOcc, 2) -- result used as an argument in, e.g., dsCmd/HsCmdArrApp/HsHigherOrderApp
|
| 482 | 481 | , (choiceAIdOcc, 5) -- result used as an argument in, e.g., HsCmdIf
|
| 483 | 482 | , (loopAIdOcc, 4) -- result used as an argument in, e.g., HsCmdIf
|
| ... | ... | @@ -762,7 +762,7 @@ mkMetaTyVar = |
| 762 | 762 | -- | For a type 'm', emit the constraint 'Quote m'.
|
| 763 | 763 | emitQuoteWanted :: Type -> TcM EvVar
|
| 764 | 764 | emitQuoteWanted m_var = do
|
| 765 | - quote_con <- tcLookupTyCon quoteClassName
|
|
| 765 | + quote_con <- tcLookupKnownOccTyCon quoteClassOcc
|
|
| 766 | 766 | emitWantedEvVar BracketOrigin $
|
| 767 | 767 | mkTyConApp quote_con [m_var]
|
| 768 | 768 |
| ... | ... | @@ -99,7 +99,8 @@ import Data.Function ( on ) |
| 99 | 99 | -}
|
| 100 | 100 | |
| 101 | 101 | newKnownOccMethod
|
| 102 | - :: CtOrigin -- ^ why do we need this?
|
|
| 102 | + :: HasDebugCallStack
|
|
| 103 | + => CtOrigin -- ^ why do we need this?
|
|
| 103 | 104 | -> KnownOcc -- ^ name of the method
|
| 104 | 105 | -> [TcRhoType] -- ^ types with which to instantiate the class
|
| 105 | 106 | -> TcM (HsExpr GhcTc)
|
| ... | ... | @@ -115,12 +116,12 @@ newKnownOccMethod origin occ ty_args |
| 115 | 116 | ; finish_nkko origin id ty_args }
|
| 116 | 117 | |
| 117 | 118 | newKnownKeyMethod -- Same as newKnownOccMethod, but with a KnownKey
|
| 118 | - :: CtOrigin -> KnownKey -> [TcRhoType]-> TcM (HsExpr GhcTc)
|
|
| 119 | + :: HasDebugCallStack => CtOrigin -> KnownKey -> [TcRhoType]-> TcM (HsExpr GhcTc)
|
|
| 119 | 120 | newKnownKeyMethod origin key ty_args
|
| 120 | 121 | = do { id <- tcLookupKnownKeyId key
|
| 121 | 122 | ; finish_nkko origin id ty_args }
|
| 122 | 123 | |
| 123 | -finish_nkko :: CtOrigin -> Id -> [TcRhoType] -> TcM (HsExpr GhcTc)
|
|
| 124 | +finish_nkko :: HasDebugCallStack => CtOrigin -> Id -> [TcRhoType] -> TcM (HsExpr GhcTc)
|
|
| 124 | 125 | finish_nkko origin id ty_args
|
| 125 | 126 | = do { let ty = piResultTys (idType id) ty_args
|
| 126 | 127 | (theta, _caller_knows_this) = tcSplitPhiTy ty
|
| ... | ... | @@ -169,10 +169,11 @@ module GHC.KnownKeyNames |
| 169 | 169 | , integerComplement, integerBit#, integerTestBit#, integerShiftL#, integerShiftR#
|
| 170 | 170 | |
| 171 | 171 | -- Template Haskell
|
| 172 | + , Lift, Quote -- The Lift and Quote classeso
|
|
| 172 | 173 | , Q, DecsQ, ExpQ, TypeQ, PatQ
|
| 173 | 174 | , Name, Decs, TH.Type, FunDep
|
| 174 | 175 | , Pred, Code, InjectivityAnn, Overlap, ModName, QuasiQuoter
|
| 175 | - , Stmt, Con, BangType, VarBangType, RuleBndr, TySynEqn, Role, DerivClause
|
|
| 176 | + , Con, BangType, VarBangType, RuleBndr, TySynEqn, Role, DerivClause
|
|
| 176 | 177 | , Kind, TyVarBndrUnit, TyVarBndrSpec, TyVarBndrVis, DerivStrategy
|
| 177 | 178 | , sequenceQ, newName, mkName, mkNameG_v, mkNameG_d, mkNameG_tc, mkNameG_fld, mkNameL
|
| 178 | 179 | , mkNameQ, mkNameS, mkModName, unType, unTypeCode, unsafeCodeCoerce
|
| ... | ... | @@ -201,6 +202,7 @@ module GHC.KnownKeyNames |
| 201 | 202 | , FieldPat, fieldPat
|
| 202 | 203 | , Match, match
|
| 203 | 204 | , Clause, clause
|
| 205 | + , Stmt, bindS, letS, noBindS, parS, recS
|
|
| 204 | 206 | ) where
|
| 205 | 207 | |
| 206 | 208 | import GHC.Internal.Base hiding( foldr )
|
| ... | ... | @@ -17,6 +17,9 @@ |
| 17 | 17 | {-# LANGUAGE FlexibleInstances #-}
|
| 18 | 18 | {-# OPTIONS_GHC -fno-warn-inline-rule-shadowing #-}
|
| 19 | 19 | |
| 20 | +{-# OPTIONS_GHC -fdefines-known-key-names #-}
|
|
| 21 | + -- Defines Lift
|
|
| 22 | + |
|
| 20 | 23 | -- | This module gives the definition of the 'Lift' class.
|
| 21 | 24 | --
|
| 22 | 25 | -- This is an internal module.
|