Fix CodingStyle#Warnings URLs
[ghc-hetmet.git] / compiler / iface / LoadIface.lhs
index e6c8f63..97ddbfd 100644 (file)
@@ -6,6 +6,13 @@
 Loading interface files
 
 \begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
 module LoadIface (
        loadInterface, loadInterfaceForName, loadWiredInHomeIface, 
        loadSrcInterface, loadSysInterface, loadOrphanModules, 
@@ -118,6 +125,7 @@ loadInterfaceForName doc name
 
 -- | An 'IfM' function to load the home interface for a wired-in thing,
 -- so that we're sure that we see its instance declarations and rules
+-- See Note [Loading instances]
 loadWiredInHomeIface :: Name -> IfM lcl ()
 loadWiredInHomeIface name
   = ASSERT( isWiredInName name )
@@ -134,6 +142,27 @@ loadSysInterface doc mod_name
            Succeeded iface -> return iface }
 \end{code}
 
+Note [Loading instances]
+~~~~~~~~~~~~~~~~~~~~~~~~
+We need to make sure that we have at least *read* the interface files
+for any module with an instance decl or RULE that we might want.  
+
+* If the instance decl is an orphan, we have a whole separate mechanism
+  (loadOprhanModules)
+
+* If the instance decl not an orphan, then the act of looking at the
+  TyCon or Class will force in the defining module for the
+  TyCon/Class, and hence the instance decl
+
+* BUT, if the TyCon is a wired-in TyCon, we don't really need its interface;
+  but we must make sure we read its interface in case it has instances or
+  rules.  That is what LoadIface.loadWiredInHomeInterface does.  It's called
+  from TcIface.{tcImportDecl, checkWiredInTyCon, ifCHeckWiredInThing}
+
+All of this is done by the type checker. The renamer plays no role.
+(It used to, but no longer.)
+
+
 
 %*********************************************************
 %*                                                     *
@@ -571,6 +600,7 @@ pprModIface iface
                <+> ppr (mi_mod_vers iface) <+> pp_sub_vers
                <+> (if mi_orphan iface then ptext SLIT("[orphan module]") else empty)
                <+> (if mi_finsts iface then ptext SLIT("[family instance module]") else empty)
+               <+> (if mi_hpc    iface then ptext SLIT("[hpc]") else empty)
                <+> integer opt_HiVersion
                <+> ptext SLIT("where")
        , vcat (map pprExport (mi_exports iface))
@@ -583,7 +613,7 @@ pprModIface iface
        , vcat (map ppr (mi_rules iface))
         , pprVectInfo (mi_vect_info iface)
        , pprDeprecs (mi_deprecs iface)
-       ]
+       ]
   where
     pp_boot | mi_boot iface = ptext SLIT("[boot]")
            | otherwise     = empty
@@ -655,8 +685,15 @@ pprFixities fixes = ptext SLIT("fixities") <+> pprWithCommas pprFix fixes
                    pprFix (occ,fix) = ppr fix <+> ppr occ 
 
 pprVectInfo :: IfaceVectInfo -> SDoc
-pprVectInfo (IfaceVectInfo names) = 
-  ptext SLIT("Closured converted:") <+> hsep (map ppr names)
+pprVectInfo (IfaceVectInfo { ifaceVectInfoVar        = vars
+                           , ifaceVectInfoTyCon      = tycons
+                           , ifaceVectInfoTyConReuse = tyconsReuse
+                           }) = 
+  vcat 
+  [ ptext SLIT("vectorised variables:") <+> hsep (map ppr vars)
+  , ptext SLIT("vectorised tycons:") <+> hsep (map ppr tycons)
+  , ptext SLIT("vectorised reused tycons:") <+> hsep (map ppr tyconsReuse)
+  ]
 
 pprDeprecs NoDeprecs       = empty
 pprDeprecs (DeprecAll txt)  = ptext SLIT("Deprecate all") <+> doubleQuotes (ftext txt)