anchor.diff:  
   
   expr -> 'catch' expr : {'catch',?anno('$1'),'$2'}.
  -expr -> expr_100 : '$1'.
  -
  -expr_100 -> expr_150 '=' expr_100 : {match,?anno('$2'),'$1','$3'}.
  -expr_100 -> expr_150 '!' expr_100 : ?mkop2('$1', '$2', '$3').
  -expr_100 -> expr_150 : '$1'.
  -
  -expr_150 -> expr_160 'orelse' expr_150 : ?mkop2('$1', '$2', '$3').
  -expr_150 -> expr_160 : '$1'.
  -
  -expr_160 -> expr_200 'andalso' expr_160 : ?mkop2('$1', '$2', '$3').
  -expr_160 -> expr_200 : '$1'.
  -
  -expr_200 -> expr_300 comp_op expr_300 :
  -	?mkop2('$1', '$2', '$3').
  -expr_200 -> expr_300 : '$1'.
  -
  -expr_300 -> expr_400 list_op expr_300 :
  -	?mkop2('$1', '$2', '$3').
  -expr_300 -> expr_400 : '$1'.
  -
  -expr_400 -> expr_400 add_op expr_500 :
  -	?mkop2('$1', '$2', '$3').
  -expr_400 -> expr_500 : '$1'.
  -
  -expr_500 -> expr_500 mult_op expr_600 :
  -	?mkop2('$1', '$2', '$3').
  -expr_500 -> expr_600 : '$1'.
  -
  -expr_600 -> prefix_op expr_600 :
  -	?mkop1('$1', '$2').
  -expr_600 -> expr_650 : '$1'.
  -
  -expr_650 -> map_expr : '$1'.
  -expr_650 -> expr_700 : '$1'.
  -
  -expr_700 -> function_call : '$1'.
  -expr_700 -> record_expr : '$1'.
  -expr_700 -> expr_800 : '$1'.
  -
  -expr_800 -> expr_max ':' expr_max :
  -	{remote,?anno('$2'),'$1','$3'}.
  -expr_800 -> expr_max : '$1'.
  +expr -> expr '=' expr : {match,?anno('$2'),'$1','$3'}.
  +expr -> expr '!' expr : ?mkop2('$1', '$2', '$3').
  +expr -> expr 'orelse' expr : ?mkop2('$1', '$2', '$3').
  +expr -> expr 'andalso' expr : ?mkop2('$1', '$2', '$3').
  +expr -> expr comp_op expr : ?mkop2('$1', '$2', '$3').
  +expr -> expr list_op expr : ?mkop2('$1', '$2', '$3').
  +expr -> expr add_op expr : ?mkop2('$1', '$2', '$3').
  +expr -> expr mult_op expr : ?mkop2('$1', '$2', '$3').
  +expr -> prefix_op expr : ?mkop1('$1', '$2').
  +expr -> map_expr : '$1'.
  +expr -> function_call : '$1'.
  +expr -> record_expr : '$1'.
  +expr -> expr_remote : '$1'.
  +
  +expr_remote -> expr_max ':' expr_max : {remote,?anno('$2'),'$1','$3'}.
  +expr_remote -> expr_max : '$1'.
   
   expr_max -> var : '$1'.
   expr_max -> atomic : '$1'.
  
positive.code: type -> integer                           : '$1'.
  type -> char                              : '$1'.
  type -> 'fun' '(' ')'                     : {type, ?anno('$1'), 'fun', []}.
  type -> 'fun' '(' fun_type_100 ')'        : '$3'.
  
  fun_type_100 -> '(' '...' ')' '->' top_type
                                            : {type, ?anno('$1'), 'fun',
                                               [{type, ?anno('$1'), any}, '$5']}.
  fun_type_100 -> fun_type                  : '$1'.
  
  fun_type -> '(' ')' '->' top_type  : {type, ?anno('$1'), 'fun',
                                        [{type, ?anno('$1'), product, []}, '$4']}.
  fun_type -> '(' top_types ')' '->' top_type
  
negative.code: expr_max -> fun_expr : '$1'.
  expr_max -> try_expr : '$1'.
  
  pat_expr -> pat_expr '=' pat_expr : {match,?anno('$2'),'$1','$3'}.
  pat_expr -> pat_expr comp_op pat_expr : ?mkop2('$1', '$2', '$3').
  pat_expr -> pat_expr list_op pat_expr : ?mkop2('$1', '$2', '$3').
  pat_expr -> pat_expr add_op pat_expr : ?mkop2('$1', '$2', '$3').
  pat_expr -> pat_expr mult_op pat_expr : ?mkop2('$1', '$2', '$3').
  pat_expr -> prefix_op pat_expr : ?mkop1('$1', '$2').
  pat_expr -> map_pat_expr : '$1'.
  pat_expr -> record_pat_expr : '$1'.
  pat_expr -> pat_expr_max : '$1'.
  
  pat_expr_max -> var : '$1'.
  pat_expr_max -> atomic : '$1'.
  