Scoped type variables

Olaf Chitil O.Chitil at
Sun Dec 19 08:22:33 EST 2004

>I'm not sure I understand the objection raised by Jon; the 'implicit
>declaration' of type variables in type signatures has never bothered
>me, and in fact seems quite similar to how names for values don't have
>to be declared beforehand but are brought into scope by the binding
>(which I also have no problem with).

The binding of a variable is the declaration of the variable. In 
contrast, type variables are never declared in Haskell 98, they are only 
used. In my opinion this lack of an explicit type variable quantifier is 
just acceptable, because all type variables are universally quantified 
and their scope is just the type in which they appear. The very moment 
you allow for wider scopes of type variables the disadvantage of the 
lacking type variable quantifier becomes appearant:

When you see
    f :: a -> a
somewhere within an inner "where" clause you do not know at all if this 
    f :: forall a. a -> a
or the "a" is actually quantified somewhere outside and hence "f" has a 
far more restricted type (because Haskell does not even require you to 
write a type signature next to its variable binding, you have to search 
the *whole* module to find out).

So scoped type variables do not fit Haskell well anyway, but I think 
when added they should at least be an upward compatible extension; any 
Haskell 98 program should still be correct. Hence I support Jon in that 
ghc should only allow those type variables a wider scope that have been 
explicitly declared with the non-Haskell 98 keyword "forall".


More information about the Glasgow-haskell-users mailing list