On Aug 29, 2019, at 05:25, Philippe Prados <philippe.pra...@gmail.com> wrote:
>
> Hello everybody,
> Scala 3 propose the a new syntax for Union type. See here. 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])
One immediate problem here is that you’d have to add methods to the builtin
type type or this would be illegal at runtime. Which means you couldn’t use
this feature in Python 3.7, much less 2.7. I’m not sure it maintaining backward
compatibility in typing and in mypy is still as important today as it was 5
years ago, but I’m pretty sure it hasn’t been abandoned entirely.
Also, for ~, that seems pretty misleading. | means union, and not just in
Python. And I’m pretty sure it’s the most common way to spell union/sum types
and related things across languages. So, str|int isn’t just easier to type, it
should actually aid comprehension. But ~ means complement, which is a
completely different thing from |None. And the most common way to spell
Optional as an operator across languages is ?. Of course I wouldn’t actually
expect ~a to mean “any type but a”, but only because of the meta-thought that
such a declaration would be completely useless so you must have intended
something different. So ~int seems like it would actually harm comprehension
instead of helping.
Also, IIRC, multiple shorthands for both Union and Optional were suggested back
during the original discussion, including str|int and {str,int} (which doesn’t
have the backward compatibility problem) and maybe others. If they were all
rejected, the reasoning is probably in the list archives or the GitHub issues
repo, so if you want to re-suggest one of them, you probably want to find the
original rejection and explain why it no longer applies.
_______________________________________________
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/LA4SDERW4A7RGKAQNEMV6NB3BIMN54TB/
Code of Conduct: http://python.org/psf/codeofconduct/