anchor.diff:    ;
   
   type_expr
  -  :  '(' base_type (typeop base_type)* ')' mode? // ADT or tuple
  +  :  '(' base_type (typeop base_type)* ')' cap? // ADT or tuple
     ;
   
   typeop
  
positive.code:   ;
  
  base_type
    :  ID ('.' ID)* type_args? mode? // nominal type
    |  '{' fun_type* '}' mode? // structural type
    |  typedecl // nested type definition
    ;
  
  // could make structural types into traits by supplying bodies here
  fun_type
    :  'fun' mode '?'? ID? '(' types? ')' oftype?
    |  'be' ID? '(' types? ')' // FIX: need this?
    ;
  
  
negative.code:   :  '[' type (',' type)* ']'
    ;
  
  cap
  //  :  ':' (raw_cap | ID)
    :  (raw_cap | ID) ('.' (raw_cap | ID))*
    ;
  
  raw_cap
  //  :  ('iso' | 'trn' | 'var' | 'val' | 'box' | 'tag')
    :  ('iso' | 'trn' | 'mut' | 'imm' | 'box' | 'tag')
    ;
  
  params
  