> I don't see the point in universally quantifying over types which are
already present in the environment
I think it reduces the indeterminacy you come across when you read your program ("where does this type variable come from, btw?")
> So is there anyway to "force" the scoping of variables, so that
> f :: a -> a
> f x = x :: a
> becomes valid?
You mean either than compiling with ScopedTypeVariables and adding the explicit forall a. on f? I don't think.
2012/1/4 Brandon Allbery <allbery.b@gmail.com>
Would you try:
f :: a -> a
f x = undefined :: a
And tell me if it works? IMO it doesn't.