anchor.diff:  
   -type class() :: term().
   -type type() :: binary().
  +-type meta() :: map().
   
   
   %% ===================================================================
  
positive.code: 
  -export([get_module/2, get_all_modules/1]).
  -export([get_type/2, get_all_types/1]).
  -export([register/3]).
  -export([start_link/0]).
  -export([init/1, terminate/2, code_change/3, handle_call/3,
           handle_cast/2, handle_info/2]).
  
negative.code: 
  
  %% @doc Gets the obj module for a type
  -spec register_type(class(), type(), module()) ->
      ok.
  
  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}).
  
  
  
  % ===================================================================
  