[project @ 1999-05-11 16:33:35 by keithw]
[ghc-hetmet.git] / ghc / compiler / rename / RnNames.lhs
index 2eb5a8d..58dd7a6 100644 (file)
@@ -31,9 +31,11 @@ import RnMonad
 
 import FiniteMap
 import PrelMods
+import PrelInfo ( main_RDR )
 import UniqFM  ( lookupUFM )
 import Bag     ( bagToList )
 import Maybes  ( maybeToBool )
+import Module  ( pprModule )
 import NameSet
 import Name
 import RdrName ( RdrName, rdrNameOcc, mkRdrQual, mkRdrUnqual )
@@ -209,7 +211,7 @@ importsFromImportDecl :: RdrNameImportDecl
 
 importsFromImportDecl (ImportDecl imp_mod qual_only as_mod import_spec iloc)
   = pushSrcLocRn iloc $
-    getInterfaceExports imp_mod        `thenRn` \ avails ->
+    getInterfaceExports imp_mod        `thenRn` \ (imp_mod, avails) ->
 
     if null avails then
        -- If there's an error in getInterfaceExports, (e.g. interface
@@ -254,10 +256,10 @@ importsFromLocalDecls mod rec_exp_fn decls
                non_singleton other      = False
     in
        -- Check for duplicate definitions
-    mapRn (addErrRn . dupDeclErr) dups                         `thenRn_` 
+    mapRn_ (addErrRn . dupDeclErr) dups                        `thenRn_` 
 
        -- Record that locally-defined things are available
-    mapRn (recordSlurp Nothing Compulsory) avails      `thenRn_`
+    mapRn_ (recordSlurp Nothing Compulsory) avails     `thenRn_`
 
        -- Build the environment
     qualifyImports mod 
@@ -307,10 +309,10 @@ fixitiesFromLocalDecls gbl_env decls
     getFixities acc (FixD fix)
       = fix_decl acc fix
 
+       
     getFixities acc (TyClD (ClassDecl _ _ _ sigs _ _ _ _ _))
       = foldlRn fix_decl acc [sig | FixSig sig <- sigs]
-               -- Get fixities from class decl sigs too
-
+               -- Get fixities from class decl sigs too.
     getFixities acc other_decl
       = returnRn acc
 
@@ -522,8 +524,13 @@ exportsFromAvail :: Module
         -- Warns about identical exports.
        -- Complains about exports items not in scope
 exportsFromAvail this_mod Nothing export_avails global_name_env
-  = exportsFromAvail this_mod (Just [IEModuleContents this_mod]) 
-                    export_avails global_name_env
+  = exportsFromAvail this_mod true_exports export_avails global_name_env
+  where
+    true_exports = Just $ if this_mod == mAIN
+                          then [IEVar main_RDR]
+                               -- export Main.main *only* unless otherwise specified,
+                          else [IEModuleContents this_mod]
+                               -- but for all other modules export everything.
 
 exportsFromAvail this_mod (Just export_items) 
                 (mod_avail_env, entity_avail_env)