anchor.diff:  -export([match/3, clause/5, def/2, head/2,
            'case'/3, 'receive'/3, 'try'/3, 'cond'/3, with/3,
            format_error/1]).
  --import(elixir_errors, [form_error/4]).
  +-import(elixir_errors, [form_error/4, form_warn/4]).
   -include("elixir.hrl").
   
   match(Fun, Expr, #{context := match} = E) ->
  
positive.code: assert_at_most_once(Kind, [_ | Rest], Count, Fun) ->
    assert_at_most_once(Kind, Rest, Count, Fun).
  
  warn_catch_before_rescue([], _, _, _) -> ok;
  warn_catch_before_rescue([{'rescue', _} | _], Meta, E, true) ->
    Message = "\"catch\" should always come after \"rescue\" in try",
    elixir_errors:warn(?line(Meta), ?key(E, file), Message),
    ok;
  warn_catch_before_rescue([{'catch', _} | Rest], Meta, E, _) ->
    warn_catch_before_rescue(Rest, Meta, E, true);
  warn_catch_before_rescue([_ | Rest], Meta, E, Found) ->
  
negative.code:   case lists:keytake(else, 1, Opts) of
      {value, Pair, RestOpts} ->
        if
          HasMatch -> ok;
          true -> form_warn(Meta, ?key(E, file), ?MODULE, unmatchable_else_in_with)
        end,
        Fun = expand_one(Meta, 'with', 'else', fun head/2),
        {EPair, EE} = expand_clauses(Meta, 'with', Fun, Pair, E),
  