[project @ 2001-09-14 16:01:20 by sewardj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / RdrName.lhs
index a3572ba..aa54142 100644 (file)
@@ -9,19 +9,19 @@ module RdrName (
        RdrName,
 
        -- Construction
-       mkRdrUnqual, mkRdrQual, mkRdrOrig, mkRdrIfaceUnqual,
+       mkRdrUnqual, mkRdrQual, mkRdrOrig, mkRdrUnqual,
        mkUnqual, mkQual, mkIfaceOrig, mkOrig,
-       qualifyRdrName, mkRdrNameWkr,
+       qualifyRdrName, unqualifyRdrName, mkRdrNameWkr,
        dummyRdrVarName, dummyRdrTcName,
 
        -- Destruction
        rdrNameModule, rdrNameOcc, setRdrNameOcc,
-       isRdrDataCon, isRdrTyVar, isQual, isSourceQual, isUnqual, isIface,
+       isRdrDataCon, isRdrTyVar, isRdrTc, isQual, isUnqual, isOrig,
 
        -- Environment
        RdrNameEnv, 
        emptyRdrEnv, lookupRdrEnv, addListToRdrEnv, rdrEnvElts, 
-       extendRdrEnv, rdrEnvToList, elemRdrEnv,
+       extendRdrEnv, rdrEnvToList, elemRdrEnv, foldRdrEnv, 
 
        -- Printing;    instance Outputable RdrName
        pprUnqualRdrName 
@@ -33,7 +33,7 @@ import OccName        ( NameSpace, tcName,
                  OccName, UserFS, EncodedFS,
                  mkSysOccFS,
                  mkOccFS, mkVarOcc,
-                 isDataOcc, isTvOcc, mkWorkerOcc
+                 isDataOcc, isTvOcc, isTcOcc, mkWorkerOcc
                )
 import Module   ( ModuleName,
                  mkSysModuleNameFS, mkModuleNameFS
@@ -55,10 +55,6 @@ data RdrName = RdrName Qual OccName
 
 data Qual = Unqual
 
-         | IfaceUnqual         -- An unqualified name from an interface file;
-                               -- implicitly its module is that of the enclosing
-                               -- interface file; don't look it up in the environment
-
          | Qual ModuleName     -- A qualified name written by the user in source code
                                -- The module isn't necessarily the module where
                                -- the thing is defined; just the one from which it
@@ -92,9 +88,6 @@ setRdrNameOcc (RdrName q _) occ = RdrName q occ
 mkRdrUnqual :: OccName -> RdrName
 mkRdrUnqual occ = RdrName Unqual occ
 
-mkRdrIfaceUnqual :: OccName -> RdrName
-mkRdrIfaceUnqual occ = RdrName IfaceUnqual occ
-
 mkRdrQual :: ModuleName -> OccName -> RdrName
 mkRdrQual mod occ = RdrName (Qual mod) occ
 
@@ -107,7 +100,7 @@ mkIfaceOrig ns (m,n) = RdrName (Orig (mkSysModuleNameFS m)) (mkSysOccFS ns n)
 
        -- These two are used when parsing source files
        -- They do encode the module and occurrence names
-mkUnqual :: NameSpace -> FAST_STRING -> RdrName
+mkUnqual :: NameSpace -> UserFS -> RdrName
 mkUnqual sp n = RdrName Unqual (mkOccFS sp n)
 
 mkQual :: NameSpace -> (UserFS, UserFS) -> RdrName
@@ -120,6 +113,9 @@ qualifyRdrName :: ModuleName -> RdrName -> RdrName
        -- Sets the module name of a RdrName, even if it has one already
 qualifyRdrName mod (RdrName _ occ) = RdrName (Qual mod) occ
 
+unqualifyRdrName :: RdrName -> RdrName
+unqualifyRdrName (RdrName _ occ) = RdrName Unqual occ
+
 mkRdrNameWkr :: RdrName -> RdrName     -- Worker-ify it
 mkRdrNameWkr (RdrName qual occ) = RdrName qual (mkWorkerOcc occ)
 \end{code}
@@ -138,19 +134,16 @@ dummyRdrTcName  = RdrName Unqual (mkOccFS tcName SLIT("TC-DUMMY"))
 \begin{code}
 isRdrDataCon (RdrName _ occ) = isDataOcc occ
 isRdrTyVar   (RdrName _ occ) = isTvOcc occ
+isRdrTc      (RdrName _ occ) = isTcOcc occ
 
-isUnqual (RdrName Unqual _)      = True
-isUnqual (RdrName IfaceUnqual _) = True
-isUnqual other                  = False
-
-isQual rdr_name = not (isUnqual rdr_name)
+isUnqual (RdrName Unqual _) = True
+isUnqual other             = False
 
-isSourceQual (RdrName (Qual _) _) = True
-isSourceQual _                   = False
+isQual (RdrName (Qual _) _) = True
+isQual _                   = False
 
-isIface (RdrName (Orig _)    _) = True
-isIface (RdrName IfaceUnqual _) = True
-isIface other                  = False
+isOrig (RdrName (Orig _)    _) = True
+isOrig other                  = False
 \end{code}
 
 
@@ -165,7 +158,6 @@ instance Outputable RdrName where
     ppr (RdrName qual occ) = pp_qual qual <> ppr occ
                           where
                             pp_qual Unqual      = empty
-                            pp_qual IfaceUnqual = empty
                             pp_qual (Qual mod)  = ppr mod <> dot
                             pp_qual (Orig mod)  = ppr mod <> dot
 
@@ -186,12 +178,9 @@ instance Ord RdrName where
          (q1  `cmpQual` q2) 
 
 cmpQual Unqual     Unqual      = EQ
-cmpQual IfaceUnqual IfaceUnqual = EQ
 cmpQual (Qual m1)   (Qual m2)   = m1 `compare` m2
 cmpQual (Orig m1)   (Orig m2)   = m1 `compare` m2
 cmpQual Unqual      _          = LT
-cmpQual IfaceUnqual (Qual _)   = LT
-cmpQual IfaceUnqual (Orig _)   = LT
 cmpQual (Qual _)    (Orig _)    = LT
 cmpQual _          _           = GT
 \end{code}
@@ -214,12 +203,14 @@ extendRdrEnv      :: RdrNameEnv a -> RdrName -> a -> RdrNameEnv a
 rdrEnvToList    :: RdrNameEnv a -> [(RdrName, a)]
 rdrEnvElts     :: RdrNameEnv a -> [a]
 elemRdrEnv     :: RdrName -> RdrNameEnv a -> Bool
+foldRdrEnv     :: (RdrName -> a -> b -> b) -> b -> RdrNameEnv a -> b
 
-emptyRdrEnv  = emptyFM
-lookupRdrEnv = lookupFM
+emptyRdrEnv     = emptyFM
+lookupRdrEnv    = lookupFM
 addListToRdrEnv = addListToFM
 rdrEnvElts     = eltsFM
 extendRdrEnv    = addToFM
 rdrEnvToList    = fmToList
 elemRdrEnv      = elemFM
+foldRdrEnv     = foldFM
 \end{code}