anchor.diff:  
   % KV and orddict
   
  -base_orddict -> kv_comma : { '[:]', ?line(hd('$1')), lists:sort('$1') }.
  +base_orddict -> kv_comma : { '[:]', ?line(hd('$1')), sort_kv('$1') }.
   
   kv_comma -> kv_eol expr : [{'{}',?line('$1'),[?exprs('$1'),'$2']}].
   kv_comma -> kv_eol expr comma_separator kv_comma : [{'{}',?line('$1'),[?exprs('$1'),'$2']}|'$4'].
  
positive.code:     true  ->
        { '[:]', Line, Left } = Last,
        { '[:]', _, Right }  = Block,
        KV = { '[:]', Line, Left ++ Right },
        lists:reverse([KV|Reverse]);
      false ->
        lists:reverse([Block,Last|Reverse])
  
negative.code: % in the existing one. Except list, everything should depend
  % on call_args.
  
  list_args -> kv_comma : sort_kv('$1').
  list_args -> expr : ['$1'].
  list_args -> expr comma_separator call_args : ['$1'|'$3'].
  
  