anchor.diff:      {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) ->
  
positive.code:         {passthrough, Args} ->
              % call_original(Args) called from mock function
              Result = apply(original_name(Mod), Func, Args),
              call(Mod, {add_history, {{Mod, Func, Args}, Result}}),
              Result
      end.
  
  
negative.code: start(Func, Mod, Options) ->
      gen_server:Func({local, proc_name(Mod)}, ?MODULE, [Mod, Options], []).
  
  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:Func(Name, Msg)
      catch exit:_Reason -> erlang:error({not_mocked, Mod}) end.
  
  proc_name(Name) -> list_to_atom(atom_to_list(Name) ++ "_meck").
  