Of course, I think we all understand that all these extensions are opt-in, and the behaviour of GHC would not change, for existing modules, would not change if this proposal was accepted.
> I think we should express an opinion about the intended direction.
Are we advising that ExtendedForallScope is a dead end, because we want
TypeAbstraction?
One way to think of it is this: if Haskell had type-abstraction from Day 1, would we ever have introduced ExtendedForAllScope? I'm sure we would not. Even at the time we introduced it, I remember we were concerned that it was a very strange (non-nested) scoping construct.
We bind term variables in patterns on the LHS; it makes sense to do the same for type variables.
So yes, in that sense the story is that we recommend TypeAbstraction for introducing a scoped type variable. Thus, instead of
```
id :: forall a. a -> a
id x = (x :: a)
```
we would have
```
id :: forall a. a -> a
id @b x = (x::b) -- I have used a different name only for illustrative purposes; could also be 'a'.
```
We have to repeat that type-variable pattern in each equation for the function. But we also have to repeat the term variables, and we just take that for granted.
But as a "recommendation", it's a pretty weak one. You are still free to use either ExtendedForAllScope or TypeAbstraction or both at once in a particular module (subject to point 5 of 5.2). So it's a bit like let-vs-where, or H98 data decls vs GADTs. Do we even need a firm "recommendation"?
Simon