New submission from Serhiy Storchaka <storchaka+cpyt...@gmail.com>:
Substitution of ParamSpec in Concatenate produces weird results: >>> import typing >>> P = typing.ParamSpec('P') >>> typing.Concatenate[str, P][int] typing.Concatenate[str, int] >>> typing.Concatenate[str, P][[int]] typing.Concatenate[str, (<class 'int'>,)] >>> typing.Concatenate[str, P][typing.Concatenate[int, P]] typing.Concatenate[str, typing.Concatenate[int, ~P]] But all these results are invalid: >>> typing.Concatenate[str, int] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/serhiy/py/cpython/Lib/typing.py", line 309, in inner return func(*args, **kwds) ^^^^^^^^^^^^^^^^^^^ File "/home/serhiy/py/cpython/Lib/typing.py", line 400, in __getitem__ return self._getitem(self, parameters) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/serhiy/py/cpython/Lib/typing.py", line 595, in Concatenate raise TypeError("The last parameter to Concatenate should be a " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: The last parameter to Concatenate should be a ParamSpec variable. >>> typing.Concatenate[str, (int,)] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/serhiy/py/cpython/Lib/typing.py", line 309, in inner return func(*args, **kwds) ^^^^^^^^^^^^^^^^^^^ File "/home/serhiy/py/cpython/Lib/typing.py", line 400, in __getitem__ return self._getitem(self, parameters) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/serhiy/py/cpython/Lib/typing.py", line 595, in Concatenate raise TypeError("The last parameter to Concatenate should be a " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: The last parameter to Concatenate should be a ParamSpec variable. >>> typing.Concatenate[str, [int]] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/serhiy/py/cpython/Lib/typing.py", line 309, in inner return func(*args, **kwds) ^^^^^^^^^^^^^^^^^^^ File "/home/serhiy/py/cpython/Lib/typing.py", line 400, in __getitem__ return self._getitem(self, parameters) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/serhiy/py/cpython/Lib/typing.py", line 595, in Concatenate raise TypeError("The last parameter to Concatenate should be a " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: The last parameter to Concatenate should be a ParamSpec variable. >>> typing.Concatenate[str, typing.Concatenate[int, P]] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/serhiy/py/cpython/Lib/typing.py", line 309, in inner return func(*args, **kwds) ^^^^^^^^^^^^^^^^^^^ File "/home/serhiy/py/cpython/Lib/typing.py", line 400, in __getitem__ return self._getitem(self, parameters) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/serhiy/py/cpython/Lib/typing.py", line 595, in Concatenate raise TypeError("The last parameter to Concatenate should be a " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: The last parameter to Concatenate should be a ParamSpec variable. I expect that 1. The last parameter to Concatenate can be a Concatenate. Inner Concatenate should merge with the external one: Concatenate[str, Concatenate[int, P]] -> Concatenate[str, int, P] Concatenate[str, P][Concatenate[int, P]] -> Concatenate[str, int, P] 2. The last parameter to Concatenate can be a list of types. The result should be a list of types. Concatenate[str, [int, dict]] -> [str, int, dict] Concatenate[str, P][[int, dict]] -> [str, int, dict] 3. The last parameter to Concatenate can be an ellipsis. Concatenate[str, ...] Concatenate[str, P][...] -> Concatenate[str, ...] ---------- components: Library (Lib) messages: 398632 nosy: gvanrossum, kj, serhiy.storchaka priority: normal severity: normal status: open title: Substitution of ParamSpec in Concatenate versions: Python 3.10, Python 3.11 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue44791> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com