Fix check of rhs of type family instances (#2157)
[ghc-hetmet.git] / compiler / typecheck / Inst.lhs
index 45e8d8d..31a9354 100644 (file)
@@ -61,6 +61,7 @@ import InstEnv
 import FunDeps
 import TcMType
 import TcType
+import DsUtils
 import Type
 import TypeRep
 import Class
@@ -69,16 +70,13 @@ import Module
 import Coercion
 import HscTypes
 import CoreFVs
-import DataCon
 import Id
 import Name
 import NameSet
-import Literal
 import Var      ( Var, TyVar )
 import qualified Var
 import VarEnv
 import VarSet
-import TysWiredIn
 import PrelNames
 import BasicTypes
 import SrcLoc
@@ -89,8 +87,6 @@ import Util
 import Unique
 import Outputable
 import Data.List
-import TypeRep
-import Class
 
 import Control.Monad
 \end{code}
@@ -141,10 +137,7 @@ mkImplicTy tvs givens wanteds      -- The type of an implication constraint
     in 
       mkForAllTys tvs $ 
       mkPhiTy (map dictPred givens) $
-      if isSingleton dict_wanteds then
-       instType (head dict_wanteds) 
-      else
-       mkTupleTy Boxed (length dict_wanteds) (map instType dict_wanteds)
+      mkBigCoreTupTy (map instType dict_wanteds)
 
 dictPred :: Inst -> TcPredType
 dictPred (Dict {tci_pred = pred}) = pred
@@ -408,7 +401,7 @@ newMethodFromName :: InstOrigin -> BoxyRhoType -> Name -> TcM TcId
 newMethodFromName origin ty name = do
     id <- tcLookupId name
        -- Use tcLookupId not tcLookupGlobalId; the method is almost
-       -- always a class op, but with -fno-implicit-prelude GHC is
+       -- always a class op, but with -XNoImplicitPrelude GHC is
        -- meant to find whatever thing is in scope, and that may
        -- be an ordinary function. 
     loc <- getInstLoc origin
@@ -869,7 +862,7 @@ tcGetInstEnvs = do { eps <- getEps; env <- getGblEnv;
 %*                                                                     *
 %************************************************************************
 
-Suppose we are doing the -fno-implicit-prelude thing, and we encounter
+Suppose we are doing the -XNoImplicitPrelude thing, and we encounter
 a do-expression.  We have to find (>>) in the current environment, which is
 done by the rename. Then we have to check that it has the same type as
 Control.Monad.(>>).  Or, more precisely, a compatible type. One 'customer' had