anchor.diff:  
   list_comp -> open_list match_expr list_generators close_list : {lc, line('$1'), '$2', lists:flatten('$3')}.
   bin_comp  -> open_bin match_expr list_generators close_bin   : {bc, line('$1'), '$2', lists:flatten('$3')}.
  +bin_comp  -> open_bin match_expr bin_generators close_bin   : {bc, line('$1'), '$2', lists:flatten('$3')}.
   
   list_generators -> list_generator list_generators: ['$1'|'$2'].
   list_generators -> list_generator                : '$1'.
  
positive.code: list_generator -> for fat_arrow_expr in bool_expr if bool_expr :
      Line = line('$1'),
      [{generate, Line, '$2', '$4'},'$6'].
  
  % records
  
  
negative.code:     case_expr case_body case_patterns case_pattern try_expr catch_patterns
      catch_pattern recv_expr receive_patterns receive_pattern list list_items
      tuple tuple_items fun_call farity arrow_chains arrow_chain list_comp
      list_generator list_generators bin_comp bin_generators bin_generator rec
      rec_set rec_new attr_sets attr_set binary binary_items binary_item
      bin_type_def bin_type prefix_op attribute for_expr range signed_integer
      meta_block astify meta_astify attrs fat_arrow_expr struct struct_items
      struct_item struct_get struct_set struct_attrs struct_attr struct_call.
  
  Terminals
      fn match set open close open_block close_block integer float string var
  