lookupInst, lookupSimpleInst, LookupInstResult(..),
- isDict, isClassDict, isTyVarDict, isStdClassTyVarDict, isMethodFor, notFunDep,
+ isDict, isClassDict, isMethod,
+ isTyVarDict, isStdClassTyVarDict, isMethodFor, notFunDep,
instBindingRequired, instCanBeGeneralised,
zonkInst, zonkInsts, zonkFunDeps, zonkTvFunDeps,
\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)
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]
import TcMonad
import Inst ( lookupInst, lookupSimpleInst, LookupInstResult(..),
tyVarsOfInst, tyVarsOfInsts,
- isDict, isClassDict, isStdClassTyVarDict,
+ isDict, isClassDict, isMethod, isStdClassTyVarDict,
isMethodFor, notFunDep,
instToId, instBindingRequired, instCanBeGeneralised,
newDictFromOld,
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