   require Phoenix.Endpoint
 
   @unsent [:unset, :set, :set_chunked, :set_file]
+  
+  @type view :: atom()
+  @type layout :: {module(), layout_name :: atom()} | false
 
   @moduledoc """
   Controllers are used to group common functionality in the same


  Raises `Plug.Conn.AlreadySentError` if `conn` is already sent.
  """
  @spec put_root_layout(Plug.Conn.t(), {atom, binary | atom} | atom | binary | false) ::
          Plug.Conn.t()
  def put_root_layout(%Plug.Conn{state: state} = conn, layout) do
    if state in @unsent do


  Raises `Plug.Conn.AlreadySentError` if `conn` is already sent.
  """
  @spec put_view(Plug.Conn.t(), [{format :: atom, view}] | view) :: Plug.Conn.t()
  def put_view(%Plug.Conn{state: state} = conn, formats) when state in @unsent do
    put_private_view(conn, :phoenix_view, :replace, formats)
  end
