-
+%
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
-- Construction
mkRdrUnqual, mkRdrQual,
- mkSrcUnqual, mkSrcQual,
+ mkUnqual, mkQual,
mkSysUnqual, mkSysQual,
mkPreludeQual, qualifyRdrName, mkRdrNameWkr,
dummyRdrVarName, dummyRdrTcName,
-- Destruction
rdrNameModule, rdrNameOcc, setRdrNameOcc,
- isRdrDataCon, isRdrTyVar, isQual, isUnqual
+ isRdrDataCon, isRdrTyVar, isQual, isUnqual,
+
+ -- Environment
+ RdrNameEnv,
+ emptyRdrEnv, lookupRdrEnv, addListToRdrEnv, rdrEnvElts,
+ extendRdrEnv, rdrEnvToList,
+
+ -- Printing; instance Outputable RdrName
+ pprUnqualRdrName
) where
#include "HsVersions.h"
import OccName ( NameSpace, tcName,
- OccName,
+ OccName, UserFS,
mkSysOccFS,
- mkSrcOccFS, mkSrcVarOcc,
+ mkOccFS, mkVarOcc,
isDataOcc, isTvOcc, mkWorkerOcc
)
-import Module ( ModuleName, pprModuleName,
- mkSysModuleFS, mkSrcModuleFS
+import Module ( ModuleName,
+ mkSysModuleNameFS, mkModuleNameFS
)
+import FiniteMap
import Outputable
import Util ( thenCmp )
\end{code}
-- These two are used when parsing source files
-- They do encode the module and occurrence names
-mkSrcUnqual :: NameSpace -> FAST_STRING -> RdrName
-mkSrcUnqual sp n = RdrName Unqual (mkSrcOccFS sp n)
+mkUnqual :: NameSpace -> FAST_STRING -> RdrName
+mkUnqual sp n = RdrName Unqual (mkOccFS sp n)
-mkSrcQual :: NameSpace -> FAST_STRING -> FAST_STRING -> RdrName
-mkSrcQual sp m n = RdrName (Qual (mkSrcModuleFS m)) (mkSrcOccFS sp n)
+mkQual :: NameSpace -> (UserFS, UserFS) -> RdrName
+mkQual sp (m, n) = RdrName (Qual (mkModuleNameFS m)) (mkOccFS sp n)
-- These two are used when parsing interface files
-- They do not encode the module and occurrence name
mkSysUnqual sp n = RdrName Unqual (mkSysOccFS sp n)
mkSysQual :: NameSpace -> (FAST_STRING, FAST_STRING) -> RdrName
-mkSysQual sp (m,n) = RdrName (Qual (mkSysModuleFS m)) (mkSysOccFS sp n)
+mkSysQual sp (m,n) = RdrName (Qual (mkSysModuleNameFS m)) (mkSysOccFS sp n)
mkPreludeQual :: NameSpace -> ModuleName -> FAST_STRING -> RdrName
-mkPreludeQual sp mod n = RdrName (Qual mod) (mkSrcOccFS sp n)
+mkPreludeQual sp mod n = RdrName (Qual mod) (mkOccFS sp n)
qualifyRdrName :: ModuleName -> RdrName -> RdrName
-- Sets the module name of a RdrName, even if it has one already
-- the renamer. We can't just put "error..." because
-- we sometimes want to print out stuff after reading but
-- before renaming
-dummyRdrVarName = RdrName Unqual (mkSrcVarOcc SLIT("V-DUMMY"))
-dummyRdrTcName = RdrName Unqual (mkSrcOccFS tcName SLIT("TC-DUMMY"))
+dummyRdrVarName = RdrName Unqual (mkVarOcc SLIT("V-DUMMY"))
+dummyRdrTcName = RdrName Unqual (mkOccFS tcName SLIT("TC-DUMMY"))
\end{code}
instance Outputable RdrName where
ppr (RdrName qual occ) = pp_qual qual <> ppr occ
where
- pp_qual Unqual = empty
- pp_qual (Qual mod) = pprModuleName mod <> dot
+ pp_qual Unqual = empty
+ pp_qual (Qual mod) = ppr mod <> dot
+
+pprUnqualRdrName (RdrName qual occ) = ppr occ
instance Eq RdrName where
a == b = case (a `compare` b) of { EQ -> True; _ -> False }
+%************************************************************************
+%* *
+\subsection{Environment}
+%* *
+%************************************************************************
+
+\begin{code}
+type RdrNameEnv a = FiniteMap RdrName a
+
+emptyRdrEnv :: RdrNameEnv a
+lookupRdrEnv :: RdrNameEnv a -> RdrName -> Maybe a
+addListToRdrEnv :: RdrNameEnv a -> [(RdrName,a)] -> RdrNameEnv a
+extendRdrEnv :: RdrNameEnv a -> RdrName -> a -> RdrNameEnv a
+rdrEnvToList :: RdrNameEnv a -> [(RdrName, a)]
+rdrEnvElts :: RdrNameEnv a -> [a]
+
+emptyRdrEnv = emptyFM
+lookupRdrEnv = lookupFM
+addListToRdrEnv = addListToFM
+rdrEnvElts = eltsFM
+extendRdrEnv = addToFM
+rdrEnvToList = fmToList
+\end{code}