anchor.diff:  -type context() :: record(context).
   -type attr() :: {Key::cerl:cerl(), Value::cerl:cerl()}.
   -type alias() :: ec_dictionary:dictionary(module(), module()).
  --type require() :: set().
  +-type require() :: ec_dictionary:dictionary(module(),
  +                                            [{FunName::atom(),
  +                                              Arity::non_neg_integer()}]).
   -type use_key() :: {FunctionName::atom(), arity()}.
   -type use_value() :: {FunctionName::atom(), ModuleName::module()}.
   -type use() :: ec_dictionary:dictionary(use_key(), use_value()).
  --type definition() :: {cerl:c_fname(), cerl:c_fun()}.
  +-type definition() :: ec_dictionary:dictionary(use_key(),
  +                                               {cerl:c_fname(),
  +                                                cerl:c_fun()}).
   -type export() :: {Fun::atom(), Arity::non_neg_integer(),
                      Line::non_neg_integer()}.
   %%=============================================================================
  
positive.code:                   [module()], [{use_key(), use_value()}]) ->
                           context().
  new(Annots, Aliases, Requires, Uses) ->
      #context{module_name=undefined,
               annots=Annots,
               exports=[],
               attrs=[],
               definitions=[],
               alias=ec_dictionary:from_list(ec_dict, Aliases),
               require=sets:from_list(Requires),
               use=ec_dictionary:from_list(ec_dict, Uses)}.
  
  -spec annots(context()) -> jxa_annot:annotations().
  
negative.code:              annots=Annots,
               exports=[],
               attrs=[],
               scopes=[],
               definitions=ec_dictionary:new(ec_dict),
               alias=ec_dictionary:new(ec_dict),
               require=ec_dictionary:new(ec_dict),
               use=ec_dictionary:new(ec_dict)}.
  
  %% create a new context with default values for aliased modules, required
  