A class in an interface file defines the CoTyCon of its class tyocn
[ghc-hetmet.git] / compiler / iface / LoadIface.lhs
index 70f335f..3faf00c 100644 (file)
@@ -42,8 +42,9 @@ import Name           ( Name {-instance NamedThing-}, getOccName,
 import NameEnv
 import MkId            ( seqId )
 import Module
-import OccName         ( OccName, mkOccEnv, lookupOccEnv, mkClassTyConOcc, mkClassDataConOcc,
-                         mkSuperDictSelOcc, mkDataConWrapperOcc, mkDataConWorkerOcc )
+import OccName         ( OccName, mkOccEnv, lookupOccEnv, mkClassTyConOcc,
+                          mkClassDataConOcc, mkSuperDictSelOcc, 
+                          mkDataConWrapperOcc, mkDataConWorkerOcc )
 import SrcLoc          ( importedSrcLoc )
 import Maybes          ( MaybeErr(..) )
 import ErrUtils         ( Message )
@@ -337,7 +338,8 @@ ifaceDeclSubBndrs :: IfaceDecl -> [OccName]
 ifaceDeclSubBndrs IfaceClass { ifCtxt = sc_ctxt, 
                                ifName = cls_occ, 
                                ifSigs = sigs }
-  = [tc_occ, dc_occ, dcww_occ] ++
+  = co_occs ++
+    [tc_occ, dc_occ, dcww_occ] ++
     [op | IfaceClassOp op _ _ <- sigs] ++
     [mkSuperDictSelOcc n cls_occ | n <- [1..n_ctxt]] 
   where
@@ -345,6 +347,8 @@ ifaceDeclSubBndrs IfaceClass { ifCtxt = sc_ctxt,
     n_sigs = length sigs
     tc_occ  = mkClassTyConOcc cls_occ
     dc_occ  = mkClassDataConOcc cls_occ        
+    co_occs | is_newtype = [mkNewTyCoOcc tc_occ]
+           | otherwise  = []
     dcww_occ | is_newtype = mkDataConWrapperOcc dc_occ -- Newtypes have wrapper but no worker
             | otherwise  = mkDataConWorkerOcc dc_occ   -- Otherwise worker but no wrapper
     is_newtype = n_sigs + n_ctxt == 1                  -- Sigh