anchor.diff:      <<High:10, Low:10>> = <<(Unicode - 16#10000):20>>, % 非効率
       escape_string(Str, Nexts, <<Buf/binary, $\\, $u, ?UNICODE_TO_HEX(High + 16#D800), $\\, $u, ?UNICODE_TO_HEX(Low + 16#DC00)>>).
   
  -% -spec array(jsone:json_array(), binary()) -> binary().
  +-spec array(jsone:json_array(), [next()], binary()) -> encode_result().
   array(List, Nexts, Buf) ->
       array_values(List, Nexts, <<Buf/binary, $[>>).
   
  -% -spec array_values(jsone:json_array(), binary()) -> binary().
  +-spec array_values(jsone:json_array(), [next()], binary()) -> encode_result().
   array_values([],       Nexts, Buf) -> next(Nexts, <<Buf/binary, $]>>);
   array_values([X | Xs], Nexts, Buf) -> value(X, [{array_values, Xs} | Nexts], Buf).
   
  -% -spec object(jsone:json_object(), binary()) -> binary().
  +-spec object(jsone:json_object(), [next()], binary()) -> encode_result().
   object({Members}, Nexts, Buf) ->
       object_members(Members, Nexts, <<Buf/binary, ${>>).
   
  -% -spec object_members(jsone:json_object_members(), binary()) -> binary().
  +-spec object_members(jsone:json_object_members(), [next()], binary()) -> encode_result().
   object_members([],                             Nexts, Buf) -> next(Nexts, <<Buf/binary, $}>>);
   object_members([{<<Key/binary>>, Value} | Xs], Nexts, Buf) -> string(Key, [{object_value, Value, Xs} | Nexts], Buf);
   object_members(Arg, Nexts, Buf)                            -> ?ERROR(object_members, [Arg, Nexts, Buf]).
   
  +-spec object_value(jsone:json_value(), jsone:json_object_members(), [next()], binary()) -> encode_result().
   object_value(Value, Members, Nexts, Buf) ->
       value(Value, [{object_members, Members} | Nexts], <<Buf/binary, $:>>).
  
positive.code:             end
      end.
  
  % -spec value(jsone:json_value(), binary()) -> binary().
  value(null, Nexts, Buf)                         -> next(Nexts, <<Buf/binary, "null">>);
  value(false, Nexts, Buf)                        -> next(Nexts, <<Buf/binary, "false">>);
  value(true, Nexts, Buf)                         -> next(Nexts, <<Buf/binary, "true">>);
  
negative.code: value({_} = Value, Nexts, Buf)                  -> object(Value, Nexts, Buf);
  value(Value, Nexts, Buf)                        -> ?ERROR(value, [Value, Nexts, Buf]).
  
  -spec string(jsone:json_string(), [next()], binary()) -> encode_result().
  string(<<Str/binary>>, Nexts, Buf) ->
      escape_string(Str, Nexts, <<Buf/binary, $">>).
  
  -spec escape_string(binary(), [next()], binary()) -> encode_result().
  escape_string(<<"">>,                   Nexts, Buf) -> next(Nexts, <<Buf/binary, $">>);
  escape_string(<<$", Str/binary>>,       Nexts, Buf) -> escape_string(Str, Nexts, <<Buf/binary, $\\, $">>);
  escape_string(<<$\/, Str/binary>>,      Nexts, Buf) -> escape_string(Str, Nexts, <<Buf/binary, $\\, $\/>>);
  