anchor.diff:      -> ^(SUPERCLASS type positionalArguments) 
       ;
   
  +satisfiedTypes
  +    : 'satisfies' type (',' type)*
  +    -> ^(SATISFIES_LIST type+)
  +    ;
  +
  +abstractedTypes
  +    : 'abstracts' type (',' type)*
  +    -> ^(ABSTRACTS_LIST type+)
  +    ;
  +
   instance
       : 'case'! memberName arguments? (','|';'|'...')
       ;
       
   typeConstraint
  -    : 'where' type formalParameters? satisfiedTypes?
  +    : 'where' typeName formalParameters? satisfiedTypes? abstractedTypes?
       -> ^(TYPE_CONSTRAINT type formalParameters? satisfiedTypes?)
       ;
       
  
positive.code:     TYPE_CONSTRAINT;
      TYPE_DECL;
      SATISFIES_LIST;
      SUBSCRIPT_EXPR;
      LOWER_BOUND;
      UPPER_BOUND;
  
negative.code:     -> ^(TYPE_CONSTRAINT_LIST typeConstraint+)
      ;
      
  type
      : parameterizedType //( '[' parameterizedType? ']' )?
      -> parameterizedType //FIXME: unnecessary?
  