anchor.diff:          true -> throw({etag_match, ETag});
           false -> {ok, Acc0#vacc{etag=ETag}}
       end.
  -
  -
  -parse_json(V) when is_list(V) ->
  -    ?JSON_DECODE(V);
  -parse_json(V) ->
  -    V.
  
positive.code:     prepend_val/1,
      parse_params/2,
      parse_params/3,
      view_cb/2,
      row_to_json/1,
      row_to_json/2,
  
negative.code:     parse_params(Props, Keys, Args).
  
  
  parse_params(Props, Keys, Args) ->
      parse_params(Props, Keys, Args, []).
  
  parse_params(Props, Keys, #mrargs{}=Args0, Options) ->
      IsDecoded = lists:member(decoded, Options),
      % group_level set to undefined to detect if explicitly set by user
      Args1 = Args0#mrargs{keys=Keys, group=undefined, group_level=undefined},
      lists:foldl(fun({K, V}, Acc) ->
          parse_param(K, V, Acc, IsDecoded)
      end, Args1, Props).
  
  
  parse_param(Key, Val, Args, IsDecoded) when is_binary(Key) ->
      parse_param(binary_to_list(Key), Val, Args, IsDecoded);
  parse_param(Key, Val, Args, IsDecoded) ->
      case Key of
          "" ->
              Args;
          "reduce" ->
              Args#mrargs{reduce=parse_boolean(Val)};
          "key" when IsDecoded ->
              Args#mrargs{start_key=Val, end_key=Val};
          "key" ->
              JsonKey = ?JSON_DECODE(Val),
              Args#mrargs{start_key=JsonKey, end_key=JsonKey};
          "keys" when IsDecoded ->
              Args#mrargs{keys=Val};
          "keys" ->
              Args#mrargs{keys=?JSON_DECODE(Val)};
          "startkey" when IsDecoded ->
              Args#mrargs{start_key=Val};
          "start_key" when IsDecoded ->
              Args#mrargs{start_key=Val};
          "startkey" ->
              Args#mrargs{start_key=?JSON_DECODE(Val)};
          "start_key" ->
              Args#mrargs{start_key=?JSON_DECODE(Val)};
          "startkey_docid" ->
              Args#mrargs{start_key_docid=couch_util:to_binary(Val)};
          "start_key_doc_id" ->
              Args#mrargs{start_key_docid=couch_util:to_binary(Val)};
          "endkey" when IsDecoded ->
              Args#mrargs{end_key=Val};
          "end_key" when IsDecoded ->
              Args#mrargs{end_key=Val};
          "endkey" ->
              Args#mrargs{end_key=?JSON_DECODE(Val)};
          "end_key" ->
              Args#mrargs{end_key=?JSON_DECODE(Val)};
          "endkey_docid" ->
              Args#mrargs{end_key_docid=couch_util:to_binary(Val)};
          "end_key_doc_id" ->
  