anchor.diff:      equiv_list(L1, L2);
   equiv(N1, N2) when is_number(N1), is_number(N2) -> N1 == N2;
   equiv(B1, B2) when is_binary(B1), is_binary(B2) -> B1 == B2;
  -equiv(true, true) -> true;
  -equiv(false, false) -> true;
  -equiv(null, null) -> true.
  +equiv(A, A) when A =:= true orelse A =:= false orelse A =:= null -> true.
   
   %% Object representation and traversal order is unknown.
   %% Use the sledgehammer and sort property lists.
  
positive.code:     {struct, []}.
  
  is_obj({struct, Props}) ->
      F = fun ({K, _}) when is_binary(K) ->
                  true;
              (_) ->
                  false
          end,
      lists:all(F, Props).
  
  obj_from_list(Props) ->
      Obj = {struct, Props},
      case is_obj(Obj) of
          true -> Obj;
          false -> exit({json_bad_object, Obj})
      end.
  
  %% Test for equivalence of Erlang terms.
  %% Due to arbitrary order of construction, equivalent objects might
  
negative.code:             false;
          $\t ->
              false;
          C when C >= 0, C < $\s; C >= 16#7f ->
              false;
          C when C < 16#7f ->
              json_bin_is_safe(Rest)
      end.
  
  json_encode_string_unicode([], _State, Acc) ->
  