anchor.diff:  -export([t_is_identifier/1]).
   -endif.
   
  --export_type([erl_type/0, opaques/0, type_table/0, mod_records/0,
  +-export_type([erl_type/0, opaques/0, type_table/0,
                 var_table/0, cache/0]).
   
   %%-define(DEBUG, true).
  
positive.code:                              'error' | {type_table(), cache()}.
  
  lookup_module_types(Module, CodeTable, Cache) ->
    #cache{mod_recs = ModRecs} = Cache,
    case ModRecs of
      undefined -> error;
      {mrecs, MRecs} ->
        case dict:find(Module, MRecs) of
          {ok, R} ->
            {R, Cache};
          error ->
            try ets:lookup_element(CodeTable, Module, 2) of
              R ->
                NewMRecs = dict:store(Module, R, MRecs),
                {R, Cache#cache{mod_recs = {mrecs, NewMRecs}}}
            catch
              _:_ -> error
            end
        end
    end.
  
  
negative.code:                          erl_type()}.
  -type type_table() :: #{record_key() | type_key() =>
                          record_value() | type_value()}.
  
  -opaque var_table() :: #{atom() => erl_type()}.
  
  