anchor.diff:           print/2, print/3,
            process_beam/1]).
   
  +-export_type([compiled_module/0]).
  +
   -type k() :: any().
   -type v() :: any().
  +
  +%% A `compiled_module()' is a subtype of `beam_lib:beam()' representing the in-memory
  +%% assembled chunks of a module.
  +%% You can get one e.g. by reading a .beam file directly or by calling `beam_lib:build_module/1'.
  +-type compiled_module() :: binary().
   
   -spec convert(Readers, Writer, Beam) -> docsh:external() when
         Readers :: [module()],
  
positive.code: compile_info_source_file(BEAMFile) ->
      {ok, {_, [{_, CInf}]}} = beam_lib:chunks(BEAMFile, ["CInf"]),
      {source, File} = lists:keyfind(source, 1, erlang:binary_to_term(CInf)),
      File.
  
  guessed_source_file(BEAMFile) ->
      File1 = filename:join(filename:dirname(BEAMFile), "../src"),
      File2 = filename:basename(BEAMFile, ".beam") ++ ".erl",
      filename:join(File1, File2).
  
  -spec exdc(docsh_beam:t()) -> {string(), binary()}.
  exdc(Beam) ->
  
negative.code: get_source_file(BEAMFile) ->
      lists:foldl(fun check_source_file/2,
                  false,
                  lists:flatten([compile_info_source_file(BEAMFile),
                                 guessed_source_file(BEAMFile)])).
  
  check_source_file(_SourceFile, {ok, File}) ->
      {ok, File};
  