anchor.diff:  
   params_return({ok, Method, Params, _}, []) ->
       {ok, Method, Params};
  +params_return({ok, Method, Params, TypeSpec}, [{params_name_as, atom}|T]) ->
  +    params_return({ok, Method, [{binary_to_atom(K, utf8), V} || {K, V} <- Params], TypeSpec}, T);
   params_return({ok, Method, Params, TypeSpec}, [{methods_as, atom}|T]) ->
  -    params_return({ok, binary_to_atom(Method, utf8), [{binary_to_atom(K, utf8), V} || {K, V} <- Params], TypeSpec}, T);
  +    params_return({ok, binary_to_atom(Method, utf8), Params, TypeSpec}, T);
   params_return({ok, Method, Params, {_, _, Spec} = TypeSpec}, [{params_as, list}|T]) ->
       #rpc{input = Input} = lists:keyfind(m2b(Method), #rpc.name, Spec),
       #object{fields = Fields} = Input,
  
positive.code: build_rpc_opts(#rpc_method{params_as = list}) ->
      [{methods_as, atom},{params_as, list}];
  build_rpc_opts(_) ->
      [{methods_as, atom}].
  
  build_rpc_typespec(Mod, M = #rpc_method{name = Name, description = Desc}) ->
      Fields = case cb_apply(Mod, param_info, [Name]) of
  
negative.code:     TooMany andalso throw({invalid, "superfluous parameters"}),
      lists:reverse(Proplist).
  
  strip_keys([{K, V} | Proplists], [#field{name = K} | Defs], Acc) ->
      strip_keys(Proplists, Defs, [V | Acc]);
  strip_keys([{K, V} | Proplists], [#array{name = K} | Defs], Acc) ->
      strip_keys(Proplists, Defs, [V | Acc]);
  strip_keys(Args, [#field{opts = Opts} | Defs], Acc) ->
      strip_keys(tail(Args), Defs, [proplists:get_value(default, Opts) | Acc]);
  strip_keys(Args, [#array{opts = Opts} | Defs], Acc) ->
      strip_keys(tail(Args), Defs, [proplists:get_value(default, Opts) | Acc]);
  strip_keys([], [], Acc) ->
      lists:reverse(Acc).
  
  tail([_ | V]) -> V;
  tail([]) -> [].
  
  zip([], [], Result) ->
      Result;
  