anchor.diff:                      | {pid(), meck_mfa(), Class:: exit | error | throw,
                          Reason::term(), Stacktrace::[mfa()]}].
   
  +%% @type args_pattern() = [term() | '_'].
  +%% Used in {@link expect/3} and {@link expect/4} to defines an expectation by
  +%% an argument pattern. Every list element corresponds to a function argument
  +%% at the respective position. '_' is a wildcard that matches any value. The
  +%% length of the list defines the arity of the function an expectation is
  +%% created for.
  +-type args_pattern() :: [term() | '_'].
  +
   %% @type ret_spec().
  -%% Opaque data structure that defines values to be returned by a stub
  +%% Opaque data structure that defines values to be returned by an expect
   %% function. Values of `ret_spec' are constructed by {@link seq/1},
   %% {@link loop/1}, and {@link val/1} functions. They are used to specify
   %% return values in {@link expect/3} and {@link expect/4} functions.
  --type ret_spec() :: term().
  +-opaque ret_spec() :: {meck_val, term()} |
  +                      {meck_sequence, [term()]} |
  +                      {meck_loop, [term()]} |
  +                      {meck_func, fun()} |
  +                      term().
   
   %% Records
   -record(state, {mod :: atom(),
  
positive.code:     NewExpects.
  
  
  update_clause(Expects, FuncAri, ArgsMatcher, Answer) ->
      dict:update(FuncAri,
                  fun(Clauses) ->
                          lists:keyreplace(ArgsMatcher, 1, Clauses,
                                           {ArgsMatcher, Answer})
                  end,
                  Expects).
  
  
  find_match(Args, [{ArgsMatcher, Answer} | Rest]) ->
      case ArgsMatcher of
          {pattern, _ArgsPattern, MatchSpec} ->
              case ets:match_spec_run([Args], MatchSpec) of
                  [] ->
                      find_match(Args, Rest);
                  _ ->
                      {ArgsMatcher, Answer}
              end;
          {hamcrest, _Matchers} ->
              throw(unimplemented) % TODO Hamcrest support is comming
  
negative.code:                Arity::pos_integer(), Sequence::[term()]) -> ok.
  sequence(Mod, Func, Arity, Sequence)
    when is_atom(Mod), is_atom(Func), is_integer(Arity), Arity >= 0 ->
      Clause = {arity_2_matcher(Arity), seq(Sequence)},
      call(Mod, {expect, {Func, Arity}, [Clause]});
  sequence(Mod, Func, Arity, Sequence) when is_list(Mod) ->
      lists:foreach(fun(M) -> sequence(M, Func, Arity, Sequence) end, Mod),
  