Fix Trac #2412: type synonyms and hs-boot recursion
[ghc-hetmet.git] / compiler / typecheck / TcTyClsDecls.lhs
index fa10fbf..c959233 100644 (file)
@@ -31,6 +31,7 @@ import Generics
 import Class
 import TyCon
 import DataCon
+import Id
 import Var
 import VarSet
 import Name
@@ -224,6 +225,10 @@ mkGlobalThings decls things
         = (name, AClass cl)
     mk_thing (L _ decl, ~(ATyCon tc))
          = (tcdName decl, ATyCon tc)
+#if __GLASGOW_HASKELL__ < 605
+-- Old GHCs don't understand that ~... matches anything
+    mk_thing _ = panic "mkGlobalThings: Can't happen"
+#endif
 \end{code}
 
 
@@ -282,14 +287,13 @@ tcFamInstDecl1 (decl@TySynonym {tcdLName = L loc tc_name})
        ; t_typats <- mapM tcHsKindedType k_typats
        ; t_rhs    <- tcHsKindedType k_rhs
 
-         -- (3) check that 
-         --     - check the well-formedness of the instance
+         -- (3) check the well-formedness of the instance
        ; checkValidTypeInst t_typats t_rhs
 
          -- (4) construct representation tycon
        ; rep_tc_name <- newFamInstTyConName tc_name loc
        ; buildSynTyCon rep_tc_name t_tvs (SynonymTyCon t_rhs) 
-                       (Just (family, t_typats))
+                       (typeKind t_rhs) (Just (family, t_typats))
        }}
 
   -- "newtype instance" and "data instance"
@@ -655,7 +659,8 @@ tcSynDecl
   = tcTyVarBndrs tvs           $ \ tvs' -> do 
     { traceTc (text "tcd1" <+> ppr tc_name) 
     ; rhs_ty' <- tcHsKindedType rhs_ty
-    ; tycon <- buildSynTyCon tc_name tvs' (SynonymTyCon rhs_ty') Nothing
+    ; tycon <- buildSynTyCon tc_name tvs' (SynonymTyCon rhs_ty') 
+                            (typeKind rhs_ty') Nothing
     ; return (ATyCon tycon) 
     }
 tcSynDecl d = pprPanic "tcSynDecl" (ppr d)
@@ -681,7 +686,7 @@ tcTyClDecl1 _calc_isrec
        -- Check that we don't use families without -XTypeFamilies
   ; checkTc idx_tys $ badFamInstDecl tc_name
 
-  ; tycon <- buildSynTyCon tc_name tvs' (OpenSynTyCon kind Nothing) Nothing
+  ; tycon <- buildSynTyCon tc_name tvs' (OpenSynTyCon kind Nothing) kind Nothing
   ; return [ATyCon tycon]
   }