Greg - sorry for the slow reply. I agree the ListVariadic is a bit jargony. I'm currently leaning towards TypeVar(variadic=True), pending some discussion in the doc about whether this might cause problems for us down the line if we want to add more features to TypeVar.

Eric - to make sure I understand what you're saying, are you thinking of something like the following?

Ts = ListVariadic('Ts')
TsUnion = Union[Ts]

class Tuple(Sequence[UnionTs]): ...

I'm wondering whether there are any use-cases for this apart from making definitions of builtins cleaner - did you have any in mind?

On Mon, 19 Oct 2020 at 18:42, Eric Traut <> wrote:
Has there been any thought given to a way to "collapse" a ListVariadic into a single type? This would be useful, for example, in the declaration of the built-in `tuple` class. It accepts a variadic TypeVar, but its base class `Sequence` does not. The type argument for `Sequence` needs to be the union of the types in the tuple's ListVariadic.

The reason I ask is that the pyright code contains a bunch of special-case handling for tuples because they are currently the only type that allows variadic TypeVars. It would be great to replace all of this special-case logic with generalized support for variadic generics. The current proposal comes close to enabling this.


Eric Traut
Contributor to pyright & pylance
Microsoft Corp.
Typing-sig mailing list --
To unsubscribe send an email to
Member address: