anchor.diff:  -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
  
positive.code:                        {ok, Value_} -> Value_;
                         error -> throw(nomatch)
                       end,
               {match, Acc1} = do_match(Value, V, Bindings),
               merge_bindings(Acc1, Acc0)
           end,
    Bindings1 = lists:foldl(Fold, Bindings, Pairs),
    {match, Bindings1}.
  
negative.code:   {match, bindings()} | nomatch.
  match_bitstrings(Value, Segments, Bindings0) ->
    Fold = fun(Segment, {Acc0, Bin}) ->
               match_binary_segment(Bin, Segment, Acc0)
           end,
    case lists:foldl(Fold, {Bindings0, Value}, Segments) of
      {Bindings1, <<>>} -> {match, Bindings1};
  