Functional dependencies question
Andrew J Bromage
Mon, 12 May 2003 15:10:28 +1000
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).