X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=compiler%2Ftypecheck%2FFamInst.lhs;h=3f226334ee9578e6453a428bbfca2a7b4f55b499;hb=5199290f732017432869c9939934871e62c50b74;hp=68c409655dba9609fea130c96f010e9c2dd4c27e;hpb=91923f12046713b115003e184f7098ee00c00028;p=ghc-hetmet.git diff --git a/compiler/typecheck/FamInst.lhs b/compiler/typecheck/FamInst.lhs index 68c4096..3f22633 100644 --- a/compiler/typecheck/FamInst.lhs +++ b/compiler/typecheck/FamInst.lhs @@ -1,4 +1,4 @@ -\section[FamInst]{The @FamInst@ type: family instance heads} +The @FamInst@ type: family instance heads \begin{code} module FamInst ( @@ -7,16 +7,13 @@ module FamInst ( #include "HsVersions.h" -import FamInstEnv ( FamInstEnv, FamInst(..), famInstTyCon, extendFamInstEnv, - pprFamInst, pprFamInsts ) -import TcMType ( tcInstSkolType ) -import TcType ( SkolemInfo(..), tcSplitTyConApp ) -import TcRnMonad ( TcM, TcGblEnv(..), setGblEnv, getGblEnv, foldlM, - setSrcSpan, addErr ) -import TyCon ( tyConFamInst_maybe ) -import Type ( mkTyConApp ) -import Name ( getSrcLoc ) -import SrcLoc ( mkSrcSpan ) +import HscTypes +import FamInstEnv +import TcMType +import TcType +import TcRnMonad +import TyCon +import Type import Outputable \end{code} @@ -34,7 +31,8 @@ tcExtendLocalFamInstEnv :: [FamInst] -> TcM a -> TcM a tcExtendLocalFamInstEnv fam_insts thing_inside = do { env <- getGblEnv ; inst_env' <- foldlM addLocalFamInst (tcg_fam_inst_env env) fam_insts - ; let env' = env { tcg_fam_inst_env = inst_env' } + ; let env' = env { tcg_fam_insts = fam_insts ++ tcg_fam_insts env, + tcg_fam_inst_env = inst_env' } ; setGblEnv env' thing_inside } @@ -42,7 +40,7 @@ tcExtendLocalFamInstEnv fam_insts thing_inside -- and then add it to the home inst env addLocalFamInst :: FamInstEnv -> FamInst -> TcM FamInstEnv addLocalFamInst home_fie famInst - = do { -- Instantiate the family instance type extend the instance + = do { -- To instantiate the family instance type, extend the instance -- envt with completely fresh template variables -- This is important because the template variables must -- not overlap with anything in the things being looked up @@ -57,12 +55,12 @@ addLocalFamInst home_fie famInst ; let (fam, tys') = tcSplitTyConApp tau' -{- !!!TODO: Need to complete this: -- Load imported instances, so that we report -- overlaps correctly ; eps <- getEps ; let inst_envs = (eps_fam_inst_env eps, home_fie) +{- !!!TODO: Need to complete this: -- Check for overlapping instance decls ; let { (matches, _) = lookupFamInstEnv inst_envs fam tys' ; dup_ispecs = [ dup_ispec --!!!adapt @@ -79,6 +77,7 @@ addLocalFamInst home_fie famInst -- OK, now extend the envt ; return (extendFamInstEnv home_fie famInst) } +{- UNUSED??? --SDM overlapErr famInst dupFamInst = addFamInstLoc famInst $ addErr (hang (ptext SLIT("Overlapping family instance declarations:")) @@ -88,4 +87,5 @@ addFamInstLoc famInst thing_inside = setSrcSpan (mkSrcSpan loc loc) thing_inside where loc = getSrcLoc famInst +-} \end{code}