anchor.diff:  start(Func, Mod, Options) ->
       gen_server:Func({local, proc_name(Mod)}, ?MODULE, [Mod, Options], []).
   
  -call(Mod, Msg) ->
  +cast(Mod, Msg) -> gen_server(cast, Mod, Msg).
  +call(Mod, Msg) -> gen_server(call, Mod, Msg).
  +
  +gen_server(Func, Mod, Msg) ->
       Name = proc_name(Mod),
  -    try gen_server:call(Name, Msg)
  +    try gen_server:Func(Name, Msg)
       catch exit:_Reason -> erlang:error({not_mocked, Mod}) end.
   
   proc_name(Name) -> list_to_atom(atom_to_list(Name) ++ "_meck").
  
positive.code:     {reply, ok, S#state{expects = NewExpects}};
  handle_call(history, _From, S) ->
      {reply, lists:reverse(S#state.history), S};
  handle_call({add_history, Item}, _From, S) ->
      {reply, ok, S#state{history = [Item| S#state.history]}};
  handle_call(invalidate, _From, S) ->
      {reply, ok, S#state{valid = false}};
  handle_call(validate, _From, S) ->
  
negative.code:         {passthrough, Args} ->
              % call_original(Args) called from mock function
              Result = apply(original_name(Mod), Func, Args),
              cast(Mod, {add_history, {{Mod, Func, Args}, Result}}),
              Result
      end.
  
  