On May 30, 2016 6:20 PM, "Guido van Rossum" <guido@python.org> wrote:
>
> In mypy we have a need for type variables, which are created like this:
>
>   from typing import TypeVar
>
>   T = TypeVar('T')
>
> I just saw a lightning talk about sympy where they define symbols to
> be used in mathematical equations, like this:
>
>   from sympy import Symbol
>
>   x = Symbol('x')
>
> I'm sure this is not a new idea, but so far I've always thought that
> this is pretty esoteric and the approach here is good enough. But
> maybe we can actually do better....

One of the negatives of the above usages is that the two names don't have to match. I can do:

Q = TypeVar('U')

for example. Dedicated syntax could fix that, e.g.,

from typing import TypeVar as T$

And instead of writing x I write T$x. That compiles to a call to TypeVar('x'). A function imported this way would be required to always return the same value. That is T$xyz is T$xyz and the compiler would be free to optimize calls away or not. If I want a runtime eval that won't be optimized away I can write T$('x' + 'yz') which is T$xyz.

Of course $ could be :: or ! or something else.x

Nothing prevents me from writing

x = T$x

but I can be assured that this is the same as T$x elsewhere (barring different code importing different functions under the same name).

--- Bruce