This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author JelleZijlstra
Recipients AlexWaygood, JelleZijlstra, gvanrossum, kj, matthew.rahtz, mrahtz, serhiy.storchaka
Date 2022-03-20.21:54:06
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1647813246.83.0.45510769107.issue47006@roundup.psfhosted.org>
In-reply-to
Content
It's simple if you only look at simple examples.

Here are some examples current main (with Serhiy's patch for the Python version of typing) gets wrong:

>>> from typing import *
>>> Ts = TypeVarTuple("Ts")
>>> T1 = TypeVar("T1")
>>> T2 = TypeVar("T2")
>>> Tuple[T1, Unpack[Ts], T2][int, Unpack[tuple[int]]]  # expect error
typing.Tuple[int, *tuple[int]]
>>> Tuple[T1, Unpack[Ts], str, T2][int, Unpack[Ts]]  # expect error (T2 missing)
typing.Tuple[int, str, *Ts]  # it put *Ts in the wrong place
>>> Tuple[T1, Unpack[Ts], str, T2][int, Unpack[Ts], Unpack[Ts]]  # expect error (*Ts can't substitute T2)
typing.Tuple[int, *Ts, str, *Ts]
>>> class G(Generic[T1, Unpack[Ts], T2]): pass
... 
>>> G[int]  # expect error
__main__.G[int]

We can probably fix that, but I'm not looking forward to implementing the fixed logic in both Python and C. Also, I'm worried that it won't work with future extensions to the type system (e.g., the rumored Map operator) that may go into 3.12 or later versions.
History
Date User Action Args
2022-03-20 21:54:06JelleZijlstrasetrecipients: + JelleZijlstra, gvanrossum, serhiy.storchaka, kj, matthew.rahtz, mrahtz, AlexWaygood
2022-03-20 21:54:06JelleZijlstrasetmessageid: <1647813246.83.0.45510769107.issue47006@roundup.psfhosted.org>
2022-03-20 21:54:06JelleZijlstralinkissue47006 messages
2022-03-20 21:54:06JelleZijlstracreate