At 2002-07-23 09:06, Simon Peyton-Jones wrote: >Dead right! Imagine there was a method in class D: > > class C a b => D a where > op :: a -> b > >The type of 'op' is > > op :: D a => a -> b > >You can't really expect that the 'b' here is determined by 'a'!
Agreed. If you were going to allow "D a", they would have to be considered different "b"s. >Still, I suppose that if the methods in class D mention >only 'a', then it is strange to require D to be parameterised over >'b'. Thus, this seems more reasonable: > > class C a b => D a where > op :: a -> a > >Even this seems odd, because we would get the deduction > > D a |- C a b > >(i.e. from a (D a) dictionary you can get a (C a b) dictionary) >and that's only true for a particular 'b'. Well that's OK. From a (D a) dictionary, you get a (C a b) dictionary, where you're given "a", and you can find "b" from the fundep. -- Ashley Yakeley, Seattle WA _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell