<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 4 September 2016 at 19:59, Nick Coghlan <span dir="ltr"><<a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>></span> wrote:<br><div><br></div><div>Nick,<br><br></div><div>Thank you for good suggestions.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I mostly agree, but the PEP still needs to address the fact that it's<br>
only a subset of the benefits that actually require new syntax, since<br>
it's that subset which provides the rationale for rejecting the use of<br>
a function based approach, while the rest provided the incentive to<br>
start looking for a way to replace the type comments.<span class=""><br></span></blockquote><div><br></div><div>I think I agree.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I suspect you'll have an easier time of it on that front if you<br>
include some examples of dynamically typed code that a well-behaved<br>
type-checker *must* report as correct Python code, such as:<br>
<br>
    x: Optional[List[Any]]<br>
    # This is the type of "x" *after* the if statement, not *during* it<br>
<span class="">    if arg is not None:<br>
        x = list(arg)<br>
        if other_arg is not None:<br>
</span>            # A well-behaved typechecker should allow this due to<br>
            # the more specific initialisation in this particular branch<br>
<span class="">            x.extend(other_arg)<br>
    else:<br>
        x = None</span></blockquote><div><br></div><div>There are very similar examples in PEP 484 (section on singletons in unions),<br>we could just copy those or use this example,<br></div><div>but I am sure Guido will not agree to word "must" (although "should" maybe possible :-)<br></div><div>  <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Similarly, it would be reasonable to say that these three snippets<br>
should all be equivalent from a typechecking perspective:<br>
<br>
    x = None # type: Optional[T]<br>
<br>
    x: Optional[T] = None<br>
<br>
    x: Optional[T]<br>
    x = None<br></blockquote><div><br></div><div>Nice idea, explicit is better than implicit.<br><br>--<br></div><div>Ivan<br></div></div></div></div>