
  -spec apply(Module, Function, Args) -> term()
                 when
                     Module :: module(),
                     Function :: atom(),
                     Args :: [term()].

  Returns the result of applying Function in Module to Args.
  The applied function must be exported from Module. The arity of
  the function is the length of Args. Example:

    > apply(lists, reverse, [[a, b, c]]).
    [c,b,a]
    > apply(erlang, atom_to_list, ['Erlang']).
    "Erlang"

  If the number of arguments are known at compile time, the call is
  better written as Module:Function(Arg1, Arg2, ..., ArgN).

  Failure: error_handler:undefined_function/3 is called if the
  applied function is not exported. The error handler can be
  redefined (see process_flag/2). If error_handler is undefined,
  or if the user has redefined the default error_handler so the
  replacement module is undefined, an error with reason undef is
  generated.
