[Python-ideas] [Python-3000] PEP 3107 Function Annotations: overloadable ->

Kay Schluehr kay.schluehr at gmx.net
Tue Jan 2 13:44:34 CET 2007


Josiah Carlson schrieb:

>Tony Lownds <tony at pagedna.com> wrote:
>  
>
>>On Jan 1, 2007, at 5:39 PM, Josiah Carlson wrote:
>>
>>    
>>
>>>Given a reading of version 53169 of PEP 3107, I see no reason to even
>>>offer a __returns__ attribute, automatic method call, etc.  PEP 3107
>>>already defines the annotation to be specified as a dictionary of  
>>>named
>>>argument names, with a key of 'return' for the annotation of the  
>>>return
>>>annotation.  Is there any reason why this isn't sufficient?
>>>
>>>Even in the context of the signature PEP 362, there is no need for
>>>__returns__, as an annotation-consuming library would check the
>>>signature object for argument annotations, and the func_annotations
>>>dictionary for the 'return' key for any return annotations.
>>>      
>>>
>>Something got lost in the movement between lists... __returns__ wasn't
>>going to supplant or alter func_annotations or PEP 362 in any way.
>>
>>__returns__ was proposed as the special method attached to a new
>>operator (->). That operator could be used to write expressions that  
>>look
>>like a function signature.
>>
>>Here's Kay's original email.
>>
>>http://mail.python.org/pipermail/python-list/2007-January/420774.html
>>    
>>
>
>-1 on the -> operator as specified in the email you link.  There is no
>reason to add aribtrary operators for call-site annotations.  PEP 3107
>has already defined the syntax for function definition site annotations
>as follows...
>
>    def name(argument=default:annotation) -> annotation:
>        body
>  
>

If a function consumes or returns another function, it is quite natural 
to check against the function type ( at least for certain usefull 
annotation handlers ). Some experts call those "higher order functions". 
Programmers have found those in Pythons __builtins__ module. Others have 
guessed that decorators could be HOF. I hope this is convenient enough 
for motivation.

With current syntax one ends up defining function type annotations like this

Function(int,str).returns(str)
Function(int,str)*str
(Function(int,str), str)
"(int,str)->str"
...

Maybe one can update PEP 8 for a recommendation, if there is just too 
much syntax angst for choosing the form

    Function(int, str)->str

where wild hordes of Pythonistas might think about this as an 
implication - and are perfectly correct about it of course, at least 
according to Curry-Howard and any person, reading at least an 
introductory paper about type theory.

The latter is also the reason why Tonys __implies__ proposal makes 
perfect sense to me.

Regards and a happy new year,

Kay




More information about the Python-ideas mailing list