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