-The @AvailEnv@ type is just used internally in @exportsFromAvail@.
-When exporting we need to combine the availabilities for a particular
-exported thing, and we also need to check for name clashes -- that
-is: two exported things must have different @OccNames@.
-
-\begin{code}
-type AvailEnv = FiniteMap OccName (RdrNameIE, AvailInfo, Int{-no. of clashes-})
- -- The FM maps each OccName to the RdrNameIE that gave rise to it,
- -- for error reporting, as well as to its AvailInfo
-
-emptyAvailEnv = emptyFM
-
-{-
- Add new entry to environment. Checks for name clashes, i.e.,
- plain duplicates or exported entity pairs that have different OccNames.
- (c.f. 5.1.1 of Haskell 1.4 report.)
--}
-addAvailEnv :: Bool -> RdrNameIE -> AvailEnv -> AvailInfo -> RnM s d AvailEnv
-addAvailEnv warn_dups ie env NotAvailable = returnRn env
-addAvailEnv warn_dups ie env (AvailTC _ []) = returnRn env
-addAvailEnv warn_dups ie env avail
- | warn_dups = mapMaybeRn (addErrRn . availClashErr) () conflict `thenRn_`
- returnRn (addToFM_C addAvail env key elt)
- | otherwise = returnRn (addToFM_C addAvail env key elt)
- where
- key = nameOccName (availName avail)
- elt = (ie,avail,reports_on)
-
- reports_on
- | maybeToBool dup = 1
- | otherwise = 0
-
- conflict = conflictFM bad_avail env key elt
- dup
- | warn_dups = conflictFM dup_avail env key elt
- | otherwise = Nothing
-
-addListToAvailEnv :: AvailEnv -> RdrNameIE -> [AvailInfo] -> RnM s d AvailEnv
-addListToAvailEnv env ie items
- = foldlRn (addAvailEnv False{-don't warn about dups-} ie) env items
-
-bad_avail (ie1,avail1,r1) (ie2,avail2,r2)
- = availName avail1 /= availName avail2 -- Same OccName, different Name
-dup_avail (ie1,avail1,r1) (ie2,avail2,r2)
- = availName avail1 == availName avail2 -- Same OccName & avail.
-
-addAvail (ie1,a1,r1) (ie2,a2,r2) = (ie1, a1 `plusAvail` a2, r1 + r2)
-\end{code}
-