
Robin Bate Boerop wrote:
This code compiles properly (with -fglasgow-exts on GHC 6.4.1):
class CC a type C x = CC a => a x f, g :: C a -> Int f _ = 3 g x = f x
But, this code:
class CC a type C x = CC a => a x f, g :: C a -> Int f _ = 3 g x = f $ x -- the only change
gives this error:
Inferred type is less polymorphic than expected Quantified type variable `a' escapes Expected type: a a1 -> b Inferred type: C a1 -> Int In the first argument of `($)', namely `f' In the definition of `g': g x = f $ x
What's going on here?
I think the type declaration is actually equivalent to: type C x = forall a. CC a => a x so that you are declaring: f,g :: (forall a. CC a => a Int) -> Int -- not allowed instead of: f,g :: forall a. (CC a => a Int ->Int)