anchor.diff:  -behaviour(gen_server).
   
   %% API
  --export([new/1, new/2, start_link/2, delete/1, delete/2, delete/3,
  -	 lookup/2, lookup/3, insert/3, insert/4, insert_new/3, insert_new/4,
  -	 update/4, update/5, incr/3, incr/4, setopts/2, clear/1, clear/2, untag/1,
  -	 clean/1, clean/2, filter/2, fold/3, all/0, info/1, info/2]).
  +-export([start_link/2]).
  +-export([new/1, new/2, delete/1]).
  +-export([delete/2, delete/3, match_delete/2, match_delete/3]).
  +-export([lookup/2, lookup/3]).
  +-export([insert/3, insert/4, insert_new/3, insert_new/4]).
  +-export([update/4, update/5]).
  +-export([incr/3, incr/4]).
  +-export([setopts/2, all/0, info/1, info/2]).
  +-export([clear/1, clear/2, clean/1, clean/2]).
  +-export([filter/2, fold/3]).
  +-export([untag/1]).
   %% gen_server callbacks
   -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
   	 terminate/2, code_change/3]).
  
positive.code:     {noreply, State};
  handle_info({delete, Key}, #state{tab = Tab} = State) ->
      ets_delete(Tab, Key),
      {noreply, State};
  handle_info(clear, #state{tab = Tab} = State) ->
      ets_delete_all_objects(Tab),
  
negative.code: -type milli_seconds() :: pos_integer().
  -type option() :: {max_size, pos_integer() | infinity} |
  		  {life_time, milli_seconds() | infinity} |
  		  {cache_missed, boolean()} |
  		  {type, set | ordered_set | bag | duplicate_bag}.
  -type read_fun() :: fun(() -> {ok, any()} | error).
  -type update_fun() :: fun(() -> ok | {ok, any()} | error).
  -type filter_fun() :: fun((any(), {ok, any()} | error) -> boolean()).
  