Tony Lownds wrote: > On Dec 31, 2006, at 4:26 AM, Kay Schluehr wrote: > > > I have two questions: > > > > 1) I don't understand the clause ('*' [tname] (',' tname ['=' test])* > > in the grammar rule of typedargslist. Does it stem from another PEP? > > > > Yes, PEP 3102 Keyword-only Arguments. > > > 2) Is the func_annotation information for def foo(*c: list) > > stored as {"*c": list} preserving optional argument information or > > {"c":list} ? > > > > {"c": list} > > -Tony
Good. There is still one issue. I understand that you don't want to fix the semantics of function annotations but to be usefull some annotations are needed to express function types. Using those consistently with the notation of the enhanced function statement I suggest introducing an arrow expression and an __arrow__ special function: expr: arrow_expr ('->' arrow_expr)* arrow_expr: xor_expr ('|' xor_expr)* ... class Algebraic(type): ''' Metaclass used to enable operations on classes or subclasses ''' def __init__(cls, name, bases, dict): super(Algebraic, cls).__init__(name, bases, dict) def __arrow__(cls, codom): fntype = Function(*cls.dom) fntype.codom = codom return fntype def Function(*domains): "Function type generator" class FunType: __metaclass__ = Algebraic dom = domains codom = () return FunType maptype = Function( Function(object)->object, list) -> list -- http://mail.python.org/mailman/listinfo/python-list