Provided by: erlang-manpages_20.2.2+dfsg-1ubuntu2_all bug

NAME

       code - Erlang code server.

DESCRIPTION

       This  module  contains  the interface to the Erlang code server, which deals with the loading of compiled
       code into a running Erlang runtime system.

       The runtime system can be started in embedded or interactive mode. Which one is decided  by  command-line
       flag -mode:

       % erl -mode interactive

       The modes are as follows:

         * In  embedded  mode,  all code is loaded during system startup according to the boot script. (Code can
           also be loaded later by explicitly ordering the code server to do so).

         * In interactive mode, which is default, only some code is loaded during system startup, basically  the
           modules  needed by the runtime system. Other code is dynamically loaded when first referenced. When a
           call to a function in a certain module is made, and  the  module  is  not  loaded,  the  code  server
           searches for and tries to load the module.

       To  prevent  accidentally  reloading  of modules affecting the Erlang runtime system, directories kernel,
       stdlib, and compiler are considered sticky. This means that the system issues a warning and  rejects  the
       request  if a user tries to reload a module residing in any of them. The feature can be disabled by using
       command-line flag -nostick.

CODE PATH

       In interactive mode, the code server maintains a search path, usually called the code path, consisting of
       a list of directories, which it searches sequentially when trying to load a module.

       Initially, the code path consists of the current working directory and all Erlang object code directories
       under library directory $OTPROOT/lib,  where  $OTPROOT  is  the  installation  directory  of  Erlang/OTP,
       code:root_dir().  Directories  can  be  named  Name[-Vsn]  and  the  code server, by default, chooses the
       directory with the highest version number among those having the same Name. Suffix -Vsn is  optional.  If
       an ebin directory exists under Name[-Vsn], this directory is added to the code path.

       Environment  variable  ERL_LIBS  (defined  in  the  operating  system) can be used to define more library
       directories to be handled in the same way as the standard OTP library directory described  above,  except
       that directories without an ebin directory are ignored.

       All  application  directories  found  in  the  additional  directories  appears  before  the standard OTP
       applications, except for the Kernel and STDLIB applications,  which  are  placed  before  any  additional
       applications. In other words, modules found in any of the additional library directories override modules
       with the same name in OTP, except for modules in Kernel and STDLIB.

       Environment variable ERL_LIBS (if defined) is to contain a colon-separated  (for  Unix-like  systems)  or
       semicolon-separated (for Windows) list of additional libraries.

       Example:

       On a Unix-like system, ERL_LIBS can be set to the following

       /usr/local/jungerl:/home/some_user/my_erlang_lib

       On Windows, use semi-colon as separator.

