From: simonpj Date: Thu, 20 Feb 2003 16:02:57 +0000 (+0000) Subject: [project @ 2003-02-20 16:02:57 by simonpj] X-Git-Tag: Approx_11550_changesets_converted~1126 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=e83fa2eba7ef2302fae8a6be86a9f495b4144387;hp=3194c5289207114a3417be884b2174a4375b808f;p=ghc-hetmet.git [project @ 2003-02-20 16:02:57 by simonpj] Add comments --- 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'