[Git][ghc/ghc][wip/strings-refactor] Cleanup String/FastString conversions

Krzysztof Gogolewski (@monoidal) gitlab at gitlab.haskell.org
Mon Oct 24 19:33:38 UTC 2022



Krzysztof Gogolewski pushed to branch wip/strings-refactor at Glasgow Haskell Compiler / GHC


Commits:
854921d9 by Krzysztof Gogolewski at 2022-10-24T21:32:09+02:00
Cleanup String/FastString conversions

Remove unused mkPtrString and isUnderscoreFS.
We no longer use mkPtrString since 1d03d8bef96.

Remove unnecessary conversions between FastString and String and back.

- - - - -


17 changed files:

- compiler/GHC/Core/Opt/Stats.hs
- compiler/GHC/Data/FastString.hs
- compiler/GHC/Hs/Dump.hs
- compiler/GHC/HsToCore/Foreign/C.hs
- compiler/GHC/HsToCore/Pmc/Solver/Types.hs
- compiler/GHC/HsToCore/Quote.hs
- compiler/GHC/Parser.y
- compiler/GHC/Parser/HaddockLex.x
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/ThToHs.hs
- compiler/GHC/Types/CostCentre.hs
- compiler/GHC/Types/FieldLabel.hs
- compiler/GHC/Types/Literal.hs
- compiler/GHC/Types/Name/Occurrence.hs
- compiler/GHC/Types/Name/Occurrence.hs-boot
- compiler/GHC/Unit/State.hs
- ghc/GHCi/UI.hs


Changes:

=====================================
compiler/GHC/Core/Opt/Stats.hs
=====================================
@@ -213,7 +213,7 @@ pprTickCounts counts
 
 pprTickGroup :: NonEmpty (Tick, Int) -> SDoc
 pprTickGroup group@((tick1,_) :| _)
-  = hang (int (sum (fmap snd group)) <+> text (tickString tick1))
+  = hang (int (sum (fmap snd group)) <+> pprTickType tick1)
        2 (vcat [ int n <+> pprTickCts tick
                                     -- flip as we want largest first
                | (tick,n) <- sortOn (Down . snd) (NE.toList group)])
@@ -242,7 +242,7 @@ data Tick  -- See Note [Which transformations are innocuous]
   | SimplifierDone              -- Ticked at each iteration of the simplifier
 
 instance Outputable Tick where
-  ppr tick = text (tickString tick) <+> pprTickCts tick
+  ppr tick = pprTickType tick <+> pprTickCts tick
 
 instance Eq Tick where
   a == b = case a `cmpTick` b of
@@ -270,23 +270,23 @@ tickToTag (FillInCaseDefault _)         = 13
 tickToTag SimplifierDone                = 16
 tickToTag (AltMerge _)                  = 17
 
