import ListSetOps
import Data.List ( partition, (\\), delete )
import qualified Data.Set as Set
-import IO ( openFile, IOMode(..) )
-import Monad ( when, mplus )
+import System.IO
+import Control.Monad
\end{code}
| otherwise
= do { implicit_prelude <- doptM Opt_ImplicitPrelude
+ ; warnDodgyExports <- doptM Opt_WarnDodgyExports
; let { exportValid = (mod `elem` imported_modules)
|| (moduleName this_mod == mod)
; gres = filter (isModuleExported implicit_prelude mod)
}
; checkErr exportValid (moduleNotImported mod)
- ; warnIf (exportValid && null gres) (nullModuleExport mod)
+ ; warnIf (warnDodgyExports && exportValid && null gres) (nullModuleExport mod)
; addUsedRdrNames (concat [ [mkRdrQual mod occ, mkRdrUnqual occ]
| occ <- map nameOccName names ])
lookup_ie ie@(IEThingAll rdr)
= do name <- lookupGlobalOccRn rdr
let kids = findChildren kids_env name
- when (null kids)
- (if (isTyConName name) then addWarn (dodgyExportWarn name)
- -- This occurs when you export T(..), but
- -- only import T abstractly, or T is a synonym.
- else addErr (exportItemErr ie))
-
+ mkKidRdrName = case isQual_maybe rdr of
+ Nothing -> mkRdrUnqual
+ Just (modName, _) -> mkRdrQual modName
+ addUsedRdrNames $ map (mkKidRdrName . nameOccName) kids
+ warnDodgyExports <- doptM Opt_WarnDodgyExports
+ when (null kids) $
+ if isTyConName name
+ then when warnDodgyExports $ addWarn (dodgyExportWarn name)
+ else -- This occurs when you export T(..), but
+ -- only import T abstractly, or T is a synonym.
+ addErr (exportItemErr ie)
+
return (IEThingAll name, AvailTC name (name:kids))
lookup_ie ie@(IEThingWith rdr sub_rdrs)