From 2558ec224e78bc95bcdde8f65c9ee25cdcb509d9 Mon Sep 17 00:00:00 2001 From: lewie <unknown> Date: Sun, 14 May 2000 07:16:50 +0000 Subject: [PATCH] [project @ 2000-05-14 07:16:50 by lewie] Wobble. Fine tuning tcSimplifyAndCheck a bit further (wrt implicit params). The key is that a method that doesn't constrain a local tyvar, but does has implicit params, needs to be reduced further. --- ghc/compiler/typecheck/Inst.lhs | 15 ++++++++++----- ghc/compiler/typecheck/TcSimplify.lhs | 3 ++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/ghc/compiler/typecheck/Inst.lhs b/ghc/compiler/typecheck/Inst.lhs index 55a1a4f40a4e..f00e8a14185f 100644 --- a/ghc/compiler/typecheck/Inst.lhs +++ b/ghc/compiler/typecheck/Inst.lhs @@ -25,7 +25,8 @@ module Inst ( lookupInst, lookupSimpleInst, LookupInstResult(..), - isDict, isClassDict, isTyVarDict, isStdClassTyVarDict, isMethodFor, notFunDep, + isDict, isClassDict, isMethod, + isTyVarDict, isStdClassTyVarDict, isMethodFor, notFunDep, instBindingRequired, instCanBeGeneralised, zonkInst, zonkInsts, zonkFunDeps, zonkTvFunDeps, @@ -302,10 +303,14 @@ Predicates \begin{code} isDict :: Inst -> Bool isDict (Dict _ _ _) = True -isDict other = False +isDict other = False isClassDict :: Inst -> Bool isClassDict (Dict _ (Class _ _) _) = True -isClassDict other = False +isClassDict other = False + +isMethod :: Inst -> Bool +isMethod (Method _ _ _ _ _ _) = True +isMethod other = False isMethodFor :: TcIdSet -> Inst -> Bool isMethodFor ids (Method uniq id tys _ _ loc) @@ -574,10 +579,10 @@ pprInst (Dict u pred loc) = pprPred pred <+> show_uniq u pprInst m@(Method u id tys theta tau loc) = hsep [ppr id, ptext SLIT("at"), - brackets (interppSP tys), + brackets (interppSP tys) {- , ppr theta, ppr tau, show_uniq u, - ppr (instToId m)] + ppr (instToId m) -}] pprInst (FunDep clas fds loc) = hsep [ppr clas, ppr fds] diff --git a/ghc/compiler/typecheck/TcSimplify.lhs b/ghc/compiler/typecheck/TcSimplify.lhs index 08b2211cfb5b..9eb4db8dc8d6 100644 --- a/ghc/compiler/typecheck/TcSimplify.lhs +++ b/ghc/compiler/typecheck/TcSimplify.lhs @@ -132,7 +132,7 @@ import TcHsSyn ( TcExpr, TcId, import TcMonad import Inst ( lookupInst, lookupSimpleInst, LookupInstResult(..), tyVarsOfInst, tyVarsOfInsts, - isDict, isClassDict, isStdClassTyVarDict, + isDict, isClassDict, isMethod, isStdClassTyVarDict, isMethodFor, notFunDep, instToId, instBindingRequired, instCanBeGeneralised, newDictFromOld, @@ -299,6 +299,7 @@ tcSimplifyAndCheck str local_tvs given_lie wanted_lie try_me inst -- Does not constrain a local tyvar | isEmptyVarSet (tyVarsOfInst inst `intersectVarSet` local_tvs) + && (not (isMethod inst) || null (getIPs inst)) = Free -- When checking against a given signature we always reduce -- GitLab