 
   This is often used to start the `GenServer` as part of a supervision tree.
 
-  Once the server is started, it calls the `init/1` function in the given `module`
-  passing the given `args` to initialize it. To ensure a synchronized start-up
-  procedure, this function does not return until `init/1` has returned.
+  Once the server is started, the `init/1` function of the given `module` is
+  called with `args` as its arguments to initialize the server. To ensure a
+  synchronized start-up procedure, this function does not return until `init/1`
+  has returned.
 
   Note that a `GenServer` started with `start_link/3` is linked to the
-  parent process and will exit in case of crashes. The GenServer will also
-  exit due to the `:normal` reasons in case it is configured to trap exits
-  in the `init/1` callback.
+  parent process and will exit in case of crashes from the parent. The GenServer
+  will also exit due to the `:normal` reasons in case it is configured to trap
+  exits in the `init/1` callback.
 
   ## Options
 
-  The `:name` option is used for name registration as described in the module
-  documentation. If the option `:timeout` option is present, the server is
-  allowed to spend the given milliseconds initializing or it will be
-  terminated and the start function will return `{:error, :timeout}`.
-
-  If the `:debug` option is present, the corresponding function in the
-  [`:sys` module](http://www.erlang.org/doc/man/sys.html) will be invoked.
-
-  If the `:spawn_opt` option is present, its value will be passed as options
-  to the underlying process as in `Process.spawn/4`.
+    * `:name` - used for name registration as described in the "Name
+      registration" section of the module documentation
+
+    * `:timeout` - if present, the server is allowed to spend the given amount of
+      milliseconds initializing or it will be terminated and the start function
+      will return `{:error, :timeout}`
+
+    * `:debug` - if present, the corresponding function in the [`:sys`
+      module](http://www.erlang.org/doc/man/sys.html) is invoked
+
+    * `:spawn_opt` - if present, its value is passed as options to the
+      underlying process as in `Process.spawn/4`
 
   ## Return values
 
-  If the server is successfully created and initialized, the function returns
-  `{:ok, pid}`, where pid is the pid of the server. If a process with the
-  specified server name already exists, the function returns
+  If the server is successfully created and initialized, this function returns
+  `{:ok, pid}`, where `pid` is the pid of the server. If a process with the
+  specified server name already exists, this function returns
   `{:error, {:already_started, pid}}` with the pid of that process.
 
-  If the `init/1` callback fails with `reason`, the function returns
+  If the `init/1` callback fails with `reason`, this function returns
   `{:error, reason}`. Otherwise, if it returns `{:stop, reason}`
-  or `:ignore`, the process is terminated and the function returns
+  or `:ignore`, the process is terminated and this function returns
   `{:error, reason}` or `:ignore`, respectively.
   """
   @spec start_link(module, any, options) :: on_start

  @doc """
  Calls all servers locally registered as `name` at the specified `nodes`.

  The `request` is first sent to every node and then we wait for the
  replies. This function returns a tuple containing the node and its reply
  as first element and all bad nodes as second element. The bad nodes is a
  list of nodes that either did not exist, or where a server with the given
  `name` did not exist or did not reply.

  Nodes is a list of node names to which the request is sent. The default
  value is the list of all known nodes.

  To avoid that late answers (after the timeout) pollute the caller's message
  queue, a middleman process is used to do the actual calls. Late answers will
  then be discarded when they arrive to a terminated process.
  """
  @spec multi_call([node], name :: atom, term, timeout) ::
                  {replies :: [{node, term}], bad_nodes :: [node]}

  end

  @doc """
  Returns the `pid` or `{name, node}` of a GenServer process, or `nil` if
  no process is associated with the given name.

  ## Examples

  For example, to lookup a server process, monitor it and send a cast to it:

      process = GenServer.whereis(server)
      monitor = Process.monitor(process)
