anchor.diff:      [$(, marshal_struct_signature(SubTypes, []), $)];
   marshal_signature(variant) ->
       "v";
  -marshal_signature(dict_entry) ->
  -    exit(todo);
  +marshal_signature({dict, KeyType, ValueType}) ->
  +    KeySig = marshal_signature(KeyType),
  +    ValueSig = marshal_signature(ValueType),
  +
  +    %% TODO check length(KeySig) == 1
  +
  +    [$a, ${, KeySig, ValueSig, $}];
   marshal_signature([]) ->
       "";
   marshal_signature([Type|R]) ->
  
positive.code: marshal(variant, Value, Pos) when is_integer(Value), Value < 0 ->
      marshal_int_variant(Value, Pos);
  marshal(variant, Value, Pos) when is_integer(Value), Value >= 0 ->
      marshal_uint_variant(Value, Pos).
  
  
  marshal_int_variant(Value, Pos) when Value >= -32768 ->
  
negative.code:     {ok, Value, Data1, Pos1}.
  
  unmarshal_signature([], Res) ->
      {Res, []};
  
  unmarshal_signature([$a, ${, KeySig|R], Res) ->
      KeyType = unmarshal_signature(KeySig),
      {[ValueType], Sig} = unmarshal_signature(R, []),
      unmarshal_signature(Sig, Res ++ [{dict, KeyType, ValueType}]);
  
  unmarshal_signature([$a|R], Res) ->
      {[Type | Types], []} = unmarshal_signature(R, []),
      {Res ++ [{array, Type}] ++ Types, []};
  
  unmarshal_signature([$(|R], Res) ->
      {Types, Rest} = unmarshal_signature(R, []),
  
      unmarshal_signature(Rest, Res ++ [{struct, Types}]);
  
  unmarshal_signature([$)|R], Res) ->
      {Res, R};
  
  unmarshal_signature([$}|R], Res) ->
      {Res, R};
  
  unmarshal_signature([Signature|R], Res) ->
      Type = unmarshal_signature(Signature),
      unmarshal_signature(R, Res ++ [Type]).
  
  
  %% unmarshal_dict_signature([$}|R], Res) ->
  %%     Res;
  %% unmarshal_dict_signature([Signature|R], Res) ->
  %%     unmarshal_signature(
  
  unmarshal_struct_signature([$)|R], Res) ->
      {Res, R};
  