I think the "foo | bar" syntax for Union is pretty clear, I like it!
The ~foo for Optional is... not that obvious. Not sure it's a win. On Thu, 29 Aug 2019 at 13:49, Philippe Prados <philippe.pra...@gmail.com> wrote: > Hello everybody, > > Scala 3 propose the a new syntax for Union type. See here > <https://dotty.epfl.ch/docs/reference/new-types/union-types.html>. I > propose to add a similar syntax in Python. > > # Operator for Union > assert( int | str == Union[int,str]) > assert( int | str | float == Union[int,str,float]) > # Operator for Optional > assert( ~int == Optional[int]) > > Now, it's possible to write: > > def fn(bag:List[int | str], option: ~int = None) -> float | str: ... > > in place of > > def fn(bag:List[Option[int,str]], option: Optional[int] = None) -> > Union[float,str]: ... > > I think these syntaxes are more clear, and can help with the adoption of > typing. > > > I test and implement these ideas in a two fork : One for CPython > <https://github.com/pprados/cpython> and one for MyPy > <https://github.com/pprados/mypy>. See the branches add_OR_to_types (for > Union syntax) or add_INVERT_to_types (for Union and Optional syntax). > > How I implement that ? I add the operators __or__ and __revert__ to > PyType_Type. The C code is similar of : > > from typing import * > def type_or(self,right): > return Union[self,right] > type(type).__or__ = type_or > > Actually, the accepted syntax for typing is : > > annotation: name_type > name_type: NAME (args)? > args: '[' paramslist ']' > paramslist: annotation (',' annotation)* [','] > > I propose to extend the syntax to : > > annotation: ( name_type | or_type | invert_type ) > name_type: NAME (args)? > args: '[' paramslist ']' > paramslist: annotation (',' annotation)* [','] > > or_type: name_type '|' annotation > > invert_type: '~' annotation > > > What do you think about that ? > > The draft of a PEP is here > <https://github.com/pprados/peps/blob/master/pep-9999.rst>. > > Regards > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@python.org > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/FCTXGDT2NNKRJQ6CDEPWUXHVG2AAQZZY/ > Code of Conduct: http://python.org/psf/codeofconduct/ > -- Gustavo J. A. M. Carneiro Gambit Research "The universe is always one step beyond logic." -- Frank Herbert
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/P7MFY6L6EJRVIVICXGJCGCKEDVPYCGZF/ Code of Conduct: http://python.org/psf/codeofconduct/