anchor.diff:  global_name_atom(Namespace, Name) when is_atom(Name) ->
     global_name_atom(Namespace, atom_to_list(Name));
   global_name_atom(NamespaceStr, NameStr) ->
  -  list_to_atom(NamespaceStr ++ "_" ++ atom_to_list(underscorize(NameStr))).
  +  list_to_atom(NamespaceStr ++ "_" ++ singular(underscorize(NameStr))).
   
   % for a whole group
   records(Defs) -> records(Defs, Defs).
  
positive.code:                true -> [$_, string:to_lower(C)];
                 false -> [C]
              end
          end, T)]).
  
  %% generate include/kpro.hrl
  gen_header_file(Records) ->
  
negative.code: field_type(Namespace, {array, Name}, Def) ->
    {array, field_type(Namespace, Name, Def)}.
  
  %% "foo_responses" -> "foo_response".
  %% Very, very naive and dangerous implementation!
  singular(Plural) -> string:strip(Plural, right, $s).
  
  %% "FooBarV1" -> "foo_bar_v1"
  underscorize([H | T]) ->
      [ string:to_lower(H) |
        lists:flatmap(
          fun(C) ->
  