   with the updated values under `header`.
   """
   @spec get_and_update_header_back(t, header,
-            (value -> {get, value} | :pop)) ::
-                {get, t} when get: value
+            (multiple_value -> {get, multiple_value} | :pop)) ::
+                {get, t} when get: multiple_value
   def get_and_update_header_back(message, header, fun)
       when is_function(fun, 1) do
     {get, new_headers} = Map.get_and_update(message.headers, header,

  may be `nil` case the values list is empty. If `message` doesn't contain the
  `header`, a `KeyError` exception is raised.
  """
  @spec fetch_header_front!(t, header) :: value | no_return
  def fetch_header_front!(message, header) do
    values = fetch_header!(message, header)
    if Enum.empty?(values) do

  If `header` is present in `message`, then the first value is returned.
  Otherwise, `default` is returned (which is `nil` unless specified otherwise).
  """
  @spec get_header_front(t, header) :: multiple_value | nil
  @spec get_header_front(t, header, any) :: multiple_value | any
  def get_header_front(message, header, default \\ nil) do
    case get_header(message, header, nil) do
      nil -> default
