+%************************************************************************
+%* *
+\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]
+elemRdrEnv :: RdrName -> RdrNameEnv a -> Bool
+foldRdrEnv :: (RdrName -> a -> b -> b) -> b -> RdrNameEnv a -> b
+
+emptyRdrEnv = emptyFM
+lookupRdrEnv = lookupFM
+addListToRdrEnv = addListToFM
+rdrEnvElts = eltsFM
+extendRdrEnv = addToFM
+rdrEnvToList = fmToList
+elemRdrEnv = elemFM
+foldRdrEnv = foldFM
+\end{code}
+
+\begin{code}
+instance Binary RdrName where
+ put_ bh (Unqual aa) = do
+ putByte bh 0
+ put_ bh aa
+
+ put_ bh (Qual aa ab) = do
+ putByte bh 1
+ put_ bh aa
+ put_ bh ab
+
+ put_ bh (Orig aa ab) = do
+ putByte bh 2
+ put_ bh aa
+ put_ bh ab
+
+ put_ bh (Exact n) = pprPanic "No Binary instance for RdrName.Exact" (ppr n)
+
+ get bh = do
+ h <- getByte bh
+ case h of
+ 0 -> do aa <- get bh
+ return (Unqual aa)
+ 1 -> do aa <- get bh
+ ab <- get bh
+ return (Qual aa ab)
+ _ -> do aa <- get bh
+ ab <- get bh
+ return (Orig aa ab)
+\end{code}