
Bulat Ziganshin wrote:
Hello Brian,
Thursday, February 09, 2006, 9:38:35 AM, you wrote:
the past few months (!) and still can't understand why the following is an illegal type:
forall a. ((Ord a => a-> a) -> Int)
i don't know right answer burt may be because "Ord a" restriction and "forall a" )"dseclaration" of type variable) should be at the same "level". imagine the following declaration:
forall a. (Int -> (Ord a => a)) -> Int)
it is not good to write restriction on some deep level instead of right together with "declaration"
Thanks! If I understand you correctly, I should think of the "Ord" as being part of the "forall" quantifier, so that forall a. Ord a => is really to be thought of as something like: forall_that_is_Ord a => and of course quantifiers can't be split up into pieces that are distributed all over the place... If so, then I think I understand it all now, though I'm puzzled why GHC chooses to create illegal types instead of finding the innermost quantification point ie I would think that (Ord a=> a->a) -> Int should then "obviously" be shorthand for (forall a. Ord a=> a->a) -> Int and surely this could easily be implemented by just prepending "forall a b c" onto any context restricting a b c... (?) Regards, Brian.