anchor.diff:  
   %% API
   -export([start_link/0,
  -         start_link/1,
            add_route/1,
  +         add_route/2,
            remove_route/1,
  +         remove_route/2,
            remove_resource/1,
  +         remove_resource/2,
            get_routes/0,
            get_routes/1,
            init_routes/1,
  
positive.code:     end.
  
  get_dispatch_list(Name) ->
      case ets:lookup(Name, dispatch_list) of
          [{dispatch_list, Dispatch}] ->
              Dispatch;
          [] ->
              []
      end.
  
  set_dispatch_list(Name, DispatchList) ->
      true = ets:insert(Name, {dispatch_list, DispatchList}),
      ok.
  
  %%
  
negative.code:             %% probably crashed and this is a restart.
              ok
      end,
      gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
  
  %% @private
  init([]) ->
      {ok, undefined}.
  
  %% @private
  handle_call({remove_resource, Name, Resource}, _From, State) ->
      DL = filter_by_resource(Resource, get_dispatch_list(Name)),
      {reply, set_dispatch_list(Name, DL), State};
  
  handle_call({remove_route, Name, Route}, _From, State) ->
      DL = [D || D <- get_dispatch_list(Name),
                 D /= Route],
      {reply, set_dispatch_list(Name, DL), State};
  
  handle_call({add_route, Name, Route}, _From, State) ->
      DL = [Route|[D || D <- get_dispatch_list(Name),
                        D /= Route]],
      {reply, set_dispatch_list(Name, DL), State};
  
  handle_call({init_routes, Name, DefaultRoutes}, _From, State) ->
      %% if the table lacks a dispatch_list row, set it
      ets:insert_new(?MODULE, {Name, DefaultRoutes}),
      {reply, ok, State};
  
  handle_call(_Request, _From, State) ->
  