X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Ftypes%2FFunDeps.lhs;h=5ece0471884ec94b704736a60133a1328c7ce17f;hb=a7bda9e63ce091e4f33b6058a96686d7cde3d40d;hp=1534dc66f18da9be3eb2aa4cee65cd6a43e97aab;hpb=c76c69c5b62f1ca4fa52d75b0dfbd37b7eddbb09;p=ghc-hetmet.git diff --git a/compiler/types/FunDeps.lhs b/compiler/types/FunDeps.lhs index 1534dc6..5ece047 100644 --- a/compiler/types/FunDeps.lhs +++ b/compiler/types/FunDeps.lhs @@ -1,4 +1,4 @@ -% + % (c) The GRASP/AQUA Project, Glasgow University, 2000 % \section[FunDeps]{FunDeps - functional dependencies} @@ -20,6 +20,7 @@ import Var ( TyVar ) import Class ( Class, FunDep, pprFundeps, classTvsFds ) import TcGadt ( tcUnifyTys, BindFlag(..) ) import Type ( substTys, notElemTvSubst ) +import Coercion ( isEqPred ) import TcType ( Type, PredType(..), tcEqType, predTyUnique, mkClassPred, tyVarsOfTypes, tyVarsOfPred ) import InstEnv ( Instance(..), InstEnv, instanceHead, classInstances, @@ -219,8 +220,13 @@ NOTA BENE: \begin{code} improve inst_env preds - = [ eqn | group <- equivClassesByUniq (predTyUnique . fst) preds, + = [ eqn | group <- equivClassesByUniq (predTyUnique . fst) (filterEqPreds preds), eqn <- checkGroup inst_env group ] + where + filterEqPreds = filter (not . isEqPred . fst) + -- Equality predicates don't have uniques + -- In any case, improvement *generates*, rather than + -- *consumes*, equality constraints ---------- checkGroup :: (Class -> [Instance])