anchor.diff:    :  '[' type (',' type)* ']'
     ;
   
  -mode
  -  :  ':' (base_mode | ID)
  -  ;
  -
  -base_mode
  -  :  ('iso' | 'trn' | 'var' | 'val' | 'box' | 'tag')
  +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
  
positive.code:   ;
  
  class_
    :  ('actor' | 'class' | 'trait') ID type_params? ('is' types)? member*
    ;
  
  member
    :  ('var' | 'val') ID oftype? (assign seq)? // field
    |  'new' '?'? ID type_params? params body? // constructor
    |  'fun' mode '?'? ID type_params? params oftype? body? // function
    |  'be' ID type_params? params body? // behaviour
    ;
  
  
negative.code:   ;
  
  type_expr
    :  '(' base_type (typeop base_type)* ')' cap? // ADT or tuple
    ;
  
  typeop
  