
28 Jun
2009
28 Jun
'09
11:09 p.m.
On Sat, Jun 27, 2009 at 10:18:02AM +0930, Darryn wrote:
class A a where a1 :: a a2 :: a -> a a3 :: (B b) => b -> a
It is clear here that 'b' is different from 'a' on 'a3's definition, right? Now let's rename 'b' to 'c' on your instance:
-- note that 'a = Ainst c' here. instance (B c) => A (Ainst c) where a1 :: Ainst c a1 = I a2 :: Ainst c -> Ainst c a2 = J a3 :: (B b) => b -> Ainst c a3 = ...
Oops! We have 'K :: (B b) => b -> Ainst b', but 'a3 :: (B b) => b -> Ainst c' is more general than that. Hope that helps, -- Felipe.