   # Note we have inlined all types for readability
   @typedoc "The supervisor specification"
   @type child_spec :: %{
-    required(:id) => term(),
-    required(:start) => {module(), function(), [term()]},
-    optional(:restart) => :permanent | :transient | :temporary,
-    optional(:shutdown) => :brutal_kill | non_neg_integer() | :infinity,
-    optional(:type) => :worker | :supervisor,
-    optional(:modules) => [module()] | :dynamic
-  }
+          required(:id) => term(),
+          required(:start) => {module(), function(), [term()]},
+          optional(:restart) => :permanent | :transient | :temporary,
+          optional(:shutdown) => :brutal_kill | non_neg_integer() | :infinity,
+          optional(:type) => :worker | :supervisor,
+          optional(:modules) => [module()] | :dynamic
+        }
 
   @doc """
   Starts a supervisor with the given children.


  This operation is not supported by `:simple_one_for_one` supervisors.
  """
  @spec restart_child(supervisor, term()) ::
        {:ok, child} | {:ok, child, term} | {:error, error}
        when error: :not_found | :simple_one_for_one | :running | :restarting | term
  def restart_child(supervisor, child_id) do
    call(supervisor, {:restart_child, child_id})

  @type supervisor :: pid | name | {atom, node}

  @typedoc "Options given to `start_link/2` and `init/2`"
  @type flag ::
          {:strategy, strategy}
          | {:max_restarts, non_neg_integer}
          | {:max_seconds, pos_integer}

  @typedoc "Supported strategies"
  @type strategy :: :simple_one_for_one | :one_for_one | :one_for_all | :rest_for_one
