From e83fa2eba7ef2302fae8a6be86a9f495b4144387 Mon Sep 17 00:00:00 2001 From: simonpj Date: Thu, 20 Feb 2003 16:02:57 +0000 Subject: [PATCH] [project @ 2003-02-20 16:02:57 by simonpj] Add comments --- ghc/compiler/typecheck/TcInstDcls.lhs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ghc/compiler/typecheck/TcInstDcls.lhs b/ghc/compiler/typecheck/TcInstDcls.lhs index cf705ae..d312cee 100644 --- a/ghc/compiler/typecheck/TcInstDcls.lhs +++ b/ghc/compiler/typecheck/TcInstDcls.lhs @@ -629,6 +629,18 @@ tcMethods clas inst_tyvars inst_tyvars' dfun_theta' inst_tys' -- -- Solution: make meth_insts available, so that 'then' refers directly -- to the local 'bind' rather than going via the dictionary. + -- + -- BUT WATCH OUT! If the method type mentions the class variable, then + -- this optimisation is not right. Consider + -- class C a where + -- op :: Eq a => a + -- + -- instance C Int where + -- op = op + -- The occurrence of 'op' on the rhs gives rise to a constraint + -- op at Int + -- The trouble is that the 'meth_inst' for op, which is 'available', also + -- looks like 'op at Int'. But they are not the same. let all_insts = avail_insts ++ catMaybes meth_insts xtve = inst_tyvars `zip` inst_tyvars' -- 1.7.10.4