anchor.diff:  %% Bindings
   %% -----------------------------------------------------------------------------
   
  --spec merge_bindings(bindings(), bindings()) -> bindings().
  -merge_bindings(Bindings1, Bindings2) ->
  -  maps:merge(Bindings1, Bindings2).
  -
   -spec process_bindings([{cerl:cerl(), value()}], bindings()) -> bindings().
   process_bindings(Pairs, Bindings) ->
     Fun = fun({Var, Value}, Acc) ->
  
positive.code:   {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}
           end,
    case lists:foldl(Fold, {Bindings0, Value}, Segments) of
      {Bindings1, <<>>} -> {match, Bindings1};
  
negative.code:                        {ok, Value_} -> Value_;
                         error -> throw(nomatch)
                       end,
               {match, Acc1} = do_match(Value, V, Acc0),
               Acc1
           end,
    Bindings1 = lists:foldl(Fold, Bindings, Pairs),
    {match, Bindings1}.
  