-tickString :: Tick -> String
-tickString (PreInlineUnconditionally _) = "PreInlineUnconditionally"
-tickString (PostInlineUnconditionally _)= "PostInlineUnconditionally"
-tickString (UnfoldingDone _)            = "UnfoldingDone"
-tickString (RuleFired _)                = "RuleFired"
-tickString LetFloatFromLet              = "LetFloatFromLet"
-tickString (EtaExpansion _)             = "EtaExpansion"
-tickString (EtaReduction _)             = "EtaReduction"
-tickString (BetaReduction _)            = "BetaReduction"
-tickString (CaseOfCase _)               = "CaseOfCase"
-tickString (KnownBranch _)              = "KnownBranch"
-tickString (CaseMerge _)                = "CaseMerge"
-tickString (AltMerge _)                 = "AltMerge"
-tickString (CaseElim _)                 = "CaseElim"
-tickString (CaseIdentity _)             = "CaseIdentity"
-tickString (FillInCaseDefault _)        = "FillInCaseDefault"
-tickString SimplifierDone               = "SimplifierDone"
+pprTickType :: Tick -> SDoc
+pprTickType (PreInlineUnconditionally _) = text "PreInlineUnconditionally"
+pprTickType (PostInlineUnconditionally _)= text "PostInlineUnconditionally"
+pprTickType (UnfoldingDone _)            = text "UnfoldingDone"
+pprTickType (RuleFired _)                = text "RuleFired"
+pprTickType LetFloatFromLet              = text "LetFloatFromLet"
+pprTickType (EtaExpansion _)             = text "EtaExpansion"
+pprTickType (EtaReduction _)             = text "EtaReduction"
+pprTickType (BetaReduction _)            = text "BetaReduction"
+pprTickType (CaseOfCase _)               = text "CaseOfCase"
+pprTickType (KnownBranch _)              = text "KnownBranch"
+pprTickType (CaseMerge _)                = text "CaseMerge"
+pprTickType (AltMerge _)                 = text "AltMerge"
+pprTickType (CaseElim _)                 = text "CaseElim"
+pprTickType (CaseIdentity _)             = text "CaseIdentity"
+pprTickType (FillInCaseDefault _)        = text "FillInCaseDefault"
+pprTickType SimplifierDone               = text "SimplifierDone"
 
 pprTickCts :: Tick -> SDoc
 pprTickCts (PreInlineUnconditionally v) = ppr v


=====================================
compiler/GHC/Data/FastString.hs
=====================================
@@ -30,8 +30,8 @@
 --   * Pointer and size of a Latin-1 encoded string.
 --   * Practically no operations.
 --   * Outputting them is fast.
