anchor.diff:    ;
   
   class_
  -  :  ('actor' | 'class' | 'trait') ID type_params? ('is' types)? member*
  +  :  ('actor' | 'class' | 'trait') ID type_params? raw_cap? ('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
  +//  |  'new' '?'? ID type_params? params body? // constructor
  +//  |  'fun' raw_cap '?'? ID type_params? params oftype? body? // function
  +  |  'new' ID type_params? params '?'? body? // constructor
  +  |  'fun' raw_cap ID type_params? params oftype? '?'? body? // function
     |  'be' ID type_params? params body? // behaviour
     ;
   
  
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_expr
    :  '(' base_type (typeop base_type)* ')' cap? // ADT or tuple
    ;
  
  typeop
  