anchor.diff:  -spec new(dict(), files()) -> plt().
   new(Table, Filenames) ->
       #plt{table = Table,
  -         modules = module_dependencies(Table),
            checksums = compute_checksums(absolute(Filenames))}.
   
   -spec table(plt(), options()) -> dict().
  
positive.code:     [H|assoc_store(Key, Value, T)].
  
  
  -spec export(plt()) -> {string(), [{_,_}], [{_,_}], [{_,_}], [{_,_}]}.
  
  %% @doc Export a PLT into a simple deterministic structure, useful
  %% for debugging.
  export(#plt{table = T, cache = C, checksums = CS, modules = Ms, version = V}) ->
      {V, lists:keysort(2, [{md5hex(MD5), F} || {F, MD5} <- CS]),
          lists:sort(dict:to_list(T)),
          lists:sort([{K, lists:sort(dict:to_list(R))} || {K, R} <- C]),
          lists:sort(dict:to_list(Ms))}.
  
  
  %% @doc Export a PLT as plain text.
  -spec export_text(plt()) -> [iolist()].
  
  export_text(Plt) ->
      {Vsn, CS, T, R, M} = export(Plt),
      P1 = fun (F) -> io_lib:format(F ++ "~n", []) end,
      %% Converting to binary is necessary for large PLTs as character
      %% lists are very wasteful with regard to memory.
  
negative.code: 
  -export_type([plt/0]).
  
  -define(VERSION, "0.5").
  
  -ifdef(TEST).
  -include("purity_plt_tests.hrl").
  