Remove knot-tying bug in TcHsSyn.zonkTyVarOcc
[ghc.git] / compiler / typecheck / TcDefaults.hs
index e33b8c5..d091e9c 100644 (file)
@@ -4,11 +4,13 @@
 
 \section[TcDefaults]{Typechecking \tr{default} declarations}
 -}
+{-# LANGUAGE TypeFamilies #-}
 
 module TcDefaults ( tcDefaults ) where
 
+import GhcPrelude
+
 import HsSyn
-import Name
 import Class
 import TcRnMonad
 import TcEnv
@@ -23,7 +25,7 @@ import Outputable
 import FastString
 import qualified GHC.LanguageExtensions as LangExt
 
-tcDefaults :: [LDefaultDecl Name]
+tcDefaults :: [LDefaultDecl GhcRn]
            -> TcM (Maybe [Type])    -- Defaulting types to heave
                                     -- into Tc monad for later use
                                     -- in Disambig.
@@ -40,10 +42,10 @@ tcDefaults []
         -- one group, only for the next group to ignore them and install
         -- defaultDefaultTys
 
-tcDefaults [L _ (DefaultDecl [])]
+tcDefaults [L _ (DefaultDecl [])]
   = return (Just [])            -- Default declaration specifying no types
 
-tcDefaults [L locn (DefaultDecl mono_tys)]
+tcDefaults [L locn (DefaultDecl mono_tys)]
   = setSrcSpan locn                     $
     addErrCtxt defaultDeclCtxt          $
     do  { ovl_str   <- xoptM LangExt.OverloadedStrings
@@ -61,16 +63,17 @@ tcDefaults [L locn (DefaultDecl mono_tys)]
 
         ; return (Just tau_tys) }
 
-tcDefaults decls@(L locn (DefaultDecl _) : _)
+tcDefaults decls@(L locn (DefaultDecl _ _) : _)
   = setSrcSpan locn $
     failWithTc (dupDefaultDeclErr decls)
+tcDefaults (L _ (XDefaultDecl _):_) = panic "tcDefaults"
 
 
-tc_default_ty :: [Class] -> LHsType Name -> TcM Type
+tc_default_ty :: [Class] -> LHsType GhcRn -> TcM Type
 tc_default_ty deflt_clss hs_ty
  = do   { (ty, _kind) <- solveEqualities $
                          tcLHsType hs_ty
-        ; ty <- zonkTcTypeToType emptyZonkEnv ty   -- establish Type invariants
+        ; ty <- zonkTcTypeToType ty   -- establish Type invariants
         ; checkValidType DefaultDeclCtxt ty
 
         -- Check that the type is an instance of at least one of the deflt_clss
@@ -90,12 +93,15 @@ check_instance ty cls
 defaultDeclCtxt :: SDoc
 defaultDeclCtxt = text "When checking the types in a default declaration"
 
-dupDefaultDeclErr :: [Located (DefaultDecl Name)] -> SDoc
-dupDefaultDeclErr (L _ (DefaultDecl _) : dup_things)
+dupDefaultDeclErr :: [Located (DefaultDecl GhcRn)] -> SDoc
+dupDefaultDeclErr (L _ (DefaultDecl _ _) : dup_things)
   = hang (text "Multiple default declarations")
        2 (vcat (map pp dup_things))
   where
-    pp (L locn (DefaultDecl _)) = text "here was another default declaration" <+> ppr locn
+    pp (L locn (DefaultDecl _ _))
+      = text "here was another default declaration" <+> ppr locn
+    pp (L _ (XDefaultDecl _)) = panic "dupDefaultDeclErr"
+dupDefaultDeclErr (L _ (XDefaultDecl _) : _) = panic "dupDefaultDeclErr"
 dupDefaultDeclErr [] = panic "dupDefaultDeclErr []"
 
 badDefaultTy :: Type -> [Class] -> SDoc