anchor.diff:    {match, bindings()} | nomatch.
   match_bitstrings(Value, Segments, Bindings0) ->
     Fold = fun(Segment, {Acc0, Bin}) ->
  -             {Acc1, Rest} = match_binary_segment(Bin, Segment, Bindings0),
  -             {merge_bindings(Acc1, Acc0), Rest}
  +             match_binary_segment(Bin, Segment, Acc0)
            end,
     case lists:foldl(Fold, {Bindings0, Value}, Segments) of
       {Bindings1, <<>>} -> {match, Bindings1};
  
positive.code: -spec match_list([value()], [cerl:cerl()], bindings()) ->
    {match, bindings()} | nomatch.
  match_list([Value | Values], [Pattern | Patterns], Bindings) ->
    %% TODO: we need to use merge_bindings here
    case match(Value, Pattern, Bindings) of
      {match, Bindings1} -> match_list(Values, Patterns, Bindings1);
      nomatch -> nomatch
  
negative.code: %% Bindings
  %% -----------------------------------------------------------------------------
  
  -spec process_bindings([{cerl:cerl(), value()}], bindings()) -> bindings().
  process_bindings(Pairs, Bindings) ->
    Fun = fun({Var, Value}, Acc) ->
  