anchor.diff:  
   
   %% @doc Gets the obj module for a type
  --spec register(class(), type(), module()) ->
  +-spec register_type(class(), type(), module()) ->
       ok.
   
  -register(Class, Type, Module) when is_atom(Module) ->
  +register_type(Class, Type, Module) when is_atom(Module) ->
       code:ensure_loaded(Module),
       Type2 = to_bin(Type),
       gen_server:call(?MODULE, {register_type, Class, Type2, Module}).
   
   
  +%% @doc Updates meta for a type
  +-spec update_meta(class(), type(), fun((meta()) -> meta())) ->
  +    ok | {error, term()}.
  +
  +update_meta(Class, Type, Fun) when is_function(Fun, 1)->
  +    Type2 = to_bin(Type),
  +    gen_server:call(?MODULE, {update_meta, Class, Type2, Fun}).
  +
   
   
   % ===================================================================
  
positive.code:     {stop, Reason::term(), #state{}} | {stop, Reason::term(), Reply::term(), #state{}}.
  
  handle_call({register_type, Class, Type, Module}, _From, State) ->
      State2 = register_type(Class, Type, Module, State),
      {reply, ok, State2};
  
  handle_call(Msg, _From, State) ->
      lager:error("Module ~p received unexpected call ~p", [?MODULE, Msg]),
      {noreply, State}.
  
  
  %% @private
  -spec handle_cast(term(), #state{}) ->
      {noreply, #state{}} | {stop, term(), #state{}}.
  
  handle_cast(Msg, State) ->
      lager:error("Module ~p received unexpected cast ~p", [?MODULE, Msg]),
      {noreply, State}.
  
  
  %% @private
  -spec handle_info(term(), #state{}) ->
      {noreply, #state{}} | {stop, term(), #state{}}.
  
  handle_info(Info, State) ->
      lager:warning("Module ~p received unexpected info: ~p (~p)", [?MODULE, Info, State]),
      {noreply, State}.
  
  
  %% @private
  -spec code_change(term(), #state{}, term()) ->
      {ok, #state{}}.
  
  code_change(_OldVsn, State, _Extra) ->
      {ok, State}.
  
  
  %% @private
  -spec terminate(term(), #state{}) ->
      ok.
  
  terminate(_Reason, _State) ->
      ok.
  
  
  
  %% ===================================================================
  %% Internal
  %% ===================================================================
  
  %% @private
  lookup(Term) ->
      lookup(Term, undefined).
  
  
  %% @private
  lookup(Term, Default) ->
      case ets:lookup(?MODULE, Term) of
          [] -> Default;
          [{_, Val}] -> Val
      end.
  
  
  %% @private
  register_type(Class, Type, Module, _State) ->
      AllModules1 = get_all_modules(Class),
      AllModules2 = lists:usort([Module|AllModules1]),
      AllTypes1 = get_all_types(Class),
  
negative.code: 
  -type class() :: term().
  -type type() :: binary().
  -type meta() :: map().
  
  
  %% ===================================================================
  