X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Ftypes%2FFamInstEnv.lhs;h=b9276b7cf6ee2ff406969c808deff9ae11ff7a8d;hb=272fb49ecfeffe7aaa66b9b61bab12d8a858458d;hp=9b49f5c34393fb9ac329bd4620894c90678cd6be;hpb=8a5d47de2b82d9cca86546a7bd89d915488934ef;p=ghc-hetmet.git diff --git a/compiler/types/FamInstEnv.lhs b/compiler/types/FamInstEnv.lhs index 9b49f5c..b9276b7 100644 --- a/compiler/types/FamInstEnv.lhs +++ b/compiler/types/FamInstEnv.lhs @@ -6,10 +6,12 @@ FamInstEnv: Type checked family instance declarations \begin{code} module FamInstEnv ( - FamInst(..), famInstTyCon, pprFamInst, pprFamInstHdr, pprFamInsts, + FamInst(..), famInstTyCon, famInstTyVars, + pprFamInst, pprFamInstHdr, pprFamInsts, famInstHead, mkLocalFamInst, mkImportedFamInst, - FamInstEnv, emptyFamInstEnv, extendFamInstEnv, extendFamInstEnvList, + FamInstEnvs, FamInstEnv, emptyFamInstEnv, + extendFamInstEnv, extendFamInstEnvList, famInstEnvElts, familyInstances, lookupFamInstEnv, lookupFamInstEnvUnify @@ -32,7 +34,6 @@ import UniqFM import Outputable import Maybe -import Monad \end{code} @@ -60,6 +61,8 @@ data FamInst -- famInstTyCon :: FamInst -> TyCon famInstTyCon = fi_tycon + +famInstTyVars = fi_tvs \end{code} \begin{code} @@ -140,6 +143,9 @@ InstEnv maps a family name to the list of known instances for that family. \begin{code} type FamInstEnv = UniqFM FamilyInstEnv -- Maps a family to its instances +type FamInstEnvs = (FamInstEnv, FamInstEnv) + -- External package inst-env, Home-package inst-env + data FamilyInstEnv = FamIE [FamInst] -- The instances for a particular family, in any order Bool -- True <=> there is an instance of form T a b c @@ -174,7 +180,7 @@ extendFamInstEnv inst_env ins_item@(FamInst {fi_fam = cls_nm, fi_tcs = mb_tcs}) add (FamIE items tyvar) _ = FamIE (ins_item:items) (ins_tyvar || tyvar) ins_tyvar = not (any isJust mb_tcs) -\end{code} +\end{code} %************************************************************************ %* * @@ -188,8 +194,7 @@ families), and then, it doesn't matter which match we choose (as the instances are guaranteed confluent). \begin{code} -lookupFamInstEnv :: (FamInstEnv -- External package inst-env - ,FamInstEnv) -- Home-package inst-env +lookupFamInstEnv :: FamInstEnvs -> TyCon -> [Type] -- What we are looking for -> [(TvSubst, FamInst)] -- Successful matches lookupFamInstEnv (pkg_ie, home_ie) fam tys