   process and exits not only on crashes but also if the parent process exits
   with `:normal` reason.
   """
-  @spec start_link([:supervisor.child_spec() | {module, term} | module], [option | init_option]) ::
-          {:ok, pid} | {:error, {:already_started, pid} | {:shutdown, term} | term}
+  @spec start_link(
+          [
+            child_spec()
+            | {module, term}
+            | module
+            | (old_erlang_child_spec :: :supervisor.child_spec())
+          ],
+          [option | init_option]
+        ) :: {:ok, pid} | {:error, {:already_started, pid} | {:shutdown, term} | term}
   def start_link(children, options) when is_list(children) do
     {sup_opts, start_opts} = Keyword.split(options, [:strategy, :max_seconds, :max_restarts])
     start_link(Supervisor.Default, init(children, sup_opts), start_opts)


  @typedoc "Option values used by the `start*` functions"
  @type option :: {:name, name}

  @typedoc "The supervisor reference"
  @type supervisor :: pid | name | {atom, node}

  returns `{:error, error}` where `error` is a term containing information about
  the error and child specification.
  """
  @spec start_child(
          supervisor,
          child_spec()
          | {module, term}
          | module
          | (old_erlang_child_spec :: :supervisor.child_spec())
        ) ::
          on_start_child
  def start_child(supervisor, {_, _, _, _, _, _} = child_spec) do
    call(supervisor, {:start_child, child_spec})
