       {:ok, 150}
 
   If all clauses match, the `do` block is executed, returning its result.
-  Otherwise the chain is aborted and a non-matched value is returned:
+  Otherwise the chain is aborted and the non-matched value is returned:
 
       iex> opts = %{width: 10}
       iex> with {:ok, width} <- Map.fetch(opts, :width),

      ...>   do: {:ok, to_string(role)}
      {:ok, "admin"}

  Similarly to `for/1`, variables bound inside `with/1` won't leak,
  and also it allows "bare expressions":

      iex> width = nil
      iex> opts = %{width: 10, height: 15}

      ...> end
      {:error, :wrong_data}

  If there is no matching `else` condition, then a `WithClauseError` exception is raised.

  """
  defmacro with(args)
