   caller and continues the loop with new state `new_state`.
 
   Returning `{:reply, reply, new_state, timeout}` is similar to
-  `{:reply, reply, new_state}` except `handle_info(:timeout, new_state)` will be
-  called after `timeout` milliseconds if no messages are received.
+  `{:reply, reply, new_state}` except that it also sets a timeout.
+  See the "Timeouts" section in the module documentation for more information.
 
   Returning `{:reply, reply, new_state, :hibernate}` is similar to
   `{:reply, reply, new_state}` except the process is hibernated and will


  Returning `{:noreply, new_state}` continues the loop with new state `new_state`.

  Returning `{:noreply, new_state, timeout}` is similar to
  `{:noreply, new_state}` except `handle_info(:timeout, new_state)` will be
  called after `timeout` milliseconds if no messages are received.

  Returning `{:noreply, new_state, :hibernate}` is similar to
  `{:noreply, new_state}` except the process is hibernated before continuing the

          Process.send_after(self(), :work, 2 * 60 * 60 * 1000)
        end
      end

  ## Timeouts

  The return value of `c:init/1` or any of the `handle_*` callbacks may include
  a timeout value in milliseconds; if not, `:infinity` is assumed.
  The timeout can be used to detect a lull in incoming messages.

  If the process has no messages waiting when the timeout is set and the
  number of given milliseconds pass without any message arriving,
  then `handle_info/2` will be called with `:timeout` as the first argument.
  The timeout is cleared if any message is waiting or arrives before the
  given timeout.

  Because a message may arrive before the timeout is set, even a timeout of `0`
  milliseconds is not guaranteed to execute. To take another action immediately
  and unconditionally, use a `:continue` instruction.

  ## When (not) to use a GenServer

