This is off topic for discussion of this PEP.

It would require another one (essentially an extension of PEP 484) to get 
passed for your idea to be standardized. For now, I don't want to distract 
reviewers from conflating PEP 563 with all the possible wonderful or horrible 
ways people can potentially extend type hints with. The biggest achievement of 
PEP 484 is creating a _standard_ syntax for typing in Python that other tools 
can embrace.

I want to be very explicit that in no way should PEP 563 be viewed as a gateway 
to custom extensions that are going to go against the agreed standard. Further 
evolution of PEP 484 is possible (as exemplified by PEP 526) but even though 
PEP 563 does create several opportunities for nicer syntax, this is off topic 
for the time being.

- Ł

> On Sep 11, 2017, at 2:31 PM, ⁨אלעזר⁩ <⁨elaz...@gmail.com⁩> wrote:
> 
> 
> 
> On Mon, Sep 11, 2017 at 8:58 PM Steven D'Aprano <st...@pearwood.info 
> <mailto:st...@pearwood.info>> wrote:
> On Mon, Sep 11, 2017 at 04:06:14PM +0000, אלעזר wrote:
> > I like it. For previous discussion of this idea see here:
> > https://mail.python.org/pipermail/python-ideas/2016-September/042527.html 
> > <https://mail.python.org/pipermail/python-ideas/2016-September/042527.html>
> >
> > I don't see this mentioned in the PEP, but it will also allow (easy)
> > description of contracts and dependent types.
> 
> How? You may be using a different meaning to the word "contract" than I'm
> familiar with. I'm thinking about Design By Contract, where the
> contracts are typically much more powerful than mere type checks, e.g. a
> contract might state that the argument is float between 0 and 1,
> 
> def f(x: float and (0 <= x <= 1)) -> float: ...
> 
> or that the return result is datetime object in the future. There are (at
> least?) three types of contracts: preconditions, which specify the
> arguments,
> 
> Exemplified above
> 
> postconditions, which specify the return result,
> 
> def f(x: int, y: int) -> ret < y:     # ret being an (ugly) convention, 
> unknown to python
>     ...
> 
> and invariants, which specify what doesn't change.
> 
> class A:
>     x: x != 0
>     y: y > x
>     def foo(self): ...
> 
> Of course I'm not claiming my specific examples are useful or readable. I'm 
> also not claiming anything about the ability to check or enforce it; it's 
> merely about making python more friendly to 3rd party tool support.
> 
> You didn't ask about dependent types, but an example is in order:
> 
>     def zip(*x: Tuple[List[T], _n]) -> List[Tuple[T, _n]]: ...     # _n being 
> a binding occurrence, again not something the interpreter should know
> 
> Basically dependent types, like other types, are just a restricted form of 
> contracts.
> 
> Elazar
> 
> _______________________________________________
> Python-ideas mailing list
> Python-ideas@python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/

Attachment: signature.asc
Description: Message signed with OpenPGP

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to