---   * Generated by 'mkPtrString'.
---   * Length of string literals (mkPtrString "abc") is computed statically
+--   * Generated by 'mkPtrString#'.
+--   * Length of string literals (mkPtrString# "abc"#) is computed statically
 --   * Turn into 'GHC.Utils.Outputable.SDoc' with 'GHC.Utils.Outputable.ptext'
 --   * Requires manual memory management.
 --     Improper use may lead to memory leaks or dangling pointers.
@@ -85,7 +85,6 @@ module GHC.Data.FastString
         concatFS,
         consFS,
         nilFS,
-        isUnderscoreFS,
         lexicalCompareFS,
         uniqCompareFS,
 
@@ -101,7 +100,6 @@ module GHC.Data.FastString
 
         -- ** Construction
         mkPtrString#,
-        mkPtrString,
 
         -- ** Deconstruction
         unpackPtrString,
@@ -134,7 +132,6 @@ import Foreign.C
 import System.IO
 import Data.Data
 import Data.IORef
-import Data.Char
 import Data.Semigroup as Semi
 
 import Foreign
@@ -623,9 +620,6 @@ uniqueOfFS fs = uniq fs
 nilFS :: FastString
 nilFS = mkFastString ""
 
-isUnderscoreFS :: FastString -> Bool
-isUnderscoreFS fs = fs == fsLit "_"
-
 -- -----------------------------------------------------------------------------
 -- Stats
 
@@ -667,30 +661,6 @@ mkPtrString# :: Addr# -> PtrString
 {-# INLINE mkPtrString# #-}
 mkPtrString# a# = PtrString (Ptr a#) (ptrStrLength (Ptr a#))
 
--- | Encode a 'String' into a newly allocated 'PtrString' using Latin-1
--- encoding.  The original string must not contain non-Latin-1 characters
--- (above codepoint @0xff@).
-{-# NOINLINE[0] mkPtrString #-} -- see rules below
-mkPtrString :: String -> PtrString
-mkPtrString s =
- -- we don't use `unsafeDupablePerformIO` here to avoid potential memory leaks
- -- and because someone might be using `eqAddr#` to check for string equality.
- unsafePerformIO (do
-   let len = length s
-   p <- mallocBytes len
-   let
-     loop :: Int -> String -> IO ()
-     loop !_ []    = return ()
-     loop n (c:cs) = do
-        pokeByteOff p n (fromIntegral (ord c) :: Word8)
-        loop (1+n) cs
-   loop 0 s
-   return (PtrString p len)
- )
-
-{-# RULES "mkPtrString"
-    forall x . mkPtrString (unpackCString# x) = mkPtrString#  x #-}
-
 -- | Decode a 'PtrString' back into a 'String' using Latin-1 encoding.
 -- This does not free the memory associated with 'PtrString'.
 unpackPtrString :: PtrString -> String


=====================================
compiler/GHC/Hs/Dump.hs
=====================================
@@ -158,7 +158,7 @@ showAstData bs ba a0 = blankLine $$ showAstData' a0
 
             occName n  =  braces $
                           text "OccName:"
-                      <+> text (occNameString n)
+                      <+> ftext (occNameFS n)
 
             moduleName :: ModuleName -> SDoc
             moduleName m = braces $ text "ModuleName:" <+> ppr m


=====================================
compiler/GHC/HsToCore/Foreign/C.hs
=====================================
@@ -423,7 +423,7 @@ mkFExportCBits dflags c_nm maybe_target arg_htys res_hty is_IO_res_ty cc
   arg_cname n stg_ty
         | libffi    = char '*' <> parens (stg_ty <> char '*') <>
                       text "args" <> brackets (int (n-1))
-        | otherwise = text ('a':show n)
+        | otherwise = char 'a' <> int n
 
   -- generate a libffi-style stub if this is a "wrapper" and libffi is enabled
   libffi = platformMisc_libFFI (platformMisc dflags) && isNothing maybe_target
@@ -552,16 +552,16 @@ mkFExportCBits dflags c_nm maybe_target arg_htys res_hty is_IO_res_ty cc
      ]
 
 mkHObj :: Type -> SDoc
-mkHObj t = text "rts_mk" <> text (showFFIType t)
+mkHObj t = text "rts_mk" <> showFFIType t
 
 unpackHObj :: Type -> SDoc
-unpackHObj t = text "rts_get" <> text (showFFIType t)
+unpackHObj t = text "rts_get" <> showFFIType t
 
 showStgType :: Type -> SDoc
-showStgType t = text "Hs" <> text (showFFIType t)
+showStgType t = text "Hs" <> showFFIType t
 
-showFFIType :: Type -> String
-showFFIType t = getOccString (getName (typeTyCon t))
+showFFIType :: Type -> SDoc
+showFFIType t = ftext (occNameFS (getOccName (typeTyCon t)))
 
 typeTyCon :: Type -> TyCon
 typeTyCon ty


=====================================
compiler/GHC/HsToCore/Pmc/Solver/Types.hs
=====================================
@@ -766,7 +766,7 @@ it's already overloaded.
 
 instance Outputable PmLitValue where
   ppr (PmLitInt i)        = ppr i
-  ppr (PmLitRat r)        = ppr (double (fromRat r)) -- good enough
+  ppr (PmLitRat r)        = double (fromRat r) -- good enough
   ppr (PmLitChar c)       = pprHsChar c
   ppr (PmLitString s)     = pprHsString s
   ppr (PmLitOverInt n i)  = minuses n (ppr i)


=====================================
compiler/GHC/HsToCore/Quote.hs
=====================================
@@ -744,7 +744,7 @@ repForD (L loc (ForeignImport { fd_name = name, fd_sig_ty = typ
       MkC cc' <- repCCallConv cc
       MkC s' <- repSafety s
       cis' <- conv_cimportspec cis
-      MkC str <- coreStringLit (static ++ chStr ++ cis')
+      MkC str <- coreStringLit (mkFastString (static ++ chStr ++ cis'))
       dec <- rep2 forImpDName [cc', s', str, name', typ']
       return (locA loc, dec)
  where
@@ -818,7 +818,7 @@ repRuleD (L loc (HsRule { rd_name = n
                          ; tm_bndrs' <- repListM ruleBndrTyConName
                                                 repRuleBndr
                                                 tm_bndrs
-                         ; n'   <- coreStringLit $ unpackFS $ unLoc n
+                         ; n'   <- coreStringLit $ unLoc n
                          ; act' <- repPhases act
                          ; lhs' <- repLE lhs
                          ; rhs' <- repLE rhs
@@ -1861,7 +1861,7 @@ rep_implicit_param_bind (L loc (IPBind _ (L _ n) (L _ rhs)))
       ; return (locA loc, ipb) }
 
 rep_implicit_param_name :: HsIPName -> MetaM (Core String)
-rep_implicit_param_name (HsIPName name) = coreStringLit (unpackFS name)
+rep_implicit_param_name (HsIPName name) = coreStringLit name
 
 rep_val_binds :: HsValBinds GhcRn -> MetaM [(SrcSpan, Core (M TH.Dec))]
 -- Assumes: all the binders of the binding are already in the meta-env
@@ -2195,8 +2195,8 @@ globalVar name
         ; rep2_nwDsM mkNameLName [occ,uni] }
   where
       mod = assert (isExternalName name) nameModule name
-      name_mod = moduleNameString (moduleName mod)
-      name_pkg = unitString (moduleUnit mod)
+      name_mod = moduleNameFS (moduleName mod)
+      name_pkg = unitFS (moduleUnit mod)
       name_occ = nameOccName name
       mk_varg | isDataOcc name_occ = mkNameG_dName
               | isVarOcc  name_occ = mkNameG_vName
@@ -2235,10 +2235,10 @@ wrapGenSyms binds body@(MkC b)
                       gensym_app (MkC (Lam id body')) }
 
 nameLit :: Name -> DsM (Core String)
-nameLit n = coreStringLit (occNameString (nameOccName n))
+nameLit n = coreStringLit (occNameFS (nameOccName n))
 
 occNameLit :: OccName -> MetaM (Core String)
-occNameLit name = coreStringLit (occNameString name)
+occNameLit name = coreStringLit (occNameFS name)
 
 
 -- %*********************************************************************
@@ -2416,7 +2416,7 @@ repDoBlock doName maybeModName (MkC ss) = do
     coreModNameM :: MetaM (Core (Maybe TH.ModName))
     coreModNameM = case maybeModName of
       Just m -> do
-        MkC s <- coreStringLit (moduleNameString m)
+        MkC s <- coreStringLit (moduleNameFS m)
         mName <- rep2_nw mkModNameName [s]
         coreJust modNameTyConName mName
       _ -> coreNothing modNameTyConName
@@ -2950,17 +2950,17 @@ repUnboundVar (MkC name) = rep2 unboundVarEName [name]
 
 repOverLabel :: FastString -> MetaM (Core (M TH.Exp))
 repOverLabel fs = do
-                    (MkC s) <- coreStringLit $ unpackFS fs
+                    MkC s <- coreStringLit fs
                     rep2 labelEName [s]
 
 repGetField :: Core (M TH.Exp) -> FastString -> MetaM (Core (M TH.Exp))
 repGetField (MkC exp) fs = do
-  MkC s <- coreStringLit $ unpackFS fs
+  MkC s <- coreStringLit fs
   rep2 getFieldEName [exp,s]
 
 repProjection :: NonEmpty FastString -> MetaM (Core (M TH.Exp))
 repProjection fs = do
-  MkC xs <- coreListNonEmpty stringTy <$> mapM (coreStringLit . unpackFS) fs
+  MkC xs <- coreListNonEmpty stringTy <$> mapM coreStringLit fs
   rep2 projectionEName [xs]
 
 ------------ Lists -------------------
@@ -3004,8 +3004,8 @@ nonEmptyCoreList xs@(MkC x:_) = MkC (mkListExpr (exprType x) (map unC xs))
 nonEmptyCoreList' :: NonEmpty (Core a) -> Core [a]
 nonEmptyCoreList' xs@(MkC x:|_) = MkC (mkListExpr (exprType x) (toList $ fmap unC xs))
 
-coreStringLit :: MonadThings m => String -> m (Core String)
-coreStringLit s = do { z <- mkStringExpr s; return(MkC z) }
+coreStringLit :: MonadThings m => FastString -> m (Core String)
+coreStringLit s = do { z <- mkStringExprFS s; return (MkC z) }
 
 ------------------- Maybe ------------------
 


=====================================
compiler/GHC/Parser.y
=====================================
@@ -67,7 +67,7 @@ import GHC.Prelude
 import qualified GHC.Data.Strict as Strict
 
 import GHC.Types.Name.Reader
-import GHC.Types.Name.Occurrence ( varName, dataName, tcClsName, tvName, occNameFS, mkVarOcc, occNameString)
+import GHC.Types.Name.Occurrence ( varName, dataName, tcClsName, tvName, occNameFS, mkVarOccFS, occNameString)
 import GHC.Types.SrcLoc
 import GHC.Types.Basic
 import GHC.Types.Error ( GhcHint(..) )
@@ -3447,7 +3447,7 @@ fbind   :: { forall b. DisambECP b => PV (Fbind b) }
                                 final = last fields
                                 l = comb2 (reLoc $1) $3
                                 isPun = True
-                            var <- mkHsVarPV (L (noAnnSrcSpan $ getLocA final) (mkRdrUnqual . mkVarOcc . unpackFS . field_label . unLoc . dfoLabel . unLoc $ final))
+                            var <- mkHsVarPV (L (noAnnSrcSpan $ getLocA final) (mkRdrUnqual . mkVarOccFS . field_label . unLoc . dfoLabel . unLoc $ final))
                             fmap Right $ mkHsProjUpdatePV l (L l fields) var isPun []
                         }
 
@@ -3830,7 +3830,7 @@ special_id
 
 special_sym :: { Located FastString }
 special_sym : '.'       { sL1 $1 (fsLit ".") }
-            | '*'       { sL1 $1 (fsLit (starSym (isUnicode $1))) }
+            | '*'       { sL1 $1 (starSym (isUnicode $1)) }
 
 -----------------------------------------------------------------------------
 -- Data constructors


=====================================
compiler/GHC/Parser/HaddockLex.x
=====================================
@@ -148,7 +148,7 @@ lexStringLiteral identParser (L l sl@(StringLiteral _ fs _))
       RealSrcSpan span _ -> [(RealSrcSpan span' Strict.Nothing, tok) | (span', tok) <- alexScanTokens (realSrcSpanStart span) bs]
       UnhelpfulSpan reason -> [(UnhelpfulSpan reason, tok) | (_, tok) <- alexScanTokens fakeLoc bs]
 
-    fakeLoc = mkRealSrcLoc (mkFastString "") 0 0
+    fakeLoc = mkRealSrcLoc nilFS 0 0
 
 -- | Lex identifiers from a docstring.
 lexHsDoc :: P (LocatedN RdrName)      -- ^ A precise identifier parser
@@ -169,7 +169,7 @@ lexHsDoc identParser doc =
     plausibleIdents (L (UnhelpfulSpan reason) (HsDocStringChunk s))
       = [(UnhelpfulSpan reason, tok) | (_, tok) <- alexScanTokens fakeLoc s] -- preserve the original reason
 
-    fakeLoc = mkRealSrcLoc (mkFastString "") 0 0
+    fakeLoc = mkRealSrcLoc nilFS 0 0
 
 validateIdentWith :: P (LocatedN RdrName) -> SrcSpan -> ByteString -> Maybe (Located RdrName)
 validateIdentWith identParser mloc str0 =
@@ -191,7 +191,7 @@ validateIdentWith identParser mloc str0 =
       buffer = stringBufferFromByteString str0
       realSrcLc = case mloc of
         RealSrcSpan loc _ -> realSrcSpanStart loc
-        UnhelpfulSpan _ -> mkRealSrcLoc (mkFastString "") 0 0
+        UnhelpfulSpan _ -> mkRealSrcLoc nilFS 0 0
       pstate = initParserState pflags buffer realSrcLc
   in case unP identParser pstate of
     POk _ name -> Just $ case mloc of


=====================================
compiler/GHC/Parser/PostProcess.hs
=====================================
@@ -965,8 +965,7 @@ mkRuleTyVarBndrs = fmap cvt_one
 checkRuleTyVarBndrNames :: [LHsTyVarBndr flag GhcPs] -> P ()
 checkRuleTyVarBndrNames = mapM_ (check . fmap hsTyVarName)
   where check (L loc (Unqual occ)) =
-          -- TODO: don't use string here, OccName has a Unique/FastString
-          when ((occNameString occ ==) `any` ["forall","family","role"])
+          when (occNameFS occ `elem` [fsLit "forall",fsLit "family",fsLit "role"])
             (addFatalError $ mkPlainErrorMsgEnvelope (locA loc) $
                (PsErrParseErrorOnInput occ))
         check _ = panic "checkRuleTyVarBndrNames"
@@ -1009,7 +1008,7 @@ checkTyClHdr is_cls ty
     -- workaround to define '*' despite StarIsType
     go _ (HsParTy an (L l (HsStarTy _ isUni))) acc ops' cps' fix
       = do { addPsMessage (locA l) PsWarnStarBinder
-           ; let name = mkOccName tcClsName (starSym isUni)
+           ; let name = mkOccNameFS tcClsName (starSym isUni)
            ; let a' = newAnns l an
            ; return (L a' (Unqual name), acc, fix
                     , (reverse ops') ++ cps') }
@@ -2776,7 +2775,7 @@ mkExport (L lc cconv) (L le (StringLiteral esrc entity _), v, ty)
 -- want z-encoding (e.g. names with z's in them shouldn't be doubled)
 --
 mkExtName :: RdrName -> CLabelString
-mkExtName rdrNm = mkFastString (occNameString (rdrNameOcc rdrNm))
+mkExtName rdrNm = occNameFS (rdrNameOcc rdrNm)
 
 --------------------------------------------------------------------------------
 -- Help with module system imports/exports
@@ -3142,9 +3141,9 @@ token_location_widenR (TokenLoc (EpaDelta _ _)) _ =
 -----------------------------------------------------------------------------
 -- Token symbols
 
-starSym :: Bool -> String
-starSym True = "★"
-starSym False = "*"
+starSym :: Bool -> FastString
+starSym True = fsLit "★"
+starSym False = fsLit "*"
 
 -----------------------------------------
 -- Bits and pieces for RecordDotSyntax.


=====================================
compiler/GHC/ThToHs.hs
=====================================
@@ -1939,13 +1939,13 @@ overloadedLit _             = False
 unboxedSumChecks :: TH.SumAlt -> TH.SumArity -> CvtM ()
 unboxedSumChecks alt arity
     | alt > arity
-    = failWith $ text "Sum alternative"    <+> text (show alt)
-             <+> text "exceeds its arity," <+> text (show arity)
+    = failWith $ text "Sum alternative"    <+> int alt
+             <+> text "exceeds its arity," <+> int arity
     | alt <= 0
-    = failWith $ vcat [ text "Illegal sum alternative:" <+> text (show alt)
+    = failWith $ vcat [ text "Illegal sum alternative:" <+> int alt
                       , nest 2 $ text "Sum alternatives must start from 1" ]
     | arity < 2
-    = failWith $ vcat [ text "Illegal sum arity:" <+> text (show arity)
+    = failWith $ vcat [ text "Illegal sum arity:" <+> int arity
                       , nest 2 $ text "Sums must have an arity of at least 2" ]
     | otherwise
     = return ()


=====================================
compiler/GHC/Types/CostCentre.hs
=====================================
@@ -259,7 +259,7 @@ instance Outputable CostCentre where
   ppr cc = getPprStyle $ \ sty ->
            if codeStyle sty
            then ppCostCentreLbl cc
-           else text (costCentreUserName cc)
+           else ftext (costCentreUserNameFS cc)
 
 -- Printing in Core
 pprCostCentreCore :: CostCentre -> SDoc


=====================================
compiler/GHC/Types/FieldLabel.hs
=====================================
@@ -188,7 +188,7 @@ fieldSelectorOccName lbl dc dup_fields_ok has_sel
   | otherwise     = mkVarOccFS fl
   where
     fl      = field_label lbl
-    str     = ":" ++ unpackFS fl ++ ":" ++ occNameString dc
+    str     = concatFS [fsLit ":", fl, fsLit ":", occNameFS dc]
 
 -- | Undo the name mangling described in Note [FieldLabel] to produce a Name
 -- that has the user-visible OccName (but the selector's unique).  This should


=====================================
compiler/GHC/Types/Literal.hs
=====================================
@@ -904,7 +904,7 @@ pprLiteral add_par (LitLabel l mb fod) =
     add_par (text "__label" <+> b <+> ppr fod)
     where b = case mb of
               Nothing -> pprHsString l
-              Just x  -> doubleQuotes (text (unpackFS l ++ '@':show x))
+              Just x  -> doubleQuotes (ftext l <> text ('@':show x))
 pprLiteral _       (LitRubbish rep)
   = text "RUBBISH" <> parens (ppr rep)
 


=====================================
compiler/GHC/Types/Name/Occurrence.hs
=====================================
@@ -646,8 +646,8 @@ mkGenR   = mk_simple_deriv tcName "Rep_"
 mkGen1R  = mk_simple_deriv tcName "Rep1_"
 
 -- Overloaded record field selectors
-mkRecFldSelOcc :: String -> OccName
-mkRecFldSelOcc s = mk_deriv varName "$sel" [fsLit s]
+mkRecFldSelOcc :: FastString -> OccName
+mkRecFldSelOcc s = mk_deriv varName "$sel" [s]
 
 mk_simple_deriv :: NameSpace -> FastString -> OccName -> OccName
 mk_simple_deriv sp px occ = mk_deriv sp px [occNameFS occ]


=====================================
compiler/GHC/Types/Name/Occurrence.hs-boot
=====================================
@@ -1,6 +1,5 @@
 module GHC.Types.Name.Occurrence where
 
-import GHC.Prelude (String)
 import GHC.Data.FastString
 
 data OccName
@@ -8,6 +7,6 @@ data OccName
 class HasOccName name where
   occName :: name -> OccName
 
-occNameString :: OccName -> String
-mkRecFldSelOcc :: String -> OccName
+occNameFS :: OccName -> FastString
+mkRecFldSelOcc :: FastString -> OccName
 mkVarOccFS :: FastString -> OccName


=====================================
compiler/GHC/Unit/State.hs
=====================================
@@ -2036,7 +2036,7 @@ mayThrowUnitErr = \case
 instance Outputable UnitErr where
     ppr = \case
         CloseUnitErr p mb_parent
-            -> (ftext (fsLit "unknown unit:") <+> ppr p)
+            -> (text "unknown unit:" <+> ppr p)
                <> case mb_parent of
                      Nothing     -> Outputable.empty
                      Just parent -> space <> parens (text "dependency of"


=====================================
ghc/GHCi/UI.hs
=====================================
@@ -3423,7 +3423,7 @@ pprStopped res =
   text "Stopped in"
     <+> ((case mb_mod_name of
            Nothing -> empty
-           Just mod_name -> text (moduleNameString mod_name) <> char '.')
+           Just mod_name -> ftext (moduleNameFS mod_name) <> char '.')
          <> text (GHC.resumeDecl res))
     <> char ',' <+> ppr (GHC.resumeSpan res)
  where



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/854921d93111d22be8602a3f2218eb42a6900c33

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/854921d93111d22be8602a3f2218eb42a6900c33
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20221024/7d1db665/attachment-0001.html>


More information about the ghc-commits mailing list