Zap stray whitespace in lhs formatting
[ghc-hetmet.git] / compiler / iface / LoadIface.lhs
index 4ef589d..8625a1a 100644 (file)
@@ -88,8 +88,10 @@ loadSrcInterface doc mod want_boot  = do
        failWithTc (cannotFindInterface dflags mod err)
 
 -- | Load interfaces for a collection of orphan modules.
-loadOrphanModules :: [Module] -> TcM ()
-loadOrphanModules mods
+loadOrphanModules :: [Module]        -- the modules
+                 -> Bool             -- these are family instance-modules
+                 -> TcM ()
+loadOrphanModules mods isFamInstMod
   | null mods = returnM ()
   | otherwise = initIfaceTcRn $
                do { traceIf (text "Loading orphan modules:" <+> 
@@ -98,7 +100,9 @@ loadOrphanModules mods
                   ; returnM () }
   where
     load mod   = loadSysInterface (mk_doc mod) mod
-    mk_doc mod = ppr mod <+> ptext SLIT("is a orphan-instance module")
+    mk_doc mod 
+      | isFamInstMod = ppr mod <+> ptext SLIT("is a family-instance module")
+      | otherwise    = ppr mod <+> ptext SLIT("is a orphan-instance module")
 
 -- | Loads the interface for a given Name.
 loadInterfaceForName :: SDoc -> Name -> TcRn ModIface
@@ -234,9 +238,12 @@ loadInterface doc_str mod from
        ; new_eps_fam_insts <- mapM tcIfaceFamInst (mi_fam_insts iface)
        ; new_eps_rules     <- tcIfaceRules ignore_prags (mi_rules iface)
 
-       ; let { final_iface = iface {   mi_decls = panic "No mi_decls in PIT",
-                                       mi_insts = panic "No mi_insts in PIT",
-                                       mi_rules = panic "No mi_rules in PIT" } }
+       ; let { final_iface = iface {   
+                               mi_decls     = panic "No mi_decls in PIT",
+                               mi_insts     = panic "No mi_insts in PIT",
+                               mi_fam_insts = panic "No mi_fam_insts in PIT",
+                               mi_rules     = panic "No mi_rules in PIT"
+                              } }
 
        ; updateEps_  $ \ eps -> 
            eps { 
@@ -248,6 +255,15 @@ loadInterface doc_str mod from
                                                   new_eps_insts,
              eps_fam_inst_env = extendFamInstEnvList (eps_fam_inst_env eps)
                                                      new_eps_fam_insts,
+              eps_mod_fam_inst_env
+                              = let
+                                  fam_inst_env = 
+                                    extendFamInstEnvList emptyFamInstEnv
+                                                         new_eps_fam_insts
+                                in
+                                extendModuleEnv (eps_mod_fam_inst_env eps)
+                                                mod
+                                                fam_inst_env,
              eps_stats        = addEpsInStats (eps_stats eps) 
                                               (length new_eps_decls)
              (length new_eps_insts) (length new_eps_rules) }
@@ -452,6 +468,8 @@ initExternalPackageState
       eps_fam_inst_env = emptyFamInstEnv,
       eps_rule_base    = mkRuleBase builtinRules,
        -- Initialise the EPS rule pool with the built-in rules
+      eps_mod_fam_inst_env
+                       = emptyModuleEnv,
       eps_stats = EpsStats { n_ifaces_in = 0, n_decls_in = 0, n_decls_out = 0
                           , n_insts_in = 0, n_insts_out = 0
                           , n_rules_in = length builtinRules, n_rules_out = 0 }
@@ -500,7 +518,7 @@ ifaceStats eps
         hsep [ int (n_rules_out stats), text "rule decls imported, out of",  
                int (n_rules_in stats), text "read"]
        ]
-\end{code}    
+\end{code}
 
 
 %************************************************************************
@@ -528,6 +546,7 @@ pprModIface iface
                <+> ppr (mi_module iface) <+> pp_boot 
                <+> 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)
                <+> int opt_HiVersion
                <+> ptext SLIT("where")
        , vcat (map pprExport (mi_exports iface))
@@ -536,6 +555,7 @@ pprModIface iface
        , pprFixities (mi_fixities iface)
        , vcat (map pprIfaceDecl (mi_decls iface))
        , vcat (map ppr (mi_insts iface))
+       , vcat (map ppr (mi_fam_insts iface))
        , vcat (map ppr (mi_rules iface))
        , pprDeprecs (mi_deprecs iface)
        ]
@@ -583,10 +603,12 @@ pprUsage usage
     pp_export_version (Just v) = int v
 
 pprDeps :: Dependencies -> SDoc
-pprDeps (Deps { dep_mods = mods, dep_pkgs = pkgs, dep_orphs = orphs})
+pprDeps (Deps { dep_mods = mods, dep_pkgs = pkgs, dep_orphs = orphs,
+               dep_finsts = finsts })
   = vcat [ptext SLIT("module dependencies:") <+> fsep (map ppr_mod mods),
          ptext SLIT("package dependencies:") <+> fsep (map ppr pkgs), 
-         ptext SLIT("orphans:") <+> fsep (map ppr orphs)
+         ptext SLIT("orphans:") <+> fsep (map ppr orphs),
+         ptext SLIT("family instance modules:") <+> fsep (map ppr finsts)
        ]
   where
     ppr_mod (mod_name, boot) = ppr mod_name <+> ppr_boot boot