anchor.diff:  
   -spec merge_bindings(bindings(), bindings()) -> bindings().
   merge_bindings(Bindings1, Bindings2) ->
  -  Fold = fun({K, V}, Acc) ->
  -             case binding(Acc, Bindings2) of
  -               {ok, V} -> Acc;
  -               {ok, Current} -> raise({badmatch, Current});
  -               unbound -> maps:put(K, V, Acc)
  +  Fold = fun({K, {value, V}}, Acc) ->
  +             case binding(K, Bindings2) of
  +               {value, V} -> Acc;
  +               {value, Current} -> raise({badmatch, Current});
  +               unbound -> add_binding(K, V, Acc)
                end
            end,
     lists:foldl(Fold, Bindings2, maps:to_list(Bindings1)).
  
positive.code: %% List of expression
  %% -----------------------------------------------------------------------------
  
  -spec expr_list([cerl:cerl()], bindings()) -> {[term()], bindings()}.
  expr_list(Exprs, Bindings) ->
    Fun = fun(Expr, Values) ->
              Value = expr(Expr, Bindings),
  
negative.code: raise(Error, Expr) ->
    raise(error, Error, Expr).
  
  -spec raise(atom(), term(), cerl:cerl()) -> no_return().
  raise(Type, Error, Expr) ->
    Ann = cerl:get_ann(Expr),
    Stacktrace = [location(Ann)| ?STACKTRACE],
    erlang:raise(Type, Error, Stacktrace).
  
  -spec location(list()) -> tuple().
  location(Ann) ->
    Line = line(Ann),
    File = file(Ann),
  