(serious)
If you need a syntax simply a
with l: ttype, y:ttype do
seems fine with me. It is a convenience syntax.
The trouble is that it only fixes accidental clashes when identifiers exist in both "l" and "y", and introduces a new problem, namely that a small mistake (not prefixing with l or y) still might occasionally compile if the identifier exists in the much larger global scope. The accidental fishing in the global scope isn't fixed at all, and this syntax makes it only more likely. (not on misspelling, but also by accidentally omitting the prefix (l,y) )
At least the default WITH automatically overrides the global scope if identifiers match.
A possible, but a bit heavy handed, solution would be to also have to define a prefix for the global scope, and error on any not prefixed value.
with default std, l: ttype, y:ttype, do
But that eats away the convenience factor again.