
12 May
2003
12 May
'03
5:10 a.m.
G'day everyone. Suppose I have code like this: class Foo a b | a -> b where foo :: a -> b bar :: (Foo Char t) => t bar = foo 'a' All well and good so far. Let's add an instance of Foo... instance Foo Char Bool where foo c = isAlpha c Now neither GHC nor Hugs will allow this to compile, as the declared type of bar is "too general". This seems intuitively the wrong behaviour. Either the original program was incorrect (as there was no visible instance of Foo for type Char) or the amended program is correct (since the type of bar is no more general than it was in the first version). Thoughts? Cheers, Andrew Bromage