A more useful and less divisive future for typing?

I believe I addressed that part directly. Your primer run shows there are real use cases for it. That the authors did not themselves have a case doesn’t mean there aren’t cases.

How so? Generic[*Ts] is fine, but then how do you type some return types based on this? In my mind the mistake is thinking Union can and should be deprecated, rather than thinking of | as shorthand that is more ergonomic in most cases.

Toy example below, but there are plenty of more interesting cases than this with data workflows, as your primer run reveals.

from typing import Self

class ExampleIterator[*Ts]:
    def __init__(self, given: tuple[*Ts]) -> None:
        self.given = given
        self.it = iter(given)
    
    def __iter__(self) -> Self:
        return self

    def __next__(self):
        return next(self.it)

I understand that you as a type checker maintainer personally bear a lot of the effort involved on the implementation side of this equation, but as more and more decisions favor the ease of implementation over giving users tools to express types, typing becomes increasingly more restrictive on what can be written socially. Things go from being typed as Any or untyped because the type system can’t handle it yet, to people rewriting perfectly good code when it turns into “and it never will be supported”. Is it reasonable to say the implementation agnostic specification itself should cater to how implementations have boxed themselves into a corner by special-casing things in their code? Is it not better to specify more and just let those who want the feature in their type checker of choice go help contribute to it?

I don’t make that argument lightly here, there are plenty of cases where “you aren’t going to need this” or “This should be supported, but maybe we should spell it a different way for this particular case because of [reasons]” are quite reasonable responses, but I can’t see how such an argument applies here.