Fix scoped type variables for expression type signatures
[ghc-hetmet.git] / compiler / iface / TcIface.lhs
index 6c197cc..20aaa9f 100644 (file)
@@ -27,15 +27,14 @@ import TcRnMonad
 import Type            ( liftedTypeKind, splitTyConApp, mkTyConApp,
                           liftedTypeKindTyCon, unliftedTypeKindTyCon, 
                           openTypeKindTyCon, argTypeKindTyCon, 
-                          ubxTupleKindTyCon,
-                         mkTyVarTys, ThetaType )
+                          ubxTupleKindTyCon, ThetaType )
 import TypeRep         ( Type(..), PredType(..) )
-import TyCon           ( TyCon, tyConName, SynTyConRhs(..), 
-                         AlgTyConParent(..), setTyConArgPoss )
+import TyCon           ( TyCon, tyConName, SynTyConRhs(..), setTyConArgPoss )
 import HscTypes                ( ExternalPackageState(..), 
                          TyThing(..), tyThingClass, tyThingTyCon, 
                          ModIface(..), ModDetails(..), HomeModInfo(..),
-                         emptyModDetails, lookupTypeEnv, lookupType, typeEnvIds )
+                         emptyModDetails, lookupTypeEnv, lookupType,
+                         typeEnvIds, mkDetailsFamInstCache )
 import InstEnv         ( Instance(..), mkImportedInstance )
 import CoreSyn
 import CoreUtils       ( exprType, dataConRepFSInstPat )
@@ -50,9 +49,9 @@ import IdInfo         ( IdInfo, CafInfo(..), WorkerInfo(..),
                          vanillaIdInfo, newStrictnessInfo )
 import Class           ( Class )
 import TyCon           ( tyConDataCons, isTupleTyCon, mkForeignTyCon )
-import DataCon         ( DataCon, dataConWorkId, dataConExTyVars, dataConInstArgTys )
+import DataCon         ( DataCon, dataConWorkId )
 import TysWiredIn      ( tupleCon, tupleTyCon, listTyCon, intTyCon, boolTyCon, charTyCon, parrTyCon )
-import Var             ( TyVar, mkTyVar, tyVarKind )
+import Var             ( TyVar, mkTyVar )
 import Name            ( Name, nameModule, nameIsLocalOrFrom, isWiredInName,
                          nameOccName, wiredInNameTyThing_maybe )
 import NameEnv
@@ -66,12 +65,11 @@ import Outputable
 import ErrUtils                ( Message )
 import Maybes          ( MaybeErr(..) )
 import SrcLoc          ( noSrcLoc )
-import Util            ( zipWithEqual, equalLength, splitAtList )
+import Util            ( zipWithEqual, equalLength )
 import DynFlags                ( DynFlag(..), isOneShot )
 
 import List            ( elemIndex)
 import Maybe           ( catMaybes )
-import Monad           ( liftM )
 \end{code}
 
 This module takes
@@ -223,10 +221,12 @@ typecheckIface iface
        ; exports <-  ifaceExportNames (mi_exports iface)
 
                -- Finished
-       ; return (ModDetails {  md_types = type_env, 
-                               md_insts = dfuns,
-                               md_rules = rules,
-                               md_exports = exports }) 
+       ; return $ ModDetails { md_types     = type_env
+                             , md_insts     = dfuns
+                             , md_fam_insts = mkDetailsFamInstCache type_env
+                             , md_rules     = rules
+                             , md_exports   = exports 
+                             }
     }
 \end{code}
 
@@ -372,7 +372,9 @@ tcIfaceDecl (IfaceData {ifName = occ_name,
            ; famInst <- 
                case mb_family of
                  Nothing         -> return Nothing
-                 Just (fam, tys) -> 
+                 Just (IfaceFamInst { ifFamInstTyCon = fam
+                                    , ifFamInstTys   = tys
+                                    }) -> 
                    do { famTyCon <- tcIfaceTyCon fam
                       ; insttys <- mapM tcIfaceType tys
                       ; return $ Just (famTyCon, insttys)