Add -XPatternSigs flag
[ghc-hetmet.git] / compiler / rename / RnNames.lhs
index 70150ca..26fadbe 100644 (file)
@@ -13,7 +13,7 @@ module RnNames (
 
 #include "HsVersions.h"
 
-import DynFlags                ( DynFlag(..), GhcMode(..), DynFlags(..) )
+import DynFlags
 import HsSyn           ( IE(..), ieName, ImportDecl(..), LImportDecl,
                          ForeignDecl(..), HsGroup(..), HsValBinds(..),
                          Sig(..), collectHsBindLocatedBinders, tyClDeclNames,
@@ -69,6 +69,10 @@ rnImports imports
              (source, ordinary) = partition is_source_import imports
              is_source_import (L _ (ImportDecl _ is_boot _ _ _)) = is_boot
 
+         ifOptM Opt_WarnImplicitPrelude (
+            when (notNull prel_imports) $ addWarn (implicitPreludeWarn)
+          )
+
          stuff1 <- mapM (rnImportDecl this_mod) (prel_imports ++ ordinary)
          stuff2 <- mapM (rnImportDecl this_mod) source
          let (decls, rdr_env, imp_avails) = combine (stuff1 ++ stuff2)
@@ -298,7 +302,7 @@ used for source code.
 
        *** See "THE NAMING STORY" in HsDecls ****
 
-Instances of indexed types
+Instances of type families
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 Indexed data/newtype instances contain data constructors that we need to
 collect, too.  Moreover, we need to descend into the data/newtypes instances
@@ -380,8 +384,8 @@ filterImports iface decl_spec Nothing all_avails
 
 filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
   = do   -- check for errors, convert RdrNames to Names
-        opt_indexedtypes <- doptM Opt_IndexedTypes
-        items1 <- mapM (lookup_lie opt_indexedtypes) import_items
+        opt_typeFamilies <- doptM Opt_TypeFamilies
+        items1 <- mapM (lookup_lie opt_typeFamilies) import_items
 
         let items2 :: [(LIE Name, AvailInfo)]
             items2 = concat items1
@@ -428,10 +432,10 @@ filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
            (name, AvailTC name subs, Just parent)
 
     lookup_lie :: Bool -> LIE RdrName -> TcRn [(LIE Name, AvailInfo)]
-    lookup_lie opt_indexedtypes (L loc ieRdr)
+    lookup_lie opt_typeFamilies (L loc ieRdr)
         = do 
              stuff <- setSrcSpan loc $ 
-                      case lookup_ie opt_indexedtypes ieRdr of
+                      case lookup_ie opt_typeFamilies ieRdr of
                             Failed err  -> addErr err >> return []
                             Succeeded a -> return a
              checkDodgyImport stuff
@@ -456,7 +460,7 @@ filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
        -- AvailInfos for the data constructors and the family (as they have
        -- different parents).  See the discussion at occ_env.
     lookup_ie :: Bool -> IE RdrName -> MaybeErr Message [(IE Name,AvailInfo)]
-    lookup_ie opt_indexedtypes ie 
+    lookup_ie opt_typeFamilies ie 
       = let bad_ie = Failed (badImportItemErr iface decl_spec ie)
 
             lookup_name rdrName = 
@@ -501,8 +505,8 @@ filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
            children <- if any isNothing mb_children
                         then bad_ie
                         else return (catMaybes mb_children)
-              -- check for proper import of indexed types
-           when (not opt_indexedtypes && any isTyConName children) $
+              -- check for proper import of type families
+           when (not opt_typeFamilies && any isTyConName children) $
               Failed (typeItemErr (head . filter isTyConName $ children)
                                  (text "in import list"))
             case mb_parent of
@@ -708,10 +712,10 @@ rnExports explicit_mod exports
        -- written "module Main where ..."
        -- Reason: don't want to complain about 'main' not in scope
        --         in interactive mode
-       ; ghc_mode <- getGhcMode
+        ; dflags <- getDOpts
        ; let real_exports 
-                | explicit_mod            = exports
-                | ghc_mode == Interactive = Nothing
+                | explicit_mod = exports
+                | ghcLink dflags == LinkInMemory = Nothing
                 | otherwise = Just ([noLoc (IEVar main_RDR_Unqual)])
                        -- ToDo: the 'noLoc' here is unhelpful if 'main' 
                        --       turns out to be out of scope
@@ -833,8 +837,8 @@ exports_from_avail (Just rdr_items) rdr_env imports this_mod
                 then do addErr (exportItemErr ie)
                         return (IEThingWith name [], AvailTC name [name])
                 else do let names = catMaybes mb_names
-                        optIdxTypes <- doptM Opt_IndexedTypes
-                        when (not optIdxTypes && any isTyConName names) $
+                        optTyFam <- doptM Opt_TypeFamilies
+                        when (not optTyFam && any isTyConName names) $
                           addErr (typeItemErr ( head
                                               . filter isTyConName 
                                               $ names )
@@ -1296,8 +1300,8 @@ dodgyExportWarn item = dodgyMsg (ptext SLIT("export")) item
 
 dodgyMsg kind tc
   = sep [ ptext SLIT("The") <+> kind <+> ptext SLIT("item") <+> quotes (ppr (IEThingAll tc)),
-         ptext SLIT("suggests that") <+> quotes (ppr tc) <+> ptext SLIT("has constructor or class methods"),
-         ptext SLIT("but it has none; it is a type synonym or abstract type or class") ]
+         ptext SLIT("suggests that") <+> quotes (ppr tc) <+> ptext SLIT("has constructors or class methods,"),
+         ptext SLIT("but it has none") ]
          
 exportItemErr export_item
   = sep [ ptext SLIT("The export item") <+> quotes (ppr export_item),
@@ -1305,7 +1309,7 @@ exportItemErr export_item
 
 typeItemErr name wherestr
   = sep [ ptext SLIT("Using 'type' tag on") <+> quotes (ppr name) <+> wherestr,
-         ptext SLIT("Use -findexed-types to enable this extension") ]
+         ptext SLIT("Use -ftype-families to enable this extension") ]
 
 exportClashErr :: GlobalRdrEnv -> Name -> Name -> IE RdrName -> IE RdrName
                -> Message
@@ -1355,4 +1359,7 @@ nullModuleExport mod
 moduleDeprec mod txt
   = sep [ ptext SLIT("Module") <+> quotes (ppr mod) <+> ptext SLIT("is deprecated:"), 
          nest 4 (ppr txt) ]      
+
+implicitPreludeWarn
+  = ptext SLIT("Module `Prelude' implicitly imported")
 \end{code}