anchor.diff:  
   rule field_or_method_or_signal_decl:
                                                   {{ signal = false; fargs = []; daux = () }}
  -        [ 'signal'                              {{ signal = true }}
  -        ]
  +        [ 'signal'                              {{ signal = true; coll = 'void' }}
  +          [ '<' IDENT '>'                       {{ coll = IDENT; ASC (coll) }}
  +          ] ]
           ( 'void'                                {{ dtname = 'void' }}
           | typename                              {{ dtname = typename }}
           )
  
positive.code:               ] '\)'                            # [ '=' auxinit {{ daux = auxinit }} ]
          ) ';'                                   {{ if kind == 'field': ANS (signal, dident) }}
                                                  {{ dtype = yy.clone_type (dtname, void = kind != 'field') }}
                                                  {{ if kind == 'field': return (kind, (dident, dtype, daux)) }}
                                                  {{ return (kind, (dident, dtype, daux, fargs)) }}
  
  
negative.code: def ANS (issignal, identifier): # assert non-signal decl
    if issignal:
      raise TypeError ('non-method invalidly declared as \'signal\': %s' % identifier)
  def ASC (collkind): # assert signal collector
    if not collkind in collectors:
      raise TypeError ('invalid signal collector: %s' % collkind)
  
  class Error (Exception):
    def __init__ (self, msg, ecaret = None):
  