
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