Simon Peyton Jones pushed to branch wip/spj-reinstallable-base at Glasgow Haskell Compiler / GHC

Commits:

11 changed files:

Changes:

  • compiler/GHC/Builtin/Names.hs
    ... ... @@ -206,7 +206,6 @@ knownKeyOccName std_uniq
    206 206
     basicKnownKeyTable :: [(OccName, KnownKeyNameKey)]
    
    207 207
     basicKnownKeyTable
    
    208 208
       = [ (mkTcOcc "Rational",     rationalTyConKey)
    
    209
    -    , (mkTcOcc "Ord",          ordClassKey)
    
    210 209
         , (mkTcOcc "Show",         showClassKey)
    
    211 210
         , (mkTcOcc "Foldable",     foldableClassKey)
    
    212 211
         , (mkTcOcc "Traversable",  traversableClassKey)
    
    ... ... @@ -218,9 +217,18 @@ basicKnownKeyTable
    218 217
         , (mkTcOcc "Ix",           ixClassKey)
    
    219 218
         , (mkTcOcc "Alternative",  alternativeClassKey)
    
    220 219
     
    
    221
    -    -- Class Eq
    
    220
    +    -- Class Eq and Ord
    
    222 221
         , (mkTcOcc "Eq",           eqClassKey)
    
    222
    +    , (mkTcOcc "Ord",          ordClassKey)
    
    223 223
         , (mkVarOcc "==",          eqClassOpKey)
    
    224
    +    , (mkVarOcc ">=",          geClassOpKey)
    
    225
    +    , (mkVarOcc "<=",          leClassOpKey)
    
    226
    +    , (mkVarOcc "<",           ltClassOpKey)
    
    227
    +    , (mkVarOcc ">",           gtClassOpKey)
    
    228
    +    , (mkVarOcc "compare",     compareClassOpKey)
    
    229
    +    , (mkDataOcc "LT",         ordLTDataConKey)
    
    230
    +    , (mkDataOcc "EQ",         ordEQDataConKey)
    
    231
    +    , (mkDataOcc "GT",         ordGTDataConKey)
    
    224 232
     
    
    225 233
         -- Numeric operations
    
    226 234
         , (mkTcOcc "Num",               numClassKey)
    
    ... ... @@ -236,6 +244,7 @@ basicKnownKeyTable
    236 244
         -- Class Functor
    
    237 245
         , (mkTcOcc "Functor",     functorClassKey)
    
    238 246
         , (mkVarOcc "fmap",       fmapClassOpKey)
    
    247
    +    , (mkVarOcc "map",        mapIdKey)
    
    239 248
     
    
    240 249
         -- Class Monad, MonadFix, MonadZip
    
    241 250
         , (mkTcOcc "Monad",        monadClassKey)
    
    ... ... @@ -263,7 +272,7 @@ basicKnownKeyTable
    263 272
         , (mkTcOcc "IsString",    isStringClassKey)
    
    264 273
         , (mkVarOcc "fromString", fromStringClassOpKey)
    
    265 274
     
    
    266
    -    -- Stuff for pre-typechecker expansion
    
    275
    +    -- Records
    
    267 276
         , (mkTcOcc "HasField",   hasFieldClassKey)
    
    268 277
         , (mkVarOcc "fromLabel", fromLabelClassOpKey)
    
    269 278
         , (mkVarOcc "getField",  getFieldClassOpKey)
    
    ... ... @@ -420,9 +429,6 @@ basicKnownKeyNames
    420 429
             -- Dynamic
    
    421 430
             toDynName,
    
    422 431
     
    
    423
    -        -- Numeric stuff
    
    424
    -        geName,
    
    425
    -
    
    426 432
             -- Conversion functions
    
    427 433
             ratioTyConName, ratioDataConName,
    
    428 434
             toIntegerName, toRationalName,
    
    ... ... @@ -458,7 +464,7 @@ basicKnownKeyNames
    458 464
             nonEmptyTyConName,
    
    459 465
     
    
    460 466
             -- List operations
    
    461
    -        mapName, foldrName, buildName, augmentName,
    
    467
    +        foldrName, buildName, augmentName,
    
    462 468
     
    
    463 469
             -- FFI primitive types that are not wired-in.
    
    464 470
             stablePtrTyConName, ptrTyConName, funPtrTyConName, constPtrConName,
    
    ... ... @@ -727,6 +733,8 @@ mkMainModule_ m = mkModule mainUnit m
    727 733
     *                                                                      *
    
    728 734
     ************************************************************************
    
    729 735
     -}
    
    736
    +kk_RDR :: KnownKeyNameKey -> RdrName
    
    737
    +kk_RDR key = knownKeyRdrName key (knownKeyOccName key)
    
    730 738
     
    
    731 739
     main_RDR_Unqual    :: RdrName
    
    732 740
     main_RDR_Unqual = mkUnqual varName (fsLit "main")
    
    ... ... @@ -735,17 +743,18 @@ main_RDR_Unqual = mkUnqual varName (fsLit "main")
    735 743
     
    
    736 744
     ge_RDR, le_RDR, lt_RDR, gt_RDR, compare_RDR,
    
    737 745
         ltTag_RDR, eqTag_RDR, gtTag_RDR :: RdrName
    
    738
    -ge_RDR                  = nameRdrName geName
    
    739
    -le_RDR                  = varQual_RDR  gHC_CLASSES (fsLit "<=")
    
    740
    -lt_RDR                  = varQual_RDR  gHC_CLASSES (fsLit "<")
    
    741
    -gt_RDR                  = varQual_RDR  gHC_CLASSES (fsLit ">")
    
    742
    -compare_RDR             = varQual_RDR  gHC_CLASSES (fsLit "compare")
    
    743
    -ltTag_RDR               = nameRdrName  ordLTDataConName
    
    744
    -eqTag_RDR               = nameRdrName  ordEQDataConName
    
    745
    -gtTag_RDR               = nameRdrName  ordGTDataConName
    
    746
    +eq_RDR                  = kk_RDR eqClassOpKey
    
    747
    +ge_RDR                  = kk_RDR geClassOpKey
    
    748
    +le_RDR                  = kk_RDR leClassOpKey
    
    749
    +lt_RDR                  = kk_RDR ltClassOpKey
    
    750
    +gt_RDR                  = kk_RDR gtClassOpKey
    
    751
    +compare_RDR             = kk_RDR compareClassOpKey
    
    752
    +ltTag_RDR               = kk_RDR ordLTDataConKey
    
    753
    +eqTag_RDR               = kk_RDR ordEQDataConKey
    
    754
    +gtTag_RDR               = kk_RDR ordGTDataConKey
    
    746 755
     
    
    747 756
     map_RDR :: RdrName
    
    748
    -map_RDR                 = nameRdrName mapName
    
    757
    +map_RDR                 = kk_RDR mapIdKey
    
    749 758
     
    
    750 759
     foldr_RDR, build_RDR, returnM_RDR, bindM_RDR, failM_RDR
    
    751 760
         :: RdrName
    
    ... ... @@ -906,7 +915,7 @@ uWordHash_RDR = fieldQual_RDR gHC_INTERNAL_GENERICS (fsLit "UWord") (fsLit "
    906 915
     fmap_RDR, replace_RDR, pure_RDR, ap_RDR, liftA2_RDR, foldable_foldr_RDR,
    
    907 916
         foldMap_RDR, null_RDR, all_RDR, traverse_RDR, mempty_RDR,
    
    908 917
         mappend_RDR :: RdrName
    
    909
    -fmap_RDR                = nameRdrName fmapName
    
    918
    +fmap_RDR                = kk_RDR fmapClassOpKey
    
    910 919
     replace_RDR             = varQual_RDR gHC_INTERNAL_BASE (fsLit "<$")
    
    911 920
     pure_RDR                = nameRdrName pureAName
    
    912 921
     ap_RDR                  = nameRdrName apAName
    
    ... ... @@ -951,7 +960,7 @@ runRWName = varQual gHC_MAGIC (fsLit "runRW#") runRWKey
    951 960
     
    
    952 961
     orderingTyConName, ordLTDataConName, ordEQDataConName, ordGTDataConName :: Name
    
    953 962
     orderingTyConName = tcQual  gHC_TYPES (fsLit "Ordering") orderingTyConKey
    
    954
    -ordLTDataConName     = dcQual gHC_TYPES (fsLit "LT") ordLTDataConKey
    
    963
    +ordLTDataConName     = dcQual gHC_TYPES (fsLit "LT") 
    
    955 964
     ordEQDataConName     = dcQual gHC_TYPES (fsLit "EQ") ordEQDataConKey
    
    956 965
     ordGTDataConName     = dcQual gHC_TYPES (fsLit "GT") ordGTDataConKey
    
    957 966
     
    
    ... ... @@ -1029,12 +1038,6 @@ unpackCStringName, unpackCStringUtf8Name :: Name
    1029 1038
     unpackCStringName       = varQual gHC_CSTRING (fsLit "unpackCString#") unpackCStringIdKey
    
    1030 1039
     unpackCStringUtf8Name       = varQual gHC_CSTRING (fsLit "unpackCStringUtf8#") unpackCStringUtf8IdKey
    
    1031 1040
     
    
    1032
    --- Base classes (Eq, Ord, Functor)
    
    1033
    -fmapName, geName, functorClassName :: Name
    
    1034
    -geName            = varQual gHC_CLASSES (fsLit ">=")      geClassOpKey
    
    1035
    -functorClassName  = clsQual gHC_INTERNAL_BASE    (fsLit "Functor") functorClassKey
    
    1036
    -fmapName          = varQual gHC_INTERNAL_BASE    (fsLit "fmap")    fmapClassOpKey
    
    1037
    -
    
    1038 1041
     -- Class Monad
    
    1039 1042
     thenMName, bindMName, returnMName :: Name
    
    1040 1043
     thenMName          = varQual gHC_INTERNAL_BASE (fsLit ">>")     thenMClassOpKey
    
    ... ... @@ -1076,14 +1079,13 @@ considerAccessibleName = varQual gHC_MAGIC (fsLit "considerAccessible") consider
    1076 1079
     
    
    1077 1080
     -- Random GHC.Internal.Base functions
    
    1078 1081
     fromStringName, otherwiseIdName, foldrName, buildName, augmentName,
    
    1079
    -    mapName, assertName,
    
    1082
    +    assertName,
    
    1080 1083
         dollarName :: Name
    
    1081 1084
     dollarName        = varQual gHC_INTERNAL_BASE (fsLit "$")          dollarIdKey
    
    1082 1085
     otherwiseIdName   = varQual gHC_INTERNAL_BASE (fsLit "otherwise")  otherwiseIdKey
    
    1083 1086
     foldrName         = varQual gHC_INTERNAL_BASE (fsLit "foldr")      foldrIdKey
    
    1084 1087
     buildName         = varQual gHC_INTERNAL_BASE (fsLit "build")      buildIdKey
    
    1085 1088
     augmentName       = varQual gHC_INTERNAL_BASE (fsLit "augment")    augmentIdKey
    
    1086
    -mapName           = varQual gHC_INTERNAL_BASE (fsLit "map")        mapIdKey
    
    1087 1089
     assertName        = varQual gHC_INTERNAL_BASE (fsLit "assert")     assertIdKey
    
    1088 1090
     fromStringName    = varQual gHC_INTERNAL_DATA_STRING (fsLit "fromString") fromStringClassOpKey
    
    1089 1091
     
    
    ... ... @@ -2063,7 +2065,7 @@ rootMainKey, runMainKey :: KnownKeyNameKey
    2063 2065
     rootMainKey                   = mkPreludeMiscIdUnique 101
    
    2064 2066
     runMainKey                    = mkPreludeMiscIdUnique 102
    
    2065 2067
     
    
    2066
    -thenIOIdKey, lazyIdKey, assertErrorIdKey, oneShotKey, runRWKey, seqHashKey :: KnownKeyNameKey
    
    2068
    +thenIOIdKey, lazyIdKey, assertErrorIdKey, oneShotKey, runRWKey :: KnownKeyNameKey
    
    2067 2069
     thenIOIdKey                   = mkPreludeMiscIdUnique 103
    
    2068 2070
     lazyIdKey                     = mkPreludeMiscIdUnique 104
    
    2069 2071
     assertErrorIdKey              = mkPreludeMiscIdUnique 105
    
    ... ... @@ -2096,52 +2098,53 @@ rationalToFloatIdKey, rationalToDoubleIdKey :: KnownKeyNameKey
    2096 2098
     rationalToFloatIdKey   = mkPreludeMiscIdUnique 132
    
    2097 2099
     rationalToDoubleIdKey  = mkPreludeMiscIdUnique 133
    
    2098 2100
     
    
    2099
    -seqHashKey             = mkPreludeMiscIdUnique 134
    
    2100
    -
    
    2101
    -coerceKey :: KnownKeyNameKey
    
    2102
    -coerceKey                     = mkPreludeMiscIdUnique 157
    
    2103 2101
     
    
    2104
    -{-
    
    2105
    -Certain class operations from Prelude classes.  They get their own
    
    2106
    -uniques so we can look them up easily when we want to conjure them up
    
    2107
    -during type checking.
    
    2108
    --}
    
    2102
    +seqHashKey, coerceKey :: KnownKeyNameKey
    
    2103
    +seqHashKey             = mkPreludeMiscIdUnique 134
    
    2104
    +coerceKey              = mkPreludeMiscIdUnique 135
    
    2109 2105
     
    
    2110 2106
     -- Just a placeholder for unbound variables produced by the renamer:
    
    2111 2107
     unboundKey :: KnownKeyNameKey
    
    2112
    -unboundKey                    = mkPreludeMiscIdUnique 158
    
    2108
    +unboundKey             = mkPreludeMiscIdUnique 136
    
    2113 2109
     
    
    2114 2110
     fromIntegerClassOpKey, minusClassOpKey, fromRationalClassOpKey,
    
    2115 2111
         enumFromClassOpKey, enumFromThenClassOpKey, enumFromToClassOpKey,
    
    2116 2112
         enumFromThenToClassOpKey, eqClassOpKey, geClassOpKey, negateClassOpKey,
    
    2117 2113
         bindMClassOpKey, thenMClassOpKey, returnMClassOpKey, fmapClassOpKey
    
    2118 2114
         :: KnownKeyNameKey
    
    2119
    -fromIntegerClassOpKey         = mkPreludeMiscIdUnique 160
    
    2120
    -minusClassOpKey               = mkPreludeMiscIdUnique 161
    
    2121
    -fromRationalClassOpKey        = mkPreludeMiscIdUnique 162
    
    2122
    -enumFromClassOpKey            = mkPreludeMiscIdUnique 163
    
    2123
    -enumFromThenClassOpKey        = mkPreludeMiscIdUnique 164
    
    2124
    -enumFromToClassOpKey          = mkPreludeMiscIdUnique 165
    
    2125
    -enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 166
    
    2126
    -eqClassOpKey                  = mkPreludeMiscIdUnique 167
    
    2127
    -geClassOpKey                  = mkPreludeMiscIdUnique 168
    
    2128
    -negateClassOpKey              = mkPreludeMiscIdUnique 169
    
    2129
    -bindMClassOpKey               = mkPreludeMiscIdUnique 171 -- (>>=)  02L
    
    2130
    -thenMClassOpKey               = mkPreludeMiscIdUnique 172 -- (>>)
    
    2131
    -fmapClassOpKey                = mkPreludeMiscIdUnique 173
    
    2132
    -returnMClassOpKey             = mkPreludeMiscIdUnique 174
    
    2115
    +fromIntegerClassOpKey         = mkPreludeMiscIdUnique 140
    
    2116
    +minusClassOpKey               = mkPreludeMiscIdUnique 141
    
    2117
    +fromRationalClassOpKey        = mkPreludeMiscIdUnique 142
    
    2118
    +enumFromClassOpKey            = mkPreludeMiscIdUnique 143
    
    2119
    +enumFromThenClassOpKey        = mkPreludeMiscIdUnique 144
    
    2120
    +enumFromToClassOpKey          = mkPreludeMiscIdUnique 145
    
    2121
    +enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 146
    
    2122
    +
    
    2123
    +eqClassOpKey                  = mkPreludeMiscIdUnique 147
    
    2124
    +geClassOpKey                  = mkPreludeMiscIdUnique 148
    
    2125
    +leClassOpKey                  = mkPreludeMiscIdUnique 149
    
    2126
    +ltClassOpKey                  = mkPreludeMiscIdUnique 150
    
    2127
    +gtClassOpKey                  = mkPreludeMiscIdUnique 151
    
    2128
    +compareClassOpKey             = mkPreludeMiscIdUnique 152
    
    2129
    +
    
    2130
    +
    
    2131
    +negateClassOpKey              = mkPreludeMiscIdUnique 153
    
    2132
    +bindMClassOpKey               = mkPreludeMiscIdUnique 154
    
    2133
    +thenMClassOpKey               = mkPreludeMiscIdUnique 155 -- (>>)
    
    2134
    +fmapClassOpKey                = mkPreludeMiscIdUnique 156
    
    2135
    +returnMClassOpKey             = mkPreludeMiscIdUnique 157
    
    2133 2136
     
    
    2134 2137
     -- Recursive do notation
    
    2135 2138
     mfixIdKey :: KnownKeyNameKey
    
    2136
    -mfixIdKey       = mkPreludeMiscIdUnique 175
    
    2139
    +mfixIdKey       = mkPreludeMiscIdUnique 158
    
    2137 2140
     
    
    2138 2141
     -- MonadFail operations
    
    2139 2142
     failMClassOpKey :: KnownKeyNameKey
    
    2140
    -failMClassOpKey = mkPreludeMiscIdUnique 176
    
    2143
    +failMClassOpKey = mkPreludeMiscIdUnique 159
    
    2141 2144
     
    
    2142 2145
     -- fromLabel
    
    2143 2146
     fromLabelClassOpKey :: KnownKeyNameKey
    
    2144
    -fromLabelClassOpKey = mkPreludeMiscIdUnique 177
    
    2147
    +fromLabelClassOpKey = mkPreludeMiscIdUnique 160
    
    2145 2148
     
    
    2146 2149
     -- Arrow notation
    
    2147 2150
     arrAIdKey, composeAIdKey, firstAIdKey, appAIdKey, choiceAIdKey,
    
    ... ... @@ -2180,6 +2183,7 @@ ghciStepIoMClassOpKey = mkPreludeMiscIdUnique 197
    2180 2183
     isListClassKey, fromListClassOpKey, fromListNClassOpKey, toListClassOpKey :: KnownKeyNameKey
    
    2181 2184
     isListClassKey = mkPreludeMiscIdUnique 198
    
    2182 2185
     fromListClassOpKey = mkPreludeMiscIdUnique 199
    
    2186
    +
    
    2183 2187
     fromListNClassOpKey = mkPreludeMiscIdUnique 500
    
    2184 2188
     toListClassOpKey = mkPreludeMiscIdUnique 501
    
    2185 2189
     
    

  • compiler/GHC/HsToCore/ListComp.hs
    ... ... @@ -118,7 +118,7 @@ dsTransStmt (TransStmt { trS_form = form, trS_stmts = stmts, trS_bndrs = binderM
    118 118
     
    
    119 119
         -- Create an unzip function for the appropriate arity and element types and find "map"
    
    120 120
         unzip_stuff' <- mkUnzipBind form from_bndrs_tys
    
    121
    -    map_id <- dsLookupGlobalId mapName
    
    121
    +    map_id <- dsLookupKnownKeyId mapIdKey
    
    122 122
     
    
    123 123
         -- Generate the expressions to build the grouped list
    
    124 124
         let -- First we apply the grouping function to the inner list
    

  • compiler/GHC/HsToCore/Monad.hs
    ... ... @@ -27,7 +27,7 @@ module GHC.HsToCore.Monad (
    27 27
             dsLookupGlobal, dsLookupGlobalId, dsLookupTyCon,
    
    28 28
             dsLookupDataCon, dsLookupConLike,
    
    29 29
     
    
    30
    -        dsLookupKnownKey, dsLookupKnownKeyTyCon, dsLookupKnownKeyId,
    
    30
    +        dsLookupKnownKeyTyCon, dsLookupKnownKeyId,
    
    31 31
     
    
    32 32
             DsMetaEnv, DsMetaVal(..), dsGetMetaEnv, dsLookupMetaEnv, dsExtendMetaEnv,
    
    33 33
     
    
    ... ... @@ -563,13 +563,26 @@ mkNamePprCtxDs = ds_name_ppr_ctx <$> getGblEnv
    563 563
     instance MonadThings (IOEnv (Env DsGblEnv DsLclEnv)) where
    
    564 564
         lookupThing = dsLookupGlobal
    
    565 565
     
    
    566
    -dsLookupKnownKey :: KnownKeyNameKey -> DsM TyThing
    
    567
    -dsLookupKnownKey uniq
    
    566
    +dsGetKnownKeySource :: DsM KnownKeyNameSource
    
    567
    +dsGetKnownKeySource
    
    568 568
       = do { rebindable_path <- goptM Opt_RebindableKnownKeyNames
    
    569
    -       ; mb_rdr_env <- if rebindable_path
    
    570
    -                       then do { rdr_env <- dsGetGlobalRdrEnv
    
    571
    -                               ; return (KKNS_InScope rdr_env) }
    
    572
    -                       else return KKNS_FromModule
    
    569
    +       ; if rebindable_path
    
    570
    +         then do { rdr_env <- dsGetGlobalRdrEnv
    
    571
    +                 ; return (KKNS_InScope rdr_env) }
    
    572
    +         else return KKNS_FromModule }
    
    573
    +
    
    574
    +dsLookupKnownKeyName :: KnownKeyNameKey -> DsM Name
    
    575
    +dsLookupKnownKeyName uniq
    
    576
    +  = do { rebindable_path <- dsGetKnownKeySource
    
    577
    +       ; dsToIfL $
    
    578
    +         do { mb_res <- lookupKnownKeyName mb_rdr_env uniq
    
    579
    +            ; case mb_res of
    
    580
    +                 Succeeded name -> return name
    
    581
    +                 Failed msg -> failIfM (pprDiagnostic msg) } }
    
    582
    +
    
    583
    +dsLookupKnownKeyThing :: KnownKeyNameKey -> DsM TyThing
    
    584
    +dsLookupKnownKeyThing uniq
    
    585
    +  = do { rebindable_path <- dsGetKnownKeySource
    
    573 586
            ; dsToIfL $
    
    574 587
              do { mb_res <- lookupKnownKeyThing mb_rdr_env uniq
    
    575 588
                 ; case mb_res of
    
    ... ... @@ -578,11 +591,11 @@ dsLookupKnownKey uniq
    578 591
     
    
    579 592
     dsLookupKnownKeyTyCon :: KnownKeyNameKey -> DsM TyCon
    
    580 593
     dsLookupKnownKeyTyCon uniq
    
    581
    -  = tyThingTyCon <$> dsLookupKnownKey uniq
    
    594
    +  = tyThingTyCon <$> dsLookupKnownKeyThing uniq
    
    582 595
     
    
    583 596
     dsLookupKnownKeyId :: KnownKeyNameKey -> DsM Id
    
    584 597
     dsLookupKnownKeyId uniq
    
    585
    -  = tyThingId <$> dsLookupKnownKey uniq
    
    598
    +  = tyThingId <$> dsLookupKnownKeyThing uniq
    
    586 599
     
    
    587 600
     dsLookupGlobal :: Name -> DsM TyThing
    
    588 601
     -- Very like GHC.Tc.Utils.Env.tcLookupGlobal
    

  • compiler/GHC/HsToCore/Quote.hs
    ... ... @@ -2315,9 +2315,14 @@ lookupOccDsM n
    2315 2315
     globalVar :: Name -> DsM (Core TH.Name)
    
    2316 2316
     globalVar n =
    
    2317 2317
       case nameModule_maybe n of
    
    2318
    -    Just m -> globalVarExternal m (getOccName n)
    
    2318
    +    Just m  -> globalVarExternal m (getOccName n)
    
    2319 2319
         Nothing -> globalVarLocal (getUnique n) (getOccName n)
    
    2320 2320
     
    
    2321
    +globalKnownKey :: KnonwKeyNameKey -> DsM (Core TH.Name)
    
    2322
    +globalKnownKey key
    
    2323
    +  = do { name <- dsLookupKnownKeyName key
    
    2324
    +       ; globalVar name }
    
    2325
    +
    
    2321 2326
     globalVarLocal :: Unique -> OccName -> DsM (Core TH.Name)
    
    2322 2327
     globalVarLocal unique name
    
    2323 2328
       = do  { MkC occ <- occNameLit name
    
    ... ... @@ -3150,7 +3155,8 @@ repRdrName rdr_name = do
    3150 3155
           occ <- occNameLit occ
    
    3151 3156
           repNameQ mod occ
    
    3152 3157
         Orig m n -> lift $ globalVarExternal m n
    
    3153
    -    Exact n -> lift $ globalVar n
    
    3158
    +    Exact (ExactName n)    -> lift $ globalVar n
    
    3159
    +    Exact (ExactKey key _) -> lift $ globalKnownKey key
    
    3154 3160
     
    
    3155 3161
     repNameS :: Core String -> MetaM (Core TH.Name)
    
    3156 3162
     repNameS (MkC name) = rep2_nw mkNameSName [name]
    

  • compiler/GHC/Parser/PostProcess.hs
    ... ... @@ -864,7 +864,9 @@ setRdrNameSpace :: RdrName -> NameSpace -> RdrName
    864 864
     setRdrNameSpace (Unqual occ) ns = Unqual (setOccNameSpace ns occ)
    
    865 865
     setRdrNameSpace (Qual m occ) ns = Qual m (setOccNameSpace ns occ)
    
    866 866
     setRdrNameSpace (Orig m occ) ns = Orig m (setOccNameSpace ns occ)
    
    867
    -setRdrNameSpace (Exact n)    ns
    
    867
    +setRdrNameSpace (Exact (ExactKey k o)) ns -- Highly suspicious
    
    868
    +  = Exact (ExactKey k (setOccNameSpace ns o))
    
    869
    +setRdrNameSpace (Exact (ExactName n))    ns
    
    868 870
       | Just thing <- wiredInNameTyThing_maybe n
    
    869 871
       = setWiredInNameSpace thing ns
    
    870 872
         -- Preserve Exact Names for wired-in things,
    
    ... ... @@ -875,7 +877,7 @@ setRdrNameSpace (Exact n) ns
    875 877
     
    
    876 878
       | otherwise   -- This can happen when quoting and then
    
    877 879
                     -- splicing a fixity declaration for a type
    
    878
    -  = Exact (mkSystemNameAt (nameUnique n) occ (nameSrcSpan n))
    
    880
    +  = nameRdrName (mkSystemNameAt (nameUnique n) occ (nameSrcSpan n))
    
    879 881
       where
    
    880 882
         occ = setOccNameSpace ns (nameOccName n)
    
    881 883
     
    
    ... ... @@ -884,13 +886,13 @@ setWiredInNameSpace (ATyCon tc) ns
    884 886
       | isDataConNameSpace ns
    
    885 887
       = ty_con_data_con tc
    
    886 888
       | isTcClsNameSpace ns
    
    887
    -  = Exact (getName tc)      -- No-op
    
    889
    +  = nameRdrName (getName tc)      -- No-op
    
    888 890
     
    
    889 891
     setWiredInNameSpace (AConLike (RealDataCon dc)) ns
    
    890 892
       | isTcClsNameSpace ns
    
    891 893
       = data_con_ty_con dc
    
    892 894
       | isDataConNameSpace ns
    
    893
    -  = Exact (getName dc)      -- No-op
    
    895
    +  = nameRdrName (getName dc)      -- No-op
    
    894 896
     
    
    895 897
     setWiredInNameSpace thing ns
    
    896 898
       = pprPanic "setWiredinNameSpace" (pprNameSpace ns <+> ppr thing)
    
    ... ... @@ -899,10 +901,10 @@ ty_con_data_con :: TyCon -> RdrName
    899 901
     ty_con_data_con tc
    
    900 902
       | isTupleTyCon tc
    
    901 903
       , Just dc <- tyConSingleDataCon_maybe tc
    
    902
    -  = Exact (getName dc)
    
    904
    +  = nameRdrName (getName dc)
    
    903 905
     
    
    904 906
       | tc `hasKey` listTyConKey
    
    905
    -  = Exact nilDataConName
    
    907
    +  = nameRdrName nilDataConName
    
    906 908
     
    
    907 909
       | otherwise  -- See Note [setRdrNameSpace for wired-in names]
    
    908 910
       = Unqual (setOccNameSpace srcDataName (getOccName tc))
    
    ... ... @@ -911,10 +913,10 @@ data_con_ty_con :: DataCon -> RdrName
    911 913
     data_con_ty_con dc
    
    912 914
       | let tc = dataConTyCon dc
    
    913 915
       , isTupleTyCon tc
    
    914
    -  = Exact (getName tc)
    
    916
    +  = nameRdrName (getName tc)
    
    915 917
     
    
    916 918
       | dc `hasKey` nilDataConKey
    
    917
    -  = Exact listTyConName
    
    919
    +  = nameRdrName listTyConName
    
    918 920
     
    
    919 921
       | otherwise  -- See Note [setRdrNameSpace for wired-in names]
    
    920 922
       = Unqual (setOccNameSpace tcClsName (getOccName dc))
    

  • compiler/GHC/Rename/Env.hs
    ... ... @@ -485,8 +485,13 @@ data ExactOrOrigResult
    485 485
     -- Does the actual looking up an Exact or Orig name, see 'ExactOrOrigResult'
    
    486 486
     lookupExactOrOrig_base :: RdrName -> RnM ExactOrOrigResult
    
    487 487
     lookupExactOrOrig_base rdr_name
    
    488
    -  | Just n <- isExact_maybe rdr_name   -- This happens in derived code
    
    488
    +  | Just n <- rdrNameExactName_maybe rdr_name   -- This happens in derived code
    
    489 489
       = cvtEither <$> lookupExactOcc_either n
    
    490
    +
    
    491
    +  | Just key <- exactKeyRdr_maybe rdr_name
    
    492
    +  = do { name <- rnLookupKnownKeyName key
    
    493
    +       ; cvtEither <$> lookupExactOcc_either name }
    
    494
    +
    
    490 495
       | Just (rdr_mod, rdr_occ) <- isOrig_maybe rdr_name
    
    491 496
       = do { nm <- lookupOrig rdr_mod rdr_occ
    
    492 497
     
    
    ... ... @@ -499,6 +504,7 @@ lookupExactOrOrig_base rdr_name
    499 504
            ; return $ case mb_gre of
    
    500 505
               Left  err -> ExactOrOrigError err
    
    501 506
               Right gre -> FoundExactOrOrig gre }
    
    507
    +
    
    502 508
       | otherwise = return NotExactOrOrig
    
    503 509
       where
    
    504 510
         cvtEither (Left e)    = ExactOrOrigError e
    

  • compiler/GHC/Tc/Deriv/Generate.hs
    ... ... @@ -1656,17 +1656,17 @@ gen_Lift_binds loc (DerivInstTys{ dit_rep_tc = tycon
    1656 1656
                 as_needed    = take con_arity as_RDRs
    
    1657 1657
                 lift_Expr    = mk_bracket finish
    
    1658 1658
                 con_brack :: LHsExpr GhcPs
    
    1659
    -            con_brack    = nlHsApps (Exact conEName)
    
    1659
    +            con_brack    = nlHsApps (nameRdrName conEName)
    
    1660 1660
                                 [noLocA $ HsUntypedBracket noExtField
    
    1661
    -                              $ VarBr noSrcSpanA True (noLocA (Exact (dataConName data_con)))]
    
    1661
    +                              $ VarBr noSrcSpanA True (noLocA (nameRdrName (dataConName data_con)))]
    
    1662 1662
     
    
    1663
    -            finish = foldl' (\b1 b2 -> nlHsApps (Exact appEName) [b1, b2]) con_brack (map lift_var as_needed)
    
    1663
    +            finish = foldl' (\b1 b2 -> nlHsApps (nameRdrName appEName) [b1, b2]) con_brack (map lift_var as_needed)
    
    1664 1664
     
    
    1665 1665
                 lift_var :: RdrName -> LHsExpr (GhcPass 'Parsed)
    
    1666 1666
                 lift_var x   = nlHsPar (mk_lift_expr x)
    
    1667 1667
     
    
    1668 1668
                 mk_lift_expr :: RdrName -> LHsExpr (GhcPass 'Parsed)
    
    1669
    -            mk_lift_expr x = nlHsApps (Exact liftName) [nlHsVar x]
    
    1669
    +            mk_lift_expr x = nlHsApps (nameRdrName liftName) [nlHsVar x]
    
    1670 1670
     
    
    1671 1671
     {-
    
    1672 1672
     ************************************************************************
    
    ... ... @@ -2612,7 +2612,7 @@ new_dc_deriv_rdr_name loc dc occ_fun
    2612 2612
     newAuxBinderRdrName :: SrcSpan -> Name -> (OccName -> OccName) -> TcM RdrName
    
    2613 2613
     newAuxBinderRdrName loc parent occ_fun = do
    
    2614 2614
       uniq <- newUnique
    
    2615
    -  pure $ Exact $ mkSystemNameAt uniq (occ_fun (nameOccName parent)) loc
    
    2615
    +  pure $ nameRdrName $ mkSystemNameAt uniq (occ_fun (nameOccName parent)) loc
    
    2616 2616
     
    
    2617 2617
     -- | @getPossibleDataCons tycon tycon_args@ returns the constructors of @tycon@
    
    2618 2618
     -- whose return types match when checked against @tycon_args@.
    

  • compiler/GHC/Tc/Gen/Splice.hs
    ... ... @@ -1552,12 +1552,12 @@ instance TH.Quasi TcM where
    1552 1552
             = addErr $ TcRnTHError $ AddTopDeclsError $ InvalidTopDecl d
    
    1553 1553
     
    
    1554 1554
           bindName :: RdrName -> TcM ()
    
    1555
    -      bindName (Exact n)
    
    1555
    +      bindName rdr_name
    
    1556
    +        | Just n <- rdrNameExactName_maybe rdr_nname
    
    1556 1557
             = do { th_topnames_var <- fmap tcg_th_topnames getGblEnv
    
    1557
    -             ; updTcRef th_topnames_var (\ns -> extendNameSet ns n)
    
    1558
    -             }
    
    1559
    -
    
    1560
    -      bindName name = addErr $ TcRnTHError $ THNameError $ NonExactName name
    
    1558
    +             ; updTcRef th_topnames_var (\ns -> extendNameSet ns n) }
    
    1559
    +        | otherwise
    
    1560
    +        = addErr $ TcRnTHError $ THNameError $ NonExactName rdr_name
    
    1561 1561
     
    
    1562 1562
       qAddForeignFilePath lang fp = do
    
    1563 1563
         var <- fmap tcg_th_foreign_files getGblEnv
    

  • compiler/GHC/ThToHs.hs
    ... ... @@ -1889,7 +1889,7 @@ cvtTypeKind typeOrKind ty
    1889 1889
     
    
    1890 1890
     hsTypeToArrow :: LHsType GhcPs -> HsMultAnn GhcPs
    
    1891 1891
     hsTypeToArrow w = case unLoc w of
    
    1892
    -                     HsTyVar _ _ (L _ (isExact_maybe -> Just n))
    
    1892
    +                     HsTyVar _ _ (L _ (rdrNameExactName_maybe -> Just n))
    
    1893 1893
                             | n == oneDataConName -> HsLinearAnn noAnn
    
    1894 1894
                             | n == manyDataConName -> HsUnannotated (EpArrow noAnn)
    
    1895 1895
                          _ -> HsExplicitMult (noAnn, EpArrow noAnn) w
    
    ... ... @@ -2319,7 +2319,7 @@ thOrigOrExactRdrName occ th_ns pkg mod = knownOrigToExactRdrName (thOrigRdrName
    2319 2319
     knownOrigToExactRdrName :: RdrName -> RdrName
    
    2320 2320
     knownOrigToExactRdrName (Orig mod occ)
    
    2321 2321
       | Just name <- isKnownOrigName_maybe mod occ
    
    2322
    -  = Exact name
    
    2322
    +  = nameRdrName name
    
    2323 2323
     knownOrigToExactRdrName rdr = rdr
    
    2324 2324
     
    
    2325 2325
     -- Return an exact RdrName if we're dealing with built-in syntax.
    

  • compiler/GHC/Types/Name/Reader.hs
    ... ... @@ -26,18 +26,20 @@
    26 26
     module GHC.Types.Name.Reader (
    
    27 27
             -- * The main type
    
    28 28
             RdrName(..),    -- Constructors exported only to GHC.Iface.Binary
    
    29
    +        ExactRdrName(..),
    
    29 30
     
    
    30 31
             -- ** Construction
    
    31 32
             mkRdrUnqual, mkRdrQual,
    
    32 33
             mkUnqual, mkVarUnqual, mkQual, mkOrig,
    
    33
    -        nameRdrName, getRdrName,
    
    34
    +        nameRdrName, knownKeyRdrName, getRdrName,
    
    34 35
     
    
    35 36
             -- ** Destruction
    
    36 37
             rdrNameOcc, rdrNameSpace,
    
    37 38
             demoteRdrName, demoteRdrNameTcCls, demoteRdrNameTv,
    
    38 39
             promoteRdrName,
    
    39 40
             isRdrDataCon, isRdrTyVar, isRdrTc, isQual, isQual_maybe, isUnqual,
    
    40
    -        isOrig, isOrig_maybe, isExact, isExact_maybe, isSrcRdrName,
    
    41
    +        isOrig, isOrig_maybe, isExact,
    
    42
    +        rdrNameExactName_maybe, rdrNameKnownKey_maybe, isSrcRdrName,
    
    41 43
     
    
    42 44
             -- ** Preserving user-written qualification
    
    43 45
             WithUserRdr(..), noUserRdr, unLocWithUserRdr, userRdrName,
    
    ... ... @@ -196,7 +198,7 @@ data RdrName
    196 198
             -- we want to say \"Use Prelude.map dammit\". One of these
    
    197 199
             -- can be created with 'mkOrig'
    
    198 200
     
    
    199
    -  | Exact ExactSpec
    
    201
    +  | Exact ExactRdrName
    
    200 202
             -- ^ Exact name
    
    201 203
             --
    
    202 204
             -- We know exactly the 'Name'. This is used:
    
    ... ... @@ -209,9 +211,14 @@ data RdrName
    209 211
             -- Such a 'RdrName' can be created by using 'getRdrName' on a 'Name'
    
    210 212
       deriving Data
    
    211 213
     
    
    212
    -data ExactSpec
    
    213
    -  = ExactName Name             -- Use this when you know the exact Name
    
    214
    -  | ExactKey  KnownKeyNameKey  -- Use this for known-key names
    
    214
    +data ExactRdrName
    
    215
    +  = ExactName -- Use this when you know the exact Name
    
    216
    +      Name
    
    217
    +
    
    218
    +  | ExactKey  -- Use this for known-key names
    
    219
    +      KnownKeyNameKey
    
    220
    +      OccName            -- This OccName corresponds to the key
    
    221
    +
    
    215 222
       deriving Data
    
    216 223
     
    
    217 224
     {-
    
    ... ... @@ -229,7 +236,8 @@ rdrNameOcc :: RdrName -> OccName
    229 236
     rdrNameOcc (Qual _ occ) = occ
    
    230 237
     rdrNameOcc (Unqual occ) = occ
    
    231 238
     rdrNameOcc (Orig _ occ) = occ
    
    232
    -rdrNameOcc (Exact name) = nameOccName name
    
    239
    +rdrNameOcc (Exact (ExactName name)) = nameOccName name
    
    240
    +rdrNameOcc (Exact (ExactKey _ occ)) = occ
    
    233 241
     
    
    234 242
     rdrNameSpace :: RdrName -> NameSpace
    
    235 243
     rdrNameSpace = occNameSpace . rdrNameOcc
    
    ... ... @@ -291,16 +299,19 @@ mkQual sp (m, n) = Qual (mkModuleNameFS m) (mkOccNameFS sp n)
    291 299
     getRdrName :: NamedThing thing => thing -> RdrName
    
    292 300
     getRdrName name = nameRdrName (getName name)
    
    293 301
     
    
    302
    +knownKeyRdrName :: KnownKeyNameKey -> OccName -> RdrName
    
    303
    +knownKeyRdrName key occ = Exact (ExactKey key occ)
    
    304
    +
    
    294 305
     nameRdrName :: Name -> RdrName
    
    295 306
     nameRdrName name = Exact (ExactName name)
    
    296 307
     -- Keep the Name even for Internal names, so that the
    
    297 308
     -- unique is still there for debug printing, particularly
    
    298 309
     -- of Types (which are converted to IfaceTypes before printing)
    
    299 310
     
    
    300
    -nukeExact :: Name -> RdrName
    
    301
    -nukeExact n
    
    302
    -  | isExternalName n = Orig (nameModule n) (nameOccName n)
    
    303
    -  | otherwise        = Unqual (nameOccName n)
    
    311
    +-- nukeExact :: Name -> RdrName
    
    312
    +-- nukeExact n
    
    313
    +--  | isExternalName n = Orig (nameModule n) (nameOccName n)
    
    314
    +--  | otherwise        = Unqual (nameOccName n)
    
    304 315
     
    
    305 316
     isRdrDataCon :: RdrName -> Bool
    
    306 317
     isRdrTyVar   :: RdrName -> Bool
    
    ... ... @@ -339,9 +350,13 @@ isExact :: RdrName -> Bool
    339 350
     isExact (Exact _) = True
    
    340 351
     isExact _         = False
    
    341 352
     
    
    342
    -isExact_maybe :: RdrName -> Maybe Name
    
    343
    -isExact_maybe (Exact n) = Just n
    
    344
    -isExact_maybe _         = Nothing
    
    353
    +rdrNameExactName_maybe :: RdrName -> Maybe Name
    
    354
    +rdrNameExactName_maybe (Exact (ExactName n)) = Just n
    
    355
    +rdrNameExactName_maybe _                     = Nothing
    
    356
    +
    
    357
    +rdrNameKnownKey_maybe :: RdrName -> Maybe KnownKeyNameKey
    
    358
    +rdrNameKnownKey_maybe (Exact (ExactKey k _)) = Just k
    
    359
    +rdrNameKnownKey_maybe _                      = Nothing
    
    345 360
     
    
    346 361
     {-
    
    347 362
     ************************************************************************
    
    ... ... @@ -352,7 +367,8 @@ isExact_maybe _ = Nothing
    352 367
     -}
    
    353 368
     
    
    354 369
     instance Outputable RdrName where
    
    355
    -    ppr (Exact name)   = ppr name
    
    370
    +    ppr (Exact (ExactName name))   = ppr name
    
    371
    +    ppr (Exact (ExactKey key occ)) = ppr occ <> braces (pprKnownKey key)
    
    356 372
         ppr (Unqual occ)   = ppr occ
    
    357 373
         ppr (Qual mod occ) = ppr mod <> dot <> ppr occ
    
    358 374
         ppr (Orig mod occ) = getPprStyle (\sty -> pprModulePrefix sty mod Nothing occ <> ppr occ)
    
    ... ... @@ -364,16 +380,28 @@ instance OutputableBndr RdrName where
    364 380
     
    
    365 381
         pprInfixOcc  rdr = pprInfixVar  (isSymOcc (rdrNameOcc rdr)) (ppr rdr)
    
    366 382
         pprPrefixOcc rdr
    
    367
    -      | Just name <- isExact_maybe rdr = pprPrefixName name
    
    383
    +      | Just name <- rdrNameExactName_maybe rdr = pprPrefixName name
    
    368 384
                  -- pprPrefixName has some special cases, so
    
    369 385
                  -- we delegate to them rather than reproduce them
    
    370 386
           | otherwise = pprPrefixVar (isSymOcc (rdrNameOcc rdr)) (ppr rdr)
    
    371 387
     
    
    388
    +instance Eq ExactRdrName where
    
    389
    +    (ExactName n1)  == (ExactName n2)  = n1==n2
    
    390
    +    (ExactKey k1 _) == (ExactKey k2 _) = k1==k2
    
    391
    +    _               == _               = False
    
    392
    +
    
    393
    +instance Ord ExactRdrName where
    
    394
    +    (ExactName n1)  `compare` (ExactName n2)  = n1 `compare` n2
    
    395
    +    (ExactName {})  `compare` (ExactKey {})   = LT
    
    396
    +    (ExactKey {})   `compare` (ExactName {})  = GT
    
    397
    +    (ExactKey k1 _) `compare` (ExactKey k2 _) = k1 `nonDetCmpUnique` k2
    
    398
    +
    
    372 399
     instance Eq RdrName where
    
    373 400
         (Exact n1)    == (Exact n2)    = n1==n2
    
    401
    +
    
    374 402
             -- Convert exact to orig
    
    375
    -    (Exact n1)    == r2@(Orig _ _) = nukeExact n1 == r2
    
    376
    -    r1@(Orig _ _) == (Exact n2)    = r1 == nukeExact n2
    
    403
    +--    (Exact n1)    == r2@(Orig _ _) = nukeExact n1 == r2
    
    404
    +--    r1@(Orig _ _) == (Exact n2)    = r1 == nukeExact n2
    
    377 405
     
    
    378 406
         (Orig m1 o1)  == (Orig m2 o2)  = m1==m2 && o1==o2
    
    379 407
         (Qual m1 o1)  == (Qual m2 o2)  = m1==m2 && o1==o2
    
    ... ... @@ -471,7 +499,7 @@ lookupLocalRdrEnv (LRE { lre_env = env, lre_in_scope = ns }) rdr
    471 499
       = lookupOccEnv env occ
    
    472 500
     
    
    473 501
       -- See Note [Local bindings with Exact Names]
    
    474
    -  | Exact name <- rdr
    
    502
    +  | Just name <- rdrNameExactName_maybe rdr
    
    475 503
       , name `elemNameSet` ns
    
    476 504
       = Just name
    
    477 505
     
    
    ... ... @@ -492,8 +520,9 @@ lookupLocalRdrOcc (LRE { lre_env = env }) occ = lookupOccEnv env occ
    492 520
     elemLocalRdrEnv :: RdrName -> LocalRdrEnv -> Bool
    
    493 521
     elemLocalRdrEnv rdr_name (LRE { lre_env = env, lre_in_scope = ns })
    
    494 522
       = case rdr_name of
    
    495
    -      Unqual occ -> occ  `elemOccEnv` env
    
    496
    -      Exact name -> name `elemNameSet` ns  -- See Note [Local bindings with Exact Names]
    
    523
    +      Unqual occ             -> occ  `elemOccEnv` env
    
    524
    +      Exact (ExactName name) -> name `elemNameSet` ns  -- See Note [Local bindings with Exact Names]
    
    525
    +      Exact (ExactKey{})     -> False
    
    497 526
           Qual {} -> False
    
    498 527
           Orig {} -> False
    
    499 528
     
    

  • compiler/GHC/Types/Unique.hs
    ... ... @@ -67,6 +67,7 @@ import GHC.Exts (indexCharOffAddr#, Char(..), Int(..))
    67 67
     
    
    68 68
     import GHC.Word         ( Word64 )
    
    69 69
     import Data.Char        ( chr, ord, isPrint )
    
    70
    +import Data.Data        ( Data )
    
    70 71
     
    
    71 72
     import Language.Haskell.Syntax.Module.Name
    
    72 73
     
    
    ... ... @@ -128,6 +129,7 @@ Prefer `env_ut :: Char` and
    128 129
     --
    
    129 130
     -- These are sometimes also referred to as \"keys\" in comments in GHC.
    
    130 131
     newtype Unique = MkUnique Word64
    
    132
    +  deriving Data   -- Needed only because KnownKeyNameKey is in RdrName
    
    131 133
     
    
    132 134
     data UniqueTag
    
    133 135
       = AlphaTyVarTag