LOADING OF CODE FROM ARCHIVE FILES

   Warning:
       The support for loading code from archive files is experimental. The purpose of releasing it before it is
       ready is to obtain early feedback. The file format, semantics, interfaces, and so on, can be changed in a
       future release. The function lib_dir/2 and flag -code_path_choice are also experimental.

       The  Erlang  archives  are  ZIP files with extension .ez. Erlang archives can also be enclosed in escript
       files whose file extension is arbitrary.

       Erlang archive files can contain entire Erlang applications or parts of applications. The structure in an
       archive  file  is  the same as the directory structure for an application. If you, for example, create an
       archive of mnesia-4.4.7, the archive file must be  named  mnesia-4.4.7.ez  and  it  must  contain  a  top
       directory  named mnesia-4.4.7. If the version part of the name is omitted, it must also be omitted in the
       archive. That is, a mnesia.ez archive must contain a mnesia top directory.

       An archive file for an application can, for example, be created like this:

       zip:create("mnesia-4.4.7.ez",
            ["mnesia-4.4.7"],
            [{cwd, code:lib_dir()},
             {compress, all},
             {uncompress,[".beam",".app"]}]).

       Any file in the archive can be compressed, but to speed up the access of frequently read files, it can be
       a good idea to store beam and app files uncompressed in the archive.

       Normally  the  top  directory  of  an  application  is  located in library directory $OTPROOT/lib or in a
       directory referred to by environment variable ERL_LIBS.  At  startup,  when  the  initial  code  path  is
       computed,  the  code  server  also  looks  for  archive files in these directories and possibly adds ebin
       directories in archives to the code path. The code path then contains paths to directories that look like
       $OTPROOT/lib/mnesia.ez/mnesia/ebin or $OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin.

       The code server uses module erl_prim_loader in ERTS (possibly through erl_boot_server) to read code files
       from archives. However, the functions in erl_prim_loader can also be used by other applications  to  read
       files       from       archives.      For      example,      the      call      erl_prim_loader:list_dir(
       "/otp/root/lib/mnesia-4.4.7.ez/mnesia-4.4.7/examples/bench)" would  list  the  contents  of  a  directory
       inside an archive. See erl_prim_loader(3erl).

       An  application  archive file and a regular application directory can coexist. This can be useful when it
       is needed to have parts of the application as regular files. A typical case is the priv directory,  which
       must  reside  as  a  regular  directory to link in drivers dynamically and start port programs. For other
       applications that do not need this, directory priv can reside in the archive  and  the  files  under  the
       directory priv can be read through erl_prim_loader.

       When  a  directory  is  added  to the code path and when the entire code path is (re)set, the code server
       decides which subdirectories in an application that are to be read from the archive and which that are to
       be read as regular files. If directories are added or removed afterwards, the file access can fail if the
       code path is not updated (possibly to the same path  as  before,  to  trigger  the  directory  resolution
       update).

       For  each directory on the second level in the application archive (ebin, priv, src, and so on), the code
       server first chooses  the  regular  directory  if  it  exists  and  second  from  the  archive.  Function
       code:lib_dir/2  returns  the  path to the subdirectory. For example, code:lib_dir(megaco,ebin) can return
       /otp/root/lib/megaco-3.9.1.1.ez/megaco-3.9.1.1/ebin   while    code:lib_dir(megaco,priv)    can    return
       /otp/root/lib/megaco-3.9.1.1/priv.

       When  an  escript  file  contains an archive, there are no restrictions on the name of the escript and no
       restrictions on how many applications that can be stored in the embedded archive. Single Beam  files  can
       also  reside  on  the top level in the archive. At startup, the top directory in the embedded archive and
       all (second  level)  ebin  directories  in  the  embedded  archive  are  added  to  the  code  path.  See
       erts:escript(1).

       When the choice of directories in the code path is strict, the directory that ends up in the code path is
       exactly the stated one. This means that if, for example, the directory $OTPROOT/lib/mnesia-4.4.7/ebin  is
       explicitly    added    to    the    code   path,   the   code   server   does   not   load   files   from
       $OTPROOT/lib/mnesia-4.4.7.ez/mnesia-4.4.7/ebin.

       This behavior can be controlled through command-line flag -code_path_choice Choice. If the flag is set to
       relaxed,  the code server instead chooses a suitable directory depending on the actual file structure. If
       a regular application ebin directory exists, it is chosen. Otherwise, the directory ebin in  the  archive
       is chosen if it exists. If neither of them exists, the original directory is chosen.

       Command-line  flag  -code_path_choice Choice also affects how module init interprets the boot script. The
       interpretation of the explicit code paths in the boot script can be strict or relaxed. It is particularly
       useful  to  set  the flag to relaxed when elaborating with code loading from archives without editing the
       boot script. The default is relaxed. See erts:init(3erl).

CURRENT AND OLD CODE

       The code for a module can exist in two variants in a system: current code and old code. When a module  is
       loaded  into the system for the first time, the module code becomes 'current' and the global export table
       is updated with references to all functions exported from the module.

       If then a new instance of the module is loaded (for example, because of error correction),  the  code  of
       the  previous  instance  becomes  'old',  and  all  export entries referring to the previous instance are
       removed. After that, the new instance is loaded as for the first time, and becomes 'current'.

       Both old and current code for a module are valid, and can even be evaluated concurrently. The  difference
       is  that  exported  functions  in  old  code  are  unavailable. Hence, a global call cannot be made to an
       exported function in old code, but old code can still be evaluated because of processes lingering in it.

       If a third instance of the module is loaded, the code server  removes  (purges)  the  old  code  and  any
       processes  lingering  in  it are terminated. Then the third instance becomes 'current' and the previously
       current code becomes 'old'.

       For more information about old and current code, and how to make a process switch  from  old  to  current
       code, see section Compilation and Code Loading in the Erlang Reference Manual.

ARGUMENT TYPES AND INVALID ARGUMENTS

       Module  and  application  names  are  atoms,  while  file  and  directory names are strings. For backward
       compatibility reasons, some functions accept both strings and atoms, but a future release  will  probably
       only allow the arguments that are documented.

       Functions  in  this  module  generally  fail  with an exception if they are passed an incorrect type (for
       example, an integer or a tuple where an atom is expected). An error tuple is  returned  if  the  argument
       type  is  correct, but there are some other errors (for example, a non-existing directory is specified to
       set_path/1).

ERROR REASONS FOR CODE-LOADING FUNCTIONS

       Functions that load code (such as load_file/1) will return {error,Reason} if the  load  operation  fails.
       Here follows a description of the common reasons.

         badfile:
           The  object  code  has  an incorrect format or the module name in the object code is not the expected
           module name.

         nofile:
           No file with object code was found.

         not_purged:
           The object code could not be loaded because an old version of the code already existed.

         on_load_failure:
           The module has an -on_load function that failed when it was called.

         sticky_directory:
           The object code resides in a sticky directory.

DATA TYPES

       load_ret() =
           {error, What :: load_error_rsn()} |
           {module, Module :: module()}

       load_error_rsn() =
           badfile |
           nofile |
           not_purged |
           on_load_failure |
           sticky_directory

       prepared_code()

              An opaque term holding prepared code.

EXPORTS

       set_path(Path) -> true | {error, What}

              Types:

                 Path = [Dir :: file:filename()]
                 What = bad_directory

              Sets the code path to the list of directories Path.

              Returns:

                true:
                  If successful

                {error, bad_directory}:
                  If any Dir is not a directory name

       get_path() -> Path

              Types:

                 Path = [Dir :: file:filename()]

              Returns the code path.

       add_path(Dir) -> add_path_ret()

       add_pathz(Dir) -> add_path_ret()

              Types:

                 Dir = file:filename()
                 add_path_ret() = true | {error, bad_directory}

              Adds Dir to the code path. The directory is added as the last directory in the new  path.  If  Dir
              already exists in the path, it is not added.

              Returns true if successful, or {error, bad_directory} if Dir is not the name of a directory.

       add_patha(Dir) -> add_path_ret()

              Types:

                 Dir = file:filename()
                 add_path_ret() = true | {error, bad_directory}

              Adds  Dir to the beginning of the code path. If Dir exists, it is removed from the old position in
              the code path.

              Returns true if successful, or {error, bad_directory} if Dir is not the name of a directory.

       add_paths(Dirs) -> ok

       add_pathsz(Dirs) -> ok

              Types:

                 Dirs = [Dir :: file:filename()]

              Adds the directories in Dirs to the end of the code path. If a Dir exists, it is not added.

              Always returns ok, regardless of the validity of each individual Dir.

       add_pathsa(Dirs) -> ok

              Types:

                 Dirs = [Dir :: file:filename()]

              Traverses Dirs and adds each Dir to the beginning of the code path. This means that the  order  of
              Dirs  is  reversed  in the resulting code path. For example, if you add [Dir1,Dir2], the resulting
              path will be [Dir2,Dir1|OldCodePath].

              If a Dir already exists in the code path, it is removed from the old position.

              Always returns ok, regardless of the validity of each individual Dir.

       del_path(NameOrDir) -> boolean() | {error, What}

              Types:

                 NameOrDir = Name | Dir
                 Name = atom()
                 Dir = file:filename()
                 What = bad_name

              Deletes a directory from the code path. The argument can be  an  atom  Name,  in  which  case  the
              directory  with  the  name .../Name[-Vsn][/ebin] is deleted from the code path. Also, the complete
              directory name Dir can be specified as argument.

              Returns:

                true:
                  If successful

                false:
                  If the directory is not found

                {error, bad_name}:
                  If the argument is invalid

       replace_path(Name, Dir) -> true | {error, What}

              Types:

                 Name = atom()
                 Dir = file:filename()
                 What = bad_directory | bad_name | {badarg, term()}

              Replaces an old occurrence of a directory named .../Name[-Vsn][/ebin] in the code path, with  Dir.
              If  Name  does  not  exist, it adds the new directory Dir last in the code path. The new directory
              must also be named .../Name[-Vsn][/ebin]. This function is to be used if  a  new  version  of  the
              directory (library) is added to a running system.

              Returns:

                true:
                  If successful

                {error, bad_name}:
                  If Name is not found

                {error, bad_directory}:
                  If Dir does not exist

                {error, {badarg, [Name, Dir]}}:
                  If Name or Dir is invalid

       load_file(Module) -> load_ret()

              Types:

                 Module = module()
                 load_ret() =
                     {error, What :: load_error_rsn()} |
                     {module, Module :: module()}

              Tries  to  load  the  Erlang module Module, using the code path. It looks for the object code file
              with an extension corresponding to the Erlang machine used, for example, Module.beam. The  loading
              fails if the module name found in the object code differs from the name Module. load_binary/3 must
              be used to load object code with a module name that is different from the file name.

              Returns {module, Module} if successful, or {error, Reason} if loading fails. See Error Reasons for
              Code-Loading Functions for a description of the possible error reasons.

       load_abs(Filename) -> load_ret()

              Types:

                 Filename = file:filename()
                 load_ret() =
                     {error, What :: load_error_rsn()} |
                     {module, Module :: module()}
                 loaded_filename() =
                     (Filename :: file:filename()) | loaded_ret_atoms()
                 loaded_ret_atoms() = cover_compiled | preloaded

              Same  as load_file(Module), but Filename is an absolute or relative filename. The code path is not
              searched. It returns a value in the same way as load_file/1. Notice that Filename must not contain
              the extension (for example, .beam) because load_abs/1 adds the correct extension.

       ensure_loaded(Module) -> {module, Module} | {error, What}

              Types:

                 Module = module()
                 What = embedded | badfile | nofile | on_load_failure

              Tries  to  load  a  module  in  the  same way as load_file/1, unless the module is already loaded.
              However, in embedded mode it does not load a module  that  is  not  already  loaded,  but  returns
              {error, embedded} instead. See Error Reasons for Code-Loading Functions for a description of other
              possible error reasons.

       load_binary(Module, Filename, Binary) ->
                      {module, Module} | {error, What}

              Types:

                 Module = module()
                 Filename = loaded_filename()
                 Binary = binary()
                 What = badarg | load_error_rsn()
                 loaded_filename() =
                     (Filename :: file:filename()) | loaded_ret_atoms()
                 loaded_ret_atoms() = cover_compiled | preloaded

              This function can be used to load object code on remote Erlang nodes. Argument Binary must contain
              object  code  for  Module. Filename is only used by the code server to keep a record of from which
              file the object code for Module comes. Thus, Filename is not opened and read by the code server.

              Returns {module, Module} if successful, or {error, Reason} if loading fails. See Error Reasons for
              Code-Loading Functions for a description of the possible error reasons.

       atomic_load(Modules) -> ok | {error, [{Module, What}]}

              Types:

                 Modules = [Module | {Module, Filename, Binary}]
                 Module = module()
                 Filename = file:filename()
                 Binary = binary()
                 What =
                     badfile |
                     nofile |
                     on_load_not_allowed |
                     duplicated |
                     not_purged |
                     sticky_directory |
                     pending_on_load

              Tries  to  load  all  of  the  modules  in the list Modules atomically. That means that either all
              modules are loaded at the same time, or none of the modules are loaded if there is a problem  with
              any of the modules.

              Loading can fail for one the following reasons:

                badfile:
                  The  object  code  has  an  incorrect  format or the module name in the object code is not the
                  expected module name.

                nofile:
                  No file with object code exists.

                on_load_not_allowed:
                  A module contains an -on_load function.

                duplicated:
                  A module is included more than once in Modules.

                not_purged:
                  The object code can not be loaded because an old version of the code already exists.

                sticky_directory:
                  The object code resides in a sticky directory.

                pending_on_load:
                  A previously loaded module contains an -on_load function that never finished.

              If it is important to minimize the time that an application is inactive while changing  code,  use
              prepare_loading/1 and finish_loading/1 instead of atomic_load/1. Here is an example:

              {ok,Prepared} = code:prepare_loading(Modules),
              %% Put the application into an inactive state or do any
              %% other preparation needed before changing the code.
              ok = code:finish_loading(Prepared),
              %% Resume the application.

       prepare_loading(Modules) ->
                          {ok, Prepared} | {error, [{Module, What}]}

              Types:

                 Modules = [Module | {Module, Filename, Binary}]
                 Module = module()
                 Filename = file:filename()
                 Binary = binary()
                 Prepared = prepared_code()
                 What = badfile | nofile | on_load_not_allowed | duplicated

              Prepares   to   load   the   modules   in   the  list  Modules.  Finish  the  loading  by  calling
              finish_loading(Prepared).

              This function can fail with one of the following error reasons:

                badfile:
                  The object code has an incorrect format or the module name in  the  object  code  is  not  the
                  expected module name.

                nofile:
                  No file with object code exists.

                on_load_not_allowed:
                  A module contains an -on_load function.

                duplicated:
                  A module is included more than once in Modules.

       finish_loading(Prepared) -> ok | {error, [{Module, What}]}

              Types:

                 Prepared = prepared_code()
                 Module = module()
                 What = not_purged | sticky_directory | pending_on_load

              Tries  to  load  code for all modules that have been previously prepared by prepare_loading/1. The
              loading occurs atomically, meaning that either all modules are loaded at the same time, or none of
              the modules are loaded.

              This function can fail with one of the following error reasons:

                not_purged:
                  The object code can not be loaded because an old version of the code already exists.

                sticky_directory:
                  The object code resides in a sticky directory.

                pending_on_load:
                  A previously loaded module contains an -on_load function that never finished.

       ensure_modules_loaded(Modules :: [Module]) ->
                                ok | {error, [{Module, What}]}

              Types:

                 Module = module()
                 What = badfile | nofile | on_load_failure

              Tries to load any modules not already loaded in the list Modules in the same way as load_file/1.

              Returns ok if successful, or {error,[{Module,Reason}]} if loading of some modules fails. See Error
              Reasons for Code-Loading Functions for a description of other possible error reasons.

       delete(Module) -> boolean()

              Types:

                 Module = module()

              Removes the current code for Module, that is, the current code for Module is made old. This  means
              that  processes can continue to execute the code in the module, but no external function calls can
              be made to it.

              Returns true if successful, or false if there is old code for Module that must be purged first, or
              if Module is not a (loaded) module.

       purge(Module) -> boolean()

              Types:

                 Module = module()

              Purges the code for Module, that is, removes code marked as old. If some processes still linger in
              the old code, these processes are killed before the code is removed.

          Note:
              As of ERTS version 9.0, a process is only considered to be lingering in the code if it has  direct
              references  to  the  code.  For more information see documentation of erlang:check_process_code/3,
              which is used in order to determine this.

              Returns true if successful and any process is needed to be killed, otherwise false.

       soft_purge(Module) -> boolean()

              Types:

                 Module = module()

              Purges the code for Module, that is, removes code marked as old, but only if no  processes  linger
              in it.

          Note:
              As  of ERTS version 9.0, a process is only considered to be lingering in the code if it has direct
              references to the code. For more information  see  documentation  of  erlang:check_process_code/3,
              which is used in order to determine this.

              Returns false if the module cannot be purged because of processes lingering in old code, otherwise
              true.

       is_loaded(Module) -> {file, Loaded} | false

              Types:

                 Module = module()
                 Loaded = loaded_filename()
                 loaded_filename() =
                     (Filename :: file:filename()) | loaded_ret_atoms()
                   Filename is an absolute filename.
                 loaded_ret_atoms() = cover_compiled | preloaded

              Checks if Module is loaded. If it is, {file, Loaded} is returned, otherwise false.

              Normally, Loaded is the absolute filename Filename from which the code is obtained. If the  module
              is   preloaded   (see   script(5)),  Loaded==preloaded.  If  the  module  is  Cover-compiled  (see
              cover(3erl)), Loaded==cover_compiled.

       all_loaded() -> [{Module, Loaded}]

              Types:

                 Module = module()
                 Loaded = loaded_filename()
                 loaded_filename() =
                     (Filename :: file:filename()) | loaded_ret_atoms()
                   Filename is an absolute filename.
                 loaded_ret_atoms() = cover_compiled | preloaded

              Returns a list of tuples {Module, Loaded} for all loaded modules. Loaded is normally the  absolute
              filename, as described for is_loaded/1.

       which(Module) -> Which

              Types:

                 Module = module()
                 Which = file:filename() | loaded_ret_atoms() | non_existing
                 loaded_ret_atoms() = cover_compiled | preloaded

              If  the  module  is not loaded, this function searches the code path for the first file containing
              object code for Module and returns the absolute filename.

              If the module is loaded, it returns the name of the file containing the loaded object code.

              If the module is preloaded, preloaded is returned.

              If the module is Cover-compiled, cover_compiled is returned.

              If the module cannot be found, non_existing is returned.

       get_object_code(Module) -> {Module, Binary, Filename} | error

              Types:

                 Module = module()
                 Binary = binary()
                 Filename = file:filename()

              Searches the code path for the object code of module Module. Returns {Module, Binary, Filename} if
              successful,  otherwise  error.  Binary is a binary data object, which contains the object code for
              the module. This can be useful if code is to be loaded on a remote node in a  distributed  system.
              For example, loading module Module on a node Node is done as follows:

              ...
              {_Module, Binary, Filename} = code:get_object_code(Module),
              rpc:call(Node, code, load_binary, [Module, Filename, Binary]),
              ...

       root_dir() -> file:filename()

              Returns the root directory of Erlang/OTP, which is the directory where it is installed.

              Example:

              > code:root_dir().
              "/usr/local/otp"

       lib_dir() -> file:filename()

              Returns the library directory, $OTPROOT/lib, where $OTPROOT is the root directory of Erlang/OTP.

              Example:

              > code:lib_dir().
              "/usr/local/otp/lib"

       lib_dir(Name) -> file:filename() | {error, bad_name}

              Types:

                 Name = atom()

              Returns  the  path for the "library directory", the top directory, for an application Name located
              under $OTPROOT/lib or on a directory referred to with environment variable ERL_LIBS.

              If a regular directory called Name or Name-Vsn exists in the code path with an ebin  subdirectory,
              the path to this directory is returned (not the ebin directory).

              If the directory refers to a directory in an archive, the archive name is stripped away before the
              path is returned. For example, if  directory  /usr/local/otp/lib/mnesia-4.2.2.ez/mnesia-4.2.2/ebin
              is  in  the  path,  /usr/local/otp/lib/mnesia-4.2.2/ebin  is returned. This means that the library
              directory for an application is the same, regardless if the application resides in an  archive  or
              not.

              Example:

              > code:lib_dir(mnesia).
              "/usr/local/otp/lib/mnesia-4.2.2"

              Returns  {error,  bad_name}  if  Name is not the name of an application under $OTPROOT/lib or on a
              directory referred to through environment variable ERL_LIBS. Fails with an exception if  Name  has
              the wrong type.

          Warning:
              For  backward  compatibility,  Name is also allowed to be a string. That will probably change in a
              future release.

       lib_dir(Name, SubDir) -> file:filename() | {error, bad_name}

              Types:

                 Name = SubDir = atom()

              Returns the path to a subdirectory directly under the top directory of  an  application.  Normally
              the  subdirectories  reside  under the top directory for the application, but when applications at
              least partly resides in an archive, the situation is different. Some  of  the  subdirectories  can
              reside  as  regular  directories  while other reside in an archive file. It is not checked whether
              this directory exists.

              Example:

              > code:lib_dir(megaco, priv).
              "/usr/local/otp/lib/megaco-3.9.1.1/priv"

              Fails with an exception if Name or SubDir has the wrong type.

       compiler_dir() -> file:filename()

              Returns the compiler library directory. Equivalent to code:lib_dir(compiler).

       priv_dir(Name) -> file:filename() | {error, bad_name}

              Types:

                 Name = atom()

              Returns the path to the priv directory in an application. Equivalent to code:lib_dir(Name, priv).

          Warning:
              For backward compatibility, Name is also allowed to be a string. That will probably  change  in  a
              future release.

       objfile_extension() -> nonempty_string()

              Returns the object code file extension corresponding to the Erlang machine used, namely .beam.

       stick_dir(Dir) -> ok | error

              Types:

                 Dir = file:filename()

              Marks Dir as sticky.

              Returns ok if successful, otherwise error.

       unstick_dir(Dir) -> ok | error

              Types:

                 Dir = file:filename()

              Unsticks a directory that is marked as sticky.

              Returns ok if successful, otherwise error.

       is_sticky(Module) -> boolean()

              Types:

                 Module = module()

              Returns  true  if  Module is the name of a module that has been loaded from a sticky directory (in
              other words: an attempt to reload the module will fail), or false if Module is not a loaded module
              or is not sticky.

       where_is_file(Filename) -> non_existing | Absname

              Types:

                 Filename = Absname = file:filename()

              Searches  the  code  path  for  Filename,  a  file  of  arbitrary type. If found, the full name is
              returned. non_existing is returned if the file cannot be found. The function can  be  useful,  for
              example, to locate application resource files.

       clash() -> ok

              Searches  all  directories  in  the  code  path for module names with identical names and writes a
              report to stdout.

       module_status(Module :: module()) ->
                        not_loaded | loaded | modified | removed

              Returns:

                not_loaded:
                  If Module is not currently loaded.

                loaded:
                  If Module is loaded and the object file exists and contains the same code.

                removed:
                  If Module is loaded but no corresponding object file can be found in the code path.

                modified:
                  If Module is loaded but the object file contains code with a different MD5 checksum.

              Preloaded modules are always reported as loaded, without inspecting the contents  on  disk.  Cover
              compiled  modules  will  always  be  reported  as modified if an object file exists, or as removed
              otherwise. Modules whose load path is an empty string (which is the convention for  auto-generated
              code) will only be reported as loaded or not_loaded.

              For  modules that have native code loaded (see is_module_native/1), the MD5 sum of the native code
              in the object file is used for the comparison, if it exists; the Beam code in the file is ignored.
              Reversely,  for modules that do not currently have native code loaded, any native code in the file
              will be ignored.

              See also modified_modules/0.

       modified_modules() -> [module()]

              Returns the list of all currently loaded modules for which module_status/1 returns  modified.  See
              also all_loaded/0.

       is_module_native(Module) -> true | false | undefined

              Types:

                 Module = module()

              Returns:

                true:
                  If Module is the name of a loaded module that has native code loaded

                false:
                  If Module is loaded but does not have native code

                undefined:
                  If Module is not loaded

       get_mode() -> embedded | interactive

              Returns an atom describing the mode of the code server: interactive or embedded.

              This  information is useful when an external entity (for example, an IDE) provides additional code
              for a running node. If the code server is in interactive mode, it only has to add the path to  the
              code. If the code server is in embedded mode, the code must be loaded with load_binary/3.