X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fiface%2FTcIface.lhs;h=93452082e1f369786071829e4aa67a3670f555bf;hb=9636f8cd435e598132687fc1e007c181f2f221e6;hp=13f23e4680fb58e804bc23d30ef6c396ff4fa3ce;hpb=e5896a10830f34458e1e00a1050d113a58c5607d;p=ghc-hetmet.git diff --git a/compiler/iface/TcIface.lhs b/compiler/iface/TcIface.lhs index 13f23e4..9345208 100644 --- a/compiler/iface/TcIface.lhs +++ b/compiler/iface/TcIface.lhs @@ -6,6 +6,13 @@ Type checking of type signatures in interface files \begin{code} +{-# OPTIONS -w #-} +-- The above warning supression flag is a temporary kludge. +-- While working on this module you are encouraged to remove it and fix +-- any warnings in the module. See +-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings +-- for details + module TcIface ( tcImportDecl, checkWiredInTyCon, tcHiBootIface, typecheckIface, tcIfaceDecl, tcIfaceInst, tcIfaceFamInst, tcIfaceRules, @@ -217,7 +224,6 @@ typecheckIface iface , md_rules = rules , md_vect_info = vect_info , md_exports = exports - , md_modBreaks = emptyModBreaks } } \end{code} @@ -599,11 +605,12 @@ tcIfaceVectInfo mod typeEnv (IfaceVectInfo = do { vVars <- mapM vectVarMapping vars ; tyConRes1 <- mapM vectTyConMapping tycons ; tyConRes2 <- mapM vectTyConReuseMapping tycons - ; let (vTyCons, vDataCons, vIsos) = unzip3 (tyConRes1 ++ tyConRes2) + ; let (vTyCons, vDataCons, vPAs, vIsos) = unzip4 (tyConRes1 ++ tyConRes2) ; return $ VectInfo { vectInfoVar = mkVarEnv vVars , vectInfoTyCon = mkNameEnv vTyCons , vectInfoDataCon = mkNameEnv (concat vDataCons) + , vectInfoPADFun = mkNameEnv vPAs , vectInfoIso = mkNameEnv vIsos } } @@ -617,25 +624,31 @@ tcIfaceVectInfo mod typeEnv (IfaceVectInfo } vectTyConMapping name = do { vName <- lookupOrig mod (mkVectTyConOcc (nameOccName name)) + ; paName <- lookupOrig mod (mkPADFunOcc (nameOccName name)) ; isoName <- lookupOrig mod (mkVectIsoOcc (nameOccName name)) ; let { tycon = lookupTyCon name ; vTycon = lookupTyCon vName + ; paTycon = lookupVar paName ; isoTycon = lookupVar isoName } ; vDataCons <- mapM vectDataConMapping (tyConDataCons tycon) ; return ((name, (tycon, vTycon)), -- (T, T_v) vDataCons, -- list of (Ci, Ci_v) + (vName, (vTycon, paTycon)), -- (T_v, paT) (name, (tycon, isoTycon))) -- (T, isoT) } vectTyConReuseMapping name - = do { isoName <- lookupOrig mod (mkVectIsoOcc (nameOccName name)) + = do { paName <- lookupOrig mod (mkPADFunOcc (nameOccName name)) + ; isoName <- lookupOrig mod (mkVectIsoOcc (nameOccName name)) ; let { tycon = lookupTyCon name + ; paTycon = lookupVar paName ; isoTycon = lookupVar isoName ; vDataCons = [ (dataConName dc, (dc, dc)) | dc <- tyConDataCons tycon] } ; return ((name, (tycon, tycon)), -- (T, T) vDataCons, -- list of (Ci, Ci) + (name, (tycon, paTycon)), -- (T, paT) (name, (tycon, isoTycon))) -- (T, isoT) } vectDataConMapping datacon