Thanks -- good to get this written down!
Question: it strikes me that the use case of [] for type hints is logically quite different than for indexing. So do they need to use the same syntax / dunder?
I think that type hints are used in specific places, and thus the interpreter could know if a given [] was a type hint or an indexing operation, and thus could dispatch it differently.
Would that be desirable? I'm not sure -- but as type hints' use of [] is logically quite different, it might make sense to have it use different rules.
There is precedent -- after all, () used to create a tuple follows different rules than () used to call a function.
If it's not technically possible to make the distinction, then it's a non-issue, but if it is, it may be worth considering.